Name: series-workflow6clsm Phase: Succeeded StartedAt: 2026-06-23 04:39:25 +0000 UTC FinishedAt: 2026-06-23 08:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[0] Phase: Succeeded StartedAt: 2026-06-23 04:39:25 +0000 UTC FinishedAt: 2026-06-23 04:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 04:39:25 +0000 UTC FinishedAt: 2026-06-23 04:49:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9d4853b044beefa21c4ee3e18c40653601a64ced", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9d4853b044beefa21c4ee3e18c40653601a64ced", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "1d7dc93d-28e5-4ab6-8f40-933e7dd17521" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "intel_pmu_get_msr", "intel_pmu_set_msr", "intel_pmu_refresh", "intel_pmu_reset", "vmx_recalc_pmu_msr_intercepts", "intel_get_fixed_pmc_eventsel", "kvm_init_pmu_capability", "vmx_get_perf_capabilities" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbnRlbF9wbXVfZ2V0X21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfc2V0X21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfcmVzZXQmIzM0OywKICAgICYjMzQ7dm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMmIzM0OywKICAgICYjMzQ7aW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9wbXVfY2FwYWJpbGl0eSYjMzQ7LAogICAgJiMzNDt2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTVNSX1BFUkZfTUVUUklDUyBhbmQgZml4ZWQgY291bnRlciAzIChUT1BET1dOLlNMT1RTKSB0byBLVk0mIzM5O3MgSW50ZWwgUE1VIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgTVNSIHJlYWQvd3JpdGUgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB2aWEgUkRNU1IvV1JNU1IgYW5kIENQVUlEIGluc3RydWN0aW9ucywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgZW11bGF0aW9uIGFuZCBhdm9pZCBob3N0IGNyYXNoZXMgb3Igc3RhdGUgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGExMjFiODhhNThhNzQ0NGFlZWI1NGVmYWRjZTc2NzVjODkxZTdkMzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwNDo0Nzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWVlNDczNzE3YzBlNWEuLjRmNTQ5ZWYwMTJkMjA0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTU3NCw3ICYjNDM7NTc0LDcgQEAgc3RydWN0IGt2bV9wbWMge1xuICNkZWZpbmUgS1ZNX01BWF9OUl9HUF9DT1VOVEVSU1x0XHRLVk1fTUFYKEtWTV9NQVhfTlJfSU5URUxfR1BfQ09VTlRFUlMsIFxcXG4gXHRcdFx0XHRcdFx0S1ZNX01BWF9OUl9BTURfR1BfQ09VTlRFUlMpXG4gXG4tI2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTXHQzXG4mIzQzOyNkZWZpbmUgS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSU1x0NFxuICNkZWZpbmUgS1ZNX01BWF9OUl9BTURfRklYRURfQ09VTlRFUlNcdDBcbiAjZGVmaW5lIEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlNcdEtWTV9NQVgoS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUywgXFxcbiBcdFx0XHRcdFx0XHRLVk1fTUFYX05SX0FNRF9GSVhFRF9DT1VOVEVSUylcbkBAIC01OTQsNiAmIzQzOzU5NCw3IEBAIHN0cnVjdCBrdm1fcG11IHtcbiBcdHU2NCBnbG9iYWxfc3RhdHVzX3JzdmQ7XG4gXHR1NjQgcmVzZXJ2ZWRfYml0cztcbiBcdHU2NCByYXdfZXZlbnRfbWFzaztcbiYjNDM7XHR1NjQgcGVyZl9tZXRyaWNzO1xuIFx0c3RydWN0IGt2bV9wbWMgZ3BfY291bnRlcnNbS1ZNX01BWF9OUl9HUF9DT1VOVEVSU107XG4gXHRzdHJ1Y3Qga3ZtX3BtYyBmaXhlZF9jb3VudGVyc1tLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTXTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAxOGM0YmU3NWU5MjcxOS4uZmRjYWViNmM4MzUyYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbkBAIC0zMzEsNiAmIzQzOzMzMSw3IEBAXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0ZPUk1BVFx0XHQweGYwMFxuICNkZWZpbmUgUEVSRl9DQVBfRldfV1JJVEVTXHRcdEJJVF9VTEwoMTMpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FXHRcdEJJVF9VTEwoMTQpXG4mIzQzOyNkZWZpbmUgUEVSRl9DQVBfUEVSRl9NRVRSSUNTXHRcdEJJVF9VTEwoMTUpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX1RJTUlOR19JTkZPXHRCSVRfVUxMKDE3KVxuICNkZWZpbmUgUEVSRl9DQVBfUEVCU19NQVNLXHRcdChQRVJGX0NBUF9QRUJTX1RSQVAgfCBQRVJGX0NBUF9BUkNIX1JFRyB8IFxcXG4gXHRcdFx0XHRcdCBQRVJGX0NBUF9QRUJTX0ZPUk1BVCB8IFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkUgfCBcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxuaW5kZXggMWViMTM2NzNlODg5ZjkuLmJjMmUxY2JjZDliOTdlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcbkBAIC00NDcsNiAmIzQzOzQ0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc190b3Bkb3duX2lkeChpbnQgaWR4KVxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19BUkNIX1BFQlNfVEhSRVNIT0xEX0JJVFx0NTRcbiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfQVJDSF9QRUJTX1RIUkVTSE9MRFx0QklUX1VMTChHTE9CQUxfU1RBVFVTX0FSQ0hfUEVCU19USFJFU0hPTERfQklUKVxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGX0JJVFx0NDhcbiYjNDM7I2RlZmluZSBHTE9CQUxfU1RBVFVTX1BFUkZfTUVUUklDU19PVkZcdFx0QklUX1VMTChHTE9CQUxfU1RBVFVTX1BFUkZfTUVUUklDU19PVkZfQklUKVxuIFxuICNkZWZpbmUgR0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTXHRcdEJJVF9VTEwoNDgpXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcG11LmMgYi9hcmNoL3g4Ni9rdm0vcG11LmNcbmluZGV4IGI5MmRkMmU1ODMzNTY3Li4wZmFmNTgwNzgyZDVhZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9wbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3BtdS5jXG5AQCAtMTIyLDYgJiM0MzsxMjIsOCBAQCB2b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcbiB7XG4gXHRib29sIGlzX2ludGVsID0gYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUw7XG4gXHRpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLVx1MDAzZU1JTl9OUl9HUF9DT1VOVEVSUztcbiYjNDM7XHR1bmlvbiBjcHVpZDEwX2VkeCBlZHg7XG4mIzQzO1x0dTMyIGVheCwgZWJ4LCBlY3g7XG4gXG4gXHQvKlxuIFx0ICogSHlicmlkIFBNVXMgZG9uJiMzOTt0IHBsYXkgbmljZSB3aXRoIHZpcnR1YWxpemF0aW9uIHdpdGhvdXQgY2FyZWZ1bFxuQEAgLTE2OSw2ICYjNDM7MTcxLDIyIEBAIHZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKVxuIFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCxcbiBcdFx0XHRcdFx0ICAgICBLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEludGVsIHBsYXRmb3JtcyBtYXkgc3VwcG9ydCBub24tY29udGlndW91cyBmaXhlZCBjb3VudGVycywgZS5nLiwgc29tZVxuJiM0MztcdCAqIEUtY29yZSBiYXNlZCBzZXJ2ZXIgcHJvY2Vzc29ycyBkb24mIzM5O3QgaW1wbGVtZW50IGZpeGVkIGNvdW50ZXIgMy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEJlZm9yZSBLVk0gc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgZml4ZWQgY291bnRlcnMsIG1ha2Ugc3VyZSBvbmx5XG4mIzQzO1x0ICogY29udGlndW91cyBvbmVzIGFyZSByZXRhaW5lZCBpbiBrdm1fcG11X2NhcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoa3ZtX2hvc3RfcG11LnZlcnNpb24gXHUwMDNlPSA1KSB7XG4mIzQzO1x0XHRjcHVpZCgxMCwgXHUwMDI2ZWF4LCBcdTAwMjZlYngsIFx1MDAyNmVjeCwgXHUwMDI2ZWR4LmZ1bGwpO1xuJiM0MztcdFx0aWYgKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCBcdTAwM2UgZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZClcbiYjNDM7XHRcdFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSBcdTAwMjZcdTAwMjYga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkIFx1MDAzZSAzKVxuJiM0MztcdFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gMztcbiYjNDM7XG4gXHRrdm1fcG11X2V2ZW50c2VsLklOU1RSVUNUSU9OU19SRVRJUkVEID1cbiBcdFx0cGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKTtcbiBcdGt2bV9wbXVfZXZlbnRzZWwuQlJBTkNIX0lOU1RSVUNUSU9OU19SRVRJUkVEID1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuaW5kZXggYTczYTk1MTVkOTZjZDUuLjJjMzM2N2Y1ZTJkZmI4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuQEAgLTE4OCw2ICYjNDM7MTg4LDggQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbiBcdHN3aXRjaCAobXNyKSB7XG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7XG4mIzQzO1x0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxuJiM0MztcdFx0cmV0dXJuIHZjcHVfaGFzX3BlcmZfbWV0cmljcyh2Y3B1KTtcbiBcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XG4gXHRcdHJldCA9IHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpIFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVDtcbiBcdFx0YnJlYWs7XG5AQCAtMzQ1LDYgJiM0MzszNDcsMTEgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBwbXUtXHUwMDNlZml4ZWRfY3RyX2N0cmw7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX1BFUkZfTUVUUklDUzpcbiYjNDM7XHRcdGlmICghbXNyX2luZm8tXHUwMDNlaG9zdF9pbml0aWF0ZWQpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9IHBtdS1cdTAwM2VwZXJmX21ldHJpY3M7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBwbXUtXHUwMDNlcGVic19lbmFibGU7XG4gXHRcdGJyZWFrO1xuQEAgLTM5NCw2ICYjNDM7NDAxLDE2IEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIFx0XHRpZiAocG11LVx1MDAzZWZpeGVkX2N0cl9jdHJsICE9IGRhdGEpXG4gXHRcdFx0cmVwcm9ncmFtX2ZpeGVkX2NvdW50ZXJzKHBtdSwgZGF0YSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX1BFUkZfTUVUUklDUzpcbiYjNDM7XHRcdGlmICghbXNyX2luZm8tXHUwMDNlaG9zdF9pbml0aWF0ZWQpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiBUTUEgbGV2ZWwgMiBpcyBub3Qgc3VwcG9ydGVkLCBiaXRzIFs2MzozMl0gYXJlIHJlc2VydmVkXG4mIzQzO1x0XHQgKiBhbmQgaWdub3JlZCBvbiB3cml0ZSwgc28gbm8gdmFsaWRhdGlvbiBpcyBuZWVkZWQgaGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cG11LVx1MDAzZXBlcmZfbWV0cmljcyA9IGRhdGE7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XG4gXHRcdGlmIChkYXRhIFx1MDAyNiBwbXUtXHUwMDNlcGVic19lbmFibGVfcnN2ZClcbiBcdFx0XHRyZXR1cm4gMTtcbkBAIC00NjQsMjggJiM0Mzs0ODEsMzAgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gICogZGlmZmVyZW50IHBlcmZfZXZlbnQgaXMgYWxyZWFkeSB1dGlsaXppbmcgdGhlIHJlcXVlc3RlZCBjb3VudGVyLCBidXQgdGhlIGVuZFxuICAqIHJlc3VsdCBpcyB0aGUgc2FtZSAoaWdub3JpbmcgdGhlIGZhY3QgdGhhdCB1c2luZyBhIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyXG4gICogd2lsbCBsaWtlbHkgZXhhY2VyYmF0ZSBjb3VudGVyIGNvbnRlbnRpb24pLlxuLSAqXG4tICogRm9yY2libHkgaW5saW5lZCB0byBhbGxvdyBhc3NlcnRpbmcgb24gQGluZGV4IGF0IGJ1aWxkIHRpbWUsIGFuZCB0aGVyZSBzaG91bGRcbi0gKiBuZXZlciBiZSBtb3JlIHRoYW4gb25lIHVzZXIuXG4gICovXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXG4mIzQzO3N0YXRpYyB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXG4ge1xuIFx0Y29uc3QgZW51bSBwZXJmX2h3X2lkIGZpeGVkX3BtY19wZXJmX2lkc1tdID0ge1xuIFx0XHRbMF0gPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcbiBcdFx0WzFdID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuIFx0XHRbMl0gPSBQRVJGX0NPVU5UX0hXX1JFRl9DUFVfQ1lDTEVTLFxuIFx0fTtcbi1cdHU2NCBldmVudHNlbDtcbi1cbi1cdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGZpeGVkX3BtY19wZXJmX2lkcykgIT0gS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUyk7XG4tXHRCVUlMRF9CVUdfT04oaW5kZXggXHUwMDNlPSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTKTtcbiYjNDM7XHR1NjQgZXZlbnRzZWwgPSAwO1xuIFxuIFx0Lypcbi1cdCAqIFllbGwgaWYgcGVyZiByZXBvcnRzIHN1cHBvcnQgZm9yIGEgZml4ZWQgY291bnRlciBidXQgcGVyZiBkb2VzbiYjMzk7dFxuLVx0ICogaGF2ZSBhIGtub3duIGVuY29kaW5nIGZvciB0aGUgYXNzb2NpYXRlZCBnZW5lcmFsIHB1cnBvc2UgZXZlbnQuXG4mIzQzO1x0ICogRml4ZWQgY291bnRlcnMgMyBhbmQgYWJvdmUgZG9uJiMzOTt0IGhhdmUgY29ycmVzcG9uZGluZyBnZW5lcmljIGhhcmR3YXJlXG4mIzQzO1x0ICogcGVyZiBldmVudCwgYW5kIEtWTSBkb2VzIG5vdCBpbnRlbmQgdG8gZW11bGF0ZSB0aGVtIG9uIG5vbi1tZWRpYXRlZFxuJiM0MztcdCAqIHZQTVUuXG4gXHQgKi9cbi1cdGV2ZW50c2VsID0gcGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKGZpeGVkX3BtY19wZXJmX2lkc1tpbmRleF0pO1xuLVx0V0FSTl9PTl9PTkNFKCFldmVudHNlbCBcdTAwMjZcdTAwMjYgaW5kZXggXHUwMDNjIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCk7XG4mIzQzO1x0aWYgKGluZGV4IFx1MDAzYyBBUlJBWV9TSVpFKGZpeGVkX3BtY19wZXJmX2lkcykpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBZZWxsIGlmIHBlcmYgcmVwb3J0cyBzdXBwb3J0IGZvciBhIGZpeGVkIGNvdW50ZXIgYnV0IHBlcmZcbiYjNDM7XHRcdCAqIGRvZXNuJiMzOTt0IGhhdmUgYSBrbm93biBlbmNvZGluZyBmb3IgdGhlIGFzc29jaWF0ZWQgZ2VuZXJhbFxuJiM0MztcdFx0ICogcHVycG9zZSBldmVudC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZXZlbnRzZWwgPSBwZXJmX2dldF9od19ldmVudF9jb25maWcoZml4ZWRfcG1jX3BlcmZfaWRzW2luZGV4XSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoIWV2ZW50c2VsIFx1MDAyNlx1MDAyNiBpbmRleCBcdTAwM2Mga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gZXZlbnRzZWw7XG4gfVxuIFxuQEAgLTU4Nyw2ICYjNDM7NjA2LDExIEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZWZyZXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cG11LVx1MDAzZWdsb2JhbF9zdGF0dXNfcnN2ZCBcdTAwMjY9XG4gXHRcdFx0XHR+TVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxfVFJBQ0VfVE9QQV9QTUk7XG4gXG4mIzQzO1x0aWYgKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpIHtcbiYjNDM7XHRcdHBtdS1cdTAwM2VnbG9iYWxfY3RybF9yc3ZkIFx1MDAyNj0gfkdMT0JBTF9DVFJMX0VOX1BFUkZfTUVUUklDUztcbiYjNDM7XHRcdHBtdS1cdTAwM2VnbG9iYWxfc3RhdHVzX3JzdmQgXHUwMDI2PSB+R0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocGVyZl9jYXBhYmlsaXRpZXMgXHUwMDI2IFBFUkZfQ0FQX1BFQlNfRk9STUFUKSB7XG4gXHRcdGlmIChwZXJmX2NhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9DQVBfUEVCU19CQVNFTElORSkge1xuIFx0XHRcdHBtdS1cdTAwM2VwZWJzX2VuYWJsZV9yc3ZkID0gY291bnRlcl9yc3ZkO1xuQEAgLTYzMCw2ICYjNDM7NjU0LDkgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cG11LVx1MDAzZXBlcmZfbWV0cmljcyA9IDA7XG4gXHRpbnRlbF9wbXVfcmVsZWFzZV9ndWVzdF9sYnJfZXZlbnQodmNwdSk7XG4gfVxuIFxuQEAgLTgwMSw2ICYjNDM7ODI4LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiBcdHU2NCBnbG9iYWxfc3RhdHVzLCB0b2dnbGU7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQRVJGX01FVFJJQ1MgTVNSIG11c3QgYmUgcmVzdG9yZWQgY2xvc2VseSBhZnRlciBmaXhlZCBjb3VudGVyIDMsXG4mIzQzO1x0ICogd2hpY2ggd2FzIGp1c3QgcmVzdG9yZWQgYnkga3ZtX3BtdV9sb2FkX2d1ZXN0X3BtY3MoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodmNwdV9oYXNfcGVyZl9tZXRyaWNzKHZjcHUpKVxuJiM0MztcdFx0d3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIHBtdS1cdTAwM2VwZXJmX21ldHJpY3MpO1xuJiM0MztcbiBcdHJkbXNycShNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIGdsb2JhbF9zdGF0dXMpO1xuIFx0dG9nZ2xlID0gcG11LVx1MDAzZWdsb2JhbF9zdGF0dXMgXiBnbG9iYWxfc3RhdHVzO1xuIFx0aWYgKGdsb2JhbF9zdGF0dXMgXHUwMDI2IHRvZ2dsZSlcbkBAIC04MjksNiAmIzQzOzg2MywxMiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9tZWRpYXRlZF9wbXVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqL1xuIFx0aWYgKHBtdS1cdTAwM2VmaXhlZF9jdHJfY3RybF9odylcbiBcdFx0d3Jtc3JxKE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwsIDApO1xuJiM0MztcbiYjNDM7XHRpZiAodmNwdV9oYXNfcGVyZl9tZXRyaWNzKHZjcHUpKSB7XG4mIzQzO1x0XHRwbXUtXHUwMDNlcGVyZl9tZXRyaWNzID0gcmRwbWMoSU5URUxfUE1DX0ZJWEVEX1JEUE1DX01FVFJJQ1MpO1xuJiM0MztcdFx0aWYgKHBtdS1cdTAwM2VwZXJmX21ldHJpY3MpXG4mIzQzO1x0XHRcdHdybXNycShNU1JfUEVSRl9NRVRSSUNTLCAwKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0cnVjdCBrdm1fcG11X29wcyBpbnRlbF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuaCBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmhcbmluZGV4IDVkOTM1NzY0MGFhMTgwLi41NzcwNTc3M2RjNDliNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmhcbkBAIC00MCw0ICYjNDM7NDAsOSBAQCBzdHJ1Y3QgbGJyX2Rlc2Mge1xuIFxuIGV4dGVybiBzdHJ1Y3QgeDg2X3BtdV9sYnIgdm14X2xicl9jYXBzO1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9oYXNfcGVyZl9tZXRyaWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX1BNVV9JTlRFTF9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGExYTVlZGIzOWE3ZWRkLi41ODRkOTllZjYwMjZlYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC00MjYwLDYgJiM0Mzs0MjYwLDEwIEBAIHN0YXRpYyB2b2lkIHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRcdCAgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7XG4gXHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLFxuIFx0XHRcdFx0ICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbiYjNDM7XG4mIzQzO1x0aW50ZXJjZXB0ID0gIWhhc19tZWRpYXRlZF9wbXUgfHwgIXZjcHVfaGFzX3BlcmZfbWV0cmljcyh2Y3B1KTtcbiYjNDM7XHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9QRVJGX01FVFJJQ1MsXG4mIzQzO1x0XHRcdFx0ICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdm14X3JlY2FsY19tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtODA4NCw2ICYjNDM7ODA4OCw5IEBAIHN0YXRpYyBfX2luaXQgdTY0IHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXModm9pZClcbiBcdFx0cGVyZl9jYXAgXHUwMDI2PSB+UEVSRl9DQVBfUEVCU19CQVNFTElORTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoZW5hYmxlX21lZGlhdGVkX3BtdSlcbiYjNDM7XHRcdHBlcmZfY2FwIHw9IGhvc3RfcGVyZl9jYXAgXHUwMDI2IFBFUkZfQ0FQX1BFUkZfTUVUUklDUztcbiYjNDM7XG4gXHRyZXR1cm4gcGVyZl9jYXA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggZDlkNTE4MDNiN2IyMDkuLjk2MjNmNTU4ZjM1OWRkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0zNTAsOSAmIzQzOzM1MCw5IEBAIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHtcbiBcbiBzdGF0aWMgY29uc3QgdTMyIG1zcnNfdG9fc2F2ZV9wbXVbXSA9IHtcbiBcdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIxLFxuLVx0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICYjNDM7IDIsXG4mIzQzO1x0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIyLCBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjMsXG4gXHRNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsXG4tXHRNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLFxuJiM0MztcdE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9QRVJGX01FVFJJQ1MsXG4gXHRNU1JfSUEzMl9QRUJTX0VOQUJMRSwgTVNSX0lBMzJfRFNfQVJFQSwgTVNSX1BFQlNfREFUQV9DRkcsXG4gXG4gXHQvKiBUaGlzIHBhcnQgb2YgTVNScyBzaG91bGQgbWF0Y2ggS1ZNX01BWF9OUl9JTlRFTF9HUF9DT1VOVEVSUy4gKi9cbkBAIC03Njc5LDYgJiM0Mzs3Njc5LDEwIEBAIHN0YXRpYyB2b2lkIGt2bV9wcm9iZV9tc3JfdG9fc2F2ZSh1MzIgbXNyX2luZGV4KVxuIFx0XHQgICAgIGludGVsX3B0X3ZhbGlkYXRlX2h3X2NhcChQVF9DQVBfbnVtX2FkZHJlc3NfcmFuZ2VzKSAqIDIpKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxuJiM0MztcdFx0aWYgKCEoa3ZtX2NhcHMuc3VwcG9ydGVkX3BlcmZfY2FwIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCAuLi5cbiBcdCAgICAgTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCAmIzQzOyBLVk1fTUFYX05SX0dQX0NPVU5URVJTIC0gMTpcbiBcdFx0aWYgKG1zcl9pbmRleCAtIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgXHUwMDNlPVxuQEAgLTc3NDIsNyAmIzQzOzc3NDYsNyBAQCBzdGF0aWMgdm9pZCBrdm1faW5pdF9tc3JfbGlzdHModm9pZClcbiB7XG4gXHR1bnNpZ25lZCBpO1xuIFxuLVx0QlVJTERfQlVHX09OX01TRyhLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTICE9IDMsXG4mIzQzO1x0QlVJTERfQlVHX09OX01TRyhLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTICE9IDQsXG4gXHRcdFx0IFwmIzM0O1BsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXCYjMzQ7KTtcbiBcbiBcdG51bV9tc3JzX3RvX3NhdmUgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbmluZGV4IGVmZjI5NjQ1NzE5YmM3Li5lNzc0NWUyY2Q1NDNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuQEAgLTMzMSw2ICYjNDM7MzMxLDcgQEBcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfRk9STUFUXHRcdDB4ZjAwXG4gI2RlZmluZSBQRVJGX0NBUF9GV19XUklURVNcdFx0QklUX1VMTCgxMylcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkVcdFx0QklUX1VMTCgxNClcbiYjNDM7I2RlZmluZSBQRVJGX0NBUF9QRVJGX01FVFJJQ1NcdFx0QklUX1VMTCgxNSlcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfVElNSU5HX0lORk9cdEJJVF9VTEwoMTcpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX01BU0tcdFx0KFBFUkZfQ0FQX1BFQlNfVFJBUCB8IFBFUkZfQ0FQX0FSQ0hfUkVHIHwgXFxcbiBcdFx0XHRcdFx0IFBFUkZfQ0FQX1BFQlNfRk9STUFUIHwgUEVSRl9DQVBfUEVCU19CQVNFTElORSB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oXG5pbmRleCA2MDhlZDgzZDdjNmE2OS4uNmMxOTUwM2UwYmI3ZGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaFxuQEAgLTUyLDYgJiM0Mzs1Miw5IEBAXG4gLyogRml4ZWQgUE1DIGNvbnRyb2xzLCBJbnRlbCBvbmx5LiAqL1xuICNkZWZpbmUgRklYRURfUE1DX0dMT0JBTF9DVFJMX0VOQUJMRShfaWR4KVx0QklUX1VMTCgoMzIgJiM0MzsgKF9pZHgpKSlcbiBcbiYjNDM7LyogUEVSRl9NRVRSSUNTIGVuYWJsZSwgSW50ZWwgb25seS4gKi9cbiYjNDM7I2RlZmluZSBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFXHRcdEJJVF9VTEwoNDgpXG4mIzQzO1xuICNkZWZpbmUgRklYRURfUE1DX0tFUk5FTFx0XHRcdEJJVF9VTEwoMClcbiAjZGVmaW5lIEZJWEVEX1BNQ19VU0VSXHRcdFx0XHRCSVRfVUxMKDEpXG4gI2RlZmluZSBGSVhFRF9QTUNfQU5ZVEhSRUFEXHRcdFx0QklUX1VMTCgyKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuaW5kZXggZGM2YWZhYzNhYTkxOTUuLmQ0Njg4YTdkMWU1NTY5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtwbXUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiBcbiAvKiBOdW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcCBmb3IgdGhlIGd1ZXN0IG1lYXN1cmVtZW50IHBheWxvYWQuICovXG4gI2RlZmluZSBOVU1fTE9PUFNcdFx0XHQxMFxuQEAgLTI0MSwxNyAmIzQzOzI0MiwyMCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0KTtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4tI2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKVx0XHRcXFxuJiM0MzsjZGVmaW5lIEdVRVNUX1JVTl9QQVlMT0FEKF9jdHJsX21zciwgX3ZhbHVlLCBGRVApXHRcdFx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHR3cm1zcihfcG1jX21zciwgMCk7XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFVTSE9QVCkpXHRcdFx0XHRcXFxuIFx0XHRHVUVTVF9NRUFTVVJFX0VWRU5UKF9jdHJsX21zciwgX3ZhbHVlLCBcJiMzNDtjbGZsdXNob3B0ICVbbV1cJiMzNDssIEZFUCk7XHRcXFxuIFx0ZWxzZSBpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxVU0gpKVx0XHRcdFx0XFxcbiBcdFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXCYjMzQ7Y2xmbHVzaCAgJVttXVwmIzM0OywgRkVQKTtcdFxcXG4gXHRlbHNlXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXCYjMzQ7bm9wXCYjMzQ7LCBGRVApO1x0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSB3aGlsZSAoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfVEVTVF9FVkVOVChfaWR4LCBfcG1jLCBfcG1jX21zciwgX2N0cmxfbXNyLCBfdmFsdWUsIEZFUClcdFx0XFxcbiYjNDM7ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3cm1zcihfcG1jX21zciwgMCk7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdEdVRVNUX1JVTl9QQVlMT0FEKF9jdHJsX21zciwgX3ZhbHVlLCBGRVApO1x0XHRcdFx0XFxcbiBcdGd1ZXN0X2Fzc2VydF9ldmVudF9jb3VudChfaWR4LCBfcG1jLCBfcG1jX21zcik7XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG5AQCAtMzE4LDYgJiM0MzszMjIsNTYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcbiBcdFx0XHRcdEZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoaSkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wZXJmX21ldHJpY3Modm9pZClcbiYjNDM7e1xuJiM0MztcdGludCByZXRpcmluZywgYmFkX3NwZWMsIGZlX2JvdW5kLCBiZV9ib3VuZCwgc3VtO1xuJiM0MztcdHU2NCBnbG9iYWxfY3RybCwgbWV0cmljcztcbiYjNDM7XG4mIzQzO1x0aWYgKChndWVzdF9nZXRfcG11X3ZlcnNpb24oKSBcdTAwM2MgMikgfHxcdC8qIERvZXMgZ3Vlc3QgaGF2ZSBHTE9CQUxfQ1RSTD8gKi9cbiYjNDM7XHQgICAgIXRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9QRENNKSB8fFxuJiM0MztcdCAgICAhKHJkbXNyKE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTKSBcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgMCk7XG4mIzQzO1x0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIzLCAwKTtcbiYjNDM7XHR3cm1zcihNU1JfUEVSRl9NRVRSSUNTLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGZpeGVkIGN0cjMgKFRPUERPV04uU0xPVFMpIGFuZCBQRVJGX01FVFJJQ1MuICovXG4mIzQzO1x0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgRklYRURfUE1DX0NUUkwoMywgRklYRURfUE1DX0tFUk5FTCkpO1xuJiM0MztcdGdsb2JhbF9jdHJsID0gRklYRURfUE1DX0dMT0JBTF9DVFJMX0VOQUJMRSgzKSB8XG4mIzQzO1x0XHQgICAgICBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9SVU5fUEFZTE9BRChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBnbG9iYWxfY3RybCwgXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgdGVzdCByZXN1bHRzLiAqL1xuJiM0MztcdG1ldHJpY3MgPSByZG1zcihNU1JfUEVSRl9NRVRSSUNTKTtcbiYjNDM7XHRyZXRpcmluZyA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCg3LCAwKSwgbWV0cmljcyk7XG4mIzQzO1x0YmFkX3NwZWMgPSBGSUVMRF9HRVQoR0VOTUFTS19VTEwoMTUsIDgpLCBtZXRyaWNzKTtcbiYjNDM7XHRmZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgyMywgMTYpLCBtZXRyaWNzKTtcbiYjNDM7XHRiZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgzMSwgMjQpLCBtZXRyaWNzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCZSBjb25zZXJ2YXRpdmU6IHRoZSBtZWFzdXJlZCBwYXlsb2FkIGRlZmluaXRlbHkgcmV0aXJlcyB3b3JrLCBzb1xuJiM0MztcdCAqIFJldGlyaW5nIHNob3VsZCBiZSBub24temVyby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRHVUVTVF9BU1NFUlRfTkUobWV0cmljcywgMFVMTCk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUX05FKHJldGlyaW5nLCAwVUxMKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgc3VtIG9mIHRoZSA0IGxldmVsLTEgdG9wZG93biBtZXRyaWNzIHNob3VsZCBiZSBjbG9zZSB0byAxMDAlLlxuJiM0MztcdCAqIDMgaXMgY2hvc2VuIGFzIGEgbG9vc2Ugc2FuaXR5IGNoZWNrLlxuJiM0MztcdCAqL1xuJiM0MztcdHN1bSA9IHJldGlyaW5nICYjNDM7IGJhZF9zcGVjICYjNDM7IGZlX2JvdW5kICYjNDM7IGJlX2JvdW5kO1xuJiM0MztcdEdVRVNUX0FTU0VSVChzdW0gXHUwMDNlPSAweGZkIFx1MDAyNlx1MDAyNiBzdW0gXHUwMDNjPSAweDEwMik7XG4mIzQzO1xuJiM0MztcdC8qIFNhbml0eSBjaGVjayBhZnRlciBQRVJGX01FVFJJQ1MgZGlzYWJsZWQuICovXG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7bG9vcCAuXCYjMzQ7IDogXCYjMzQ7JiM0MztjXCYjMzQ7KChpbnQpe05VTV9MT09QU30pKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIG1ldHJpY3MpO1xuJiM0MztcdHdybXNyKE1TUl9QRVJGX01FVFJJQ1MsIDB4ZGVhZGRlYWQpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIDB4ZGVhZGRlYWQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiB7XG4gXHR1OCBpO1xuQEAgLTMyNSw2ICYjNDM7Mzc5LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyh2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfSU5URUxfQVJDSF9FVkVOVFM7IGkmIzQzOyYjNDM7KVxuIFx0XHRndWVzdF90ZXN0X2FyY2hfZXZlbnQoaSk7XG4gXG4mIzQzO1x0Z3Vlc3RfdGVzdF9wZXJmX21ldHJpY3MoKTtcbiYjNDM7XG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuQEAgLTM2MSw3ICYjNDM7NDE3LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuICAqIG90aGVyIHRoYW4gUE1DcyBpbiB0aGUgZnV0dXJlLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX0dQX0NPVU5URVJTXHQ4XG4tI2RlZmluZSBNQVhfTlJfRklYRURfQ09VTlRFUlNcdDNcbiYjNDM7I2RlZmluZSBNQVhfTlJfRklYRURfQ09VTlRFUlNcdDRcbiBcbiAjZGVmaW5lIEdVRVNUX0FTU0VSVF9QTUNfTVNSX0FDQ0VTUyhpbnNuLCBtc3IsIGV4cGVjdF9ncCwgdmVjdG9yKVx0XHRcXFxuIF9fR1VFU1RfQVNTRVJUKGV4cGVjdF9ncCA/IHZlY3RvciA9PSBHUF9WRUNUT1IgOiAhdmVjdG9yLFx0XHRcdFxcXG5AQCAtNTg1LDYgJiM0Mzs2NDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4gXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XG4gXHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4gXHR1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTtcbiYjNDM7XHR1NjQgYWR2ZXJ0aXNlZF9wZXJmX2NhcHMgPSBrdm1fZ2V0X2ZlYXR1cmVfbXNyKE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTKTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFx0dTggdiwgajtcbiBcdHUzMiBrO1xuQEAgLTU5Miw2ICYjNDM7NjQ5LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xuIFx0XHQwLFxuIFx0XHRQTVVfQ0FQX0ZXX1dSSVRFUyxcbiYjNDM7XHRcdFBFUkZfQ0FQX1BFUkZfTUVUUklDUyxcbiBcdH07XG4gXG4gXHQvKlxuQEAgLTY0OSw2ICYjNDM7NzA3LDEwIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdFx0XHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFx1MDAyNlx1MDAyNiBwZXJmX2NhcHNbaV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdFx0LyogSWdub3JlIHVuc3VwcG9ydGVkIGZlYXR1cmVzLiAqL1xuJiM0MztcdFx0XHRpZiAocGVyZl9jYXBzW2ldIFx1MDAyNiB+YWR2ZXJ0aXNlZF9wZXJmX2NhcHMpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0OyxcbiBcdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ludGVsX3BtdV9nZXRfbXNyJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9zZXRfbXNyJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9yZWZyZXNoJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9yZXNldCYjMzQ7LAogICAgJiMzNDt2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0cyYjMzQ7LAogICAgJiMzNDtpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X3BtdV9jYXBhYmlsaXR5JiMzNDssCiAgICAmIzM0O3ZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBNU1JfUEVSRl9NRVRSSUNTIGFuZCBmaXhlZCBjb3VudGVyIDMgKFRPUERPV04uU0xPVFMpIHRvIEtWTSYjMzk7cyBJbnRlbCBQTVUgZW11bGF0aW9uLiBJdCBtb2RpZmllcyBNU1IgcmVhZC93cml0ZSBoYW5kbGVycywgQ1BVSUQgZXZhbHVhdGlvbiwgYW5kIFBNVSBpbml0aWFsaXphdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHZpYSBSRE1TUi9XUk1TUiBhbmQgQ1BVSUQgaW5zdHJ1Y3Rpb25zLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBlbXVsYXRpb24gYW5kIGF2b2lkIGhvc3QgY3Jhc2hlcyBvciBzdGF0ZSBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMTIxYjg4YTU4YTc0NDRhZWViNTRlZmFkY2U3Njc1Yzg5MWU3ZDM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMDQ6NDc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBlZWU0NzM3MTdjMGU1YS4uNGY1NDllZjAxMmQyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNTc0LDcgJiM0Mzs1NzQsNyBAQCBzdHJ1Y3Qga3ZtX3BtYyB7CiAjZGVmaW5lIEtWTV9NQVhfTlJfR1BfQ09VTlRFUlMJCUtWTV9NQVgoS1ZNX01BWF9OUl9JTlRFTF9HUF9DT1VOVEVSUywgXAogCQkJCQkJS1ZNX01BWF9OUl9BTURfR1BfQ09VTlRFUlMpCiAKLSNkZWZpbmUgS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUwkzCiYjNDM7I2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTCTQKICNkZWZpbmUgS1ZNX01BWF9OUl9BTURfRklYRURfQ09VTlRFUlMJMAogI2RlZmluZSBLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTCUtWTV9NQVgoS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUywgXAogCQkJCQkJS1ZNX01BWF9OUl9BTURfRklYRURfQ09VTlRFUlMpCkBAIC01OTQsNiAmIzQzOzU5NCw3IEBAIHN0cnVjdCBrdm1fcG11IHsKIAl1NjQgZ2xvYmFsX3N0YXR1c19yc3ZkOwogCXU2NCByZXNlcnZlZF9iaXRzOwogCXU2NCByYXdfZXZlbnRfbWFzazsKJiM0MzsJdTY0IHBlcmZfbWV0cmljczsKIAlzdHJ1Y3Qga3ZtX3BtYyBncF9jb3VudGVyc1tLVk1fTUFYX05SX0dQX0NPVU5URVJTXTsKIAlzdHJ1Y3Qga3ZtX3BtYyBmaXhlZF9jb3VudGVyc1tLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTXTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCAxOGM0YmU3NWU5MjcxOS4uZmRjYWViNmM4MzUyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC0zMzEsNiAmIzQzOzMzMSw3IEBACiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfRk9STUFUCQkweGYwMAogI2RlZmluZSBQRVJGX0NBUF9GV19XUklURVMJCUJJVF9VTEwoMTMpCiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkUJCUJJVF9VTEwoMTQpCiYjNDM7I2RlZmluZSBQRVJGX0NBUF9QRVJGX01FVFJJQ1MJCUJJVF9VTEwoMTUpCiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfVElNSU5HX0lORk8JQklUX1VMTCgxNykKICNkZWZpbmUgUEVSRl9DQVBfUEVCU19NQVNLCQkoUEVSRl9DQVBfUEVCU19UUkFQIHwgUEVSRl9DQVBfQVJDSF9SRUcgfCBcCiAJCQkJCSBQRVJGX0NBUF9QRUJTX0ZPUk1BVCB8IFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggMWViMTM2NzNlODg5ZjkuLmJjMmUxY2JjZDliOTdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC00NDcsNiAmIzQzOzQ0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc190b3Bkb3duX2lkeChpbnQgaWR4KQogI2RlZmluZSBHTE9CQUxfU1RBVFVTX0FSQ0hfUEVCU19USFJFU0hPTERfQklUCTU0CiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfQVJDSF9QRUJTX1RIUkVTSE9MRAlCSVRfVUxMKEdMT0JBTF9TVEFUVVNfQVJDSF9QRUJTX1RIUkVTSE9MRF9CSVQpCiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRl9CSVQJNDgKJiM0MzsjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRgkJQklUX1VMTChHTE9CQUxfU1RBVFVTX1BFUkZfTUVUUklDU19PVkZfQklUKQogCiAjZGVmaW5lIEdMT0JBTF9DVFJMX0VOX1BFUkZfTUVUUklDUwkJQklUX1VMTCg0OCkKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcG11LmMgYi9hcmNoL3g4Ni9rdm0vcG11LmMKaW5kZXggYjkyZGQyZTU4MzM1NjcuLjBmYWY1ODA3ODJkNWFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcG11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3BtdS5jCkBAIC0xMjIsNiAmIzQzOzEyMiw4IEBAIHZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKQogewogCWJvb2wgaXNfaW50ZWwgPSBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTDsKIAlpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLSZndDtNSU5fTlJfR1BfQ09VTlRFUlM7CiYjNDM7CXVuaW9uIGNwdWlkMTBfZWR4IGVkeDsKJiM0MzsJdTMyIGVheCwgZWJ4LCBlY3g7CiAKIAkvKgogCSAqIEh5YnJpZCBQTVVzIGRvbiYjMzk7dCBwbGF5IG5pY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiB3aXRob3V0IGNhcmVmdWwKQEAgLTE2OSw2ICYjNDM7MTcxLDIyIEBAIHZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKQogCWt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IG1pbihrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQsCiAJCQkJCSAgICAgS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyk7CiAKJiM0MzsJLyoKJiM0MzsJICogSW50ZWwgcGxhdGZvcm1zIG1heSBzdXBwb3J0IG5vbi1jb250aWd1b3VzIGZpeGVkIGNvdW50ZXJzLCBlLmcuLCBzb21lCiYjNDM7CSAqIEUtY29yZSBiYXNlZCBzZXJ2ZXIgcHJvY2Vzc29ycyBkb24mIzM5O3QgaW1wbGVtZW50IGZpeGVkIGNvdW50ZXIgMy4KJiM0MzsJICoKJiM0MzsJICogQmVmb3JlIEtWTSBzdXBwb3J0cyBub24tY29udGlndW91cyBmaXhlZCBjb3VudGVycywgbWFrZSBzdXJlIG9ubHkKJiM0MzsJICogY29udGlndW91cyBvbmVzIGFyZSByZXRhaW5lZCBpbiBrdm1fcG11X2NhcC4KJiM0MzsJICovCiYjNDM7CWlmIChrdm1faG9zdF9wbXUudmVyc2lvbiAmZ3Q7PSA1KSB7CiYjNDM7CQljcHVpZCgxMCwgJmFtcDtlYXgsICZhbXA7ZWJ4LCAmYW1wO2VjeCwgJmFtcDtlZHguZnVsbCk7CiYjNDM7CQlpZiAoa3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkICZndDsgZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZCkKJiM0MzsJCQlrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQgPSBlZHguc3BsaXQubnVtX2NvdW50ZXJzX2ZpeGVkOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZW5hYmxlX21lZGlhdGVkX3BtdSAmYW1wOyZhbXA7IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCAmZ3Q7IDMpCiYjNDM7CQlrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQgPSAzOwomIzQzOwogCWt2bV9wbXVfZXZlbnRzZWwuSU5TVFJVQ1RJT05TX1JFVElSRUQgPQogCQlwZXJmX2dldF9od19ldmVudF9jb25maWcoUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMpOwogCWt2bV9wbXVfZXZlbnRzZWwuQlJBTkNIX0lOU1RSVUNUSU9OU19SRVRJUkVEID0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jCmluZGV4IGE3M2E5NTE1ZDk2Y2Q1Li4yYzMzNjdmNWUyZGZiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jCkBAIC0xODgsNiAmIzQzOzE4OCw4IEBAIHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpCiAJc3dpdGNoIChtc3IpIHsKIAljYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6CiAJCXJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7CiYjNDM7CWNhc2UgTVNSX1BFUkZfTUVUUklDUzoKJiM0MzsJCXJldHVybiB2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7CiAJY2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRToKIAkJcmV0ID0gdmNwdV9nZXRfcGVyZl9jYXBhYmlsaXRpZXModmNwdSkgJmFtcDsgUEVSRl9DQVBfUEVCU19GT1JNQVQ7CiAJCWJyZWFrOwpAQCAtMzQ1LDYgJiM0MzszNDcsMTEgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pCiAJY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOgogCQltc3JfaW5mby0mZ3Q7ZGF0YSA9IHBtdS0mZ3Q7Zml4ZWRfY3RyX2N0cmw7CiAJCWJyZWFrOwomIzQzOwljYXNlIE1TUl9QRVJGX01FVFJJQ1M6CiYjNDM7CQlpZiAoIW1zcl9pbmZvLSZndDtob3N0X2luaXRpYXRlZCkKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJCW1zcl9pbmZvLSZndDtkYXRhID0gcG11LSZndDtwZXJmX21ldHJpY3M7CiYjNDM7CQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOgogCQltc3JfaW5mby0mZ3Q7ZGF0YSA9IHBtdS0mZ3Q7cGVic19lbmFibGU7CiAJCWJyZWFrOwpAQCAtMzk0LDYgJiM0Mzs0MDEsMTYgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pCiAJCWlmIChwbXUtJmd0O2ZpeGVkX2N0cl9jdHJsICE9IGRhdGEpCiAJCQlyZXByb2dyYW1fZml4ZWRfY291bnRlcnMocG11LCBkYXRhKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgTVNSX1BFUkZfTUVUUklDUzoKJiM0MzsJCWlmICghbXNyX2luZm8tJmd0O2hvc3RfaW5pdGlhdGVkKQomIzQzOwkJCXJldHVybiAxOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIFRNQSBsZXZlbCAyIGlzIG5vdCBzdXBwb3J0ZWQsIGJpdHMgWzYzOjMyXSBhcmUgcmVzZXJ2ZWQKJiM0MzsJCSAqIGFuZCBpZ25vcmVkIG9uIHdyaXRlLCBzbyBubyB2YWxpZGF0aW9uIGlzIG5lZWRlZCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlwbXUtJmd0O3BlcmZfbWV0cmljcyA9IGRhdGE7CiYjNDM7CQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOgogCQlpZiAoZGF0YSAmYW1wOyBwbXUtJmd0O3BlYnNfZW5hYmxlX3JzdmQpCiAJCQlyZXR1cm4gMTsKQEAgLTQ2NCwyOCAmIzQzOzQ4MSwzMCBAQCBzdGF0aWMgaW50IGludGVsX3BtdV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbykKICAqIGRpZmZlcmVudCBwZXJmX2V2ZW50IGlzIGFscmVhZHkgdXRpbGl6aW5nIHRoZSByZXF1ZXN0ZWQgY291bnRlciwgYnV0IHRoZSBlbmQKICAqIHJlc3VsdCBpcyB0aGUgc2FtZSAoaWdub3JpbmcgdGhlIGZhY3QgdGhhdCB1c2luZyBhIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCiAgKiB3aWxsIGxpa2VseSBleGFjZXJiYXRlIGNvdW50ZXIgY29udGVudGlvbikuCi0gKgotICogRm9yY2libHkgaW5saW5lZCB0byBhbGxvdyBhc3NlcnRpbmcgb24gQGluZGV4IGF0IGJ1aWxkIHRpbWUsIGFuZCB0aGVyZSBzaG91bGQKLSAqIG5ldmVyIGJlIG1vcmUgdGhhbiBvbmUgdXNlci4KICAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpCiYjNDM7c3RhdGljIHU2NCBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsKHVuc2lnbmVkIGludCBpbmRleCkKIHsKIAljb25zdCBlbnVtIHBlcmZfaHdfaWQgZml4ZWRfcG1jX3BlcmZfaWRzW10gPSB7CiAJCVswXSA9IFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TLAogCQlbMV0gPSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsCiAJCVsyXSA9IFBFUkZfQ09VTlRfSFdfUkVGX0NQVV9DWUNMRVMsCiAJfTsKLQl1NjQgZXZlbnRzZWw7Ci0KLQlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmaXhlZF9wbWNfcGVyZl9pZHMpICE9IEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlMpOwotCUJVSUxEX0JVR19PTihpbmRleCAmZ3Q7PSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTKTsKJiM0MzsJdTY0IGV2ZW50c2VsID0gMDsKIAogCS8qCi0JICogWWVsbCBpZiBwZXJmIHJlcG9ydHMgc3VwcG9ydCBmb3IgYSBmaXhlZCBjb3VudGVyIGJ1dCBwZXJmIGRvZXNuJiMzOTt0Ci0JICogaGF2ZSBhIGtub3duIGVuY29kaW5nIGZvciB0aGUgYXNzb2NpYXRlZCBnZW5lcmFsIHB1cnBvc2UgZXZlbnQuCiYjNDM7CSAqIEZpeGVkIGNvdW50ZXJzIDMgYW5kIGFib3ZlIGRvbiYjMzk7dCBoYXZlIGNvcnJlc3BvbmRpbmcgZ2VuZXJpYyBoYXJkd2FyZQomIzQzOwkgKiBwZXJmIGV2ZW50LCBhbmQgS1ZNIGRvZXMgbm90IGludGVuZCB0byBlbXVsYXRlIHRoZW0gb24gbm9uLW1lZGlhdGVkCiYjNDM7CSAqIHZQTVUuCiAJICovCi0JZXZlbnRzZWwgPSBwZXJmX2dldF9od19ldmVudF9jb25maWcoZml4ZWRfcG1jX3BlcmZfaWRzW2luZGV4XSk7Ci0JV0FSTl9PTl9PTkNFKCFldmVudHNlbCAmYW1wOyZhbXA7IGluZGV4ICZsdDsga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkKTsKJiM0MzsJaWYgKGluZGV4ICZsdDsgQVJSQVlfU0laRShmaXhlZF9wbWNfcGVyZl9pZHMpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogWWVsbCBpZiBwZXJmIHJlcG9ydHMgc3VwcG9ydCBmb3IgYSBmaXhlZCBjb3VudGVyIGJ1dCBwZXJmCiYjNDM7CQkgKiBkb2VzbiYjMzk7dCBoYXZlIGEga25vd24gZW5jb2RpbmcgZm9yIHRoZSBhc3NvY2lhdGVkIGdlbmVyYWwKJiM0MzsJCSAqIHB1cnBvc2UgZXZlbnQuCiYjNDM7CQkgKi8KJiM0MzsJCWV2ZW50c2VsID0gcGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKGZpeGVkX3BtY19wZXJmX2lkc1tpbmRleF0pOwomIzQzOwkJV0FSTl9PTl9PTkNFKCFldmVudHNlbCAmYW1wOyZhbXA7IGluZGV4ICZsdDsga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkKTsKJiM0MzsJfQogCXJldHVybiBldmVudHNlbDsKIH0KIApAQCAtNTg3LDYgJiM0Mzs2MDYsMTEgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3JlZnJlc2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlwbXUtJmd0O2dsb2JhbF9zdGF0dXNfcnN2ZCAmYW1wOz0KIAkJCQl+TVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxfVFJBQ0VfVE9QQV9QTUk7CiAKJiM0MzsJaWYgKHBlcmZfY2FwYWJpbGl0aWVzICZhbXA7IFBFUkZfQ0FQX1BFUkZfTUVUUklDUykgewomIzQzOwkJcG11LSZndDtnbG9iYWxfY3RybF9yc3ZkICZhbXA7PSB+R0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTOwomIzQzOwkJcG11LSZndDtnbG9iYWxfc3RhdHVzX3JzdmQgJmFtcDs9IH5HTE9CQUxfU1RBVFVTX1BFUkZfTUVUUklDU19PVkY7CiYjNDM7CX0KJiM0MzsKIAlpZiAocGVyZl9jYXBhYmlsaXRpZXMgJmFtcDsgUEVSRl9DQVBfUEVCU19GT1JNQVQpIHsKIAkJaWYgKHBlcmZfY2FwYWJpbGl0aWVzICZhbXA7IFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkUpIHsKIAkJCXBtdS0mZ3Q7cGVic19lbmFibGVfcnN2ZCA9IGNvdW50ZXJfcnN2ZDsKQEAgLTYzMCw2ICYjNDM7NjU0LDkgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewomIzQzOwlzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7CiYjNDM7CiYjNDM7CXBtdS0mZ3Q7cGVyZl9tZXRyaWNzID0gMDsKIAlpbnRlbF9wbXVfcmVsZWFzZV9ndWVzdF9sYnJfZXZlbnQodmNwdSk7CiB9CiAKQEAgLTgwMSw2ICYjNDM7ODI4LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7CiAJdTY0IGdsb2JhbF9zdGF0dXMsIHRvZ2dsZTsKIAomIzQzOwkvKgomIzQzOwkgKiBQRVJGX01FVFJJQ1MgTVNSIG11c3QgYmUgcmVzdG9yZWQgY2xvc2VseSBhZnRlciBmaXhlZCBjb3VudGVyIDMsCiYjNDM7CSAqIHdoaWNoIHdhcyBqdXN0IHJlc3RvcmVkIGJ5IGt2bV9wbXVfbG9hZF9ndWVzdF9wbWNzKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAodmNwdV9oYXNfcGVyZl9tZXRyaWNzKHZjcHUpKQomIzQzOwkJd3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIHBtdS0mZ3Q7cGVyZl9tZXRyaWNzKTsKJiM0MzsKIAlyZG1zcnEoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBnbG9iYWxfc3RhdHVzKTsKIAl0b2dnbGUgPSBwbXUtJmd0O2dsb2JhbF9zdGF0dXMgXiBnbG9iYWxfc3RhdHVzOwogCWlmIChnbG9iYWxfc3RhdHVzICZhbXA7IHRvZ2dsZSkKQEAgLTgyOSw2ICYjNDM7ODYzLDEyIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqLwogCWlmIChwbXUtJmd0O2ZpeGVkX2N0cl9jdHJsX2h3KQogCQl3cm1zcnEoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgMCk7CiYjNDM7CiYjNDM7CWlmICh2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSkpIHsKJiM0MzsJCXBtdS0mZ3Q7cGVyZl9tZXRyaWNzID0gcmRwbWMoSU5URUxfUE1DX0ZJWEVEX1JEUE1DX01FVFJJQ1MpOwomIzQzOwkJaWYgKHBtdS0mZ3Q7cGVyZl9tZXRyaWNzKQomIzQzOwkJCXdybXNycShNU1JfUEVSRl9NRVRSSUNTLCAwKTsKJiM0MzsJfQogfQogCiBzdHJ1Y3Qga3ZtX3BtdV9vcHMgaW50ZWxfcG11X29wcyBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuaCBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmgKaW5kZXggNWQ5MzU3NjQwYWExODAuLjU3NzA1NzczZGM0OWI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmgKQEAgLTQwLDQgJiM0Mzs0MCw5IEBAIHN0cnVjdCBsYnJfZGVzYyB7CiAKIGV4dGVybiBzdHJ1Y3QgeDg2X3BtdV9sYnIgdm14X2xicl9jYXBzOwogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHZjcHVfaGFzX3BlcmZfbWV0cmljcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdmNwdV9nZXRfcGVyZl9jYXBhYmlsaXRpZXModmNwdSkgJmFtcDsgUEVSRl9DQVBfUEVSRl9NRVRSSUNTOwomIzQzO30KJiM0MzsKICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX1BNVV9JTlRFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCBhMWE1ZWRiMzlhN2VkZC4uNTg0ZDk5ZWY2MDI2ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtNDI2MCw2ICYjNDM7NDI2MCwxMCBAQCBzdGF0aWMgdm9pZCB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQkJICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTsKIAl2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLAogCQkJCSAgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7CiYjNDM7CiYjNDM7CWludGVyY2VwdCA9ICFoYXNfbWVkaWF0ZWRfcG11IHx8ICF2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7CiYjNDM7CXZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX1BFUkZfTUVUUklDUywKJiM0MzsJCQkJICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTsKIH0KIAogc3RhdGljIHZvaWQgdm14X3JlY2FsY19tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC04MDg0LDYgJiM0Mzs4MDg4LDkgQEAgc3RhdGljIF9faW5pdCB1NjQgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2b2lkKQogCQlwZXJmX2NhcCAmYW1wOz0gflBFUkZfQ0FQX1BFQlNfQkFTRUxJTkU7CiAJfQogCiYjNDM7CWlmIChlbmFibGVfbWVkaWF0ZWRfcG11KQomIzQzOwkJcGVyZl9jYXAgfD0gaG9zdF9wZXJmX2NhcCAmYW1wOyBQRVJGX0NBUF9QRVJGX01FVFJJQ1M7CiYjNDM7CiAJcmV0dXJuIHBlcmZfY2FwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggZDlkNTE4MDNiN2IyMDkuLjk2MjNmNTU4ZjM1OWRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0zNTAsOSAmIzQzOzM1MCw5IEBAIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHsKIAogc3RhdGljIGNvbnN0IHUzMiBtc3JzX3RvX3NhdmVfcG11W10gPSB7CiAJTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwLCBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjEsCi0JTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICYjNDM7IDIsCiYjNDM7CU1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMiwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIzLAogCU1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywKLQlNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLAomIzQzOwlNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBNU1JfUEVSRl9NRVRSSUNTLAogCU1TUl9JQTMyX1BFQlNfRU5BQkxFLCBNU1JfSUEzMl9EU19BUkVBLCBNU1JfUEVCU19EQVRBX0NGRywKIAogCS8qIFRoaXMgcGFydCBvZiBNU1JzIHNob3VsZCBtYXRjaCBLVk1fTUFYX05SX0lOVEVMX0dQX0NPVU5URVJTLiAqLwpAQCAtNzY3OSw2ICYjNDM7NzY3OSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcHJvYmVfbXNyX3RvX3NhdmUodTMyIG1zcl9pbmRleCkKIAkJICAgICBpbnRlbF9wdF92YWxpZGF0ZV9od19jYXAoUFRfQ0FQX251bV9hZGRyZXNzX3JhbmdlcykgKiAyKSkKIAkJCXJldHVybjsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgTVNSX1BFUkZfTUVUUklDUzoKJiM0MzsJCWlmICghKGt2bV9jYXBzLnN1cHBvcnRlZF9wZXJmX2NhcCAmYW1wOyBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKQomIzQzOwkJCXJldHVybjsKJiM0MzsJCWJyZWFrOwogCWNhc2UgTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCAuLi4KIAkgICAgIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgJiM0MzsgS1ZNX01BWF9OUl9HUF9DT1VOVEVSUyAtIDE6CiAJCWlmIChtc3JfaW5kZXggLSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwICZndDs9CkBAIC03NzQyLDcgJiM0Mzs3NzQ2LDcgQEAgc3RhdGljIHZvaWQga3ZtX2luaXRfbXNyX2xpc3RzKHZvaWQpCiB7CiAJdW5zaWduZWQgaTsKIAotCUJVSUxEX0JVR19PTl9NU0coS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyAhPSAzLAomIzQzOwlCVUlMRF9CVUdfT05fTVNHKEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlMgIT0gNCwKIAkJCSAmIzM0O1BsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdJiMzNDspOwogCiAJbnVtX21zcnNfdG9fc2F2ZSA9IDA7CmRpZmYgLS1naXQgYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IGVmZjI5NjQ1NzE5YmM3Li5lNzc0NWUyY2Q1NDNhOSAxMDA2NDQKLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTMzMSw2ICYjNDM7MzMxLDcgQEAKICNkZWZpbmUgUEVSRl9DQVBfUEVCU19GT1JNQVQJCTB4ZjAwCiAjZGVmaW5lIFBFUkZfQ0FQX0ZXX1dSSVRFUwkJQklUX1VMTCgxMykKICNkZWZpbmUgUEVSRl9DQVBfUEVCU19CQVNFTElORQkJQklUX1VMTCgxNCkKJiM0MzsjZGVmaW5lIFBFUkZfQ0FQX1BFUkZfTUVUUklDUwkJQklUX1VMTCgxNSkKICNkZWZpbmUgUEVSRl9DQVBfUEVCU19USU1JTkdfSU5GTwlCSVRfVUxMKDE3KQogI2RlZmluZSBQRVJGX0NBUF9QRUJTX01BU0sJCShQRVJGX0NBUF9QRUJTX1RSQVAgfCBQRVJGX0NBUF9BUkNIX1JFRyB8IFwKIAkJCQkJIFBFUkZfQ0FQX1BFQlNfRk9STUFUIHwgUEVSRl9DQVBfUEVCU19CQVNFTElORSB8IFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaAppbmRleCA2MDhlZDgzZDdjNmE2OS4uNmMxOTUwM2UwYmI3ZGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmgKQEAgLTUyLDYgJiM0Mzs1Miw5IEBACiAvKiBGaXhlZCBQTUMgY29udHJvbHMsIEludGVsIG9ubHkuICovCiAjZGVmaW5lIEZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoX2lkeCkJQklUX1VMTCgoMzIgJiM0MzsgKF9pZHgpKSkKIAomIzQzOy8qIFBFUkZfTUVUUklDUyBlbmFibGUsIEludGVsIG9ubHkuICovCiYjNDM7I2RlZmluZSBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFCQlCSVRfVUxMKDQ4KQomIzQzOwogI2RlZmluZSBGSVhFRF9QTUNfS0VSTkVMCQkJQklUX1VMTCgwKQogI2RlZmluZSBGSVhFRF9QTUNfVVNFUgkJCQlCSVRfVUxMKDEpCiAjZGVmaW5lIEZJWEVEX1BNQ19BTllUSFJFQUQJCQlCSVRfVUxMKDIpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKaW5kZXggZGM2YWZhYzNhYTkxOTUuLmQ0Njg4YTdkMWU1NTY5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKIAogI2luY2x1ZGUgJiMzNDtwbXUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKIAogLyogTnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AgZm9yIHRoZSBndWVzdCBtZWFzdXJlbWVudCBwYXlsb2FkLiAqLwogI2RlZmluZSBOVU1fTE9PUFMJCQkxMApAQCAtMjQxLDE3ICYjNDM7MjQyLDIwIEBAIGRvIHsJCQkJCQkJCQkJXAogCSk7CQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKQkJXAomIzQzOyNkZWZpbmUgR1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUCkJCQkJXAogZG8gewkJCQkJCQkJCQlcCi0Jd3Jtc3IoX3BtY19tc3IsIDApOwkJCQkJCQlcCi0JCQkJCQkJCQkJXAogCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFVTSE9QVCkpCQkJCVwKIAkJR1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgJiMzNDtjbGZsdXNob3B0ICVbbV0mIzM0OywgRkVQKTsJXAogCWVsc2UgaWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMVVNIKSkJCQkJXAogCQlHVUVTVF9NRUFTVVJFX0VWRU5UKF9jdHJsX21zciwgX3ZhbHVlLCAmIzM0O2NsZmx1c2ggICVbbV0mIzM0OywgRkVQKTsJXAogCWVsc2UJCQkJCQkJCQlcCiAJCUdVRVNUX01FQVNVUkVfRVZFTlQoX2N0cmxfbXNyLCBfdmFsdWUsICYjMzQ7bm9wJiMzNDssIEZFUCk7CQlcCi0JCQkJCQkJCQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiYjNDM7I2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKQkJXAomIzQzO2RvIHsJCQkJCQkJCQkJXAomIzQzOwl3cm1zcihfcG1jX21zciwgMCk7CQkJCQkJCVwKJiM0MzsJR1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUCk7CQkJCVwKIAlndWVzdF9hc3NlcnRfZXZlbnRfY291bnQoX2lkeCwgX3BtYywgX3BtY19tc3IpOwkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC0zMTgsNiAmIzQzOzMyMiw1NiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KQogCQkJCUZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoaSkpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wZXJmX21ldHJpY3Modm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZXRpcmluZywgYmFkX3NwZWMsIGZlX2JvdW5kLCBiZV9ib3VuZCwgc3VtOwomIzQzOwl1NjQgZ2xvYmFsX2N0cmwsIG1ldHJpY3M7CiYjNDM7CiYjNDM7CWlmICgoZ3Vlc3RfZ2V0X3BtdV92ZXJzaW9uKCkgJmx0OyAyKSB8fAkvKiBEb2VzIGd1ZXN0IGhhdmUgR0xPQkFMX0NUUkw/ICovCiYjNDM7CSAgICAhdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX1BEQ00pIHx8CiYjNDM7CSAgICAhKHJkbXNyKE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTKSAmYW1wOyBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCAwKTsKJiM0MzsJd3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIzLCAwKTsKJiM0MzsJd3Jtc3IoTVNSX1BFUkZfTUVUUklDUywgMCk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBmaXhlZCBjdHIzIChUT1BET1dOLlNMT1RTKSBhbmQgUEVSRl9NRVRSSUNTLiAqLwomIzQzOwl3cm1zcihNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLCBGSVhFRF9QTUNfQ1RSTCgzLCBGSVhFRF9QTUNfS0VSTkVMKSk7CiYjNDM7CWdsb2JhbF9jdHJsID0gRklYRURfUE1DX0dMT0JBTF9DVFJMX0VOQUJMRSgzKSB8CiYjNDM7CQkgICAgICBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFOwomIzQzOwomIzQzOwlHVUVTVF9SVU5fUEFZTE9BRChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBnbG9iYWxfY3RybCwgJiMzNDsmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIENoZWNrIHRlc3QgcmVzdWx0cy4gKi8KJiM0MzsJbWV0cmljcyA9IHJkbXNyKE1TUl9QRVJGX01FVFJJQ1MpOwomIzQzOwlyZXRpcmluZyA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCg3LCAwKSwgbWV0cmljcyk7CiYjNDM7CWJhZF9zcGVjID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDE1LCA4KSwgbWV0cmljcyk7CiYjNDM7CWZlX2JvdW5kID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDIzLCAxNiksIG1ldHJpY3MpOwomIzQzOwliZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgzMSwgMjQpLCBtZXRyaWNzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQmUgY29uc2VydmF0aXZlOiB0aGUgbWVhc3VyZWQgcGF5bG9hZCBkZWZpbml0ZWx5IHJldGlyZXMgd29yaywgc28KJiM0MzsJICogUmV0aXJpbmcgc2hvdWxkIGJlIG5vbi16ZXJvLgomIzQzOwkgKi8KJiM0MzsJR1VFU1RfQVNTRVJUX05FKG1ldHJpY3MsIDBVTEwpOwomIzQzOwlHVUVTVF9BU1NFUlRfTkUocmV0aXJpbmcsIDBVTEwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgc3VtIG9mIHRoZSA0IGxldmVsLTEgdG9wZG93biBtZXRyaWNzIHNob3VsZCBiZSBjbG9zZSB0byAxMDAlLgomIzQzOwkgKiAzIGlzIGNob3NlbiBhcyBhIGxvb3NlIHNhbml0eSBjaGVjay4KJiM0MzsJICovCiYjNDM7CXN1bSA9IHJldGlyaW5nICYjNDM7IGJhZF9zcGVjICYjNDM7IGZlX2JvdW5kICYjNDM7IGJlX2JvdW5kOwomIzQzOwlHVUVTVF9BU1NFUlQoc3VtICZndDs9IDB4ZmQgJmFtcDsmYW1wOyBzdW0gJmx0Oz0gMHgxMDIpOwomIzQzOwomIzQzOwkvKiBTYW5pdHkgY2hlY2sgYWZ0ZXIgUEVSRl9NRVRSSUNTIGRpc2FibGVkLiAqLwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O2xvb3AgLiYjMzQ7IDogJiMzNDsmIzQzO2MmIzM0OygoaW50KXtOVU1fTE9PUFN9KSk7CiYjNDM7CUdVRVNUX0FTU0VSVF9FUShyZG1zcihNU1JfUEVSRl9NRVRSSUNTKSwgbWV0cmljcyk7CiYjNDM7CXdybXNyKE1TUl9QRVJGX01FVFJJQ1MsIDB4ZGVhZGRlYWQpOwomIzQzOwomIzQzOwlHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIDB4ZGVhZGRlYWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZCkKIHsKIAl1OCBpOwpAQCAtMzI1LDYgJiM0MzszNzksOCBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0lOVEVMX0FSQ0hfRVZFTlRTOyBpJiM0MzsmIzQzOykKIAkJZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGkpOwogCiYjNDM7CWd1ZXN0X3Rlc3RfcGVyZl9tZXRyaWNzKCk7CiYjNDM7CiAJR1VFU1RfRE9ORSgpOwogfQogCkBAIC0zNjEsNyAmIzQzOzQxNyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKICAqIG90aGVyIHRoYW4gUE1DcyBpbiB0aGUgZnV0dXJlLgogICovCiAjZGVmaW5lIE1BWF9OUl9HUF9DT1VOVEVSUwk4Ci0jZGVmaW5lIE1BWF9OUl9GSVhFRF9DT1VOVEVSUwkzCiYjNDM7I2RlZmluZSBNQVhfTlJfRklYRURfQ09VTlRFUlMJNAogCiAjZGVmaW5lIEdVRVNUX0FTU0VSVF9QTUNfTVNSX0FDQ0VTUyhpbnNuLCBtc3IsIGV4cGVjdF9ncCwgdmVjdG9yKQkJXAogX19HVUVTVF9BU1NFUlQoZXhwZWN0X2dwID8gdmVjdG9yID09IEdQX1ZFQ1RPUiA6ICF2ZWN0b3IsCQkJXApAQCAtNTg1LDYgJiM0Mzs2NDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpCiAJdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwogCXU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTsKIAl1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTsKJiM0MzsJdTY0IGFkdmVydGlzZWRfcGVyZl9jYXBzID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUyk7CiAJdW5zaWduZWQgaW50IGk7CiAJdTggdiwgajsKIAl1MzIgazsKQEAgLTU5Miw2ICYjNDM7NjQ5LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKQogCWNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHsKIAkJMCwKIAkJUE1VX0NBUF9GV19XUklURVMsCiYjNDM7CQlQRVJGX0NBUF9QRVJGX01FVFJJQ1MsCiAJfTsKIAogCS8qCkBAIC02NDksNiAmIzQzOzcwNywxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpCiAJCQlpZiAoIWt2bV9oYXNfcGVyZl9jYXBzICZhbXA7JmFtcDsgcGVyZl9jYXBzW2ldKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJLyogSWdub3JlIHVuc3VwcG9ydGVkIGZlYXR1cmVzLiAqLwomIzQzOwkJCWlmIChwZXJmX2NhcHNbaV0gJmFtcDsgfmFkdmVydGlzZWRfcGVyZl9jYXBzKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKIAkJCXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKIAkJCQl2LCBwZXJmX2NhcHNbaV0pOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBQTVUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUuIFRoZSBjb3JlIGlzIGFsbCBhYm91dCBleHRlbmRpbmcgdGhlIEtWTSBQTVUgZW11bGF0aW9uIGZvciB4ODYuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGluY3JlYXNpbmcgYEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlNgIGZyb20gMyB0byA0LiBUaGF04oCZcyB0aGUgbW9zdCBvYnZpb3VzIGNoYW5nZS4gVGhlbiwgd2Ugc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBlcmZfbWV0cmljc2Agd2l0aGluIHRoZSBgc3RydWN0IGt2bV9wbXVgLCBhIGNsZWFyIGluZGljYXRvciBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgc3Ryb25nbHkgcG9pbnRzIHRvIHN1cHBvcnRpbmcgSW50ZWwmIzM5O3MgYE1TUl9QRVJGX01FVFJJQ1NgLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGNhcGFiaWxpdHksIGBQRVJGX0NBUF9QRVJGX01FVFJJQ1NgLCBhbmQgaG9va3MgaXQgaW50byB0aGUgcmVsZXZhbnQgbWFza3MgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzIChgR0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGYCwgYEdMT0JBTF9DVFJMX0VOX1BFUkZfTUVUUklDU2ApLiBUaGUgY29kZSB0aGVuIGltcGxlbWVudHMgaGFuZGxpbmcgZm9yIHRoZSBuZXcgTVNSIGluIGBpbnRlbF9wbXVfZ2V0X21zcmAgYW5kIGBpbnRlbF9wbXVfc2V0X21zcmAsIHdoaWNoIG1lYW5zIHRoZSBndWVzdCBjYW4gbm93IHJlYWQgYW5kIHdyaXRlIHRvIHRoaXMgTVNSLiBJdCBhbHNvIHRvdWNoZXMgb24gZ2V0dGluZyB0aGUgZXZlbnRzIGZyb20gZml4ZWQgY291bnRlcnMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLgoKVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBzcGFuIG11bHRpcGxlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhpcyBpbmNsdWRlcyB0aGUgdmFyaW91cyBgaW50ZWxfcG11XypgIGZ1bmN0aW9ucyBmb3IgbWFuYWdlbWVudCBhbmQgcmVmcmVzaCwgYWxvbmcgd2l0aCB0aGUgYHZteF8qYCBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggVk1YIGNvbnRleHQgc3dpdGNoaW5nIGFuZCBjYXBhYmlsaXRpZXMsIGFsb25nIHdpdGggaW50ZXJjZXB0aW5nIHRoZSBNU1IgY2FsbHMuIFRoaXMgY29uZmlybXMgdGhlIG5ldyBmZWF0dXJlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBob3N04oCZcyBQTVUgYW5kIGhvdyBpdOKAmXMgZXhwb3NlZCB0byB0aGUgZ3Vlc3QuIEkgc2VlIHRoYXQgYG1zcnNfdG9fc2F2ZV9wbXVgIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBlbnN1cmUgdGhlIG5ldyBNU1IgaXMgc2F2ZWQvcmVzdG9yZWQgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuCgpUaGlzIGFsbCBwb2ludHMgdG8gYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBgTVNSX1BFUkZfTUVUUklDU2AgZmVhdHVyZSwgYWxvbmcgd2l0aCBmaXhlZCBjb3VudGVyIDMgKHdoaWNoIEkmIzM5O20gYXNzdW1pbmcgaXMgdGhlIFRPUERPV04uU0xPVFMgY291bnRlcikuIFRoZSBjb2RlIGZsb3cgc2VlbXMgdG8gYmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gYm90aCBndWVzdCBNU1IgYWNjZXNzZXMgKFJETVNSL1dSTVNSKSBhbmQgS1ZNIFBNVSBjb250ZXh0IHN3aXRjaGluZywgbWVhbmluZyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWxseSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLgoKR2l2ZW4gdGhlIG1vZGlmaWNhdGlvbnMsIEtWTSAoYENPTkZJR19LVk1gKSBhbmQgSW50ZWwgS1ZNIChgQ09ORklHX0tWTV9JTlRFTGApIGFyZSBlc3NlbnRpYWwgcHJlcmVxdWlzaXRlcy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGEgZGVlcGVyIGRpdmUgd2lsbCBiZSBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBhbmQgdGhlIHJlbGF0ZWQgcmVmcmVzaCBhbmQgY29udGV4dC1zd2l0Y2hpbmcgcm91dGluZXMgKGBpbnRlbF9wbXVfcmVmcmVzaGAsIGBpbnRlbF9wbXVfcmVzZXRgLCBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgLCBgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllc2AsIGBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eWApLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBuZXcgTVNSIGFuZCB0aGUgZXh0ZW5kZWQgY291bnRlciBsaW1pdHMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYGVuYWJsZV9tZWRpYXRlZF9wbXVgLCBhbmQgdmVyaWZ5IHRoYXQgYWxsIG9mIHRoZSBuZXcgY2FwYWJpbGl0eSBjaGVja3MgYXJlIGluIHBsYWNlLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoZSBuZXcgZmVhdHVyZSBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gTG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIG92ZXJhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBhbmQgUGVyZm9ybWFuY2UqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY29uZmlncyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgdG8gc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBhbnkgcGFydGljdWxhciBjb25maWcgb3IgbW9kdWxlIHBhcmFtZXRlciB0aGF0IHdvdWxkIGFsbG93IHVzIHRvIGxldmVyYWdlIG1lZGlhdGVkIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdHMsIG9yICYjMzQ7UE1Vcy4mIzM0OyBMZXQmIzM5O3MgY2hlY2sgYGVuYWJsZV9tZWRpYXRlZF9wbXVgLCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IHRoZXJlIGlzIG1vcmUgdG8gaXQgdGhhbiBqdXN0IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlX21lZGlhdGVkX3BtdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3BtdS5jPTQwPW1vZHVsZV9wYXJhbShlbmFibGVfcG11LCBib29sLCAwNDQ0KTtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDItLyogRW5hYmxlL2Rpc2FibGVkIG1lZGlhdGVkIFBNVSB2aXJ0dWFsaXphdGlvbi4gKi9cbmFyY2gveDg2L2t2bS9wbXUuYzo0Mzpib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX21lZGlhdGVkX3BtdTtcbmFyY2gveDg2L2t2bS9wbXUuYzo0NDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZW5hYmxlX21lZGlhdGVkX3BtdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNDUtXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTEyMT12b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTU0LVxuYXJjaC94ODYva3ZtL3BtdS5jOjE1NTpcdGlmICghZW5hYmxlX3BtdSB8fCAhZW5hYmxlX21lZGlhdGVkX3BtdSB8fCAha3ZtX2hvc3RfcG11Lm1lZGlhdGVkIHx8XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTU2LVx0ICAgICFwbXVfb3BzLVx1MDAzZWlzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQoXHUwMDI2a3ZtX2hvc3RfcG11KSlcbmFyY2gveDg2L2t2bS9wbXUuYzoxNTc6XHRcdGVuYWJsZV9tZWRpYXRlZF9wbXUgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTgtXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU5Olx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxuYXJjaC94ODYva3ZtL3BtdS5jLTE2MC1cdFx0cG11X29wcy1cdTAwM2V3cml0ZV9nbG9iYWxfY3RybCA9IE5VTEw7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE4Ni1cbmFyY2gveDg2L2t2bS9wbXUuYzoxODc6XHRpZiAoIWVuYWJsZV9tZWRpYXRlZF9wbXUgXHUwMDI2XHUwMDI2IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCBcdTAwM2UgMylcbmFyY2gveDg2L2t2bS9wbXUuYy0xODgtXHRcdGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IDM7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5oPTY1PWV4dGVybiBib29sIGVuYWJsZV9wbXU7XG5hcmNoL3g4Ni9rdm0vcG11Lmg6NjY6ZXh0ZXJuIGJvb2wgZW5hYmxlX21lZGlhdGVkX3BtdTtcbmFyY2gveDg2L2t2bS9wbXUuaC02Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11Lmg9ODY9c3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3BtdS5oLTg3LXtcbmFyY2gveDg2L2t2bS9wbXUuaDo4ODpcdHJldHVybiBlbmFibGVfbWVkaWF0ZWRfcG11IFx1MDAyNlx1MDAyNiB2Y3B1X3RvX3BtdSh2Y3B1KS1cdTAwM2V2ZXJzaW9uO1xuYXJjaC94ODYva3ZtL3BtdS5oLTg5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE3OD1tb2R1bGVfcGFyYW0odm5taSwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTE3OS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MTgwOm1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTgxLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NzUyPXN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTc1Ny1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NzU4Olx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy03NTktXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NhcGFiaWxpdGllcy5oPTM5OT1zdGF0aWMgaW5saW5lIGJvb2wgdm14X3BlYnNfc3VwcG9ydGVkKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jYXBhYmlsaXRpZXMuaC00MDEtXHRyZXR1cm4gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BFQlMpIFx1MDAyNlx1MDAyNiBrdm1fcG11X2NhcC5wZWJzX2VwdCBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvY2FwYWJpbGl0aWVzLmg6NDAyOlx0ICAgICAgICFlbmFibGVfbWVkaWF0ZWRfcG11O1xuYXJjaC94ODYva3ZtL3ZteC9jYXBhYmlsaXRpZXMuaC00MDMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9MTU5PW1vZHVsZV9wYXJhbShhbGxvd19zbWFsbGVyX21heHBoeWFkZHIsIGJvb2wsIFNfSVJVR08pO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy0xNjAtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjE2MTptb2R1bGVfcGFyYW0oZW5hYmxlX21lZGlhdGVkX3BtdSwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTE2Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQyMDk9c3RhdGljIHZvaWQgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDIxOC1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDIxOTpcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDIyMC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDQzOT12b2lkIHZteF9zZXRfY29uc3RhbnRfaG9zdF9zdGF0ZShzdHJ1Y3QgdmNwdV92bXggKnZteClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ1MjYtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDUyNzpcdGlmIChlbmFibGVfbWVkaWF0ZWRfcG11KVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00NTI4LVx0XHR2bWNzX3dyaXRlNjQoSE9TVF9JQTMyX1BFUkZfR0xPQkFMX0NUUkwsIDApO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODAzOT1zdGF0aWMgX19pbml0IHU2NCB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MDUwLVx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0FSQ0hfTEJSKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODA1MTpcdCAgICAhZW5hYmxlX21lZGlhdGVkX3BtdSkge1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MDUyLVx0XHR4ODZfcGVyZl9nZXRfbGJyKFx1MDAyNnZteF9sYnJfY2Fwcyk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MDkwLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4MDkxOlx0aWYgKGVuYWJsZV9tZWRpYXRlZF9wbXUpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTgwOTItXHRcdHBlcmZfY2FwIHw9IGhvc3RfcGVyZl9jYXAgXHUwMDI2IFBFUkZfQ0FQX1BFUkZfTUVUUklDUztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwNjQ9aW50IGt2bV94ODZfdmVuZG9yX2luaXQoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODYtXHRfX2t2bV9yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcyhvcHMtXHUwMDNlaGFuZGxlX2ludGVsX3B0X2ludHIsXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxODc6XHRcdFx0XHQgICAgICBlbmFibGVfbWVkaWF0ZWRfcG11ID8ga3ZtX2hhbmRsZV9ndWVzdF9tZWRpYXRlZF9wbWkgOiBOVUxMKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE4OC1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTI3NDA9aW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMjc2Mi1cbmFyY2gveDg2L2t2bS94ODYuYzoxMjc2MzpcdGlmIChlbmFibGVfbWVkaWF0ZWRfcG11IFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5lbmFibGVfcG11IFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyNzY0LVx0ICAgICFrdm0tXHUwMDNlYXJjaC5jcmVhdGVkX21lZGlhdGVkX3BtdSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjc1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgYGVuYWJsZV9tZWRpYXRlZF9wbXVgIE15c3RlcnkqKgoKQWxyaWdodCwgc28gYGVuYWJsZV9tZWRpYXRlZF9wbXVgIGlzIHNob3dpbmcgdXAgYXMgYSBtb2R1bGUgcGFyYW1ldGVyIGZvciB0aGUgYGt2bS1pbnRlbGAgYW5kIGBrdm0tYW1kYCBtb2R1bGVzLiBIYW5nIG9uIGEgc2Vjb25kLi4uIG1vZHVsZSAqcGFyYW1ldGVyKiwgbm90IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHJpZ2h0PyBUaGF0IGRpc3RpbmN0aW9uIGlzIGNyaXRpY2FsLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgdGhhdCYjMzk7cyBzZXQgYXQgbW9kdWxlIGxvYWQgdGltZSwgbm90IGJha2VkIGludG8gdGhlIGtlcm5lbCBidWlsZCBpdHNlbGYuIFRoZSBhY3R1YWwgKmNvbmZpZ3MqIHRoYXQgaW5mbHVlbmNlIHRoaXMgYXJlIGdvaW5nIHRvIGJlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCAob3IgYEtWTV9BTURgKSwgbm90IHRoaXMgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIHRoZSBpbXBvcnRhbnQgcG9pbnQuCgpXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBsYW5kc2NhcGUgZnVsbHksIHNvIGxldCYjMzk7cyBkaWcgYSBiaXQgZnVydGhlci4gSXQmIzM5O3Mgc2FmZSB0byBhc3N1bWUgYGVuYWJsZV9tZWRpYXRlZF9wbXVgIHdpbGwgbmVlZCB0aGUgY29yZSBQTVUgaW5mcmFzdHJ1Y3R1cmU7IHdoaWNoIG1lYW5zLCBhdCBhIG1pbmltdW0sIHRoYXQgYENPTkZJR19QRVJGX0VWRU5UU2AgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGltZSB0byBpbnZlc3RpZ2F0ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSRl9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTIxMjE9bWVudSBcJiMzNDtLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1wmIzM0O1xuaW5pdC9LY29uZmlnLTIxMjItXG5pbml0L0tjb25maWc6MjEyMzpjb25maWcgUEVSRl9FVkVOVFNcbmluaXQvS2NvbmZpZy0yMTI0LVx0Ym9vbCBcJiMzNDtLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzA5CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQZXJmb3JtYW5jZSBFdmVudCBJbnN0cnVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUEVSRl9FVkVOVFNgIGlzIGVzc2VudGlhbCBoZXJlLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTttIHRha2luZyBhIGNsb3NlIGxvb2sgYXQ6IGBpbnRlbF9wbXVfZ2V0X21zcmAsIGBpbnRlbF9wbXVfc2V0X21zcmAsIGBpbnRlbF9wbXVfcmVmcmVzaGAsIGBpbnRlbF9wbXVfcmVzZXRgLCBgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWRgLCBgaW50ZWxfbWVkaWF0ZWRfcG11X3B1dGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCwgYW5kIGBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGhvdC1wYXRoIGZ1bmN0aW9ucywgdGhlIG9uZXMgdGhhdCBhcmUgY2FsbGVkIGZyZXF1ZW50bHkgYW5kIHdvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBwcm9maWxpbmcuIGBpbnRlbF9wbXVfZ2V0X21zcmAgYW5kIGBpbnRlbF9wbXVfc2V0X21zcmAgYXJlIHRpZWQgdG8gUkRNU1IvV1JNU1IsIHNvIHRoZXkmIzM5O3JlIG9uIHRoZSBzb21ld2hhdCBob3Qgc2lkZSwgYnV0IHZpdGFsIGZvciBNU1IgZnV6emluZy4gSSB3YXMgd29uZGVyaW5nIGFib3V0IHNraXBwaW5nIGBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZGAgYW5kIGBpbnRlbF9tZWRpYXRlZF9wbXVfcHV0YCwgYXMgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gdmNwdSBsb2FkL3B1dCBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmF0aGVyIGZyZXF1ZW50LiBIb3dldmVyLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSYjMzk7cmUgdGhlIG9uZXMgc2F2aW5nL3Jlc3RvcmluZyBgTVNSX1BFUkZfTUVUUklDU2AsIG1ha2luZyB0aGVtIGNyaXRpY2FsLiBGdXJ0aGVyIGFuYWx5c2lzIHJldmVhbGVkIHRoZXkgYXJlIGNhbGxlZCBvbiBldmVyeSBWTSBleGl0L2VudHJ5IG9yIGNvbnRleHQgc3dpdGNoLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBob3QuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBsZXNzIGZyZXF1ZW50IG9uZXMuIGBpbnRlbF9wbXVfcmVmcmVzaGAgaXMgY2FsbGVkIG9uIENQVUlEIHVwZGF0ZXMsIG5vdCBhIGhvdHNwb3QuIGBpbnRlbF9wbXVfcmVzZXRgIGlzIGNhbGxlZCBvbiB2Y3B1IHJlc2V0OyBub3QgaG90LiBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgIGlzIGZvciBNU1IgaW50ZXJjZXB0IHJlY2FsY3VsYXRpb24uIEl0JiMzOTtzIG5vdCBob3QsIGVpdGhlciwgYW5kIHRoZSBvdGhlcnMsIHN1Y2ggYXMgYHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNgIGFuZCBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYXJlIGRlZmluaXRpdmVseSBub3Qgb24gdGhlIGhvdCBwYXRoLgoKU28sIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyBhcyB0aGUgYXJlYXMgb2YgcHJpbWFyeSBjb25jZXJuOgpgaW50ZWxfcG11X2dldF9tc3JgCmBpbnRlbF9wbXVfc2V0X21zcmAKYGludGVsX3BtdV9yZWZyZXNoYApgaW50ZWxfcG11X3Jlc2V0YApgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgCmBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYAoKTmVlZCB0byB2ZXJpZnkgdGhhdCBsYXN0IG9uZSBpcyBpbmRlZWQgYSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz0zODg9c3RhdGljIGludCBpbnRlbF9wbXVfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00ODQtICovXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjQ4NTpzdGF0aWMgdTY0IGludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWwodW5zaWduZWQgaW50IGluZGV4KVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00ODYte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9NjI2PXN0YXRpYyB2b2lkIGludGVsX3BtdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTY0Ni1cdFx0cG11LVx1MDAzZWZpeGVkX2NvdW50ZXJzW2ldLmN1cnJlbnRfY29uZmlnID0gMDtcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6NjQ3Olx0XHRwbXUtXHUwMDNlZml4ZWRfY291bnRlcnNbaV0uZXZlbnRzZWwgPSBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsKGkpO1xuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy02NDgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTMyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMga2VybmVsLWxldmVsIHZpcnR1YWxpemF0aW9uIG9yIHBlcmZvcm1hbmNlIG1vbml0b3Jpbmcgd2l0aGluIGEgaHlwZXJ2aXNvcjoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3RzcG90cyBpbiBQTVUgTG9hZC9TYXZlIE9wZXJhdGlvbnMqKgoKUmlnaHQsIHRoYXQgc2VlbXMgaW1wb3J0YW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgYGludGVsX21lZGlhdGVkX3BtdV9sb2FkYCBhbmQgYGludGVsX21lZGlhdGVkX3BtdV9wdXRgIGFyZSBleHBlcmllbmNpbmcgaGlnaCBjb250ZW50aW9uLiBBcmUgdGhleSBjYXVzaW5nIGEgYm90dGxlbmVjaz8gVGhleSYjMzk7cmUgY3J1Y2lhbCBjb21wb25lbnRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBpbXBhY3QuCgpOb3csIHdoZXJlIGRvIHRoZXNlIGZ1bmN0aW9ucyBnZXQgY2FsbGVkIGZyb20/IE9rYXksIGBrdm1fcG11X2xvYWRfZ3Vlc3RfcG1jc2AgYW5kIGBrdm1fcG11X3NhdmVfZ3Vlc3RfcG1jc2AsIHJpZ2h0LiBBbmQgdGhvc2UgYXJlIGNhbGxlZCBieSwgYWguLi4gYHZteF92Y3B1X2xvYWRgIGFuZCBgdm14X3ZjcHVfcHV0YCwgd2hpY2ggYXJlIGVzc2VudGlhbCB0byB2aXJ0dWFsIG1hY2hpbmUgbWFuYWdlbWVudC4gSGFuZyBvbiBhIHNlY29uZCwgYW0gSSBnZXR0aW5nIHRoYXQgcmlnaHQ/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNhbGwgcGF0aHMgaGVyZS4uLiBZZXAuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcnJlY3QgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludGVsX21lZGlhdGVkX3BtdV9sb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTgyMD1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfd3JpdGVfZ2xvYmFsX2N0cmwodTY0IGdsb2JhbF9jdHJsKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODI1LVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4MjY6c3RhdGljIHZvaWQgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04Mjcte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9ODc0PXN0cnVjdCBrdm1fcG11X29wcyBpbnRlbF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04ODYtXHQuaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCA9IGludGVsX3BtdV9pc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkLFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4ODc6XHQubWVkaWF0ZWRfbG9hZCA9IGludGVsX21lZGlhdGVkX3BtdV9sb2FkLFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04ODgtXHQubWVkaWF0ZWRfcHV0ID0gaW50ZWxfbWVkaWF0ZWRfcG11X3B1dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIFBNVSBNZWRpYXRlZCBBY2Nlc3MgUGF0aCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG1lZGlhdGVkIFBNVSBhY2Nlc3MgcGF0aCB3aXRoaW4gS1ZNLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBga3ZtX3BtdV9vcHMtJmd0O21lZGlhdGVkX2xvYWRgIGFuZCBgbWVkaWF0ZWRfcHV0YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBtZWRpYXRlZF9sb2FkYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgY3JpdGljYWwgcGllY2UgaGVyZSwgdGhlIGVudHJ5IHBvaW50LiBJIHdhbnQgdG8ga25vdyB3aGF0JiMzOTtzICppbml0aWF0aW5nKiB0aGlzIG1lZGlhdGVkIGxvYWRpbmcgcHJvY2Vzcy4gR290dGEgZm9sbG93IHRoZSBjYWxsIGdyYXBoIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lZGlhdGVkX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9wbXUuYz0xMzYyPXZvaWQga3ZtX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTM5MC1cbmFyY2gveDg2L2t2bS9wbXUuYzoxMzkxOlx0a3ZtX3BtdV9jYWxsKG1lZGlhdGVkX2xvYWQpKHZjcHUpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTEzOTItfVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuaD0yNj1zdHJ1Y3Qga3ZtX3BtdV9vcHMge1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuaC00MS1cdGJvb2wgKCppc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkKShzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5ICpob3N0X3BtdSk7XG5hcmNoL3g4Ni9rdm0vcG11Lmg6NDI6XHR2b2lkICgqbWVkaWF0ZWRfbG9hZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuaC00My1cdHZvaWQgKCptZWRpYXRlZF9wdXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYz0zMDQ9c3RydWN0IGt2bV9wbXVfb3BzIGFtZF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMTUtXHQuaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCA9IGFtZF9wbXVfaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM6MzE2Olx0Lm1lZGlhdGVkX2xvYWQgPSBhbWRfbWVkaWF0ZWRfcG11X2xvYWQsXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jLTMxNy1cdC5tZWRpYXRlZF9wdXQgPSBhbWRfbWVkaWF0ZWRfcG11X3B1dCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTg3ND1zdHJ1Y3Qga3ZtX3BtdV9vcHMgaW50ZWxfcG11X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODg2LVx0LmlzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQgPSBpbnRlbF9wbXVfaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6ODg3Olx0Lm1lZGlhdGVkX2xvYWQgPSBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZCxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODg4LVx0Lm1lZGlhdGVkX3B1dCA9IGludGVsX21lZGlhdGVkX3BtdV9wdXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgaW4gS1ZNL0ludGVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHBhdGggd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IG9uIEludGVsIHN5c3RlbXMuIEkga25vdyBga3ZtX21lZGlhdGVkX3BtdV9sb2FkYCBpcyBhIGNyaXRpY2FsIGhvdHNwb3QsIHRyaWdnZXJlZCBieSBga3ZtX2FyY2hfdmNwdV9sb2FkYCwgc28gSSYjMzk7bSBleGNsdWRpbmcgdGhlIGBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZGAgYW5kIGBpbnRlbF9tZWRpYXRlZF9wbXVfcHV0YCBmdW5jdGlvbnMgdG8gYXZvaWQgZ2V0dGluZyBib2dnZWQgZG93biBpbiB0aGUgbm9pc2UuCgpGaXJzdCwgSSBsb29rZWQgYXQgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgIG9ubHkgcnVucyBvbmNlIGF0IGJvb3QgYW5kLCBzaW1pbGFybHksIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCBhbHNvIHJ1bnMganVzdCBvbmNlIHBlciBib290LiBUaGVuLCBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgIGlzIHRyaWdnZXJlZCB3aGVuZXZlciBNU1IgaW50ZXJjZXB0IHVwZGF0ZXMgb2NjdXIuIGBpbnRlbF9wbXVfcmVmcmVzaGAgaXMgY2FsbGVkIHdoZW5ldmVyIENQVUlEIGluZm9ybWF0aW9uIGlzIHJlZnJlc2hlZCwgYW5kIGBpbnRlbF9wbXVfcmVzZXRgIGR1cmluZyB2Q1BVIHJlc2V0cy4gRmluYWxseSwgSSBub3RpY2VkIHRoZSBgaW50ZWxfcG11X2dldF9tc3JgIGFuZCBgaW50ZWxfcG11X3NldF9tc3JgIGZ1bmN0aW9ucywgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGNhbGxlZCBkdXJpbmcgUkRNU1IvV1JNU1IgaW5zdHJ1Y3Rpb25zLgoKQmFzZWQgb24gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBgaW50ZWxfcG11X3JlZnJlc2hgLCBgaW50ZWxfcG11X3Jlc2V0YCwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCwgYW5kIGBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBmcmVxdWVudGx5IGNhbGxlZC4KCk5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgZnVuZGFtZW50YWwsIHJpZ2h0PyBgUEVSRl9FVkVOVFNgIGlzIHR5cGljYWxseSBlbmFibGVkLCB3aGljaCBtZWFucyBpdCBzaG91bGRuJiMzOTt0IGJlIGFuIGlzc3VlLiBCdXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEtWTSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIEludGVsJiMzOTtzIGFyY2hpdGVjdHVyZSBhbmQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0cyAoUE1VcykuIFRoZSBmaWxlcyBsaXN0ZWQg4oCTIGBhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jYCwgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLCBgYXJjaC94ODYva3ZtL3BtdS5jYCwgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIOKAkyBhbGwgcG9pbnQgZGlyZWN0bHkgdG8gS1ZNJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIHBhcnRpY3VsYXJseSB0aGUgVk1YIChWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucykgZmVhdHVyZXMgb24gSW50ZWwgcHJvY2Vzc29ycy4KCkdpdmVuIHRoZSBmaWxlIG5hbWVzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBsaWtlbHkgZGljdGF0ZSB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuIGNvbXBpbGVkIGFuZCBpbmNsdWRlZC4gQnV0LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGVyZSBtaWdodCBiZSBzb21lIHNlY29uZGFyeSwgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9ucyB0aGF0IGNvbWUgaW50byBwbGF5LCBwb3RlbnRpYWxseSBlbmFibGluZyBvciBkaXNhYmxpbmcgc3BlY2lmaWMgYXNwZWN0cyBvZiBQTVUgdmlydHVhbGl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIG9yIHRoZSBjb2RlIGl0c2VsZiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgUE1VIGhhbmRsaW5nLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcuKlBNVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwODYKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogNTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gUE1VIEVtdWxhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNwZWNpZmljIEtWTSBjb25maWd1cmF0aW9ucyBleHBsaWNpdGx5IG1lbnRpb25lZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgZm9jdXMgaGFzIGJlZW4gb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBjaGFuZ2VzIHdpdGhpbiB0aGUgUE1VIGVtdWxhdGlvbi4gSSBzdGFydGVkIGJ5IHJldmlld2luZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkOiBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBgaW50ZWxfcG11X3JlZnJlc2hgLCBgaW50ZWxfcG11X3Jlc2V0YCwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCwgYW5kIGBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYC4gVGhlc2Ugc2VlbWVkIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBhbmQgbWFuYWdlbWVudCBmdW5jdGlvbnMgZm9yIHRoZSBndWVzdCYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBlbXVsYXRlZCBQTVUuCgpUaGVuLCBJIGV4cGFuZGVkIG15IHNjb3BlIHRvIGluY2x1ZGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoZSBQTVUgYmVoYXZpb3IsIGFkZGluZyBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgIGFuZCBgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllc2AgdG8gbXkgbWVudGFsIGxpc3QuIEkgbm90aWNlZCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBrdm1fcHJvYmVfbXNyX3RvX3NhdmVgIGFuZCBga3ZtX2luaXRfbXNyX2xpc3RzYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgd2hpY2ggY29uZmlybXMgdGhlIGluaXRpYWxpemF0aW9uIGFzcGVjdC4KCkkmIzM5O3ZlIGNsYXJpZmllZCB0aGUgcm9sZXMgb2YgZWFjaCBmdW5jdGlvbjogYGludGVsX3BtdV9nZXRfbXNyYCBhbmQgYGludGVsX3BtdV9zZXRfbXNyYCBoYW5kbGUgdGhlIGRpcmVjdCBNU1IgYWNjZXNzZXMgZnJvbSB0aGUgZ3Vlc3QuIGBpbnRlbF9wbXVfcmVmcmVzaGAgaXMga2V5IGR1cmluZyBDUFVJRCB1cGRhdGVzLCBhbmQgYGludGVsX3BtdV9yZXNldGAgZHVyaW5nIHZDUFUgcmVzZXRzLiBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgIG1hbmFnZXMgdGhlIE1TUiBpbnRlcmNlcHRpb24gbG9naWMsIGFuZCBgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbGAgZGVhbHMgd2l0aCBmaXhlZCBjb3VudGVyIGV2ZW50IHNlbGVjdG9ycy4KClNvLCB0byByZWNhcCwgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGFyZTogYGludGVsX3BtdV9nZXRfbXNyYCwgYGludGVsX3BtdV9zZXRfbXNyYCwgYGludGVsX3BtdV9yZWZyZXNoYCwgYGludGVsX3BtdV9yZXNldGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYCwgYGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5YCwgYW5kIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYC4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGVtdWxhdGlvbiBzdXBwb3J0IGZvciBgTVNSX1BFUkZfTUVUUklDU2AgYW5kIGZpeGVkIGNvdW50ZXIgMyAoYFRPUERPV04uU0xPVFNgKSBpbiBJbnRlbCBLVk0uIFRoaXMgaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byBNU1IgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIEdpdmVuIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBndWVzdCBSRE1TUi9XUk1TUiBhbmQgQ1BVSUQgaW5zdHJ1Y3Rpb25zLCBmdXp6aW5nIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgZW11bGF0aW9uIGlzIGNvcnJlY3QsIGF2b2lkaW5nIGhvc3QgY3Jhc2hlcyBhbmQgZGF0YSBjb3JydXB0aW9uLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZSBjb2RlLCBJIGV4cGVjdCB0aGUgS1ZNIGFuZCBLVk1fSU5URUwgY29uZmlndXJhdGlvbnMgdG8gYmUgcmVsZXZhbnQuCgpOb3csIGxldCYjMzk7cyBwcm9jZWVkIHdpdGggdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW50ZWxfcG11X2dldF9tc3ImIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3NldF9tc3ImIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3JlZnJlc2gmIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3Jlc2V0JiMzNDssCiAgICAmIzM0O3ZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzJiMzNDssCiAgICAmIzM0O2ludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWwmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfcG11X2NhcGFiaWxpdHkmIzM0OywKICAgICYjMzQ7dm14X2dldF9wZXJmX2NhcGFiaWxpdGllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIE1TUl9QRVJGX01FVFJJQ1MgYW5kIGZpeGVkIGNvdW50ZXIgMyAoVE9QRE9XTi5TTE9UUykgdG8gS1ZNJiMzOTtzIEludGVsIFBNVSBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIE1TUiByZWFkL3dyaXRlIGhhbmRsZXJzLCBDUFVJRCBldmFsdWF0aW9uLCBhbmQgUE1VIGluaXRpYWxpemF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdmlhIFJETVNSL1dSTVNSIGFuZCBDUFVJRCBpbnN0cnVjdGlvbnMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGVtdWxhdGlvbiBhbmQgYXZvaWQgaG9zdCBjcmFzaGVzIG9yIHN0YXRlIGNvcnJ1cHRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbnRlbF9wbXVfZ2V0X21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfc2V0X21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfcmVzZXQmIzM0OywKICAgICYjMzQ7dm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMmIzM0OywKICAgICYjMzQ7aW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9wbXVfY2FwYWJpbGl0eSYjMzQ7LAogICAgJiMzNDt2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTVNSX1BFUkZfTUVUUklDUyBhbmQgZml4ZWQgY291bnRlciAzIChUT1BET1dOLlNMT1RTKSB0byBLVk0mIzM5O3MgSW50ZWwgUE1VIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgTVNSIHJlYWQvd3JpdGUgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB2aWEgUkRNU1IvV1JNU1IgYW5kIENQVUlEIGluc3RydWN0aW9ucywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgZW11bGF0aW9uIGFuZCBhdm9pZCBob3N0IGNyYXNoZXMgb3Igc3RhdGUgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjAwLjUxOTM1NjIxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MjUyMzM2OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW50ZWxfcG11X2dldF9tc3JcIixcbiAgICBcImludGVsX3BtdV9zZXRfbXNyXCIsXG4gICAgXCJpbnRlbF9wbXVfcmVmcmVzaFwiLFxuICAgIFwiaW50ZWxfcG11X3Jlc2V0XCIsXG4gICAgXCJ2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c1wiLFxuICAgIFwiaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbFwiLFxuICAgIFwia3ZtX2luaXRfcG11X2NhcGFiaWxpdHlcIixcbiAgICBcInZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIE1TUl9QRVJGX01FVFJJQ1MgYW5kIGZpeGVkIGNvdW50ZXIgMyAoVE9QRE9XTi5TTE9UUykgdG8gS1ZNJ3MgSW50ZWwgUE1VIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgTVNSIHJlYWQvd3JpdGUgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB2aWEgUkRNU1IvV1JNU1IgYW5kIENQVUlEIGluc3RydWN0aW9ucywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgZW11bGF0aW9uIGFuZCBhdm9pZCBob3N0IGNyYXNoZXMgb3Igc3RhdGUgY29ycnVwdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MDAuNTE5MzYxOTc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxOTYzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMTIxYjg4YTU4YTc0NDRhZWViNTRlZmFkY2U3Njc1Yzg5MWU3ZDM5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDIzIDA0OjQ3OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggZWVlNDczNzE3YzBlNWEuLjRmNTQ5ZWYwMTJkMjA0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTU3NCw3ICs1NzQsNyBAQCBzdHJ1Y3Qga3ZtX3BtYyB7XFxuICNkZWZpbmUgS1ZNX01BWF9OUl9HUF9DT1VOVEVSU1xcdFxcdEtWTV9NQVgoS1ZNX01BWF9OUl9JTlRFTF9HUF9DT1VOVEVSUywgXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRLVk1fTUFYX05SX0FNRF9HUF9DT1VOVEVSUylcXG4gXFxuLSNkZWZpbmUgS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSU1xcdDNcXG4rI2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTXFx0NFxcbiAjZGVmaW5lIEtWTV9NQVhfTlJfQU1EX0ZJWEVEX0NPVU5URVJTXFx0MFxcbiAjZGVmaW5lIEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlNcXHRLVk1fTUFYKEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlMsIFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0S1ZNX01BWF9OUl9BTURfRklYRURfQ09VTlRFUlMpXFxuQEAgLTU5NCw2ICs1OTQsNyBAQCBzdHJ1Y3Qga3ZtX3BtdSB7XFxuIFxcdHU2NCBnbG9iYWxfc3RhdHVzX3JzdmQ7XFxuIFxcdHU2NCByZXNlcnZlZF9iaXRzO1xcbiBcXHR1NjQgcmF3X2V2ZW50X21hc2s7XFxuK1xcdHU2NCBwZXJmX21ldHJpY3M7XFxuIFxcdHN0cnVjdCBrdm1fcG1jIGdwX2NvdW50ZXJzW0tWTV9NQVhfTlJfR1BfQ09VTlRFUlNdO1xcbiBcXHRzdHJ1Y3Qga3ZtX3BtYyBmaXhlZF9jb3VudGVyc1tLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTXTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG5pbmRleCAxOGM0YmU3NWU5MjcxOS4uZmRjYWViNmM4MzUyYWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbkBAIC0zMzEsNiArMzMxLDcgQEBcXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0ZPUk1BVFxcdFxcdDB4ZjAwXFxuICNkZWZpbmUgUEVSRl9DQVBfRldfV1JJVEVTXFx0XFx0QklUX1VMTCgxMylcXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FXFx0XFx0QklUX1VMTCgxNClcXG4rI2RlZmluZSBQRVJGX0NBUF9QRVJGX01FVFJJQ1NcXHRcXHRCSVRfVUxMKDE1KVxcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfVElNSU5HX0lORk9cXHRCSVRfVUxMKDE3KVxcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfTUFTS1xcdFxcdChQRVJGX0NBUF9QRUJTX1RSQVAgfCBQRVJGX0NBUF9BUkNIX1JFRyB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IFBFUkZfQ0FQX1BFQlNfRk9STUFUIHwgUEVSRl9DQVBfUEVCU19CQVNFTElORSB8IFxcXFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXFxuaW5kZXggMWViMTM2NzNlODg5ZjkuLmJjMmUxY2JjZDliOTdlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxcbkBAIC00NDcsNiArNDQ3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3RvcGRvd25faWR4KGludCBpZHgpXFxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19BUkNIX1BFQlNfVEhSRVNIT0xEX0JJVFxcdDU0XFxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19BUkNIX1BFQlNfVEhSRVNIT0xEXFx0QklUX1VMTChHTE9CQUxfU1RBVFVTX0FSQ0hfUEVCU19USFJFU0hPTERfQklUKVxcbiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRl9CSVRcXHQ0OFxcbisjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRlxcdFxcdEJJVF9VTEwoR0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGX0JJVClcXG4gXFxuICNkZWZpbmUgR0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTXFx0XFx0QklUX1VMTCg0OClcXG4gLypcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jXFxuaW5kZXggYjkyZGQyZTU4MzM1NjcuLjBmYWY1ODA3ODJkNWFlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9wbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9wbXUuY1xcbkBAIC0xMjIsNiArMTIyLDggQEAgdm9pZCBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eShzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHMpXFxuIHtcXG4gXFx0Ym9vbCBpc19pbnRlbCA9IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMO1xcbiBcXHRpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLVxcdTAwM2VNSU5fTlJfR1BfQ09VTlRFUlM7XFxuK1xcdHVuaW9uIGNwdWlkMTBfZWR4IGVkeDtcXG4rXFx0dTMyIGVheCwgZWJ4LCBlY3g7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBIeWJyaWQgUE1VcyBkb24ndCBwbGF5IG5pY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiB3aXRob3V0IGNhcmVmdWxcXG5AQCAtMTY5LDYgKzE3MSwyMiBAQCB2b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcXG4gXFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEludGVsIHBsYXRmb3JtcyBtYXkgc3VwcG9ydCBub24tY29udGlndW91cyBmaXhlZCBjb3VudGVycywgZS5nLiwgc29tZVxcbitcXHQgKiBFLWNvcmUgYmFzZWQgc2VydmVyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50IGZpeGVkIGNvdW50ZXIgMy5cXG4rXFx0ICpcXG4rXFx0ICogQmVmb3JlIEtWTSBzdXBwb3J0cyBub24tY29udGlndW91cyBmaXhlZCBjb3VudGVycywgbWFrZSBzdXJlIG9ubHlcXG4rXFx0ICogY29udGlndW91cyBvbmVzIGFyZSByZXRhaW5lZCBpbiBrdm1fcG11X2NhcC5cXG4rXFx0ICovXFxuK1xcdGlmIChrdm1faG9zdF9wbXUudmVyc2lvbiBcXHUwMDNlPSA1KSB7XFxuK1xcdFxcdGNwdWlkKDEwLCBcXHUwMDI2ZWF4LCBcXHUwMDI2ZWJ4LCBcXHUwMDI2ZWN4LCBcXHUwMDI2ZWR4LmZ1bGwpO1xcbitcXHRcXHRpZiAoa3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkIFxcdTAwM2UgZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZClcXG4rXFx0XFx0XFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11IFxcdTAwMjZcXHUwMDI2IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCBcXHUwMDNlIDMpXFxuK1xcdFxcdGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IDM7XFxuK1xcbiBcXHRrdm1fcG11X2V2ZW50c2VsLklOU1RSVUNUSU9OU19SRVRJUkVEID1cXG4gXFx0XFx0cGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKTtcXG4gXFx0a3ZtX3BtdV9ldmVudHNlbC5CUkFOQ0hfSU5TVFJVQ1RJT05TX1JFVElSRUQgPVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xcbmluZGV4IGE3M2E5NTE1ZDk2Y2Q1Li4yYzMzNjdmNWUyZGZiOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xcbkBAIC0xODgsNiArMTg4LDggQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcXG4gXFx0c3dpdGNoIChtc3IpIHtcXG4gXFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpO1xcbitcXHRjYXNlIE1TUl9QRVJGX01FVFJJQ1M6XFxuK1xcdFxcdHJldHVybiB2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7XFxuIFxcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XFxuIFxcdFxcdHJldCA9IHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpIFxcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQ7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0zNDUsNiArMzQ3LDExIEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiBcXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XFxuIFxcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gcG11LVxcdTAwM2VmaXhlZF9jdHJfY3RybDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTVNSX1BFUkZfTUVUUklDUzpcXG4rXFx0XFx0aWYgKCFtc3JfaW5mby1cXHUwMDNlaG9zdF9pbml0aWF0ZWQpXFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRtc3JfaW5mby1cXHUwMDNlZGF0YSA9IHBtdS1cXHUwMDNlcGVyZl9tZXRyaWNzO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcXG4gXFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSBwbXUtXFx1MDAzZXBlYnNfZW5hYmxlO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMzk0LDYgKzQwMSwxNiBAQCBzdGF0aWMgaW50IGludGVsX3BtdV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4gXFx0XFx0aWYgKHBtdS1cXHUwMDNlZml4ZWRfY3RyX2N0cmwgIT0gZGF0YSlcXG4gXFx0XFx0XFx0cmVwcm9ncmFtX2ZpeGVkX2NvdW50ZXJzKHBtdSwgZGF0YSk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1TUl9QRVJGX01FVFJJQ1M6XFxuK1xcdFxcdGlmICghbXNyX2luZm8tXFx1MDAzZWhvc3RfaW5pdGlhdGVkKVxcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIElmIFRNQSBsZXZlbCAyIGlzIG5vdCBzdXBwb3J0ZWQsIGJpdHMgWzYzOjMyXSBhcmUgcmVzZXJ2ZWRcXG4rXFx0XFx0ICogYW5kIGlnbm9yZWQgb24gd3JpdGUsIHNvIG5vIHZhbGlkYXRpb24gaXMgbmVlZGVkIGhlcmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwbXUtXFx1MDAzZXBlcmZfbWV0cmljcyA9IGRhdGE7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxcbiBcXHRcXHRpZiAoZGF0YSBcXHUwMDI2IHBtdS1cXHUwMDNlcGVic19lbmFibGVfcnN2ZClcXG4gXFx0XFx0XFx0cmV0dXJuIDE7XFxuQEAgLTQ2NCwyOCArNDgxLDMwIEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiAgKiBkaWZmZXJlbnQgcGVyZl9ldmVudCBpcyBhbHJlYWR5IHV0aWxpemluZyB0aGUgcmVxdWVzdGVkIGNvdW50ZXIsIGJ1dCB0aGUgZW5kXFxuICAqIHJlc3VsdCBpcyB0aGUgc2FtZSAoaWdub3JpbmcgdGhlIGZhY3QgdGhhdCB1c2luZyBhIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyXFxuICAqIHdpbGwgbGlrZWx5IGV4YWNlcmJhdGUgY291bnRlciBjb250ZW50aW9uKS5cXG4tICpcXG4tICogRm9yY2libHkgaW5saW5lZCB0byBhbGxvdyBhc3NlcnRpbmcgb24gQGluZGV4IGF0IGJ1aWxkIHRpbWUsIGFuZCB0aGVyZSBzaG91bGRcXG4tICogbmV2ZXIgYmUgbW9yZSB0aGFuIG9uZSB1c2VyLlxcbiAgKi9cXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXFxuK3N0YXRpYyB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXFxuIHtcXG4gXFx0Y29uc3QgZW51bSBwZXJmX2h3X2lkIGZpeGVkX3BtY19wZXJmX2lkc1tdID0ge1xcbiBcXHRcXHRbMF0gPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcXG4gXFx0XFx0WzFdID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxcbiBcXHRcXHRbMl0gPSBQRVJGX0NPVU5UX0hXX1JFRl9DUFVfQ1lDTEVTLFxcbiBcXHR9O1xcbi1cXHR1NjQgZXZlbnRzZWw7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmaXhlZF9wbWNfcGVyZl9pZHMpICE9IEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlMpO1xcbi1cXHRCVUlMRF9CVUdfT04oaW5kZXggXFx1MDAzZT0gS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUyk7XFxuK1xcdHU2NCBldmVudHNlbCA9IDA7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBZZWxsIGlmIHBlcmYgcmVwb3J0cyBzdXBwb3J0IGZvciBhIGZpeGVkIGNvdW50ZXIgYnV0IHBlcmYgZG9lc24ndFxcbi1cXHQgKiBoYXZlIGEga25vd24gZW5jb2RpbmcgZm9yIHRoZSBhc3NvY2lhdGVkIGdlbmVyYWwgcHVycG9zZSBldmVudC5cXG4rXFx0ICogRml4ZWQgY291bnRlcnMgMyBhbmQgYWJvdmUgZG9uJ3QgaGF2ZSBjb3JyZXNwb25kaW5nIGdlbmVyaWMgaGFyZHdhcmVcXG4rXFx0ICogcGVyZiBldmVudCwgYW5kIEtWTSBkb2VzIG5vdCBpbnRlbmQgdG8gZW11bGF0ZSB0aGVtIG9uIG5vbi1tZWRpYXRlZFxcbitcXHQgKiB2UE1VLlxcbiBcXHQgKi9cXG4tXFx0ZXZlbnRzZWwgPSBwZXJmX2dldF9od19ldmVudF9jb25maWcoZml4ZWRfcG1jX3BlcmZfaWRzW2luZGV4XSk7XFxuLVxcdFdBUk5fT05fT05DRSghZXZlbnRzZWwgXFx1MDAyNlxcdTAwMjYgaW5kZXggXFx1MDAzYyBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQpO1xcbitcXHRpZiAoaW5kZXggXFx1MDAzYyBBUlJBWV9TSVpFKGZpeGVkX3BtY19wZXJmX2lkcykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogWWVsbCBpZiBwZXJmIHJlcG9ydHMgc3VwcG9ydCBmb3IgYSBmaXhlZCBjb3VudGVyIGJ1dCBwZXJmXFxuK1xcdFxcdCAqIGRvZXNuJ3QgaGF2ZSBhIGtub3duIGVuY29kaW5nIGZvciB0aGUgYXNzb2NpYXRlZCBnZW5lcmFsXFxuK1xcdFxcdCAqIHB1cnBvc2UgZXZlbnQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRldmVudHNlbCA9IHBlcmZfZ2V0X2h3X2V2ZW50X2NvbmZpZyhmaXhlZF9wbWNfcGVyZl9pZHNbaW5kZXhdKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKCFldmVudHNlbCBcXHUwMDI2XFx1MDAyNiBpbmRleCBcXHUwMDNjIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIGV2ZW50c2VsO1xcbiB9XFxuIFxcbkBAIC01ODcsNiArNjA2LDExIEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZWZyZXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0cG11LVxcdTAwM2VnbG9iYWxfc3RhdHVzX3JzdmQgXFx1MDAyNj1cXG4gXFx0XFx0XFx0XFx0fk1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMX1RSQUNFX1RPUEFfUE1JO1xcbiBcXG4rXFx0aWYgKHBlcmZfY2FwYWJpbGl0aWVzIFxcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTKSB7XFxuK1xcdFxcdHBtdS1cXHUwMDNlZ2xvYmFsX2N0cmxfcnN2ZCBcXHUwMDI2PSB+R0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTO1xcbitcXHRcXHRwbXUtXFx1MDAzZWdsb2JhbF9zdGF0dXNfcnN2ZCBcXHUwMDI2PSB+R0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocGVyZl9jYXBhYmlsaXRpZXMgXFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVCkge1xcbiBcXHRcXHRpZiAocGVyZl9jYXBhYmlsaXRpZXMgXFx1MDAyNiBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FKSB7XFxuIFxcdFxcdFxcdHBtdS1cXHUwMDNlcGVic19lbmFibGVfcnN2ZCA9IGNvdW50ZXJfcnN2ZDtcXG5AQCAtNjMwLDYgKzY1NCw5IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4rXFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xcbitcXG4rXFx0cG11LVxcdTAwM2VwZXJmX21ldHJpY3MgPSAwO1xcbiBcXHRpbnRlbF9wbXVfcmVsZWFzZV9ndWVzdF9sYnJfZXZlbnQodmNwdSk7XFxuIH1cXG4gXFxuQEAgLTgwMSw2ICs4MjgsMTMgQEAgc3RhdGljIHZvaWQgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIFxcdHU2NCBnbG9iYWxfc3RhdHVzLCB0b2dnbGU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQRVJGX01FVFJJQ1MgTVNSIG11c3QgYmUgcmVzdG9yZWQgY2xvc2VseSBhZnRlciBmaXhlZCBjb3VudGVyIDMsXFxuK1xcdCAqIHdoaWNoIHdhcyBqdXN0IHJlc3RvcmVkIGJ5IGt2bV9wbXVfbG9hZF9ndWVzdF9wbWNzKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAodmNwdV9oYXNfcGVyZl9tZXRyaWNzKHZjcHUpKVxcbitcXHRcXHR3cm1zcnEoTVNSX1BFUkZfTUVUUklDUywgcG11LVxcdTAwM2VwZXJmX21ldHJpY3MpO1xcbitcXG4gXFx0cmRtc3JxKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgZ2xvYmFsX3N0YXR1cyk7XFxuIFxcdHRvZ2dsZSA9IHBtdS1cXHUwMDNlZ2xvYmFsX3N0YXR1cyBeIGdsb2JhbF9zdGF0dXM7XFxuIFxcdGlmIChnbG9iYWxfc3RhdHVzIFxcdTAwMjYgdG9nZ2xlKVxcbkBAIC04MjksNiArODYzLDEyIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgKi9cXG4gXFx0aWYgKHBtdS1cXHUwMDNlZml4ZWRfY3RyX2N0cmxfaHcpXFxuIFxcdFxcdHdybXNycShNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLCAwKTtcXG4rXFxuK1xcdGlmICh2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSkpIHtcXG4rXFx0XFx0cG11LVxcdTAwM2VwZXJmX21ldHJpY3MgPSByZHBtYyhJTlRFTF9QTUNfRklYRURfUkRQTUNfTUVUUklDUyk7XFxuK1xcdFxcdGlmIChwbXUtXFx1MDAzZXBlcmZfbWV0cmljcylcXG4rXFx0XFx0XFx0d3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIDApO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0cnVjdCBrdm1fcG11X29wcyBpbnRlbF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmggYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXFxuaW5kZXggNWQ5MzU3NjQwYWExODAuLjU3NzA1NzczZGM0OWI0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXFxuQEAgLTQwLDQgKzQwLDkgQEAgc3RydWN0IGxicl9kZXNjIHtcXG4gXFxuIGV4dGVybiBzdHJ1Y3QgeDg2X3BtdV9sYnIgdm14X2xicl9jYXBzO1xcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHZjcHVfaGFzX3BlcmZfbWV0cmljcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpIFxcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTO1xcbit9XFxuK1xcbiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9QTVVfSU5URUxfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbmluZGV4IGExYTVlZGIzOWE3ZWRkLi41ODRkOTllZjYwMjZlYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC00MjYwLDYgKzQyNjAsMTAgQEAgc3RhdGljIHZvaWQgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRcXHRcXHQgIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xcbiBcXHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLFxcbiBcXHRcXHRcXHRcXHQgIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xcbitcXG4rXFx0aW50ZXJjZXB0ID0gIWhhc19tZWRpYXRlZF9wbXUgfHwgIXZjcHVfaGFzX3BlcmZfbWV0cmljcyh2Y3B1KTtcXG4rXFx0dm14X3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfUEVSRl9NRVRSSUNTLFxcbitcXHRcXHRcXHRcXHQgIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2bXhfcmVjYWxjX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtODA4NCw2ICs4MDg4LDkgQEAgc3RhdGljIF9faW5pdCB1NjQgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2b2lkKVxcbiBcXHRcXHRwZXJmX2NhcCBcXHUwMDI2PSB+UEVSRl9DQVBfUEVCU19CQVNFTElORTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGVuYWJsZV9tZWRpYXRlZF9wbXUpXFxuK1xcdFxcdHBlcmZfY2FwIHw9IGhvc3RfcGVyZl9jYXAgXFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1M7XFxuK1xcbiBcXHRyZXR1cm4gcGVyZl9jYXA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IGQ5ZDUxODAzYjdiMjA5Li45NjIzZjU1OGYzNTlkZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMzUwLDkgKzM1MCw5IEBAIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHtcXG4gXFxuIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX3BtdVtdID0ge1xcbiBcXHRNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAsIE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMSxcXG4tXFx0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICsgMixcXG4rXFx0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIyLCBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjMsXFxuIFxcdE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUyxcXG4tXFx0TVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCxcXG4rXFx0TVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX1BFUkZfTUVUUklDUyxcXG4gXFx0TVNSX0lBMzJfUEVCU19FTkFCTEUsIE1TUl9JQTMyX0RTX0FSRUEsIE1TUl9QRUJTX0RBVEFfQ0ZHLFxcbiBcXG4gXFx0LyogVGhpcyBwYXJ0IG9mIE1TUnMgc2hvdWxkIG1hdGNoIEtWTV9NQVhfTlJfSU5URUxfR1BfQ09VTlRFUlMuICovXFxuQEAgLTc2NzksNiArNzY3OSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcHJvYmVfbXNyX3RvX3NhdmUodTMyIG1zcl9pbmRleClcXG4gXFx0XFx0ICAgICBpbnRlbF9wdF92YWxpZGF0ZV9od19jYXAoUFRfQ0FQX251bV9hZGRyZXNzX3JhbmdlcykgKiAyKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxcbitcXHRcXHRpZiAoIShrdm1fY2Fwcy5zdXBwb3J0ZWRfcGVyZl9jYXAgXFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgLi4uXFxuIFxcdCAgICAgTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCArIEtWTV9NQVhfTlJfR1BfQ09VTlRFUlMgLSAxOlxcbiBcXHRcXHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCBcXHUwMDNlPVxcbkBAIC03NzQyLDcgKzc3NDYsNyBAQCBzdGF0aWMgdm9pZCBrdm1faW5pdF9tc3JfbGlzdHModm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBpO1xcbiBcXG4tXFx0QlVJTERfQlVHX09OX01TRyhLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTICE9IDMsXFxuK1xcdEJVSUxEX0JVR19PTl9NU0coS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyAhPSA0LFxcbiBcXHRcXHRcXHQgXFxcIlBsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXFxcIik7XFxuIFxcbiBcXHRudW1fbXNyc190b19zYXZlID0gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbmluZGV4IGVmZjI5NjQ1NzE5YmM3Li5lNzc0NWUyY2Q1NDNhOSAxMDA2NDRcXG4tLS0gYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbisrKyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXFxuQEAgLTMzMSw2ICszMzEsNyBAQFxcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfRk9STUFUXFx0XFx0MHhmMDBcXG4gI2RlZmluZSBQRVJGX0NBUF9GV19XUklURVNcXHRcXHRCSVRfVUxMKDEzKVxcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkVcXHRcXHRCSVRfVUxMKDE0KVxcbisjZGVmaW5lIFBFUkZfQ0FQX1BFUkZfTUVUUklDU1xcdFxcdEJJVF9VTEwoMTUpXFxuICNkZWZpbmUgUEVSRl9DQVBfUEVCU19USU1JTkdfSU5GT1xcdEJJVF9VTEwoMTcpXFxuICNkZWZpbmUgUEVSRl9DQVBfUEVCU19NQVNLXFx0XFx0KFBFUkZfQ0FQX1BFQlNfVFJBUCB8IFBFUkZfQ0FQX0FSQ0hfUkVHIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHQgUEVSRl9DQVBfUEVCU19GT1JNQVQgfCBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FIHwgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmhcXG5pbmRleCA2MDhlZDgzZDdjNmE2OS4uNmMxOTUwM2UwYmI3ZGQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oXFxuQEAgLTUyLDYgKzUyLDkgQEBcXG4gLyogRml4ZWQgUE1DIGNvbnRyb2xzLCBJbnRlbCBvbmx5LiAqL1xcbiAjZGVmaW5lIEZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoX2lkeClcXHRCSVRfVUxMKCgzMiArIChfaWR4KSkpXFxuIFxcbisvKiBQRVJGX01FVFJJQ1MgZW5hYmxlLCBJbnRlbCBvbmx5LiAqL1xcbisjZGVmaW5lIFBFUkZfTUVUUklDU19HTE9CQUxfQ1RSTF9FTkFCTEVcXHRcXHRCSVRfVUxMKDQ4KVxcbitcXG4gI2RlZmluZSBGSVhFRF9QTUNfS0VSTkVMXFx0XFx0XFx0QklUX1VMTCgwKVxcbiAjZGVmaW5lIEZJWEVEX1BNQ19VU0VSXFx0XFx0XFx0XFx0QklUX1VMTCgxKVxcbiAjZGVmaW5lIEZJWEVEX1BNQ19BTllUSFJFQURcXHRcXHRcXHRCSVRfVUxMKDIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbmluZGV4IGRjNmFmYWMzYWE5MTk1Li5kNDY4OGE3ZDFlNTU2OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJwbXUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInByb2Nlc3Nvci5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gXFxuIC8qIE51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wIGZvciB0aGUgZ3Vlc3QgbWVhc3VyZW1lbnQgcGF5bG9hZC4gKi9cXG4gI2RlZmluZSBOVU1fTE9PUFNcXHRcXHRcXHQxMFxcbkBAIC0yNDEsMTcgKzI0MiwyMCBAQCBkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfSB3aGlsZSAoMClcXG4gXFxuLSNkZWZpbmUgR1VFU1RfVEVTVF9FVkVOVChfaWR4LCBfcG1jLCBfcG1jX21zciwgX2N0cmxfbXNyLCBfdmFsdWUsIEZFUClcXHRcXHRcXFxcXFxuKyNkZWZpbmUgR1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUClcXHRcXHRcXHRcXHRcXFxcXFxuIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdHdybXNyKF9wbWNfbXNyLCAwKTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMVVNIT1BUKSlcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdEdVRVNUX01FQVNVUkVfRVZFTlQoX2N0cmxfbXNyLCBfdmFsdWUsIFxcXCJjbGZsdXNob3B0ICVbbV1cXFwiLCBGRVApO1xcdFxcXFxcXG4gXFx0ZWxzZSBpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxVU0gpKVxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXFxcImNsZmx1c2ggICVbbV1cXFwiLCBGRVApO1xcdFxcXFxcXG4gXFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXFxcIm5vcFxcXCIsIEZFUCk7XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbisjZGVmaW5lIEdVRVNUX1RFU1RfRVZFTlQoX2lkeCwgX3BtYywgX3BtY19tc3IsIF9jdHJsX21zciwgX3ZhbHVlLCBGRVApXFx0XFx0XFxcXFxcbitkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3cm1zcihfcG1jX21zciwgMCk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRHVUVTVF9SVU5fUEFZTE9BRChfY3RybF9tc3IsIF92YWx1ZSwgRkVQKTtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGd1ZXN0X2Fzc2VydF9ldmVudF9jb3VudChfaWR4LCBfcG1jLCBfcG1jX21zcik7XFx0XFx0XFx0XFx0XFxcXFxcbiB9IHdoaWxlICgwKVxcbiBcXG5AQCAtMzE4LDYgKzMyMiw1NiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxcbiBcXHRcXHRcXHRcXHRGSVhFRF9QTUNfR0xPQkFMX0NUUkxfRU5BQkxFKGkpKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wZXJmX21ldHJpY3Modm9pZClcXG4re1xcbitcXHRpbnQgcmV0aXJpbmcsIGJhZF9zcGVjLCBmZV9ib3VuZCwgYmVfYm91bmQsIHN1bTtcXG4rXFx0dTY0IGdsb2JhbF9jdHJsLCBtZXRyaWNzO1xcbitcXG4rXFx0aWYgKChndWVzdF9nZXRfcG11X3ZlcnNpb24oKSBcXHUwMDNjIDIpIHx8XFx0LyogRG9lcyBndWVzdCBoYXZlIEdMT0JBTF9DVFJMPyAqL1xcbitcXHQgICAgIXRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9QRENNKSB8fFxcbitcXHQgICAgIShyZG1zcihNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUykgXFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCAwKTtcXG4rXFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIzLCAwKTtcXG4rXFx0d3Jtc3IoTVNSX1BFUkZfTUVUUklDUywgMCk7XFxuK1xcbitcXHQvKiBFbmFibGUgZml4ZWQgY3RyMyAoVE9QRE9XTi5TTE9UUykgYW5kIFBFUkZfTUVUUklDUy4gKi9cXG4rXFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgRklYRURfUE1DX0NUUkwoMywgRklYRURfUE1DX0tFUk5FTCkpO1xcbitcXHRnbG9iYWxfY3RybCA9IEZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoMykgfFxcbitcXHRcXHQgICAgICBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFO1xcbitcXG4rXFx0R1VFU1RfUlVOX1BBWUxPQUQoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgZ2xvYmFsX2N0cmwsIFxcXCJcXFwiKTtcXG4rXFxuK1xcdC8qIENoZWNrIHRlc3QgcmVzdWx0cy4gKi9cXG4rXFx0bWV0cmljcyA9IHJkbXNyKE1TUl9QRVJGX01FVFJJQ1MpO1xcbitcXHRyZXRpcmluZyA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCg3LCAwKSwgbWV0cmljcyk7XFxuK1xcdGJhZF9zcGVjID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDE1LCA4KSwgbWV0cmljcyk7XFxuK1xcdGZlX2JvdW5kID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDIzLCAxNiksIG1ldHJpY3MpO1xcbitcXHRiZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgzMSwgMjQpLCBtZXRyaWNzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJlIGNvbnNlcnZhdGl2ZTogdGhlIG1lYXN1cmVkIHBheWxvYWQgZGVmaW5pdGVseSByZXRpcmVzIHdvcmssIHNvXFxuK1xcdCAqIFJldGlyaW5nIHNob3VsZCBiZSBub24temVyby5cXG4rXFx0ICovXFxuK1xcdEdVRVNUX0FTU0VSVF9ORShtZXRyaWNzLCAwVUxMKTtcXG4rXFx0R1VFU1RfQVNTRVJUX05FKHJldGlyaW5nLCAwVUxMKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBzdW0gb2YgdGhlIDQgbGV2ZWwtMSB0b3Bkb3duIG1ldHJpY3Mgc2hvdWxkIGJlIGNsb3NlIHRvIDEwMCUuXFxuK1xcdCAqIDMgaXMgY2hvc2VuIGFzIGEgbG9vc2Ugc2FuaXR5IGNoZWNrLlxcbitcXHQgKi9cXG4rXFx0c3VtID0gcmV0aXJpbmcgKyBiYWRfc3BlYyArIGZlX2JvdW5kICsgYmVfYm91bmQ7XFxuK1xcdEdVRVNUX0FTU0VSVChzdW0gXFx1MDAzZT0gMHhmZCBcXHUwMDI2XFx1MDAyNiBzdW0gXFx1MDAzYz0gMHgxMDIpO1xcbitcXG4rXFx0LyogU2FuaXR5IGNoZWNrIGFmdGVyIFBFUkZfTUVUUklDUyBkaXNhYmxlZC4gKi9cXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcImxvb3AgLlxcXCIgOiBcXFwiK2NcXFwiKChpbnQpe05VTV9MT09QU30pKTtcXG4rXFx0R1VFU1RfQVNTRVJUX0VRKHJkbXNyKE1TUl9QRVJGX01FVFJJQ1MpLCBtZXRyaWNzKTtcXG4rXFx0d3Jtc3IoTVNSX1BFUkZfTUVUUklDUywgMHhkZWFkZGVhZCk7XFxuK1xcbitcXHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIDB4ZGVhZGRlYWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXFxuIHtcXG4gXFx0dTggaTtcXG5AQCAtMzI1LDYgKzM3OSw4IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0lOVEVMX0FSQ0hfRVZFTlRTOyBpKyspXFxuIFxcdFxcdGd1ZXN0X3Rlc3RfYXJjaF9ldmVudChpKTtcXG4gXFxuK1xcdGd1ZXN0X3Rlc3RfcGVyZl9tZXRyaWNzKCk7XFxuK1xcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuQEAgLTM2MSw3ICs0MTcsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuICAqIG90aGVyIHRoYW4gUE1DcyBpbiB0aGUgZnV0dXJlLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfR1BfQ09VTlRFUlNcXHQ4XFxuLSNkZWZpbmUgTUFYX05SX0ZJWEVEX0NPVU5URVJTXFx0M1xcbisjZGVmaW5lIE1BWF9OUl9GSVhFRF9DT1VOVEVSU1xcdDRcXG4gXFxuICNkZWZpbmUgR1VFU1RfQVNTRVJUX1BNQ19NU1JfQUNDRVNTKGluc24sIG1zciwgZXhwZWN0X2dwLCB2ZWN0b3IpXFx0XFx0XFxcXFxcbiBfX0dVRVNUX0FTU0VSVChleHBlY3RfZ3AgPyB2ZWN0b3IgPT0gR1BfVkVDVE9SIDogIXZlY3RvcixcXHRcXHRcXHRcXFxcXFxuQEAgLTU4NSw2ICs2NDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIFxcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcXG4gXFx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xcbiBcXHR1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTtcXG4rXFx0dTY0IGFkdmVydGlzZWRfcGVyZl9jYXBzID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUyk7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXHR1OCB2LCBqO1xcbiBcXHR1MzIgaztcXG5AQCAtNTkyLDYgKzY0OSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcXG4gXFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xcbiBcXHRcXHQwLFxcbiBcXHRcXHRQTVVfQ0FQX0ZXX1dSSVRFUyxcXG4rXFx0XFx0UEVSRl9DQVBfUEVSRl9NRVRSSUNTLFxcbiBcXHR9O1xcbiBcXG4gXFx0LypcXG5AQCAtNjQ5LDYgKzcwNywxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIFxcdFxcdFxcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXFx1MDAyNlxcdTAwMjYgcGVyZl9jYXBzW2ldKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdFxcdC8qIElnbm9yZSB1bnN1cHBvcnRlZCBmZWF0dXJlcy4gKi9cXG4rXFx0XFx0XFx0aWYgKHBlcmZfY2Fwc1tpXSBcXHUwMDI2IH5hZHZlcnRpc2VkX3BlcmZfY2FwcylcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHR2LCBwZXJmX2NhcHNbaV0pO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MDEuMDY5MjUwMzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTcwMjQzMjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImludGVsX3BtdV9nZXRfbXNyXCIsXG4gICAgXCJpbnRlbF9wbXVfc2V0X21zclwiLFxuICAgIFwiaW50ZWxfcG11X3JlZnJlc2hcIixcbiAgICBcImludGVsX3BtdV9yZXNldFwiLFxuICAgIFwidm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNcIixcbiAgICBcImludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWxcIixcbiAgICBcImt2bV9pbml0X3BtdV9jYXBhYmlsaXR5XCIsXG4gICAgXCJ2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBNU1JfUEVSRl9NRVRSSUNTIGFuZCBmaXhlZCBjb3VudGVyIDMgKFRPUERPV04uU0xPVFMpIHRvIEtWTSdzIEludGVsIFBNVSBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIE1TUiByZWFkL3dyaXRlIGhhbmRsZXJzLCBDUFVJRCBldmFsdWF0aW9uLCBhbmQgUE1VIGluaXRpYWxpemF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdmlhIFJETVNSL1dSTVNSIGFuZCBDUFVJRCBpbnN0cnVjdGlvbnMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGVtdWxhdGlvbiBhbmQgYXZvaWQgaG9zdCBjcmFzaGVzIG9yIHN0YXRlIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTEyMWI4OGE1OGE3NDQ0YWVlYjU0ZWZhZGNlNzY3NWM4OTFlN2QzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA0OjQ3OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGVlZTQ3MzcxN2MwZTVhLi40ZjU0OWVmMDEyZDIwNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC01NzQsNyArNTc0LDcgQEAgc3RydWN0IGt2bV9wbWMge1xuICNkZWZpbmUgS1ZNX01BWF9OUl9HUF9DT1VOVEVSU1x0XHRLVk1fTUFYKEtWTV9NQVhfTlJfSU5URUxfR1BfQ09VTlRFUlMsIFxcXG4gXHRcdFx0XHRcdFx0S1ZNX01BWF9OUl9BTURfR1BfQ09VTlRFUlMpXG4gXG4tI2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTXHQzXG4rI2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTXHQ0XG4gI2RlZmluZSBLVk1fTUFYX05SX0FNRF9GSVhFRF9DT1VOVEVSU1x0MFxuICNkZWZpbmUgS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSU1x0S1ZNX01BWChLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTLCBcXFxuIFx0XHRcdFx0XHRcdEtWTV9NQVhfTlJfQU1EX0ZJWEVEX0NPVU5URVJTKVxuQEAgLTU5NCw2ICs1OTQsNyBAQCBzdHJ1Y3Qga3ZtX3BtdSB7XG4gXHR1NjQgZ2xvYmFsX3N0YXR1c19yc3ZkO1xuIFx0dTY0IHJlc2VydmVkX2JpdHM7XG4gXHR1NjQgcmF3X2V2ZW50X21hc2s7XG4rXHR1NjQgcGVyZl9tZXRyaWNzO1xuIFx0c3RydWN0IGt2bV9wbWMgZ3BfY291bnRlcnNbS1ZNX01BWF9OUl9HUF9DT1VOVEVSU107XG4gXHRzdHJ1Y3Qga3ZtX3BtYyBmaXhlZF9jb3VudGVyc1tLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTXTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAxOGM0YmU3NWU5MjcxOS4uZmRjYWViNmM4MzUyYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbkBAIC0zMzEsNiArMzMxLDcgQEBcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfRk9STUFUXHRcdDB4ZjAwXG4gI2RlZmluZSBQRVJGX0NBUF9GV19XUklURVNcdFx0QklUX1VMTCgxMylcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkVcdFx0QklUX1VMTCgxNClcbisjZGVmaW5lIFBFUkZfQ0FQX1BFUkZfTUVUUklDU1x0XHRCSVRfVUxMKDE1KVxuICNkZWZpbmUgUEVSRl9DQVBfUEVCU19USU1JTkdfSU5GT1x0QklUX1VMTCgxNylcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfTUFTS1x0XHQoUEVSRl9DQVBfUEVCU19UUkFQIHwgUEVSRl9DQVBfQVJDSF9SRUcgfCBcXFxuIFx0XHRcdFx0XHQgUEVSRl9DQVBfUEVCU19GT1JNQVQgfCBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FIHwgXFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcbmluZGV4IDFlYjEzNjczZTg4OWY5Li5iYzJlMWNiY2Q5Yjk3ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXG5AQCAtNDQ3LDYgKzQ0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc190b3Bkb3duX2lkeChpbnQgaWR4KVxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19BUkNIX1BFQlNfVEhSRVNIT0xEX0JJVFx0NTRcbiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfQVJDSF9QRUJTX1RIUkVTSE9MRFx0QklUX1VMTChHTE9CQUxfU1RBVFVTX0FSQ0hfUEVCU19USFJFU0hPTERfQklUKVxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGX0JJVFx0NDhcbisjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRlx0XHRCSVRfVUxMKEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRl9CSVQpXG4gXG4gI2RlZmluZSBHTE9CQUxfQ1RSTF9FTl9QRVJGX01FVFJJQ1NcdFx0QklUX1VMTCg0OClcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wbXUuYyBiL2FyY2gveDg2L2t2bS9wbXUuY1xuaW5kZXggYjkyZGQyZTU4MzM1NjcuLjBmYWY1ODA3ODJkNWFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3BtdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vcG11LmNcbkBAIC0xMjIsNiArMTIyLDggQEAgdm9pZCBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eShzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHMpXG4ge1xuIFx0Ym9vbCBpc19pbnRlbCA9IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMO1xuIFx0aW50IG1pbl9ucl9ncF9jdHJzID0gcG11X29wcy1cdTAwM2VNSU5fTlJfR1BfQ09VTlRFUlM7XG4rXHR1bmlvbiBjcHVpZDEwX2VkeCBlZHg7XG4rXHR1MzIgZWF4LCBlYngsIGVjeDtcbiBcbiBcdC8qXG4gXHQgKiBIeWJyaWQgUE1VcyBkb24ndCBwbGF5IG5pY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiB3aXRob3V0IGNhcmVmdWxcbkBAIC0xNjksNiArMTcxLDIyIEBAIHZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKVxuIFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCxcbiBcdFx0XHRcdFx0ICAgICBLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTKTtcbiBcbitcdC8qXG4rXHQgKiBJbnRlbCBwbGF0Zm9ybXMgbWF5IHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgZml4ZWQgY291bnRlcnMsIGUuZy4sIHNvbWVcbitcdCAqIEUtY29yZSBiYXNlZCBzZXJ2ZXIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQgZml4ZWQgY291bnRlciAzLlxuK1x0ICpcbitcdCAqIEJlZm9yZSBLVk0gc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgZml4ZWQgY291bnRlcnMsIG1ha2Ugc3VyZSBvbmx5XG4rXHQgKiBjb250aWd1b3VzIG9uZXMgYXJlIHJldGFpbmVkIGluIGt2bV9wbXVfY2FwLlxuK1x0ICovXG4rXHRpZiAoa3ZtX2hvc3RfcG11LnZlcnNpb24gXHUwMDNlPSA1KSB7XG4rXHRcdGNwdWlkKDEwLCBcdTAwMjZlYXgsIFx1MDAyNmVieCwgXHUwMDI2ZWN4LCBcdTAwMjZlZHguZnVsbCk7XG4rXHRcdGlmIChrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQgXHUwMDNlIGVkeC5zcGxpdC5udW1fY291bnRlcnNfZml4ZWQpXG4rXHRcdFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZDtcbitcdH1cbitcbitcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSBcdTAwMjZcdTAwMjYga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkIFx1MDAzZSAzKVxuK1x0XHRrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQgPSAzO1xuK1xuIFx0a3ZtX3BtdV9ldmVudHNlbC5JTlNUUlVDVElPTlNfUkVUSVJFRCA9XG4gXHRcdHBlcmZfZ2V0X2h3X2V2ZW50X2NvbmZpZyhQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyk7XG4gXHRrdm1fcG11X2V2ZW50c2VsLkJSQU5DSF9JTlNUUlVDVElPTlNfUkVUSVJFRCA9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcbmluZGV4IGE3M2E5NTE1ZDk2Y2Q1Li4yYzMzNjdmNWUyZGZiOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcbkBAIC0xODgsNiArMTg4LDggQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbiBcdHN3aXRjaCAobXNyKSB7XG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7XG4rXHRjYXNlIE1TUl9QRVJGX01FVFJJQ1M6XG4rXHRcdHJldHVybiB2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7XG4gXHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxuIFx0XHRyZXQgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQ7XG4gXHRcdGJyZWFrO1xuQEAgLTM0NSw2ICszNDcsMTEgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBwbXUtXHUwMDNlZml4ZWRfY3RyX2N0cmw7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxuK1x0XHRpZiAoIW1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkKVxuK1x0XHRcdHJldHVybiAxO1xuK1x0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG11LVx1MDAzZXBlcmZfbWV0cmljcztcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxuIFx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG11LVx1MDAzZXBlYnNfZW5hYmxlO1xuIFx0XHRicmVhaztcbkBAIC0zOTQsNiArNDAxLDE2IEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIFx0XHRpZiAocG11LVx1MDAzZWZpeGVkX2N0cl9jdHJsICE9IGRhdGEpXG4gXHRcdFx0cmVwcm9ncmFtX2ZpeGVkX2NvdW50ZXJzKHBtdSwgZGF0YSk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxuK1x0XHRpZiAoIW1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkKVxuK1x0XHRcdHJldHVybiAxO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJZiBUTUEgbGV2ZWwgMiBpcyBub3Qgc3VwcG9ydGVkLCBiaXRzIFs2MzozMl0gYXJlIHJlc2VydmVkXG4rXHRcdCAqIGFuZCBpZ25vcmVkIG9uIHdyaXRlLCBzbyBubyB2YWxpZGF0aW9uIGlzIG5lZWRlZCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0cG11LVx1MDAzZXBlcmZfbWV0cmljcyA9IGRhdGE7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcbiBcdFx0aWYgKGRhdGEgXHUwMDI2IHBtdS1cdTAwM2VwZWJzX2VuYWJsZV9yc3ZkKVxuIFx0XHRcdHJldHVybiAxO1xuQEAgLTQ2NCwyOCArNDgxLDMwIEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuICAqIGRpZmZlcmVudCBwZXJmX2V2ZW50IGlzIGFscmVhZHkgdXRpbGl6aW5nIHRoZSByZXF1ZXN0ZWQgY291bnRlciwgYnV0IHRoZSBlbmRcbiAgKiByZXN1bHQgaXMgdGhlIHNhbWUgKGlnbm9yaW5nIHRoZSBmYWN0IHRoYXQgdXNpbmcgYSBnZW5lcmFsIHB1cnBvc2UgY291bnRlclxuICAqIHdpbGwgbGlrZWx5IGV4YWNlcmJhdGUgY291bnRlciBjb250ZW50aW9uKS5cbi0gKlxuLSAqIEZvcmNpYmx5IGlubGluZWQgdG8gYWxsb3cgYXNzZXJ0aW5nIG9uIEBpbmRleCBhdCBidWlsZCB0aW1lLCBhbmQgdGhlcmUgc2hvdWxkXG4tICogbmV2ZXIgYmUgbW9yZSB0aGFuIG9uZSB1c2VyLlxuICAqL1xuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IGludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWwodW5zaWduZWQgaW50IGluZGV4KVxuK3N0YXRpYyB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXG4ge1xuIFx0Y29uc3QgZW51bSBwZXJmX2h3X2lkIGZpeGVkX3BtY19wZXJmX2lkc1tdID0ge1xuIFx0XHRbMF0gPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcbiBcdFx0WzFdID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuIFx0XHRbMl0gPSBQRVJGX0NPVU5UX0hXX1JFRl9DUFVfQ1lDTEVTLFxuIFx0fTtcbi1cdHU2NCBldmVudHNlbDtcbi1cbi1cdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGZpeGVkX3BtY19wZXJmX2lkcykgIT0gS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUyk7XG4tXHRCVUlMRF9CVUdfT04oaW5kZXggXHUwMDNlPSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTKTtcbitcdHU2NCBldmVudHNlbCA9IDA7XG4gXG4gXHQvKlxuLVx0ICogWWVsbCBpZiBwZXJmIHJlcG9ydHMgc3VwcG9ydCBmb3IgYSBmaXhlZCBjb3VudGVyIGJ1dCBwZXJmIGRvZXNuJ3Rcbi1cdCAqIGhhdmUgYSBrbm93biBlbmNvZGluZyBmb3IgdGhlIGFzc29jaWF0ZWQgZ2VuZXJhbCBwdXJwb3NlIGV2ZW50LlxuK1x0ICogRml4ZWQgY291bnRlcnMgMyBhbmQgYWJvdmUgZG9uJ3QgaGF2ZSBjb3JyZXNwb25kaW5nIGdlbmVyaWMgaGFyZHdhcmVcbitcdCAqIHBlcmYgZXZlbnQsIGFuZCBLVk0gZG9lcyBub3QgaW50ZW5kIHRvIGVtdWxhdGUgdGhlbSBvbiBub24tbWVkaWF0ZWRcbitcdCAqIHZQTVUuXG4gXHQgKi9cbi1cdGV2ZW50c2VsID0gcGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKGZpeGVkX3BtY19wZXJmX2lkc1tpbmRleF0pO1xuLVx0V0FSTl9PTl9PTkNFKCFldmVudHNlbCBcdTAwMjZcdTAwMjYgaW5kZXggXHUwMDNjIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCk7XG4rXHRpZiAoaW5kZXggXHUwMDNjIEFSUkFZX1NJWkUoZml4ZWRfcG1jX3BlcmZfaWRzKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBZZWxsIGlmIHBlcmYgcmVwb3J0cyBzdXBwb3J0IGZvciBhIGZpeGVkIGNvdW50ZXIgYnV0IHBlcmZcbitcdFx0ICogZG9lc24ndCBoYXZlIGEga25vd24gZW5jb2RpbmcgZm9yIHRoZSBhc3NvY2lhdGVkIGdlbmVyYWxcbitcdFx0ICogcHVycG9zZSBldmVudC5cbitcdFx0ICovXG4rXHRcdGV2ZW50c2VsID0gcGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKGZpeGVkX3BtY19wZXJmX2lkc1tpbmRleF0pO1xuK1x0XHRXQVJOX09OX09OQ0UoIWV2ZW50c2VsIFx1MDAyNlx1MDAyNiBpbmRleCBcdTAwM2Mga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkKTtcbitcdH1cbiBcdHJldHVybiBldmVudHNlbDtcbiB9XG4gXG5AQCAtNTg3LDYgKzYwNiwxMSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfcmVmcmVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHBtdS1cdTAwM2VnbG9iYWxfc3RhdHVzX3JzdmQgXHUwMDI2PVxuIFx0XHRcdFx0fk1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMX1RSQUNFX1RPUEFfUE1JO1xuIFxuK1x0aWYgKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpIHtcbitcdFx0cG11LVx1MDAzZWdsb2JhbF9jdHJsX3JzdmQgXHUwMDI2PSB+R0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTO1xuK1x0XHRwbXUtXHUwMDNlZ2xvYmFsX3N0YXR1c19yc3ZkIFx1MDAyNj0gfkdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRjtcbitcdH1cbitcbiBcdGlmIChwZXJmX2NhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQpIHtcbiBcdFx0aWYgKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FKSB7XG4gXHRcdFx0cG11LVx1MDAzZXBlYnNfZW5hYmxlX3JzdmQgPSBjb3VudGVyX3JzdmQ7XG5AQCAtNjMwLDYgKzY1NCw5IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbitcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbitcbitcdHBtdS1cdTAwM2VwZXJmX21ldHJpY3MgPSAwO1xuIFx0aW50ZWxfcG11X3JlbGVhc2VfZ3Vlc3RfbGJyX2V2ZW50KHZjcHUpO1xuIH1cbiBcbkBAIC04MDEsNiArODI4LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiBcdHU2NCBnbG9iYWxfc3RhdHVzLCB0b2dnbGU7XG4gXG4rXHQvKlxuK1x0ICogUEVSRl9NRVRSSUNTIE1TUiBtdXN0IGJlIHJlc3RvcmVkIGNsb3NlbHkgYWZ0ZXIgZml4ZWQgY291bnRlciAzLFxuK1x0ICogd2hpY2ggd2FzIGp1c3QgcmVzdG9yZWQgYnkga3ZtX3BtdV9sb2FkX2d1ZXN0X3BtY3MoKS5cbitcdCAqL1xuK1x0aWYgKHZjcHVfaGFzX3BlcmZfbWV0cmljcyh2Y3B1KSlcbitcdFx0d3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIHBtdS1cdTAwM2VwZXJmX21ldHJpY3MpO1xuK1xuIFx0cmRtc3JxKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgZ2xvYmFsX3N0YXR1cyk7XG4gXHR0b2dnbGUgPSBwbXUtXHUwMDNlZ2xvYmFsX3N0YXR1cyBeIGdsb2JhbF9zdGF0dXM7XG4gXHRpZiAoZ2xvYmFsX3N0YXR1cyBcdTAwMjYgdG9nZ2xlKVxuQEAgLTgyOSw2ICs4NjMsMTIgQEAgc3RhdGljIHZvaWQgaW50ZWxfbWVkaWF0ZWRfcG11X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKi9cbiBcdGlmIChwbXUtXHUwMDNlZml4ZWRfY3RyX2N0cmxfaHcpXG4gXHRcdHdybXNycShNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLCAwKTtcbitcbitcdGlmICh2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSkpIHtcbitcdFx0cG11LVx1MDAzZXBlcmZfbWV0cmljcyA9IHJkcG1jKElOVEVMX1BNQ19GSVhFRF9SRFBNQ19NRVRSSUNTKTtcbitcdFx0aWYgKHBtdS1cdTAwM2VwZXJmX21ldHJpY3MpXG4rXHRcdFx0d3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIDApO1xuK1x0fVxuIH1cbiBcbiBzdHJ1Y3Qga3ZtX3BtdV9vcHMgaW50ZWxfcG11X29wcyBfX2luaXRkYXRhID0ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmggYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXG5pbmRleCA1ZDkzNTc2NDBhYTE4MC4uNTc3MDU3NzNkYzQ5YjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXG5AQCAtNDAsNCArNDAsOSBAQCBzdHJ1Y3QgbGJyX2Rlc2Mge1xuIFxuIGV4dGVybiBzdHJ1Y3QgeDg2X3BtdV9sYnIgdm14X2xicl9jYXBzO1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2hhc19wZXJmX21ldHJpY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTO1xuK31cbitcbiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9QTVVfSU5URUxfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCBhMWE1ZWRiMzlhN2VkZC4uNTg0ZDk5ZWY2MDI2ZWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNDI2MCw2ICs0MjYwLDEwIEBAIHN0YXRpYyB2b2lkIHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRcdCAgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7XG4gXHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLFxuIFx0XHRcdFx0ICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbitcbitcdGludGVyY2VwdCA9ICFoYXNfbWVkaWF0ZWRfcG11IHx8ICF2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7XG4rXHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9QRVJGX01FVFJJQ1MsXG4rXHRcdFx0XHQgIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2bXhfcmVjYWxjX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC04MDg0LDYgKzgwODgsOSBAQCBzdGF0aWMgX19pbml0IHU2NCB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZvaWQpXG4gXHRcdHBlcmZfY2FwIFx1MDAyNj0gflBFUkZfQ0FQX1BFQlNfQkFTRUxJTkU7XG4gXHR9XG4gXG4rXHRpZiAoZW5hYmxlX21lZGlhdGVkX3BtdSlcbitcdFx0cGVyZl9jYXAgfD0gaG9zdF9wZXJmX2NhcCBcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTO1xuK1xuIFx0cmV0dXJuIHBlcmZfY2FwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IGQ5ZDUxODAzYjdiMjA5Li45NjIzZjU1OGYzNTlkZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzUwLDkgKzM1MCw5IEBAIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHtcbiBcbiBzdGF0aWMgY29uc3QgdTMyIG1zcnNfdG9fc2F2ZV9wbXVbXSA9IHtcbiBcdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIxLFxuLVx0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICsgMixcbitcdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMiwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIzLFxuIFx0TVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLFxuLVx0TVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCxcbitcdE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9QRVJGX01FVFJJQ1MsXG4gXHRNU1JfSUEzMl9QRUJTX0VOQUJMRSwgTVNSX0lBMzJfRFNfQVJFQSwgTVNSX1BFQlNfREFUQV9DRkcsXG4gXG4gXHQvKiBUaGlzIHBhcnQgb2YgTVNScyBzaG91bGQgbWF0Y2ggS1ZNX01BWF9OUl9JTlRFTF9HUF9DT1VOVEVSUy4gKi9cbkBAIC03Njc5LDYgKzc2NzksMTAgQEAgc3RhdGljIHZvaWQga3ZtX3Byb2JlX21zcl90b19zYXZlKHUzMiBtc3JfaW5kZXgpXG4gXHRcdCAgICAgaW50ZWxfcHRfdmFsaWRhdGVfaHdfY2FwKFBUX0NBUF9udW1fYWRkcmVzc19yYW5nZXMpICogMikpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRicmVhaztcbitcdGNhc2UgTVNSX1BFUkZfTUVUUklDUzpcbitcdFx0aWYgKCEoa3ZtX2NhcHMuc3VwcG9ydGVkX3BlcmZfY2FwIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxuK1x0XHRcdHJldHVybjtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgLi4uXG4gXHQgICAgIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgKyBLVk1fTUFYX05SX0dQX0NPVU5URVJTIC0gMTpcbiBcdFx0aWYgKG1zcl9pbmRleCAtIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgXHUwMDNlPVxuQEAgLTc3NDIsNyArNzc0Niw3IEBAIHN0YXRpYyB2b2lkIGt2bV9pbml0X21zcl9saXN0cyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGk7XG4gXG4tXHRCVUlMRF9CVUdfT05fTVNHKEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlMgIT0gMyxcbitcdEJVSUxEX0JVR19PTl9NU0coS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyAhPSA0LFxuIFx0XHRcdCBcIlBsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXCIpO1xuIFxuIFx0bnVtX21zcnNfdG9fc2F2ZSA9IDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuaW5kZXggZWZmMjk2NDU3MTliYzcuLmU3NzQ1ZTJjZDU0M2E5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbisrKyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtMzMxLDYgKzMzMSw3IEBAXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0ZPUk1BVFx0XHQweGYwMFxuICNkZWZpbmUgUEVSRl9DQVBfRldfV1JJVEVTXHRcdEJJVF9VTEwoMTMpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FXHRcdEJJVF9VTEwoMTQpXG4rI2RlZmluZSBQRVJGX0NBUF9QRVJGX01FVFJJQ1NcdFx0QklUX1VMTCgxNSlcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfVElNSU5HX0lORk9cdEJJVF9VTEwoMTcpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX01BU0tcdFx0KFBFUkZfQ0FQX1BFQlNfVFJBUCB8IFBFUkZfQ0FQX0FSQ0hfUkVHIHwgXFxcbiBcdFx0XHRcdFx0IFBFUkZfQ0FQX1BFQlNfRk9STUFUIHwgUEVSRl9DQVBfUEVCU19CQVNFTElORSB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oXG5pbmRleCA2MDhlZDgzZDdjNmE2OS4uNmMxOTUwM2UwYmI3ZGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaFxuQEAgLTUyLDYgKzUyLDkgQEBcbiAvKiBGaXhlZCBQTUMgY29udHJvbHMsIEludGVsIG9ubHkuICovXG4gI2RlZmluZSBGSVhFRF9QTUNfR0xPQkFMX0NUUkxfRU5BQkxFKF9pZHgpXHRCSVRfVUxMKCgzMiArIChfaWR4KSkpXG4gXG4rLyogUEVSRl9NRVRSSUNTIGVuYWJsZSwgSW50ZWwgb25seS4gKi9cbisjZGVmaW5lIFBFUkZfTUVUUklDU19HTE9CQUxfQ1RSTF9FTkFCTEVcdFx0QklUX1VMTCg0OClcbitcbiAjZGVmaW5lIEZJWEVEX1BNQ19LRVJORUxcdFx0XHRCSVRfVUxMKDApXG4gI2RlZmluZSBGSVhFRF9QTUNfVVNFUlx0XHRcdFx0QklUX1VMTCgxKVxuICNkZWZpbmUgRklYRURfUE1DX0FOWVRIUkVBRFx0XHRcdEJJVF9VTEwoMilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTk1Li5kNDY4OGE3ZDFlNTU2OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG5AQCAtNiw2ICs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcInBtdS5oXCJcbiAjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gXG4gLyogTnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AgZm9yIHRoZSBndWVzdCBtZWFzdXJlbWVudCBwYXlsb2FkLiAqL1xuICNkZWZpbmUgTlVNX0xPT1BTXHRcdFx0MTBcbkBAIC0yNDEsMTcgKzI0MiwyMCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0KTtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4tI2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKVx0XHRcXFxuKyNkZWZpbmUgR1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUClcdFx0XHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHdybXNyKF9wbWNfbXNyLCAwKTtcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMVVNIT1BUKSlcdFx0XHRcdFxcXG4gXHRcdEdVRVNUX01FQVNVUkVfRVZFTlQoX2N0cmxfbXNyLCBfdmFsdWUsIFwiY2xmbHVzaG9wdCAlW21dXCIsIEZFUCk7XHRcXFxuIFx0ZWxzZSBpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxVU0gpKVx0XHRcdFx0XFxcbiBcdFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXCJjbGZsdXNoICAlW21dXCIsIEZFUCk7XHRcXFxuIFx0ZWxzZVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdEdVRVNUX01FQVNVUkVfRVZFTlQoX2N0cmxfbXNyLCBfdmFsdWUsIFwibm9wXCIsIEZFUCk7XHRcdFxcXG4tXHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4rI2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKVx0XHRcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR3cm1zcihfcG1jX21zciwgMCk7XHRcdFx0XHRcdFx0XHRcXFxuK1x0R1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUCk7XHRcdFx0XHRcXFxuIFx0Z3Vlc3RfYXNzZXJ0X2V2ZW50X2NvdW50KF9pZHgsIF9wbWMsIF9wbWNfbXNyKTtcdFx0XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbkBAIC0zMTgsNiArMzIyLDU2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRcdFx0XHRGSVhFRF9QTUNfR0xPQkFMX0NUUkxfRU5BQkxFKGkpKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wZXJmX21ldHJpY3Modm9pZClcbit7XG4rXHRpbnQgcmV0aXJpbmcsIGJhZF9zcGVjLCBmZV9ib3VuZCwgYmVfYm91bmQsIHN1bTtcbitcdHU2NCBnbG9iYWxfY3RybCwgbWV0cmljcztcbitcbitcdGlmICgoZ3Vlc3RfZ2V0X3BtdV92ZXJzaW9uKCkgXHUwMDNjIDIpIHx8XHQvKiBEb2VzIGd1ZXN0IGhhdmUgR0xPQkFMX0NUUkw/ICovXG4rXHQgICAgIXRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9QRENNKSB8fFxuK1x0ICAgICEocmRtc3IoTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMpIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCAwKTtcbitcdHdybXNyKE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMywgMCk7XG4rXHR3cm1zcihNU1JfUEVSRl9NRVRSSUNTLCAwKTtcbitcbitcdC8qIEVuYWJsZSBmaXhlZCBjdHIzIChUT1BET1dOLlNMT1RTKSBhbmQgUEVSRl9NRVRSSUNTLiAqL1xuK1x0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgRklYRURfUE1DX0NUUkwoMywgRklYRURfUE1DX0tFUk5FTCkpO1xuK1x0Z2xvYmFsX2N0cmwgPSBGSVhFRF9QTUNfR0xPQkFMX0NUUkxfRU5BQkxFKDMpIHxcbitcdFx0ICAgICAgUEVSRl9NRVRSSUNTX0dMT0JBTF9DVFJMX0VOQUJMRTtcbitcbitcdEdVRVNUX1JVTl9QQVlMT0FEKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIGdsb2JhbF9jdHJsLCBcIlwiKTtcbitcbitcdC8qIENoZWNrIHRlc3QgcmVzdWx0cy4gKi9cbitcdG1ldHJpY3MgPSByZG1zcihNU1JfUEVSRl9NRVRSSUNTKTtcbitcdHJldGlyaW5nID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDcsIDApLCBtZXRyaWNzKTtcbitcdGJhZF9zcGVjID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDE1LCA4KSwgbWV0cmljcyk7XG4rXHRmZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgyMywgMTYpLCBtZXRyaWNzKTtcbitcdGJlX2JvdW5kID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDMxLCAyNCksIG1ldHJpY3MpO1xuK1xuK1x0LypcbitcdCAqIEJlIGNvbnNlcnZhdGl2ZTogdGhlIG1lYXN1cmVkIHBheWxvYWQgZGVmaW5pdGVseSByZXRpcmVzIHdvcmssIHNvXG4rXHQgKiBSZXRpcmluZyBzaG91bGQgYmUgbm9uLXplcm8uXG4rXHQgKi9cbitcdEdVRVNUX0FTU0VSVF9ORShtZXRyaWNzLCAwVUxMKTtcbitcdEdVRVNUX0FTU0VSVF9ORShyZXRpcmluZywgMFVMTCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHN1bSBvZiB0aGUgNCBsZXZlbC0xIHRvcGRvd24gbWV0cmljcyBzaG91bGQgYmUgY2xvc2UgdG8gMTAwJS5cbitcdCAqIDMgaXMgY2hvc2VuIGFzIGEgbG9vc2Ugc2FuaXR5IGNoZWNrLlxuK1x0ICovXG4rXHRzdW0gPSByZXRpcmluZyArIGJhZF9zcGVjICsgZmVfYm91bmQgKyBiZV9ib3VuZDtcbitcdEdVRVNUX0FTU0VSVChzdW0gXHUwMDNlPSAweGZkIFx1MDAyNlx1MDAyNiBzdW0gXHUwMDNjPSAweDEwMik7XG4rXG4rXHQvKiBTYW5pdHkgY2hlY2sgYWZ0ZXIgUEVSRl9NRVRSSUNTIGRpc2FibGVkLiAqL1xuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJsb29wIC5cIiA6IFwiK2NcIigoaW50KXtOVU1fTE9PUFN9KSk7XG4rXHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIG1ldHJpY3MpO1xuK1x0d3Jtc3IoTVNSX1BFUkZfTUVUUklDUywgMHhkZWFkZGVhZCk7XG4rXG4rXHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIDB4ZGVhZGRlYWQpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXG4ge1xuIFx0dTggaTtcbkBAIC0zMjUsNiArMzc5LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyh2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfSU5URUxfQVJDSF9FVkVOVFM7IGkrKylcbiBcdFx0Z3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGkpO1xuIFxuK1x0Z3Vlc3RfdGVzdF9wZXJmX21ldHJpY3MoKTtcbitcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG5AQCAtMzYxLDcgKzQxNyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbiAgKiBvdGhlciB0aGFuIFBNQ3MgaW4gdGhlIGZ1dHVyZS5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9HUF9DT1VOVEVSU1x0OFxuLSNkZWZpbmUgTUFYX05SX0ZJWEVEX0NPVU5URVJTXHQzXG4rI2RlZmluZSBNQVhfTlJfRklYRURfQ09VTlRFUlNcdDRcbiBcbiAjZGVmaW5lIEdVRVNUX0FTU0VSVF9QTUNfTVNSX0FDQ0VTUyhpbnNuLCBtc3IsIGV4cGVjdF9ncCwgdmVjdG9yKVx0XHRcXFxuIF9fR1VFU1RfQVNTRVJUKGV4cGVjdF9ncCA/IHZlY3RvciA9PSBHUF9WRUNUT1IgOiAhdmVjdG9yLFx0XHRcdFxcXG5AQCAtNTg1LDYgKzY0MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcbiBcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcbiBcdHU4IHBtdV92ZXJzaW9uID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04pO1xuK1x0dTY0IGFkdmVydGlzZWRfcGVyZl9jYXBzID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUyk7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdHU4IHYsIGo7XG4gXHR1MzIgaztcbkBAIC01OTIsNiArNjQ5LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xuIFx0XHQwLFxuIFx0XHRQTVVfQ0FQX0ZXX1dSSVRFUyxcbitcdFx0UEVSRl9DQVBfUEVSRl9NRVRSSUNTLFxuIFx0fTtcbiBcbiBcdC8qXG5AQCAtNjQ5LDYgKzcwNywxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4gXHRcdFx0aWYgKCFrdm1faGFzX3BlcmZfY2FwcyBcdTAwMjZcdTAwMjYgcGVyZl9jYXBzW2ldKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4rXHRcdFx0LyogSWdub3JlIHVuc3VwcG9ydGVkIGZlYXR1cmVzLiAqL1xuK1x0XHRcdGlmIChwZXJmX2NhcHNbaV0gXHUwMDI2IH5hZHZlcnRpc2VkX3BlcmZfY2FwcylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdHByX2luZm8oXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4gXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MDEuMDY5MjUyMTA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg4OTM1MDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBNVSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hhdCdzIGhhcHBlbmluZyBoZXJlLiBUaGUgY29yZSBpcyBhbGwgYWJvdXQgZXh0ZW5kaW5nIHRoZSBLVk0gUE1VIGVtdWxhdGlvbiBmb3IgeDg2LiBTcGVjaWZpY2FsbHksIHdlJ3JlIGluY3JlYXNpbmcgYEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlNgIGZyb20gMyB0byA0LiBUaGF04oCZcyB0aGUgbW9zdCBvYnZpb3VzIGNoYW5nZS4gVGhlbiwgd2Ugc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBlcmZfbWV0cmljc2Agd2l0aGluIHRoZSBgc3RydWN0IGt2bV9wbXVgLCBhIGNsZWFyIGluZGljYXRvciBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgc3Ryb25nbHkgcG9pbnRzIHRvIHN1cHBvcnRpbmcgSW50ZWwncyBgTVNSX1BFUkZfTUVUUklDU2AuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBjYXBhYmlsaXR5LCBgUEVSRl9DQVBfUEVSRl9NRVRSSUNTYCwgYW5kIGhvb2tzIGl0IGludG8gdGhlIHJlbGV2YW50IG1hc2tzIGFuZCBjb250cm9sIHJlZ2lzdGVycyAoYEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRmAsIGBHTE9CQUxfQ1RSTF9FTl9QRVJGX01FVFJJQ1NgKS4gVGhlIGNvZGUgdGhlbiBpbXBsZW1lbnRzIGhhbmRsaW5nIGZvciB0aGUgbmV3IE1TUiBpbiBgaW50ZWxfcG11X2dldF9tc3JgIGFuZCBgaW50ZWxfcG11X3NldF9tc3JgLCB3aGljaCBtZWFucyB0aGUgZ3Vlc3QgY2FuIG5vdyByZWFkIGFuZCB3cml0ZSB0byB0aGlzIE1TUi4gSXQgYWxzbyB0b3VjaGVzIG9uIGdldHRpbmcgdGhlIGV2ZW50cyBmcm9tIGZpeGVkIGNvdW50ZXJzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBzcGFuIG11bHRpcGxlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhpcyBpbmNsdWRlcyB0aGUgdmFyaW91cyBgaW50ZWxfcG11XypgIGZ1bmN0aW9ucyBmb3IgbWFuYWdlbWVudCBhbmQgcmVmcmVzaCwgYWxvbmcgd2l0aCB0aGUgYHZteF8qYCBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggVk1YIGNvbnRleHQgc3dpdGNoaW5nIGFuZCBjYXBhYmlsaXRpZXMsIGFsb25nIHdpdGggaW50ZXJjZXB0aW5nIHRoZSBNU1IgY2FsbHMuIFRoaXMgY29uZmlybXMgdGhlIG5ldyBmZWF0dXJlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBob3N04oCZcyBQTVUgYW5kIGhvdyBpdOKAmXMgZXhwb3NlZCB0byB0aGUgZ3Vlc3QuIEkgc2VlIHRoYXQgYG1zcnNfdG9fc2F2ZV9wbXVgIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBlbnN1cmUgdGhlIG5ldyBNU1IgaXMgc2F2ZWQvcmVzdG9yZWQgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuXG5cblRoaXMgYWxsIHBvaW50cyB0byBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIGBNU1JfUEVSRl9NRVRSSUNTYCBmZWF0dXJlLCBhbG9uZyB3aXRoIGZpeGVkIGNvdW50ZXIgMyAod2hpY2ggSSdtIGFzc3VtaW5nIGlzIHRoZSBUT1BET1dOLlNMT1RTIGNvdW50ZXIpLiBUaGUgY29kZSBmbG93IHNlZW1zIHRvIGJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIGJvdGggZ3Vlc3QgTVNSIGFjY2Vzc2VzIChSRE1TUi9XUk1TUikgYW5kIEtWTSBQTVUgY29udGV4dCBzd2l0Y2hpbmcsIG1lYW5pbmcgaXQncyBhIGZ1bmN0aW9uYWxseSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLlxuXG5HaXZlbiB0aGUgbW9kaWZpY2F0aW9ucywgS1ZNIChgQ09ORklHX0tWTWApIGFuZCBJbnRlbCBLVk0gKGBDT05GSUdfS1ZNX0lOVEVMYCkgYXJlIGVzc2VudGlhbCBwcmVyZXF1aXNpdGVzLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgYSBkZWVwZXIgZGl2ZSB3aWxsIGJlIGBpbnRlbF9wbXVfZ2V0X21zcmAsIGBpbnRlbF9wbXVfc2V0X21zcmAsIGFuZCB0aGUgcmVsYXRlZCByZWZyZXNoIGFuZCBjb250ZXh0LXN3aXRjaGluZyByb3V0aW5lcyAoYGludGVsX3BtdV9yZWZyZXNoYCwgYGludGVsX3BtdV9yZXNldGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCwgYGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5YCkuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgbmV3IE1TUiBhbmQgdGhlIGV4dGVuZGVkIGNvdW50ZXIgbGltaXRzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBlbmFibGVfbWVkaWF0ZWRfcG11YCwgYW5kIHZlcmlmeSB0aGF0IGFsbCBvZiB0aGUgbmV3IGNhcGFiaWxpdHkgY2hlY2tzIGFyZSBpbiBwbGFjZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoZSBuZXcgZmVhdHVyZSBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gTG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIG92ZXJhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODoxMC45NTg2MDQ1NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzMTY3NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODoxMS4zNjE3Nzc1ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc1MDA0MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQZXJmb3JtYW5jZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNvbmZpZ3Mgd2UncmUgZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgdG8gc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBhbnkgcGFydGljdWxhciBjb25maWcgb3IgbW9kdWxlIHBhcmFtZXRlciB0aGF0IHdvdWxkIGFsbG93IHVzIHRvIGxldmVyYWdlIG1lZGlhdGVkIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdHMsIG9yIFwiUE1Vcy5cIiBMZXQncyBjaGVjayBgZW5hYmxlX21lZGlhdGVkX3BtdWAsIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBleHBlY3QgdGhlcmUgaXMgbW9yZSB0byBpdCB0aGFuIGp1c3QgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODoxNi42MzY3ODQwNDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyNTYzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5hYmxlX21lZGlhdGVkX3BtdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9wbXUuYz00MD1tb2R1bGVfcGFyYW0oZW5hYmxlX3BtdSwgYm9vbCwgMDQ0NCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDItLyogRW5hYmxlL2Rpc2FibGVkIG1lZGlhdGVkIFBNVSB2aXJ0dWFsaXphdGlvbi4gKi9cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NDM6Ym9vbCBfX3JlYWRfbW9zdGx5IGVuYWJsZV9tZWRpYXRlZF9wbXU7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjQ0OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChlbmFibGVfbWVkaWF0ZWRfcG11KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9MTIxPXZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTE1NC1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU1OlxcdGlmICghZW5hYmxlX3BtdSB8fCAhZW5hYmxlX21lZGlhdGVkX3BtdSB8fCAha3ZtX2hvc3RfcG11Lm1lZGlhdGVkIHx8XFxuYXJjaC94ODYva3ZtL3BtdS5jLTE1Ni1cXHQgICAgIXBtdV9vcHMtXFx1MDAzZWlzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQoXFx1MDAyNmt2bV9ob3N0X3BtdSkpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE1NzpcXHRcXHRlbmFibGVfbWVkaWF0ZWRfcG11ID0gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTE1OC1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU5OlxcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTYwLVxcdFxcdHBtdV9vcHMtXFx1MDAzZXdyaXRlX2dsb2JhbF9jdHJsID0gTlVMTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xODYtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE4NzpcXHRpZiAoIWVuYWJsZV9tZWRpYXRlZF9wbXUgXFx1MDAyNlxcdTAwMjYga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkIFxcdTAwM2UgMylcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTg4LVxcdFxcdGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IDM7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11Lmg9NjU9ZXh0ZXJuIGJvb2wgZW5hYmxlX3BtdTtcXG5hcmNoL3g4Ni9rdm0vcG11Lmg6NjY6ZXh0ZXJuIGJvb2wgZW5hYmxlX21lZGlhdGVkX3BtdTtcXG5hcmNoL3g4Ni9rdm0vcG11LmgtNjctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11Lmg9ODY9c3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9wbXUuaC04Ny17XFxuYXJjaC94ODYva3ZtL3BtdS5oOjg4OlxcdHJldHVybiBlbmFibGVfbWVkaWF0ZWRfcG11IFxcdTAwMjZcXHUwMDI2IHZjcHVfdG9fcG11KHZjcHUpLVxcdTAwM2V2ZXJzaW9uO1xcbmFyY2gveDg2L2t2bS9wbXUuaC04OS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE3OD1tb2R1bGVfcGFyYW0odm5taSwgYm9vbCwgMDQ0NCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xNzktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoxODA6bW9kdWxlX3BhcmFtKGVuYWJsZV9tZWRpYXRlZF9wbXUsIGJvb2wsIDA0NDQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTgxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz03NTI9c3RhdGljIHZvaWQgc3ZtX3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy03NTctXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo3NTg6XFx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNzU5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY2FwYWJpbGl0aWVzLmg9Mzk5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bXhfcGVic19zdXBwb3J0ZWQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY2FwYWJpbGl0aWVzLmgtNDAxLVxcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEVCUykgXFx1MDAyNlxcdTAwMjYga3ZtX3BtdV9jYXAucGVic19lcHQgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L2NhcGFiaWxpdGllcy5oOjQwMjpcXHQgICAgICAgIWVuYWJsZV9tZWRpYXRlZF9wbXU7XFxuYXJjaC94ODYva3ZtL3ZteC9jYXBhYmlsaXRpZXMuaC00MDMtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz0xNTk9bW9kdWxlX3BhcmFtKGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciwgYm9vbCwgU19JUlVHTyk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy0xNjAtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoxNjE6bW9kdWxlX3BhcmFtKGVuYWJsZV9tZWRpYXRlZF9wbXUsIGJvb2wsIDA0NDQpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTYyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz00MjA5PXN0YXRpYyB2b2lkIHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDIxOC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjQyMTk6XFx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDIyMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ0Mzk9dm9pZCB2bXhfc2V0X2NvbnN0YW50X2hvc3Rfc3RhdGUoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ1MjYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0NTI3OlxcdGlmIChlbmFibGVfbWVkaWF0ZWRfcG11KVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDUyOC1cXHRcXHR2bWNzX3dyaXRlNjQoSE9TVF9JQTMyX1BFUkZfR0xPQkFMX0NUUkwsIDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04MDM5PXN0YXRpYyBfX2luaXQgdTY0IHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODA1MC1cXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVJDSF9MQlIpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4MDUxOlxcdCAgICAhZW5hYmxlX21lZGlhdGVkX3BtdSkge1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODA1Mi1cXHRcXHR4ODZfcGVyZl9nZXRfbGJyKFxcdTAwMjZ2bXhfbGJyX2NhcHMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MDkwLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODA5MTpcXHRpZiAoZW5hYmxlX21lZGlhdGVkX3BtdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTgwOTItXFx0XFx0cGVyZl9jYXAgfD0gaG9zdF9wZXJmX2NhcCBcXHUwMDI2IFBFUkZfQ0FQX1BFUkZfTUVUUklDUztcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDA2ND1pbnQga3ZtX3g4Nl92ZW5kb3JfaW5pdChzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTg2LVxcdF9fa3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKG9wcy1cXHUwMDNlaGFuZGxlX2ludGVsX3B0X2ludHIsXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMTg3OlxcdFxcdFxcdFxcdCAgICAgIGVuYWJsZV9tZWRpYXRlZF9wbXUgPyBrdm1faGFuZGxlX2d1ZXN0X21lZGlhdGVkX3BtaSA6IE5VTEwpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE4OC1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMjc0MD1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTI3NjItXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEyNzYzOlxcdGlmIChlbmFibGVfbWVkaWF0ZWRfcG11IFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC5lbmFibGVfcG11IFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyNzY0LVxcdCAgICAha3ZtLVxcdTAwM2VhcmNoLmNyZWF0ZWRfbWVkaWF0ZWRfcG11KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjE2LjY5NzA0Nzc1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTcxMzM5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBlbmFibGVfbWVkaWF0ZWRfcG11YCBNeXN0ZXJ5KipcblxuQWxyaWdodCwgc28gYGVuYWJsZV9tZWRpYXRlZF9wbXVgIGlzIHNob3dpbmcgdXAgYXMgYSBtb2R1bGUgcGFyYW1ldGVyIGZvciB0aGUgYGt2bS1pbnRlbGAgYW5kIGBrdm0tYW1kYCBtb2R1bGVzLiBIYW5nIG9uIGEgc2Vjb25kLi4uIG1vZHVsZSAqcGFyYW1ldGVyKiwgbm90IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHJpZ2h0PyBUaGF0IGRpc3RpbmN0aW9uIGlzIGNyaXRpY2FsLiBXZSdyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyB0aGF0J3Mgc2V0IGF0IG1vZHVsZSBsb2FkIHRpbWUsIG5vdCBiYWtlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgaXRzZWxmLiBUaGUgYWN0dWFsICpjb25maWdzKiB0aGF0IGluZmx1ZW5jZSB0aGlzIGFyZSBnb2luZyB0byBiZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgKG9yIGBLVk1fQU1EYCksIG5vdCB0aGlzIHBhcmFtZXRlci4gVGhhdCdzIHRoZSBpbXBvcnRhbnQgcG9pbnQuXG5cbldlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHdob2xlIGxhbmRzY2FwZSBmdWxseSwgc28gbGV0J3MgZGlnIGEgYml0IGZ1cnRoZXIuIEl0J3Mgc2FmZSB0byBhc3N1bWUgYGVuYWJsZV9tZWRpYXRlZF9wbXVgIHdpbGwgbmVlZCB0aGUgY29yZSBQTVUgaW5mcmFzdHJ1Y3R1cmU7IHdoaWNoIG1lYW5zLCBhdCBhIG1pbmltdW0sIHRoYXQgYENPTkZJR19QRVJGX0VWRU5UU2AgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGltZSB0byBpbnZlc3RpZ2F0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODoyMS42MTQxODQzMzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxOTg0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBFUkZfRVZFTlRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MjEyMT1tZW51IFxcXCJLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1xcXCJcXG5pbml0L0tjb25maWctMjEyMi1cXG5pbml0L0tjb25maWc6MjEyMzpjb25maWcgUEVSRl9FVkVOVFNcXG5pbml0L0tjb25maWctMjEyNC1cXHRib29sIFxcXCJLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MjEuNjY5Mzg4MzI1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQwMjgxMjk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGVyZm9ybWFuY2UgRXZlbnQgSW5zdHJ1bWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUEVSRl9FVkVOVFNgIGlzIGVzc2VudGlhbCBoZXJlLCB0aGF0J3MgYSBnaXZlbi4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlc2UgZm9jdXMgc3ltYm9scy4gSSdtIHRha2luZyBhIGNsb3NlIGxvb2sgYXQ6IGBpbnRlbF9wbXVfZ2V0X21zcmAsIGBpbnRlbF9wbXVfc2V0X21zcmAsIGBpbnRlbF9wbXVfcmVmcmVzaGAsIGBpbnRlbF9wbXVfcmVzZXRgLCBgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWRgLCBgaW50ZWxfbWVkaWF0ZWRfcG11X3B1dGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCwgYW5kIGBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgaG90LXBhdGggZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0IGFyZSBjYWxsZWQgZnJlcXVlbnRseSBhbmQgd291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIHByb2ZpbGluZy4gYGludGVsX3BtdV9nZXRfbXNyYCBhbmQgYGludGVsX3BtdV9zZXRfbXNyYCBhcmUgdGllZCB0byBSRE1TUi9XUk1TUiwgc28gdGhleSdyZSBvbiB0aGUgc29tZXdoYXQgaG90IHNpZGUsIGJ1dCB2aXRhbCBmb3IgTVNSIGZ1enppbmcuIEkgd2FzIHdvbmRlcmluZyBhYm91dCBza2lwcGluZyBgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWRgIGFuZCBgaW50ZWxfbWVkaWF0ZWRfcG11X3B1dGAsIGFzIHRoZXNlIGFyZSByZWxhdGVkIHRvIHZjcHUgbG9hZC9wdXQgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJhdGhlciBmcmVxdWVudC4gSG93ZXZlciwgYSBxdWljayBjaGVjayByZXZlYWxzIHRoZXkncmUgdGhlIG9uZXMgc2F2aW5nL3Jlc3RvcmluZyBgTVNSX1BFUkZfTUVUUklDU2AsIG1ha2luZyB0aGVtIGNyaXRpY2FsLiBGdXJ0aGVyIGFuYWx5c2lzIHJldmVhbGVkIHRoZXkgYXJlIGNhbGxlZCBvbiBldmVyeSBWTSBleGl0L2VudHJ5IG9yIGNvbnRleHQgc3dpdGNoLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBob3QuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgbGVzcyBmcmVxdWVudCBvbmVzLiBgaW50ZWxfcG11X3JlZnJlc2hgIGlzIGNhbGxlZCBvbiBDUFVJRCB1cGRhdGVzLCBub3QgYSBob3RzcG90LiBgaW50ZWxfcG11X3Jlc2V0YCBpcyBjYWxsZWQgb24gdmNwdSByZXNldDsgbm90IGhvdC4gYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCBpcyBmb3IgTVNSIGludGVyY2VwdCByZWNhbGN1bGF0aW9uLiBJdCdzIG5vdCBob3QsIGVpdGhlciwgYW5kIHRoZSBvdGhlcnMsIHN1Y2ggYXMgYHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNgIGFuZCBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYXJlIGRlZmluaXRpdmVseSBub3Qgb24gdGhlIGhvdCBwYXRoLlxuXG5TbywgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIGFzIHRoZSBhcmVhcyBvZiBwcmltYXJ5IGNvbmNlcm46XG5gaW50ZWxfcG11X2dldF9tc3JgXG5gaW50ZWxfcG11X3NldF9tc3JgXG5gaW50ZWxfcG11X3JlZnJlc2hgXG5gaW50ZWxfcG11X3Jlc2V0YFxuYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYFxuYGludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWxgXG5cbk5lZWQgdG8gdmVyaWZ5IHRoYXQgbGFzdCBvbmUgaXMgaW5kZWVkIGEgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzA5LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjMxLjA3MjIwMzU4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3NjcxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9Mzg4PXN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00ODQtICovXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo0ODU6c3RhdGljIHU2NCBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsKHVuc2lnbmVkIGludCBpbmRleClcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTQ4Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTYyNj1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTY0Ni1cXHRcXHRwbXUtXFx1MDAzZWZpeGVkX2NvdW50ZXJzW2ldLmN1cnJlbnRfY29uZmlnID0gMDtcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjY0NzpcXHRcXHRwbXUtXFx1MDAzZWZpeGVkX2NvdW50ZXJzW2ldLmV2ZW50c2VsID0gaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbChpKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTY0OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjMxLjEyNjk4MDA5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg5MDM2NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIGFuZCB0aGUgY29udGV4dCBpcyBrZXJuZWwtbGV2ZWwgdmlydHVhbGl6YXRpb24gb3IgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB3aXRoaW4gYSBoeXBlcnZpc29yOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSG90c3BvdHMgaW4gUE1VIExvYWQvU2F2ZSBPcGVyYXRpb25zKipcblxuUmlnaHQsIHRoYXQgc2VlbXMgaW1wb3J0YW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgYGludGVsX21lZGlhdGVkX3BtdV9sb2FkYCBhbmQgYGludGVsX21lZGlhdGVkX3BtdV9wdXRgIGFyZSBleHBlcmllbmNpbmcgaGlnaCBjb250ZW50aW9uLiBBcmUgdGhleSBjYXVzaW5nIGEgYm90dGxlbmVjaz8gVGhleSdyZSBjcnVjaWFsIGNvbXBvbmVudHMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC5cblxuTm93LCB3aGVyZSBkbyB0aGVzZSBmdW5jdGlvbnMgZ2V0IGNhbGxlZCBmcm9tPyBPa2F5LCBga3ZtX3BtdV9sb2FkX2d1ZXN0X3BtY3NgIGFuZCBga3ZtX3BtdV9zYXZlX2d1ZXN0X3BtY3NgLCByaWdodC4gQW5kIHRob3NlIGFyZSBjYWxsZWQgYnksIGFoLi4uIGB2bXhfdmNwdV9sb2FkYCBhbmQgYHZteF92Y3B1X3B1dGAsIHdoaWNoIGFyZSBlc3NlbnRpYWwgdG8gdmlydHVhbCBtYWNoaW5lIG1hbmFnZW1lbnQuIEhhbmcgb24gYSBzZWNvbmQsIGFtIEkgZ2V0dGluZyB0aGF0IHJpZ2h0PyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjYWxsIHBhdGhzIGhlcmUuLi4gWWVwLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcnJlY3QgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTMyLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MzUuMDE2MDE5MTEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzgwODEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9ODIwPXN0YXRpYyB2b2lkIGludGVsX3BtdV93cml0ZV9nbG9iYWxfY3RybCh1NjQgZ2xvYmFsX2N0cmwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTgyNS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjgyNjpzdGF0aWMgdm9pZCBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04Mjcte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz04NzQ9c3RydWN0IGt2bV9wbXVfb3BzIGludGVsX3BtdV9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODg2LVxcdC5pc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkID0gaW50ZWxfcG11X2lzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQsXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4ODc6XFx0Lm1lZGlhdGVkX2xvYWQgPSBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZCxcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTg4OC1cXHQubWVkaWF0ZWRfcHV0ID0gaW50ZWxfbWVkaWF0ZWRfcG11X3B1dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MzUuMDY5ODMzNDQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTExMDA1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEtWTSBQTVUgTWVkaWF0ZWQgQWNjZXNzIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbWVkaWF0ZWQgUE1VIGFjY2VzcyBwYXRoIHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGt2bV9wbXVfb3BzLVx1MDAzZW1lZGlhdGVkX2xvYWRgIGFuZCBgbWVkaWF0ZWRfcHV0YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBtZWRpYXRlZF9sb2FkYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgY3JpdGljYWwgcGllY2UgaGVyZSwgdGhlIGVudHJ5IHBvaW50LiBJIHdhbnQgdG8ga25vdyB3aGF0J3MgKmluaXRpYXRpbmcqIHRoaXMgbWVkaWF0ZWQgbG9hZGluZyBwcm9jZXNzLiBHb3R0YSBmb2xsb3cgdGhlIGNhbGwgZ3JhcGggdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gTGV0J3Mgc2VlIHdoZXJlIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBpbnZva2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjM3Ljg4MDkzNjA0NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwNTE1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVkaWF0ZWRfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9wbXUuYz0xMzYyPXZvaWQga3ZtX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xMzkwLVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMzkxOlxcdGt2bV9wbXVfY2FsbChtZWRpYXRlZF9sb2FkKSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTM5Mi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11Lmg9MjY9c3RydWN0IGt2bV9wbXVfb3BzIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuaC00MS1cXHRib29sICgqaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqaG9zdF9wbXUpO1xcbmFyY2gveDg2L2t2bS9wbXUuaDo0MjpcXHR2b2lkICgqbWVkaWF0ZWRfbG9hZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmgtNDMtXFx0dm9pZCAoKm1lZGlhdGVkX3B1dCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9MzA0PXN0cnVjdCBrdm1fcG11X29wcyBhbWRfcG11X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMTUtXFx0LmlzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQgPSBhbWRfcG11X2lzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQsXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzozMTY6XFx0Lm1lZGlhdGVkX2xvYWQgPSBhbWRfbWVkaWF0ZWRfcG11X2xvYWQsXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMTctXFx0Lm1lZGlhdGVkX3B1dCA9IGFtZF9tZWRpYXRlZF9wbXVfcHV0LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz04NzQ9c3RydWN0IGt2bV9wbXVfb3BzIGludGVsX3BtdV9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODg2LVxcdC5pc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkID0gaW50ZWxfcG11X2lzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQsXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4ODc6XFx0Lm1lZGlhdGVkX2xvYWQgPSBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZCxcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTg4OC1cXHQubWVkaWF0ZWRfcHV0ID0gaW50ZWxfbWVkaWF0ZWRfcG11X3B1dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MzcuOTM0OTkzMDAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDQxMzczMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBpbiBLVk0vSW50ZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHBhdGggd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IG9uIEludGVsIHN5c3RlbXMuIEkga25vdyBga3ZtX21lZGlhdGVkX3BtdV9sb2FkYCBpcyBhIGNyaXRpY2FsIGhvdHNwb3QsIHRyaWdnZXJlZCBieSBga3ZtX2FyY2hfdmNwdV9sb2FkYCwgc28gSSdtIGV4Y2x1ZGluZyB0aGUgYGludGVsX21lZGlhdGVkX3BtdV9sb2FkYCBhbmQgYGludGVsX21lZGlhdGVkX3BtdV9wdXRgIGZ1bmN0aW9ucyB0byBhdm9pZCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHRoZSBub2lzZS5cblxuRmlyc3QsIEkgbG9va2VkIGF0IHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gYGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5YCBvbmx5IHJ1bnMgb25jZSBhdCBib290IGFuZCwgc2ltaWxhcmx5LCBgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllc2AgYWxzbyBydW5zIGp1c3Qgb25jZSBwZXIgYm9vdC4gVGhlbiwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCBpcyB0cmlnZ2VyZWQgd2hlbmV2ZXIgTVNSIGludGVyY2VwdCB1cGRhdGVzIG9jY3VyLiBgaW50ZWxfcG11X3JlZnJlc2hgIGlzIGNhbGxlZCB3aGVuZXZlciBDUFVJRCBpbmZvcm1hdGlvbiBpcyByZWZyZXNoZWQsIGFuZCBgaW50ZWxfcG11X3Jlc2V0YCBkdXJpbmcgdkNQVSByZXNldHMuIEZpbmFsbHksIEkgbm90aWNlZCB0aGUgYGludGVsX3BtdV9nZXRfbXNyYCBhbmQgYGludGVsX3BtdV9zZXRfbXNyYCBmdW5jdGlvbnMsIHdoaWNoLCBvZiBjb3Vyc2UsIGFyZSBjYWxsZWQgZHVyaW5nIFJETVNSL1dSTVNSIGluc3RydWN0aW9ucy5cblxuQmFzZWQgb24gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBgaW50ZWxfcG11X3JlZnJlc2hgLCBgaW50ZWxfcG11X3Jlc2V0YCwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCwgYW5kIGBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBmcmVxdWVudGx5IGNhbGxlZC5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zLiBJdCdzIHNhZmUgdG8gc2F5IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgZnVuZGFtZW50YWwsIHJpZ2h0PyBgUEVSRl9FVkVOVFNgIGlzIHR5cGljYWxseSBlbmFibGVkLCB3aGljaCBtZWFucyBpdCBzaG91bGRuJ3QgYmUgYW4gaXNzdWUuIEJ1dCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6NDQuMTc5MTMyNzI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjU4NzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjQ0LjIzNTcyNjE2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYzMDkyMTgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUga2VybmVsJ3MgS1ZNIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRpbmcgdG8gSW50ZWwncyBhcmNoaXRlY3R1cmUgYW5kIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdHMgKFBNVXMpLiBUaGUgZmlsZXMgbGlzdGVkIOKAkyBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AsIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYGFyY2gveDg2L2t2bS9wbXUuY2AsIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYCDigJMgYWxsIHBvaW50IGRpcmVjdGx5IHRvIEtWTSdzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIHBhcnRpY3VsYXJseSB0aGUgVk1YIChWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucykgZmVhdHVyZXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cblxuR2l2ZW4gdGhlIGZpbGUgbmFtZXMsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYEtWTWAgYW5kIGBLVk1fSU5URUxgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbGlrZWx5IGRpY3RhdGUgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiBjb21waWxlZCBhbmQgaW5jbHVkZWQuIEJ1dCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUgbWlnaHQgYmUgc29tZSBzZWNvbmRhcnksIG1vcmUgZ3JhbnVsYXIgY29uZmlndXJhdGlvbnMgdGhhdCBjb21lIGludG8gcGxheSwgcG90ZW50aWFsbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHNwZWNpZmljIGFzcGVjdHMgb2YgUE1VIHZpcnR1YWxpemF0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIG9yIHRoZSBjb2RlIGl0c2VsZiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgUE1VIGhhbmRsaW5nLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODo1NC44NjY2NTA1NjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzA2ODU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKlBNVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6NTQuOTIyOTY2NDE2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzY0MzQ3MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gUE1VIEVtdWxhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlcmUgYXJlbid0IGFueSBzcGVjaWZpYyBLVk0gY29uZmlndXJhdGlvbnMgZXhwbGljaXRseSBtZW50aW9uZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIGZvY3VzIGhhcyBiZWVuIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgY2hhbmdlcyB3aXRoaW4gdGhlIFBNVSBlbXVsYXRpb24uIEkgc3RhcnRlZCBieSByZXZpZXdpbmcgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZDogYGludGVsX3BtdV9nZXRfbXNyYCwgYGludGVsX3BtdV9zZXRfbXNyYCwgYGludGVsX3BtdV9yZWZyZXNoYCwgYGludGVsX3BtdV9yZXNldGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGFuZCBgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbGAuIFRoZXNlIHNlZW1lZCB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYW5kIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGZvciB0aGUgZ3Vlc3QncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBlbXVsYXRlZCBQTVUuXG5cblRoZW4sIEkgZXhwYW5kZWQgbXkgc2NvcGUgdG8gaW5jbHVkZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhlIFBNVSBiZWhhdmlvciwgYWRkaW5nIGBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eWAgYW5kIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCB0byBteSBtZW50YWwgbGlzdC4gSSBub3RpY2VkIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGt2bV9wcm9iZV9tc3JfdG9fc2F2ZWAgYW5kIGBrdm1faW5pdF9tc3JfbGlzdHNgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCB3aGljaCBjb25maXJtcyB0aGUgaW5pdGlhbGl6YXRpb24gYXNwZWN0LlxuXG5JJ3ZlIGNsYXJpZmllZCB0aGUgcm9sZXMgb2YgZWFjaCBmdW5jdGlvbjogYGludGVsX3BtdV9nZXRfbXNyYCBhbmQgYGludGVsX3BtdV9zZXRfbXNyYCBoYW5kbGUgdGhlIGRpcmVjdCBNU1IgYWNjZXNzZXMgZnJvbSB0aGUgZ3Vlc3QuIGBpbnRlbF9wbXVfcmVmcmVzaGAgaXMga2V5IGR1cmluZyBDUFVJRCB1cGRhdGVzLCBhbmQgYGludGVsX3BtdV9yZXNldGAgZHVyaW5nIHZDUFUgcmVzZXRzLiBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgIG1hbmFnZXMgdGhlIE1TUiBpbnRlcmNlcHRpb24gbG9naWMsIGFuZCBgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbGAgZGVhbHMgd2l0aCBmaXhlZCBjb3VudGVyIGV2ZW50IHNlbGVjdG9ycy5cblxuU28sIHRvIHJlY2FwLCB0aGUga2V5IGZvY3VzIHN5bWJvbHMgYXJlOiBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBgaW50ZWxfcG11X3JlZnJlc2hgLCBgaW50ZWxfcG11X3Jlc2V0YCwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCwgYGludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWxgLCBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgLCBhbmQgYHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNgLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgcGF0Y2gncyBwdXJwb3NlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGVtdWxhdGlvbiBzdXBwb3J0IGZvciBgTVNSX1BFUkZfTUVUUklDU2AgYW5kIGZpeGVkIGNvdW50ZXIgMyAoYFRPUERPV04uU0xPVFNgKSBpbiBJbnRlbCBLVk0uIFRoaXMgaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byBNU1IgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIEdpdmVuIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBndWVzdCBSRE1TUi9XUk1TUiBhbmQgQ1BVSUQgaW5zdHJ1Y3Rpb25zLCBmdXp6aW5nIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgZW11bGF0aW9uIGlzIGNvcnJlY3QsIGF2b2lkaW5nIGhvc3QgY3Jhc2hlcyBhbmQgZGF0YSBjb3JydXB0aW9uLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZSBjb2RlLCBJIGV4cGVjdCB0aGUgS1ZNIGFuZCBLVk1fSU5URUwgY29uZmlndXJhdGlvbnMgdG8gYmUgcmVsZXZhbnQuXG5cbk5vdywgbGV0J3MgcHJvY2VlZCB3aXRoIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA4NiwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDk6MDYuNjg3MzE2NTY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzNjIzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW50ZWxfcG11X2dldF9tc3JcIixcbiAgICBcImludGVsX3BtdV9zZXRfbXNyXCIsXG4gICAgXCJpbnRlbF9wbXVfcmVmcmVzaFwiLFxuICAgIFwiaW50ZWxfcG11X3Jlc2V0XCIsXG4gICAgXCJ2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c1wiLFxuICAgIFwiaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbFwiLFxuICAgIFwia3ZtX2luaXRfcG11X2NhcGFiaWxpdHlcIixcbiAgICBcInZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIE1TUl9QRVJGX01FVFJJQ1MgYW5kIGZpeGVkIGNvdW50ZXIgMyAoVE9QRE9XTi5TTE9UUykgdG8gS1ZNJ3MgSW50ZWwgUE1VIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgTVNSIHJlYWQvd3JpdGUgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB2aWEgUkRNU1IvV1JNU1IgYW5kIENQVUlEIGluc3RydWN0aW9ucywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgZW11bGF0aW9uIGFuZCBhdm9pZCBob3N0IGNyYXNoZXMgb3Igc3RhdGUgY29ycnVwdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImludGVsX3BtdV9nZXRfbXNyXCIsXG4gICAgXCJpbnRlbF9wbXVfc2V0X21zclwiLFxuICAgIFwiaW50ZWxfcG11X3JlZnJlc2hcIixcbiAgICBcImludGVsX3BtdV9yZXNldFwiLFxuICAgIFwidm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNcIixcbiAgICBcImludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWxcIixcbiAgICBcImt2bV9pbml0X3BtdV9jYXBhYmlsaXR5XCIsXG4gICAgXCJ2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBNU1JfUEVSRl9NRVRSSUNTIGFuZCBmaXhlZCBjb3VudGVyIDMgKFRPUERPV04uU0xPVFMpIHRvIEtWTSdzIEludGVsIFBNVSBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIE1TUiByZWFkL3dyaXRlIGhhbmRsZXJzLCBDUFVJRCBldmFsdWF0aW9uLCBhbmQgUE1VIGluaXRpYWxpemF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdmlhIFJETVNSL1dSTVNSIGFuZCBDUFVJRCBpbnN0cnVjdGlvbnMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGVtdWxhdGlvbiBhbmQgYXZvaWQgaG9zdCBjcmFzaGVzIG9yIHN0YXRlIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6clsm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 04:39:25 +0000 UTC FinishedAt: 2026-06-23 04:49:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9d4853b044beefa21c4ee3e18c40653601a64ced", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9d4853b044beefa21c4ee3e18c40653601a64ced", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "1d7dc93d-28e5-4ab6-8f40-933e7dd17521" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "intel_pmu_get_msr", "intel_pmu_set_msr", "intel_pmu_refresh", "intel_pmu_reset", "vmx_recalc_pmu_msr_intercepts", "intel_get_fixed_pmc_eventsel", "kvm_init_pmu_capability", "vmx_get_perf_capabilities" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbnRlbF9wbXVfZ2V0X21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfc2V0X21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfcmVzZXQmIzM0OywKICAgICYjMzQ7dm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMmIzM0OywKICAgICYjMzQ7aW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9wbXVfY2FwYWJpbGl0eSYjMzQ7LAogICAgJiMzNDt2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTVNSX1BFUkZfTUVUUklDUyBhbmQgZml4ZWQgY291bnRlciAzIChUT1BET1dOLlNMT1RTKSB0byBLVk0mIzM5O3MgSW50ZWwgUE1VIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgTVNSIHJlYWQvd3JpdGUgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB2aWEgUkRNU1IvV1JNU1IgYW5kIENQVUlEIGluc3RydWN0aW9ucywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgZW11bGF0aW9uIGFuZCBhdm9pZCBob3N0IGNyYXNoZXMgb3Igc3RhdGUgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGExMjFiODhhNThhNzQ0NGFlZWI1NGVmYWRjZTc2NzVjODkxZTdkMzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwNDo0Nzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWVlNDczNzE3YzBlNWEuLjRmNTQ5ZWYwMTJkMjA0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTU3NCw3ICYjNDM7NTc0LDcgQEAgc3RydWN0IGt2bV9wbWMge1xuICNkZWZpbmUgS1ZNX01BWF9OUl9HUF9DT1VOVEVSU1x0XHRLVk1fTUFYKEtWTV9NQVhfTlJfSU5URUxfR1BfQ09VTlRFUlMsIFxcXG4gXHRcdFx0XHRcdFx0S1ZNX01BWF9OUl9BTURfR1BfQ09VTlRFUlMpXG4gXG4tI2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTXHQzXG4mIzQzOyNkZWZpbmUgS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSU1x0NFxuICNkZWZpbmUgS1ZNX01BWF9OUl9BTURfRklYRURfQ09VTlRFUlNcdDBcbiAjZGVmaW5lIEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlNcdEtWTV9NQVgoS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUywgXFxcbiBcdFx0XHRcdFx0XHRLVk1fTUFYX05SX0FNRF9GSVhFRF9DT1VOVEVSUylcbkBAIC01OTQsNiAmIzQzOzU5NCw3IEBAIHN0cnVjdCBrdm1fcG11IHtcbiBcdHU2NCBnbG9iYWxfc3RhdHVzX3JzdmQ7XG4gXHR1NjQgcmVzZXJ2ZWRfYml0cztcbiBcdHU2NCByYXdfZXZlbnRfbWFzaztcbiYjNDM7XHR1NjQgcGVyZl9tZXRyaWNzO1xuIFx0c3RydWN0IGt2bV9wbWMgZ3BfY291bnRlcnNbS1ZNX01BWF9OUl9HUF9DT1VOVEVSU107XG4gXHRzdHJ1Y3Qga3ZtX3BtYyBmaXhlZF9jb3VudGVyc1tLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTXTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAxOGM0YmU3NWU5MjcxOS4uZmRjYWViNmM4MzUyYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbkBAIC0zMzEsNiAmIzQzOzMzMSw3IEBAXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0ZPUk1BVFx0XHQweGYwMFxuICNkZWZpbmUgUEVSRl9DQVBfRldfV1JJVEVTXHRcdEJJVF9VTEwoMTMpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FXHRcdEJJVF9VTEwoMTQpXG4mIzQzOyNkZWZpbmUgUEVSRl9DQVBfUEVSRl9NRVRSSUNTXHRcdEJJVF9VTEwoMTUpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX1RJTUlOR19JTkZPXHRCSVRfVUxMKDE3KVxuICNkZWZpbmUgUEVSRl9DQVBfUEVCU19NQVNLXHRcdChQRVJGX0NBUF9QRUJTX1RSQVAgfCBQRVJGX0NBUF9BUkNIX1JFRyB8IFxcXG4gXHRcdFx0XHRcdCBQRVJGX0NBUF9QRUJTX0ZPUk1BVCB8IFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkUgfCBcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxuaW5kZXggMWViMTM2NzNlODg5ZjkuLmJjMmUxY2JjZDliOTdlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcbkBAIC00NDcsNiAmIzQzOzQ0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc190b3Bkb3duX2lkeChpbnQgaWR4KVxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19BUkNIX1BFQlNfVEhSRVNIT0xEX0JJVFx0NTRcbiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfQVJDSF9QRUJTX1RIUkVTSE9MRFx0QklUX1VMTChHTE9CQUxfU1RBVFVTX0FSQ0hfUEVCU19USFJFU0hPTERfQklUKVxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGX0JJVFx0NDhcbiYjNDM7I2RlZmluZSBHTE9CQUxfU1RBVFVTX1BFUkZfTUVUUklDU19PVkZcdFx0QklUX1VMTChHTE9CQUxfU1RBVFVTX1BFUkZfTUVUUklDU19PVkZfQklUKVxuIFxuICNkZWZpbmUgR0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTXHRcdEJJVF9VTEwoNDgpXG4gLypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcG11LmMgYi9hcmNoL3g4Ni9rdm0vcG11LmNcbmluZGV4IGI5MmRkMmU1ODMzNTY3Li4wZmFmNTgwNzgyZDVhZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9wbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3BtdS5jXG5AQCAtMTIyLDYgJiM0MzsxMjIsOCBAQCB2b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcbiB7XG4gXHRib29sIGlzX2ludGVsID0gYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUw7XG4gXHRpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLVx1MDAzZU1JTl9OUl9HUF9DT1VOVEVSUztcbiYjNDM7XHR1bmlvbiBjcHVpZDEwX2VkeCBlZHg7XG4mIzQzO1x0dTMyIGVheCwgZWJ4LCBlY3g7XG4gXG4gXHQvKlxuIFx0ICogSHlicmlkIFBNVXMgZG9uJiMzOTt0IHBsYXkgbmljZSB3aXRoIHZpcnR1YWxpemF0aW9uIHdpdGhvdXQgY2FyZWZ1bFxuQEAgLTE2OSw2ICYjNDM7MTcxLDIyIEBAIHZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKVxuIFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCxcbiBcdFx0XHRcdFx0ICAgICBLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEludGVsIHBsYXRmb3JtcyBtYXkgc3VwcG9ydCBub24tY29udGlndW91cyBmaXhlZCBjb3VudGVycywgZS5nLiwgc29tZVxuJiM0MztcdCAqIEUtY29yZSBiYXNlZCBzZXJ2ZXIgcHJvY2Vzc29ycyBkb24mIzM5O3QgaW1wbGVtZW50IGZpeGVkIGNvdW50ZXIgMy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEJlZm9yZSBLVk0gc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgZml4ZWQgY291bnRlcnMsIG1ha2Ugc3VyZSBvbmx5XG4mIzQzO1x0ICogY29udGlndW91cyBvbmVzIGFyZSByZXRhaW5lZCBpbiBrdm1fcG11X2NhcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoa3ZtX2hvc3RfcG11LnZlcnNpb24gXHUwMDNlPSA1KSB7XG4mIzQzO1x0XHRjcHVpZCgxMCwgXHUwMDI2ZWF4LCBcdTAwMjZlYngsIFx1MDAyNmVjeCwgXHUwMDI2ZWR4LmZ1bGwpO1xuJiM0MztcdFx0aWYgKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCBcdTAwM2UgZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZClcbiYjNDM7XHRcdFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSBcdTAwMjZcdTAwMjYga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkIFx1MDAzZSAzKVxuJiM0MztcdFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gMztcbiYjNDM7XG4gXHRrdm1fcG11X2V2ZW50c2VsLklOU1RSVUNUSU9OU19SRVRJUkVEID1cbiBcdFx0cGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKTtcbiBcdGt2bV9wbXVfZXZlbnRzZWwuQlJBTkNIX0lOU1RSVUNUSU9OU19SRVRJUkVEID1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuaW5kZXggYTczYTk1MTVkOTZjZDUuLjJjMzM2N2Y1ZTJkZmI4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xuQEAgLTE4OCw2ICYjNDM7MTg4LDggQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbiBcdHN3aXRjaCAobXNyKSB7XG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7XG4mIzQzO1x0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxuJiM0MztcdFx0cmV0dXJuIHZjcHVfaGFzX3BlcmZfbWV0cmljcyh2Y3B1KTtcbiBcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XG4gXHRcdHJldCA9IHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpIFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVDtcbiBcdFx0YnJlYWs7XG5AQCAtMzQ1LDYgJiM0MzszNDcsMTEgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBwbXUtXHUwMDNlZml4ZWRfY3RyX2N0cmw7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX1BFUkZfTUVUUklDUzpcbiYjNDM7XHRcdGlmICghbXNyX2luZm8tXHUwMDNlaG9zdF9pbml0aWF0ZWQpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0bXNyX2luZm8tXHUwMDNlZGF0YSA9IHBtdS1cdTAwM2VwZXJmX21ldHJpY3M7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBwbXUtXHUwMDNlcGVic19lbmFibGU7XG4gXHRcdGJyZWFrO1xuQEAgLTM5NCw2ICYjNDM7NDAxLDE2IEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIFx0XHRpZiAocG11LVx1MDAzZWZpeGVkX2N0cl9jdHJsICE9IGRhdGEpXG4gXHRcdFx0cmVwcm9ncmFtX2ZpeGVkX2NvdW50ZXJzKHBtdSwgZGF0YSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTVNSX1BFUkZfTUVUUklDUzpcbiYjNDM7XHRcdGlmICghbXNyX2luZm8tXHUwMDNlaG9zdF9pbml0aWF0ZWQpXG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiBUTUEgbGV2ZWwgMiBpcyBub3Qgc3VwcG9ydGVkLCBiaXRzIFs2MzozMl0gYXJlIHJlc2VydmVkXG4mIzQzO1x0XHQgKiBhbmQgaWdub3JlZCBvbiB3cml0ZSwgc28gbm8gdmFsaWRhdGlvbiBpcyBuZWVkZWQgaGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cG11LVx1MDAzZXBlcmZfbWV0cmljcyA9IGRhdGE7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XG4gXHRcdGlmIChkYXRhIFx1MDAyNiBwbXUtXHUwMDNlcGVic19lbmFibGVfcnN2ZClcbiBcdFx0XHRyZXR1cm4gMTtcbkBAIC00NjQsMjggJiM0Mzs0ODEsMzAgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gICogZGlmZmVyZW50IHBlcmZfZXZlbnQgaXMgYWxyZWFkeSB1dGlsaXppbmcgdGhlIHJlcXVlc3RlZCBjb3VudGVyLCBidXQgdGhlIGVuZFxuICAqIHJlc3VsdCBpcyB0aGUgc2FtZSAoaWdub3JpbmcgdGhlIGZhY3QgdGhhdCB1c2luZyBhIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyXG4gICogd2lsbCBsaWtlbHkgZXhhY2VyYmF0ZSBjb3VudGVyIGNvbnRlbnRpb24pLlxuLSAqXG4tICogRm9yY2libHkgaW5saW5lZCB0byBhbGxvdyBhc3NlcnRpbmcgb24gQGluZGV4IGF0IGJ1aWxkIHRpbWUsIGFuZCB0aGVyZSBzaG91bGRcbi0gKiBuZXZlciBiZSBtb3JlIHRoYW4gb25lIHVzZXIuXG4gICovXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXG4mIzQzO3N0YXRpYyB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXG4ge1xuIFx0Y29uc3QgZW51bSBwZXJmX2h3X2lkIGZpeGVkX3BtY19wZXJmX2lkc1tdID0ge1xuIFx0XHRbMF0gPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcbiBcdFx0WzFdID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuIFx0XHRbMl0gPSBQRVJGX0NPVU5UX0hXX1JFRl9DUFVfQ1lDTEVTLFxuIFx0fTtcbi1cdHU2NCBldmVudHNlbDtcbi1cbi1cdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGZpeGVkX3BtY19wZXJmX2lkcykgIT0gS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUyk7XG4tXHRCVUlMRF9CVUdfT04oaW5kZXggXHUwMDNlPSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTKTtcbiYjNDM7XHR1NjQgZXZlbnRzZWwgPSAwO1xuIFxuIFx0Lypcbi1cdCAqIFllbGwgaWYgcGVyZiByZXBvcnRzIHN1cHBvcnQgZm9yIGEgZml4ZWQgY291bnRlciBidXQgcGVyZiBkb2VzbiYjMzk7dFxuLVx0ICogaGF2ZSBhIGtub3duIGVuY29kaW5nIGZvciB0aGUgYXNzb2NpYXRlZCBnZW5lcmFsIHB1cnBvc2UgZXZlbnQuXG4mIzQzO1x0ICogRml4ZWQgY291bnRlcnMgMyBhbmQgYWJvdmUgZG9uJiMzOTt0IGhhdmUgY29ycmVzcG9uZGluZyBnZW5lcmljIGhhcmR3YXJlXG4mIzQzO1x0ICogcGVyZiBldmVudCwgYW5kIEtWTSBkb2VzIG5vdCBpbnRlbmQgdG8gZW11bGF0ZSB0aGVtIG9uIG5vbi1tZWRpYXRlZFxuJiM0MztcdCAqIHZQTVUuXG4gXHQgKi9cbi1cdGV2ZW50c2VsID0gcGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKGZpeGVkX3BtY19wZXJmX2lkc1tpbmRleF0pO1xuLVx0V0FSTl9PTl9PTkNFKCFldmVudHNlbCBcdTAwMjZcdTAwMjYgaW5kZXggXHUwMDNjIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCk7XG4mIzQzO1x0aWYgKGluZGV4IFx1MDAzYyBBUlJBWV9TSVpFKGZpeGVkX3BtY19wZXJmX2lkcykpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBZZWxsIGlmIHBlcmYgcmVwb3J0cyBzdXBwb3J0IGZvciBhIGZpeGVkIGNvdW50ZXIgYnV0IHBlcmZcbiYjNDM7XHRcdCAqIGRvZXNuJiMzOTt0IGhhdmUgYSBrbm93biBlbmNvZGluZyBmb3IgdGhlIGFzc29jaWF0ZWQgZ2VuZXJhbFxuJiM0MztcdFx0ICogcHVycG9zZSBldmVudC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZXZlbnRzZWwgPSBwZXJmX2dldF9od19ldmVudF9jb25maWcoZml4ZWRfcG1jX3BlcmZfaWRzW2luZGV4XSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoIWV2ZW50c2VsIFx1MDAyNlx1MDAyNiBpbmRleCBcdTAwM2Mga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gZXZlbnRzZWw7XG4gfVxuIFxuQEAgLTU4Nyw2ICYjNDM7NjA2LDExIEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZWZyZXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cG11LVx1MDAzZWdsb2JhbF9zdGF0dXNfcnN2ZCBcdTAwMjY9XG4gXHRcdFx0XHR+TVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxfVFJBQ0VfVE9QQV9QTUk7XG4gXG4mIzQzO1x0aWYgKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpIHtcbiYjNDM7XHRcdHBtdS1cdTAwM2VnbG9iYWxfY3RybF9yc3ZkIFx1MDAyNj0gfkdMT0JBTF9DVFJMX0VOX1BFUkZfTUVUUklDUztcbiYjNDM7XHRcdHBtdS1cdTAwM2VnbG9iYWxfc3RhdHVzX3JzdmQgXHUwMDI2PSB+R0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocGVyZl9jYXBhYmlsaXRpZXMgXHUwMDI2IFBFUkZfQ0FQX1BFQlNfRk9STUFUKSB7XG4gXHRcdGlmIChwZXJmX2NhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9DQVBfUEVCU19CQVNFTElORSkge1xuIFx0XHRcdHBtdS1cdTAwM2VwZWJzX2VuYWJsZV9yc3ZkID0gY291bnRlcl9yc3ZkO1xuQEAgLTYzMCw2ICYjNDM7NjU0LDkgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0cG11LVx1MDAzZXBlcmZfbWV0cmljcyA9IDA7XG4gXHRpbnRlbF9wbXVfcmVsZWFzZV9ndWVzdF9sYnJfZXZlbnQodmNwdSk7XG4gfVxuIFxuQEAgLTgwMSw2ICYjNDM7ODI4LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiBcdHU2NCBnbG9iYWxfc3RhdHVzLCB0b2dnbGU7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQRVJGX01FVFJJQ1MgTVNSIG11c3QgYmUgcmVzdG9yZWQgY2xvc2VseSBhZnRlciBmaXhlZCBjb3VudGVyIDMsXG4mIzQzO1x0ICogd2hpY2ggd2FzIGp1c3QgcmVzdG9yZWQgYnkga3ZtX3BtdV9sb2FkX2d1ZXN0X3BtY3MoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodmNwdV9oYXNfcGVyZl9tZXRyaWNzKHZjcHUpKVxuJiM0MztcdFx0d3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIHBtdS1cdTAwM2VwZXJmX21ldHJpY3MpO1xuJiM0MztcbiBcdHJkbXNycShNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIGdsb2JhbF9zdGF0dXMpO1xuIFx0dG9nZ2xlID0gcG11LVx1MDAzZWdsb2JhbF9zdGF0dXMgXiBnbG9iYWxfc3RhdHVzO1xuIFx0aWYgKGdsb2JhbF9zdGF0dXMgXHUwMDI2IHRvZ2dsZSlcbkBAIC04MjksNiAmIzQzOzg2MywxMiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9tZWRpYXRlZF9wbXVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqL1xuIFx0aWYgKHBtdS1cdTAwM2VmaXhlZF9jdHJfY3RybF9odylcbiBcdFx0d3Jtc3JxKE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwsIDApO1xuJiM0MztcbiYjNDM7XHRpZiAodmNwdV9oYXNfcGVyZl9tZXRyaWNzKHZjcHUpKSB7XG4mIzQzO1x0XHRwbXUtXHUwMDNlcGVyZl9tZXRyaWNzID0gcmRwbWMoSU5URUxfUE1DX0ZJWEVEX1JEUE1DX01FVFJJQ1MpO1xuJiM0MztcdFx0aWYgKHBtdS1cdTAwM2VwZXJmX21ldHJpY3MpXG4mIzQzO1x0XHRcdHdybXNycShNU1JfUEVSRl9NRVRSSUNTLCAwKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0cnVjdCBrdm1fcG11X29wcyBpbnRlbF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuaCBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmhcbmluZGV4IDVkOTM1NzY0MGFhMTgwLi41NzcwNTc3M2RjNDliNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmhcbkBAIC00MCw0ICYjNDM7NDAsOSBAQCBzdHJ1Y3QgbGJyX2Rlc2Mge1xuIFxuIGV4dGVybiBzdHJ1Y3QgeDg2X3BtdV9sYnIgdm14X2xicl9jYXBzO1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdmNwdV9oYXNfcGVyZl9tZXRyaWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX1BNVV9JTlRFTF9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGExYTVlZGIzOWE3ZWRkLi41ODRkOTllZjYwMjZlYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC00MjYwLDYgJiM0Mzs0MjYwLDEwIEBAIHN0YXRpYyB2b2lkIHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRcdCAgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7XG4gXHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLFxuIFx0XHRcdFx0ICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbiYjNDM7XG4mIzQzO1x0aW50ZXJjZXB0ID0gIWhhc19tZWRpYXRlZF9wbXUgfHwgIXZjcHVfaGFzX3BlcmZfbWV0cmljcyh2Y3B1KTtcbiYjNDM7XHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9QRVJGX01FVFJJQ1MsXG4mIzQzO1x0XHRcdFx0ICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdm14X3JlY2FsY19tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtODA4NCw2ICYjNDM7ODA4OCw5IEBAIHN0YXRpYyBfX2luaXQgdTY0IHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXModm9pZClcbiBcdFx0cGVyZl9jYXAgXHUwMDI2PSB+UEVSRl9DQVBfUEVCU19CQVNFTElORTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoZW5hYmxlX21lZGlhdGVkX3BtdSlcbiYjNDM7XHRcdHBlcmZfY2FwIHw9IGhvc3RfcGVyZl9jYXAgXHUwMDI2IFBFUkZfQ0FQX1BFUkZfTUVUUklDUztcbiYjNDM7XG4gXHRyZXR1cm4gcGVyZl9jYXA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggZDlkNTE4MDNiN2IyMDkuLjk2MjNmNTU4ZjM1OWRkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC0zNTAsOSAmIzQzOzM1MCw5IEBAIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHtcbiBcbiBzdGF0aWMgY29uc3QgdTMyIG1zcnNfdG9fc2F2ZV9wbXVbXSA9IHtcbiBcdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIxLFxuLVx0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICYjNDM7IDIsXG4mIzQzO1x0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIyLCBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjMsXG4gXHRNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLCBNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsXG4tXHRNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLFxuJiM0MztcdE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9QRVJGX01FVFJJQ1MsXG4gXHRNU1JfSUEzMl9QRUJTX0VOQUJMRSwgTVNSX0lBMzJfRFNfQVJFQSwgTVNSX1BFQlNfREFUQV9DRkcsXG4gXG4gXHQvKiBUaGlzIHBhcnQgb2YgTVNScyBzaG91bGQgbWF0Y2ggS1ZNX01BWF9OUl9JTlRFTF9HUF9DT1VOVEVSUy4gKi9cbkBAIC03Njc5LDYgJiM0Mzs3Njc5LDEwIEBAIHN0YXRpYyB2b2lkIGt2bV9wcm9iZV9tc3JfdG9fc2F2ZSh1MzIgbXNyX2luZGV4KVxuIFx0XHQgICAgIGludGVsX3B0X3ZhbGlkYXRlX2h3X2NhcChQVF9DQVBfbnVtX2FkZHJlc3NfcmFuZ2VzKSAqIDIpKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxuJiM0MztcdFx0aWYgKCEoa3ZtX2NhcHMuc3VwcG9ydGVkX3BlcmZfY2FwIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCAuLi5cbiBcdCAgICAgTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCAmIzQzOyBLVk1fTUFYX05SX0dQX0NPVU5URVJTIC0gMTpcbiBcdFx0aWYgKG1zcl9pbmRleCAtIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgXHUwMDNlPVxuQEAgLTc3NDIsNyAmIzQzOzc3NDYsNyBAQCBzdGF0aWMgdm9pZCBrdm1faW5pdF9tc3JfbGlzdHModm9pZClcbiB7XG4gXHR1bnNpZ25lZCBpO1xuIFxuLVx0QlVJTERfQlVHX09OX01TRyhLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTICE9IDMsXG4mIzQzO1x0QlVJTERfQlVHX09OX01TRyhLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTICE9IDQsXG4gXHRcdFx0IFwmIzM0O1BsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXCYjMzQ7KTtcbiBcbiBcdG51bV9tc3JzX3RvX3NhdmUgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbmluZGV4IGVmZjI5NjQ1NzE5YmM3Li5lNzc0NWUyY2Q1NDNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuQEAgLTMzMSw2ICYjNDM7MzMxLDcgQEBcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfRk9STUFUXHRcdDB4ZjAwXG4gI2RlZmluZSBQRVJGX0NBUF9GV19XUklURVNcdFx0QklUX1VMTCgxMylcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkVcdFx0QklUX1VMTCgxNClcbiYjNDM7I2RlZmluZSBQRVJGX0NBUF9QRVJGX01FVFJJQ1NcdFx0QklUX1VMTCgxNSlcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfVElNSU5HX0lORk9cdEJJVF9VTEwoMTcpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX01BU0tcdFx0KFBFUkZfQ0FQX1BFQlNfVFJBUCB8IFBFUkZfQ0FQX0FSQ0hfUkVHIHwgXFxcbiBcdFx0XHRcdFx0IFBFUkZfQ0FQX1BFQlNfRk9STUFUIHwgUEVSRl9DQVBfUEVCU19CQVNFTElORSB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oXG5pbmRleCA2MDhlZDgzZDdjNmE2OS4uNmMxOTUwM2UwYmI3ZGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaFxuQEAgLTUyLDYgJiM0Mzs1Miw5IEBAXG4gLyogRml4ZWQgUE1DIGNvbnRyb2xzLCBJbnRlbCBvbmx5LiAqL1xuICNkZWZpbmUgRklYRURfUE1DX0dMT0JBTF9DVFJMX0VOQUJMRShfaWR4KVx0QklUX1VMTCgoMzIgJiM0MzsgKF9pZHgpKSlcbiBcbiYjNDM7LyogUEVSRl9NRVRSSUNTIGVuYWJsZSwgSW50ZWwgb25seS4gKi9cbiYjNDM7I2RlZmluZSBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFXHRcdEJJVF9VTEwoNDgpXG4mIzQzO1xuICNkZWZpbmUgRklYRURfUE1DX0tFUk5FTFx0XHRcdEJJVF9VTEwoMClcbiAjZGVmaW5lIEZJWEVEX1BNQ19VU0VSXHRcdFx0XHRCSVRfVUxMKDEpXG4gI2RlZmluZSBGSVhFRF9QTUNfQU5ZVEhSRUFEXHRcdFx0QklUX1VMTCgyKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuaW5kZXggZGM2YWZhYzNhYTkxOTUuLmQ0Njg4YTdkMWU1NTY5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtwbXUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Byb2Nlc3Nvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiBcbiAvKiBOdW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcCBmb3IgdGhlIGd1ZXN0IG1lYXN1cmVtZW50IHBheWxvYWQuICovXG4gI2RlZmluZSBOVU1fTE9PUFNcdFx0XHQxMFxuQEAgLTI0MSwxNyAmIzQzOzI0MiwyMCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0KTtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4tI2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKVx0XHRcXFxuJiM0MzsjZGVmaW5lIEdVRVNUX1JVTl9QQVlMT0FEKF9jdHJsX21zciwgX3ZhbHVlLCBGRVApXHRcdFx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHR3cm1zcihfcG1jX21zciwgMCk7XHRcdFx0XHRcdFx0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFVTSE9QVCkpXHRcdFx0XHRcXFxuIFx0XHRHVUVTVF9NRUFTVVJFX0VWRU5UKF9jdHJsX21zciwgX3ZhbHVlLCBcJiMzNDtjbGZsdXNob3B0ICVbbV1cJiMzNDssIEZFUCk7XHRcXFxuIFx0ZWxzZSBpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxVU0gpKVx0XHRcdFx0XFxcbiBcdFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXCYjMzQ7Y2xmbHVzaCAgJVttXVwmIzM0OywgRkVQKTtcdFxcXG4gXHRlbHNlXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXCYjMzQ7bm9wXCYjMzQ7LCBGRVApO1x0XHRcXFxuLVx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSB3aGlsZSAoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VFU1RfVEVTVF9FVkVOVChfaWR4LCBfcG1jLCBfcG1jX21zciwgX2N0cmxfbXNyLCBfdmFsdWUsIEZFUClcdFx0XFxcbiYjNDM7ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR3cm1zcihfcG1jX21zciwgMCk7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdEdVRVNUX1JVTl9QQVlMT0FEKF9jdHJsX21zciwgX3ZhbHVlLCBGRVApO1x0XHRcdFx0XFxcbiBcdGd1ZXN0X2Fzc2VydF9ldmVudF9jb3VudChfaWR4LCBfcG1jLCBfcG1jX21zcik7XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG5AQCAtMzE4LDYgJiM0MzszMjIsNTYgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KHU4IGlkeClcbiBcdFx0XHRcdEZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoaSkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wZXJmX21ldHJpY3Modm9pZClcbiYjNDM7e1xuJiM0MztcdGludCByZXRpcmluZywgYmFkX3NwZWMsIGZlX2JvdW5kLCBiZV9ib3VuZCwgc3VtO1xuJiM0MztcdHU2NCBnbG9iYWxfY3RybCwgbWV0cmljcztcbiYjNDM7XG4mIzQzO1x0aWYgKChndWVzdF9nZXRfcG11X3ZlcnNpb24oKSBcdTAwM2MgMikgfHxcdC8qIERvZXMgZ3Vlc3QgaGF2ZSBHTE9CQUxfQ1RSTD8gKi9cbiYjNDM7XHQgICAgIXRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9QRENNKSB8fFxuJiM0MztcdCAgICAhKHJkbXNyKE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTKSBcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3Jtc3IoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgMCk7XG4mIzQzO1x0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIzLCAwKTtcbiYjNDM7XHR3cm1zcihNU1JfUEVSRl9NRVRSSUNTLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGZpeGVkIGN0cjMgKFRPUERPV04uU0xPVFMpIGFuZCBQRVJGX01FVFJJQ1MuICovXG4mIzQzO1x0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgRklYRURfUE1DX0NUUkwoMywgRklYRURfUE1DX0tFUk5FTCkpO1xuJiM0MztcdGdsb2JhbF9jdHJsID0gRklYRURfUE1DX0dMT0JBTF9DVFJMX0VOQUJMRSgzKSB8XG4mIzQzO1x0XHQgICAgICBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9SVU5fUEFZTE9BRChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBnbG9iYWxfY3RybCwgXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgdGVzdCByZXN1bHRzLiAqL1xuJiM0MztcdG1ldHJpY3MgPSByZG1zcihNU1JfUEVSRl9NRVRSSUNTKTtcbiYjNDM7XHRyZXRpcmluZyA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCg3LCAwKSwgbWV0cmljcyk7XG4mIzQzO1x0YmFkX3NwZWMgPSBGSUVMRF9HRVQoR0VOTUFTS19VTEwoMTUsIDgpLCBtZXRyaWNzKTtcbiYjNDM7XHRmZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgyMywgMTYpLCBtZXRyaWNzKTtcbiYjNDM7XHRiZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgzMSwgMjQpLCBtZXRyaWNzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCZSBjb25zZXJ2YXRpdmU6IHRoZSBtZWFzdXJlZCBwYXlsb2FkIGRlZmluaXRlbHkgcmV0aXJlcyB3b3JrLCBzb1xuJiM0MztcdCAqIFJldGlyaW5nIHNob3VsZCBiZSBub24temVyby5cbiYjNDM7XHQgKi9cbiYjNDM7XHRHVUVTVF9BU1NFUlRfTkUobWV0cmljcywgMFVMTCk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUX05FKHJldGlyaW5nLCAwVUxMKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgc3VtIG9mIHRoZSA0IGxldmVsLTEgdG9wZG93biBtZXRyaWNzIHNob3VsZCBiZSBjbG9zZSB0byAxMDAlLlxuJiM0MztcdCAqIDMgaXMgY2hvc2VuIGFzIGEgbG9vc2Ugc2FuaXR5IGNoZWNrLlxuJiM0MztcdCAqL1xuJiM0MztcdHN1bSA9IHJldGlyaW5nICYjNDM7IGJhZF9zcGVjICYjNDM7IGZlX2JvdW5kICYjNDM7IGJlX2JvdW5kO1xuJiM0MztcdEdVRVNUX0FTU0VSVChzdW0gXHUwMDNlPSAweGZkIFx1MDAyNlx1MDAyNiBzdW0gXHUwMDNjPSAweDEwMik7XG4mIzQzO1xuJiM0MztcdC8qIFNhbml0eSBjaGVjayBhZnRlciBQRVJGX01FVFJJQ1MgZGlzYWJsZWQuICovXG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7bG9vcCAuXCYjMzQ7IDogXCYjMzQ7JiM0MztjXCYjMzQ7KChpbnQpe05VTV9MT09QU30pKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIG1ldHJpY3MpO1xuJiM0MztcdHdybXNyKE1TUl9QRVJGX01FVFJJQ1MsIDB4ZGVhZGRlYWQpO1xuJiM0MztcbiYjNDM7XHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIDB4ZGVhZGRlYWQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcbiB7XG4gXHR1OCBpO1xuQEAgLTMyNSw2ICYjNDM7Mzc5LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyh2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfSU5URUxfQVJDSF9FVkVOVFM7IGkmIzQzOyYjNDM7KVxuIFx0XHRndWVzdF90ZXN0X2FyY2hfZXZlbnQoaSk7XG4gXG4mIzQzO1x0Z3Vlc3RfdGVzdF9wZXJmX21ldHJpY3MoKTtcbiYjNDM7XG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuQEAgLTM2MSw3ICYjNDM7NDE3LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmNoX2V2ZW50cyh1OCBwbXVfdmVyc2lvbiwgdTY0IHBlcmZfY2FwYWJpbGl0aWVzLFxuICAqIG90aGVyIHRoYW4gUE1DcyBpbiB0aGUgZnV0dXJlLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX0dQX0NPVU5URVJTXHQ4XG4tI2RlZmluZSBNQVhfTlJfRklYRURfQ09VTlRFUlNcdDNcbiYjNDM7I2RlZmluZSBNQVhfTlJfRklYRURfQ09VTlRFUlNcdDRcbiBcbiAjZGVmaW5lIEdVRVNUX0FTU0VSVF9QTUNfTVNSX0FDQ0VTUyhpbnNuLCBtc3IsIGV4cGVjdF9ncCwgdmVjdG9yKVx0XHRcXFxuIF9fR1VFU1RfQVNTRVJUKGV4cGVjdF9ncCA/IHZlY3RvciA9PSBHUF9WRUNUT1IgOiAhdmVjdG9yLFx0XHRcdFxcXG5AQCAtNTg1LDYgJiM0Mzs2NDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4gXHR1OCBucl9maXhlZF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9GSVhFRF9DT1VOVEVSUyk7XG4gXHR1OCBucl9ncF9jb3VudGVycyA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9OUl9HUF9DT1VOVEVSUyk7XG4gXHR1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTtcbiYjNDM7XHR1NjQgYWR2ZXJ0aXNlZF9wZXJmX2NhcHMgPSBrdm1fZ2V0X2ZlYXR1cmVfbXNyKE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTKTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFx0dTggdiwgajtcbiBcdHUzMiBrO1xuQEAgLTU5Miw2ICYjNDM7NjQ5LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xuIFx0XHQwLFxuIFx0XHRQTVVfQ0FQX0ZXX1dSSVRFUyxcbiYjNDM7XHRcdFBFUkZfQ0FQX1BFUkZfTUVUUklDUyxcbiBcdH07XG4gXG4gXHQvKlxuQEAgLTY0OSw2ICYjNDM7NzA3LDEwIEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdFx0XHRpZiAoIWt2bV9oYXNfcGVyZl9jYXBzIFx1MDAyNlx1MDAyNiBwZXJmX2NhcHNbaV0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdFx0LyogSWdub3JlIHVuc3VwcG9ydGVkIGZlYXR1cmVzLiAqL1xuJiM0MztcdFx0XHRpZiAocGVyZl9jYXBzW2ldIFx1MDAyNiB+YWR2ZXJ0aXNlZF9wZXJmX2NhcHMpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBhcmNoIGV2ZW50cywgUE1VIHZlcnNpb24gJXUsIHBlcmZfY2FwcyA9ICVseFxcblwmIzM0OyxcbiBcdFx0XHRcdHYsIHBlcmZfY2Fwc1tpXSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ludGVsX3BtdV9nZXRfbXNyJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9zZXRfbXNyJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9yZWZyZXNoJiMzNDssCiAgICAmIzM0O2ludGVsX3BtdV9yZXNldCYjMzQ7LAogICAgJiMzNDt2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0cyYjMzQ7LAogICAgJiMzNDtpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsJiMzNDssCiAgICAmIzM0O2t2bV9pbml0X3BtdV9jYXBhYmlsaXR5JiMzNDssCiAgICAmIzM0O3ZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBNU1JfUEVSRl9NRVRSSUNTIGFuZCBmaXhlZCBjb3VudGVyIDMgKFRPUERPV04uU0xPVFMpIHRvIEtWTSYjMzk7cyBJbnRlbCBQTVUgZW11bGF0aW9uLiBJdCBtb2RpZmllcyBNU1IgcmVhZC93cml0ZSBoYW5kbGVycywgQ1BVSUQgZXZhbHVhdGlvbiwgYW5kIFBNVSBpbml0aWFsaXphdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHZpYSBSRE1TUi9XUk1TUiBhbmQgQ1BVSUQgaW5zdHJ1Y3Rpb25zLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBlbXVsYXRpb24gYW5kIGF2b2lkIGhvc3QgY3Jhc2hlcyBvciBzdGF0ZSBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMTIxYjg4YTU4YTc0NDRhZWViNTRlZmFkY2U3Njc1Yzg5MWU3ZDM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMDQ6NDc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBlZWU0NzM3MTdjMGU1YS4uNGY1NDllZjAxMmQyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNTc0LDcgJiM0Mzs1NzQsNyBAQCBzdHJ1Y3Qga3ZtX3BtYyB7CiAjZGVmaW5lIEtWTV9NQVhfTlJfR1BfQ09VTlRFUlMJCUtWTV9NQVgoS1ZNX01BWF9OUl9JTlRFTF9HUF9DT1VOVEVSUywgXAogCQkJCQkJS1ZNX01BWF9OUl9BTURfR1BfQ09VTlRFUlMpCiAKLSNkZWZpbmUgS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUwkzCiYjNDM7I2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTCTQKICNkZWZpbmUgS1ZNX01BWF9OUl9BTURfRklYRURfQ09VTlRFUlMJMAogI2RlZmluZSBLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTCUtWTV9NQVgoS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUywgXAogCQkJCQkJS1ZNX01BWF9OUl9BTURfRklYRURfQ09VTlRFUlMpCkBAIC01OTQsNiAmIzQzOzU5NCw3IEBAIHN0cnVjdCBrdm1fcG11IHsKIAl1NjQgZ2xvYmFsX3N0YXR1c19yc3ZkOwogCXU2NCByZXNlcnZlZF9iaXRzOwogCXU2NCByYXdfZXZlbnRfbWFzazsKJiM0MzsJdTY0IHBlcmZfbWV0cmljczsKIAlzdHJ1Y3Qga3ZtX3BtYyBncF9jb3VudGVyc1tLVk1fTUFYX05SX0dQX0NPVU5URVJTXTsKIAlzdHJ1Y3Qga3ZtX3BtYyBmaXhlZF9jb3VudGVyc1tLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTXTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCAxOGM0YmU3NWU5MjcxOS4uZmRjYWViNmM4MzUyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC0zMzEsNiAmIzQzOzMzMSw3IEBACiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfRk9STUFUCQkweGYwMAogI2RlZmluZSBQRVJGX0NBUF9GV19XUklURVMJCUJJVF9VTEwoMTMpCiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkUJCUJJVF9VTEwoMTQpCiYjNDM7I2RlZmluZSBQRVJGX0NBUF9QRVJGX01FVFJJQ1MJCUJJVF9VTEwoMTUpCiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfVElNSU5HX0lORk8JQklUX1VMTCgxNykKICNkZWZpbmUgUEVSRl9DQVBfUEVCU19NQVNLCQkoUEVSRl9DQVBfUEVCU19UUkFQIHwgUEVSRl9DQVBfQVJDSF9SRUcgfCBcCiAJCQkJCSBQRVJGX0NBUF9QRUJTX0ZPUk1BVCB8IFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggMWViMTM2NzNlODg5ZjkuLmJjMmUxY2JjZDliOTdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC00NDcsNiAmIzQzOzQ0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc190b3Bkb3duX2lkeChpbnQgaWR4KQogI2RlZmluZSBHTE9CQUxfU1RBVFVTX0FSQ0hfUEVCU19USFJFU0hPTERfQklUCTU0CiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfQVJDSF9QRUJTX1RIUkVTSE9MRAlCSVRfVUxMKEdMT0JBTF9TVEFUVVNfQVJDSF9QRUJTX1RIUkVTSE9MRF9CSVQpCiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRl9CSVQJNDgKJiM0MzsjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRgkJQklUX1VMTChHTE9CQUxfU1RBVFVTX1BFUkZfTUVUUklDU19PVkZfQklUKQogCiAjZGVmaW5lIEdMT0JBTF9DVFJMX0VOX1BFUkZfTUVUUklDUwkJQklUX1VMTCg0OCkKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcG11LmMgYi9hcmNoL3g4Ni9rdm0vcG11LmMKaW5kZXggYjkyZGQyZTU4MzM1NjcuLjBmYWY1ODA3ODJkNWFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcG11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3BtdS5jCkBAIC0xMjIsNiAmIzQzOzEyMiw4IEBAIHZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKQogewogCWJvb2wgaXNfaW50ZWwgPSBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTDsKIAlpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLSZndDtNSU5fTlJfR1BfQ09VTlRFUlM7CiYjNDM7CXVuaW9uIGNwdWlkMTBfZWR4IGVkeDsKJiM0MzsJdTMyIGVheCwgZWJ4LCBlY3g7CiAKIAkvKgogCSAqIEh5YnJpZCBQTVVzIGRvbiYjMzk7dCBwbGF5IG5pY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiB3aXRob3V0IGNhcmVmdWwKQEAgLTE2OSw2ICYjNDM7MTcxLDIyIEBAIHZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKQogCWt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IG1pbihrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQsCiAJCQkJCSAgICAgS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyk7CiAKJiM0MzsJLyoKJiM0MzsJICogSW50ZWwgcGxhdGZvcm1zIG1heSBzdXBwb3J0IG5vbi1jb250aWd1b3VzIGZpeGVkIGNvdW50ZXJzLCBlLmcuLCBzb21lCiYjNDM7CSAqIEUtY29yZSBiYXNlZCBzZXJ2ZXIgcHJvY2Vzc29ycyBkb24mIzM5O3QgaW1wbGVtZW50IGZpeGVkIGNvdW50ZXIgMy4KJiM0MzsJICoKJiM0MzsJICogQmVmb3JlIEtWTSBzdXBwb3J0cyBub24tY29udGlndW91cyBmaXhlZCBjb3VudGVycywgbWFrZSBzdXJlIG9ubHkKJiM0MzsJICogY29udGlndW91cyBvbmVzIGFyZSByZXRhaW5lZCBpbiBrdm1fcG11X2NhcC4KJiM0MzsJICovCiYjNDM7CWlmIChrdm1faG9zdF9wbXUudmVyc2lvbiAmZ3Q7PSA1KSB7CiYjNDM7CQljcHVpZCgxMCwgJmFtcDtlYXgsICZhbXA7ZWJ4LCAmYW1wO2VjeCwgJmFtcDtlZHguZnVsbCk7CiYjNDM7CQlpZiAoa3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkICZndDsgZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZCkKJiM0MzsJCQlrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQgPSBlZHguc3BsaXQubnVtX2NvdW50ZXJzX2ZpeGVkOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZW5hYmxlX21lZGlhdGVkX3BtdSAmYW1wOyZhbXA7IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCAmZ3Q7IDMpCiYjNDM7CQlrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQgPSAzOwomIzQzOwogCWt2bV9wbXVfZXZlbnRzZWwuSU5TVFJVQ1RJT05TX1JFVElSRUQgPQogCQlwZXJmX2dldF9od19ldmVudF9jb25maWcoUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMpOwogCWt2bV9wbXVfZXZlbnRzZWwuQlJBTkNIX0lOU1RSVUNUSU9OU19SRVRJUkVEID0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jCmluZGV4IGE3M2E5NTE1ZDk2Y2Q1Li4yYzMzNjdmNWUyZGZiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jCkBAIC0xODgsNiAmIzQzOzE4OCw4IEBAIHN0YXRpYyBib29sIGludGVsX2lzX3ZhbGlkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IpCiAJc3dpdGNoIChtc3IpIHsKIAljYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6CiAJCXJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7CiYjNDM7CWNhc2UgTVNSX1BFUkZfTUVUUklDUzoKJiM0MzsJCXJldHVybiB2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7CiAJY2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRToKIAkJcmV0ID0gdmNwdV9nZXRfcGVyZl9jYXBhYmlsaXRpZXModmNwdSkgJmFtcDsgUEVSRl9DQVBfUEVCU19GT1JNQVQ7CiAJCWJyZWFrOwpAQCAtMzQ1LDYgJiM0MzszNDcsMTEgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pCiAJY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOgogCQltc3JfaW5mby0mZ3Q7ZGF0YSA9IHBtdS0mZ3Q7Zml4ZWRfY3RyX2N0cmw7CiAJCWJyZWFrOwomIzQzOwljYXNlIE1TUl9QRVJGX01FVFJJQ1M6CiYjNDM7CQlpZiAoIW1zcl9pbmZvLSZndDtob3N0X2luaXRpYXRlZCkKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJCW1zcl9pbmZvLSZndDtkYXRhID0gcG11LSZndDtwZXJmX21ldHJpY3M7CiYjNDM7CQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOgogCQltc3JfaW5mby0mZ3Q7ZGF0YSA9IHBtdS0mZ3Q7cGVic19lbmFibGU7CiAJCWJyZWFrOwpAQCAtMzk0LDYgJiM0Mzs0MDEsMTYgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pCiAJCWlmIChwbXUtJmd0O2ZpeGVkX2N0cl9jdHJsICE9IGRhdGEpCiAJCQlyZXByb2dyYW1fZml4ZWRfY291bnRlcnMocG11LCBkYXRhKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgTVNSX1BFUkZfTUVUUklDUzoKJiM0MzsJCWlmICghbXNyX2luZm8tJmd0O2hvc3RfaW5pdGlhdGVkKQomIzQzOwkJCXJldHVybiAxOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIFRNQSBsZXZlbCAyIGlzIG5vdCBzdXBwb3J0ZWQsIGJpdHMgWzYzOjMyXSBhcmUgcmVzZXJ2ZWQKJiM0MzsJCSAqIGFuZCBpZ25vcmVkIG9uIHdyaXRlLCBzbyBubyB2YWxpZGF0aW9uIGlzIG5lZWRlZCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlwbXUtJmd0O3BlcmZfbWV0cmljcyA9IGRhdGE7CiYjNDM7CQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOgogCQlpZiAoZGF0YSAmYW1wOyBwbXUtJmd0O3BlYnNfZW5hYmxlX3JzdmQpCiAJCQlyZXR1cm4gMTsKQEAgLTQ2NCwyOCAmIzQzOzQ4MSwzMCBAQCBzdGF0aWMgaW50IGludGVsX3BtdV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbykKICAqIGRpZmZlcmVudCBwZXJmX2V2ZW50IGlzIGFscmVhZHkgdXRpbGl6aW5nIHRoZSByZXF1ZXN0ZWQgY291bnRlciwgYnV0IHRoZSBlbmQKICAqIHJlc3VsdCBpcyB0aGUgc2FtZSAoaWdub3JpbmcgdGhlIGZhY3QgdGhhdCB1c2luZyBhIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyCiAgKiB3aWxsIGxpa2VseSBleGFjZXJiYXRlIGNvdW50ZXIgY29udGVudGlvbikuCi0gKgotICogRm9yY2libHkgaW5saW5lZCB0byBhbGxvdyBhc3NlcnRpbmcgb24gQGluZGV4IGF0IGJ1aWxkIHRpbWUsIGFuZCB0aGVyZSBzaG91bGQKLSAqIG5ldmVyIGJlIG1vcmUgdGhhbiBvbmUgdXNlci4KICAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpCiYjNDM7c3RhdGljIHU2NCBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsKHVuc2lnbmVkIGludCBpbmRleCkKIHsKIAljb25zdCBlbnVtIHBlcmZfaHdfaWQgZml4ZWRfcG1jX3BlcmZfaWRzW10gPSB7CiAJCVswXSA9IFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TLAogCQlbMV0gPSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsCiAJCVsyXSA9IFBFUkZfQ09VTlRfSFdfUkVGX0NQVV9DWUNMRVMsCiAJfTsKLQl1NjQgZXZlbnRzZWw7Ci0KLQlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmaXhlZF9wbWNfcGVyZl9pZHMpICE9IEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlMpOwotCUJVSUxEX0JVR19PTihpbmRleCAmZ3Q7PSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTKTsKJiM0MzsJdTY0IGV2ZW50c2VsID0gMDsKIAogCS8qCi0JICogWWVsbCBpZiBwZXJmIHJlcG9ydHMgc3VwcG9ydCBmb3IgYSBmaXhlZCBjb3VudGVyIGJ1dCBwZXJmIGRvZXNuJiMzOTt0Ci0JICogaGF2ZSBhIGtub3duIGVuY29kaW5nIGZvciB0aGUgYXNzb2NpYXRlZCBnZW5lcmFsIHB1cnBvc2UgZXZlbnQuCiYjNDM7CSAqIEZpeGVkIGNvdW50ZXJzIDMgYW5kIGFib3ZlIGRvbiYjMzk7dCBoYXZlIGNvcnJlc3BvbmRpbmcgZ2VuZXJpYyBoYXJkd2FyZQomIzQzOwkgKiBwZXJmIGV2ZW50LCBhbmQgS1ZNIGRvZXMgbm90IGludGVuZCB0byBlbXVsYXRlIHRoZW0gb24gbm9uLW1lZGlhdGVkCiYjNDM7CSAqIHZQTVUuCiAJICovCi0JZXZlbnRzZWwgPSBwZXJmX2dldF9od19ldmVudF9jb25maWcoZml4ZWRfcG1jX3BlcmZfaWRzW2luZGV4XSk7Ci0JV0FSTl9PTl9PTkNFKCFldmVudHNlbCAmYW1wOyZhbXA7IGluZGV4ICZsdDsga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkKTsKJiM0MzsJaWYgKGluZGV4ICZsdDsgQVJSQVlfU0laRShmaXhlZF9wbWNfcGVyZl9pZHMpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogWWVsbCBpZiBwZXJmIHJlcG9ydHMgc3VwcG9ydCBmb3IgYSBmaXhlZCBjb3VudGVyIGJ1dCBwZXJmCiYjNDM7CQkgKiBkb2VzbiYjMzk7dCBoYXZlIGEga25vd24gZW5jb2RpbmcgZm9yIHRoZSBhc3NvY2lhdGVkIGdlbmVyYWwKJiM0MzsJCSAqIHB1cnBvc2UgZXZlbnQuCiYjNDM7CQkgKi8KJiM0MzsJCWV2ZW50c2VsID0gcGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKGZpeGVkX3BtY19wZXJmX2lkc1tpbmRleF0pOwomIzQzOwkJV0FSTl9PTl9PTkNFKCFldmVudHNlbCAmYW1wOyZhbXA7IGluZGV4ICZsdDsga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkKTsKJiM0MzsJfQogCXJldHVybiBldmVudHNlbDsKIH0KIApAQCAtNTg3LDYgJiM0Mzs2MDYsMTEgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X3JlZnJlc2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlwbXUtJmd0O2dsb2JhbF9zdGF0dXNfcnN2ZCAmYW1wOz0KIAkJCQl+TVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkxfVFJBQ0VfVE9QQV9QTUk7CiAKJiM0MzsJaWYgKHBlcmZfY2FwYWJpbGl0aWVzICZhbXA7IFBFUkZfQ0FQX1BFUkZfTUVUUklDUykgewomIzQzOwkJcG11LSZndDtnbG9iYWxfY3RybF9yc3ZkICZhbXA7PSB+R0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTOwomIzQzOwkJcG11LSZndDtnbG9iYWxfc3RhdHVzX3JzdmQgJmFtcDs9IH5HTE9CQUxfU1RBVFVTX1BFUkZfTUVUUklDU19PVkY7CiYjNDM7CX0KJiM0MzsKIAlpZiAocGVyZl9jYXBhYmlsaXRpZXMgJmFtcDsgUEVSRl9DQVBfUEVCU19GT1JNQVQpIHsKIAkJaWYgKHBlcmZfY2FwYWJpbGl0aWVzICZhbXA7IFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkUpIHsKIAkJCXBtdS0mZ3Q7cGVic19lbmFibGVfcnN2ZCA9IGNvdW50ZXJfcnN2ZDsKQEAgLTYzMCw2ICYjNDM7NjU0LDkgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG11X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewomIzQzOwlzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7CiYjNDM7CiYjNDM7CXBtdS0mZ3Q7cGVyZl9tZXRyaWNzID0gMDsKIAlpbnRlbF9wbXVfcmVsZWFzZV9ndWVzdF9sYnJfZXZlbnQodmNwdSk7CiB9CiAKQEAgLTgwMSw2ICYjNDM7ODI4LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7CiAJdTY0IGdsb2JhbF9zdGF0dXMsIHRvZ2dsZTsKIAomIzQzOwkvKgomIzQzOwkgKiBQRVJGX01FVFJJQ1MgTVNSIG11c3QgYmUgcmVzdG9yZWQgY2xvc2VseSBhZnRlciBmaXhlZCBjb3VudGVyIDMsCiYjNDM7CSAqIHdoaWNoIHdhcyBqdXN0IHJlc3RvcmVkIGJ5IGt2bV9wbXVfbG9hZF9ndWVzdF9wbWNzKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAodmNwdV9oYXNfcGVyZl9tZXRyaWNzKHZjcHUpKQomIzQzOwkJd3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIHBtdS0mZ3Q7cGVyZl9tZXRyaWNzKTsKJiM0MzsKIAlyZG1zcnEoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBnbG9iYWxfc3RhdHVzKTsKIAl0b2dnbGUgPSBwbXUtJmd0O2dsb2JhbF9zdGF0dXMgXiBnbG9iYWxfc3RhdHVzOwogCWlmIChnbG9iYWxfc3RhdHVzICZhbXA7IHRvZ2dsZSkKQEAgLTgyOSw2ICYjNDM7ODYzLDEyIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqLwogCWlmIChwbXUtJmd0O2ZpeGVkX2N0cl9jdHJsX2h3KQogCQl3cm1zcnEoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgMCk7CiYjNDM7CiYjNDM7CWlmICh2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSkpIHsKJiM0MzsJCXBtdS0mZ3Q7cGVyZl9tZXRyaWNzID0gcmRwbWMoSU5URUxfUE1DX0ZJWEVEX1JEUE1DX01FVFJJQ1MpOwomIzQzOwkJaWYgKHBtdS0mZ3Q7cGVyZl9tZXRyaWNzKQomIzQzOwkJCXdybXNycShNU1JfUEVSRl9NRVRSSUNTLCAwKTsKJiM0MzsJfQogfQogCiBzdHJ1Y3Qga3ZtX3BtdV9vcHMgaW50ZWxfcG11X29wcyBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuaCBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmgKaW5kZXggNWQ5MzU3NjQwYWExODAuLjU3NzA1NzczZGM0OWI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmgKQEAgLTQwLDQgJiM0Mzs0MCw5IEBAIHN0cnVjdCBsYnJfZGVzYyB7CiAKIGV4dGVybiBzdHJ1Y3QgeDg2X3BtdV9sYnIgdm14X2xicl9jYXBzOwogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHZjcHVfaGFzX3BlcmZfbWV0cmljcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdmNwdV9nZXRfcGVyZl9jYXBhYmlsaXRpZXModmNwdSkgJmFtcDsgUEVSRl9DQVBfUEVSRl9NRVRSSUNTOwomIzQzO30KJiM0MzsKICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX1BNVV9JTlRFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCBhMWE1ZWRiMzlhN2VkZC4uNTg0ZDk5ZWY2MDI2ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtNDI2MCw2ICYjNDM7NDI2MCwxMCBAQCBzdGF0aWMgdm9pZCB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQkJICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTsKIAl2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLAogCQkJCSAgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7CiYjNDM7CiYjNDM7CWludGVyY2VwdCA9ICFoYXNfbWVkaWF0ZWRfcG11IHx8ICF2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7CiYjNDM7CXZteF9zZXRfaW50ZXJjZXB0X2Zvcl9tc3IodmNwdSwgTVNSX1BFUkZfTUVUUklDUywKJiM0MzsJCQkJICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTsKIH0KIAogc3RhdGljIHZvaWQgdm14X3JlY2FsY19tc3JfaW50ZXJjZXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC04MDg0LDYgJiM0Mzs4MDg4LDkgQEAgc3RhdGljIF9faW5pdCB1NjQgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2b2lkKQogCQlwZXJmX2NhcCAmYW1wOz0gflBFUkZfQ0FQX1BFQlNfQkFTRUxJTkU7CiAJfQogCiYjNDM7CWlmIChlbmFibGVfbWVkaWF0ZWRfcG11KQomIzQzOwkJcGVyZl9jYXAgfD0gaG9zdF9wZXJmX2NhcCAmYW1wOyBQRVJGX0NBUF9QRVJGX01FVFJJQ1M7CiYjNDM7CiAJcmV0dXJuIHBlcmZfY2FwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggZDlkNTE4MDNiN2IyMDkuLjk2MjNmNTU4ZjM1OWRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0zNTAsOSAmIzQzOzM1MCw5IEBAIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHsKIAogc3RhdGljIGNvbnN0IHUzMiBtc3JzX3RvX3NhdmVfcG11W10gPSB7CiAJTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwLCBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjEsCi0JTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICYjNDM7IDIsCiYjNDM7CU1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMiwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIzLAogCU1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywKLQlNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLAomIzQzOwlNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBNU1JfUEVSRl9NRVRSSUNTLAogCU1TUl9JQTMyX1BFQlNfRU5BQkxFLCBNU1JfSUEzMl9EU19BUkVBLCBNU1JfUEVCU19EQVRBX0NGRywKIAogCS8qIFRoaXMgcGFydCBvZiBNU1JzIHNob3VsZCBtYXRjaCBLVk1fTUFYX05SX0lOVEVMX0dQX0NPVU5URVJTLiAqLwpAQCAtNzY3OSw2ICYjNDM7NzY3OSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcHJvYmVfbXNyX3RvX3NhdmUodTMyIG1zcl9pbmRleCkKIAkJICAgICBpbnRlbF9wdF92YWxpZGF0ZV9od19jYXAoUFRfQ0FQX251bV9hZGRyZXNzX3JhbmdlcykgKiAyKSkKIAkJCXJldHVybjsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgTVNSX1BFUkZfTUVUUklDUzoKJiM0MzsJCWlmICghKGt2bV9jYXBzLnN1cHBvcnRlZF9wZXJmX2NhcCAmYW1wOyBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKQomIzQzOwkJCXJldHVybjsKJiM0MzsJCWJyZWFrOwogCWNhc2UgTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCAuLi4KIAkgICAgIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgJiM0MzsgS1ZNX01BWF9OUl9HUF9DT1VOVEVSUyAtIDE6CiAJCWlmIChtc3JfaW5kZXggLSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwICZndDs9CkBAIC03NzQyLDcgJiM0Mzs3NzQ2LDcgQEAgc3RhdGljIHZvaWQga3ZtX2luaXRfbXNyX2xpc3RzKHZvaWQpCiB7CiAJdW5zaWduZWQgaTsKIAotCUJVSUxEX0JVR19PTl9NU0coS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyAhPSAzLAomIzQzOwlCVUlMRF9CVUdfT05fTVNHKEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlMgIT0gNCwKIAkJCSAmIzM0O1BsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdJiMzNDspOwogCiAJbnVtX21zcnNfdG9fc2F2ZSA9IDA7CmRpZmYgLS1naXQgYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IGVmZjI5NjQ1NzE5YmM3Li5lNzc0NWUyY2Q1NDNhOSAxMDA2NDQKLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTMzMSw2ICYjNDM7MzMxLDcgQEAKICNkZWZpbmUgUEVSRl9DQVBfUEVCU19GT1JNQVQJCTB4ZjAwCiAjZGVmaW5lIFBFUkZfQ0FQX0ZXX1dSSVRFUwkJQklUX1VMTCgxMykKICNkZWZpbmUgUEVSRl9DQVBfUEVCU19CQVNFTElORQkJQklUX1VMTCgxNCkKJiM0MzsjZGVmaW5lIFBFUkZfQ0FQX1BFUkZfTUVUUklDUwkJQklUX1VMTCgxNSkKICNkZWZpbmUgUEVSRl9DQVBfUEVCU19USU1JTkdfSU5GTwlCSVRfVUxMKDE3KQogI2RlZmluZSBQRVJGX0NBUF9QRUJTX01BU0sJCShQRVJGX0NBUF9QRUJTX1RSQVAgfCBQRVJGX0NBUF9BUkNIX1JFRyB8IFwKIAkJCQkJIFBFUkZfQ0FQX1BFQlNfRk9STUFUIHwgUEVSRl9DQVBfUEVCU19CQVNFTElORSB8IFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaAppbmRleCA2MDhlZDgzZDdjNmE2OS4uNmMxOTUwM2UwYmI3ZGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmgKQEAgLTUyLDYgJiM0Mzs1Miw5IEBACiAvKiBGaXhlZCBQTUMgY29udHJvbHMsIEludGVsIG9ubHkuICovCiAjZGVmaW5lIEZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoX2lkeCkJQklUX1VMTCgoMzIgJiM0MzsgKF9pZHgpKSkKIAomIzQzOy8qIFBFUkZfTUVUUklDUyBlbmFibGUsIEludGVsIG9ubHkuICovCiYjNDM7I2RlZmluZSBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFCQlCSVRfVUxMKDQ4KQomIzQzOwogI2RlZmluZSBGSVhFRF9QTUNfS0VSTkVMCQkJQklUX1VMTCgwKQogI2RlZmluZSBGSVhFRF9QTUNfVVNFUgkJCQlCSVRfVUxMKDEpCiAjZGVmaW5lIEZJWEVEX1BNQ19BTllUSFJFQUQJCQlCSVRfVUxMKDIpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKaW5kZXggZGM2YWZhYzNhYTkxOTUuLmQ0Njg4YTdkMWU1NTY5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKIAogI2luY2x1ZGUgJiMzNDtwbXUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKIAogLyogTnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AgZm9yIHRoZSBndWVzdCBtZWFzdXJlbWVudCBwYXlsb2FkLiAqLwogI2RlZmluZSBOVU1fTE9PUFMJCQkxMApAQCAtMjQxLDE3ICYjNDM7MjQyLDIwIEBAIGRvIHsJCQkJCQkJCQkJXAogCSk7CQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKQkJXAomIzQzOyNkZWZpbmUgR1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUCkJCQkJXAogZG8gewkJCQkJCQkJCQlcCi0Jd3Jtc3IoX3BtY19tc3IsIDApOwkJCQkJCQlcCi0JCQkJCQkJCQkJXAogCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFVTSE9QVCkpCQkJCVwKIAkJR1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgJiMzNDtjbGZsdXNob3B0ICVbbV0mIzM0OywgRkVQKTsJXAogCWVsc2UgaWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMVVNIKSkJCQkJXAogCQlHVUVTVF9NRUFTVVJFX0VWRU5UKF9jdHJsX21zciwgX3ZhbHVlLCAmIzM0O2NsZmx1c2ggICVbbV0mIzM0OywgRkVQKTsJXAogCWVsc2UJCQkJCQkJCQlcCiAJCUdVRVNUX01FQVNVUkVfRVZFTlQoX2N0cmxfbXNyLCBfdmFsdWUsICYjMzQ7bm9wJiMzNDssIEZFUCk7CQlcCi0JCQkJCQkJCQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiYjNDM7I2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKQkJXAomIzQzO2RvIHsJCQkJCQkJCQkJXAomIzQzOwl3cm1zcihfcG1jX21zciwgMCk7CQkJCQkJCVwKJiM0MzsJR1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUCk7CQkJCVwKIAlndWVzdF9hc3NlcnRfZXZlbnRfY291bnQoX2lkeCwgX3BtYywgX3BtY19tc3IpOwkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC0zMTgsNiAmIzQzOzMyMiw1NiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KQogCQkJCUZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoaSkpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wZXJmX21ldHJpY3Modm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZXRpcmluZywgYmFkX3NwZWMsIGZlX2JvdW5kLCBiZV9ib3VuZCwgc3VtOwomIzQzOwl1NjQgZ2xvYmFsX2N0cmwsIG1ldHJpY3M7CiYjNDM7CiYjNDM7CWlmICgoZ3Vlc3RfZ2V0X3BtdV92ZXJzaW9uKCkgJmx0OyAyKSB8fAkvKiBEb2VzIGd1ZXN0IGhhdmUgR0xPQkFMX0NUUkw/ICovCiYjNDM7CSAgICAhdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX1BEQ00pIHx8CiYjNDM7CSAgICAhKHJkbXNyKE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTKSAmYW1wOyBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCAwKTsKJiM0MzsJd3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIzLCAwKTsKJiM0MzsJd3Jtc3IoTVNSX1BFUkZfTUVUUklDUywgMCk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBmaXhlZCBjdHIzIChUT1BET1dOLlNMT1RTKSBhbmQgUEVSRl9NRVRSSUNTLiAqLwomIzQzOwl3cm1zcihNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLCBGSVhFRF9QTUNfQ1RSTCgzLCBGSVhFRF9QTUNfS0VSTkVMKSk7CiYjNDM7CWdsb2JhbF9jdHJsID0gRklYRURfUE1DX0dMT0JBTF9DVFJMX0VOQUJMRSgzKSB8CiYjNDM7CQkgICAgICBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFOwomIzQzOwomIzQzOwlHVUVTVF9SVU5fUEFZTE9BRChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCBnbG9iYWxfY3RybCwgJiMzNDsmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIENoZWNrIHRlc3QgcmVzdWx0cy4gKi8KJiM0MzsJbWV0cmljcyA9IHJkbXNyKE1TUl9QRVJGX01FVFJJQ1MpOwomIzQzOwlyZXRpcmluZyA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCg3LCAwKSwgbWV0cmljcyk7CiYjNDM7CWJhZF9zcGVjID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDE1LCA4KSwgbWV0cmljcyk7CiYjNDM7CWZlX2JvdW5kID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDIzLCAxNiksIG1ldHJpY3MpOwomIzQzOwliZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgzMSwgMjQpLCBtZXRyaWNzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQmUgY29uc2VydmF0aXZlOiB0aGUgbWVhc3VyZWQgcGF5bG9hZCBkZWZpbml0ZWx5IHJldGlyZXMgd29yaywgc28KJiM0MzsJICogUmV0aXJpbmcgc2hvdWxkIGJlIG5vbi16ZXJvLgomIzQzOwkgKi8KJiM0MzsJR1VFU1RfQVNTRVJUX05FKG1ldHJpY3MsIDBVTEwpOwomIzQzOwlHVUVTVF9BU1NFUlRfTkUocmV0aXJpbmcsIDBVTEwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgc3VtIG9mIHRoZSA0IGxldmVsLTEgdG9wZG93biBtZXRyaWNzIHNob3VsZCBiZSBjbG9zZSB0byAxMDAlLgomIzQzOwkgKiAzIGlzIGNob3NlbiBhcyBhIGxvb3NlIHNhbml0eSBjaGVjay4KJiM0MzsJICovCiYjNDM7CXN1bSA9IHJldGlyaW5nICYjNDM7IGJhZF9zcGVjICYjNDM7IGZlX2JvdW5kICYjNDM7IGJlX2JvdW5kOwomIzQzOwlHVUVTVF9BU1NFUlQoc3VtICZndDs9IDB4ZmQgJmFtcDsmYW1wOyBzdW0gJmx0Oz0gMHgxMDIpOwomIzQzOwomIzQzOwkvKiBTYW5pdHkgY2hlY2sgYWZ0ZXIgUEVSRl9NRVRSSUNTIGRpc2FibGVkLiAqLwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O2xvb3AgLiYjMzQ7IDogJiMzNDsmIzQzO2MmIzM0OygoaW50KXtOVU1fTE9PUFN9KSk7CiYjNDM7CUdVRVNUX0FTU0VSVF9FUShyZG1zcihNU1JfUEVSRl9NRVRSSUNTKSwgbWV0cmljcyk7CiYjNDM7CXdybXNyKE1TUl9QRVJGX01FVFJJQ1MsIDB4ZGVhZGRlYWQpOwomIzQzOwomIzQzOwlHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIDB4ZGVhZGRlYWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZCkKIHsKIAl1OCBpOwpAQCAtMzI1LDYgJiM0MzszNzksOCBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0lOVEVMX0FSQ0hfRVZFTlRTOyBpJiM0MzsmIzQzOykKIAkJZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGkpOwogCiYjNDM7CWd1ZXN0X3Rlc3RfcGVyZl9tZXRyaWNzKCk7CiYjNDM7CiAJR1VFU1RfRE9ORSgpOwogfQogCkBAIC0zNjEsNyAmIzQzOzQxNyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcywKICAqIG90aGVyIHRoYW4gUE1DcyBpbiB0aGUgZnV0dXJlLgogICovCiAjZGVmaW5lIE1BWF9OUl9HUF9DT1VOVEVSUwk4Ci0jZGVmaW5lIE1BWF9OUl9GSVhFRF9DT1VOVEVSUwkzCiYjNDM7I2RlZmluZSBNQVhfTlJfRklYRURfQ09VTlRFUlMJNAogCiAjZGVmaW5lIEdVRVNUX0FTU0VSVF9QTUNfTVNSX0FDQ0VTUyhpbnNuLCBtc3IsIGV4cGVjdF9ncCwgdmVjdG9yKQkJXAogX19HVUVTVF9BU1NFUlQoZXhwZWN0X2dwID8gdmVjdG9yID09IEdQX1ZFQ1RPUiA6ICF2ZWN0b3IsCQkJXApAQCAtNTg1LDYgJiM0Mzs2NDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpCiAJdTggbnJfZml4ZWRfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfRklYRURfQ09VTlRFUlMpOwogCXU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTsKIAl1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTsKJiM0MzsJdTY0IGFkdmVydGlzZWRfcGVyZl9jYXBzID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUyk7CiAJdW5zaWduZWQgaW50IGk7CiAJdTggdiwgajsKIAl1MzIgazsKQEAgLTU5Miw2ICYjNDM7NjQ5LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKQogCWNvbnN0IHU2NCBwZXJmX2NhcHNbXSA9IHsKIAkJMCwKIAkJUE1VX0NBUF9GV19XUklURVMsCiYjNDM7CQlQRVJGX0NBUF9QRVJGX01FVFJJQ1MsCiAJfTsKIAogCS8qCkBAIC02NDksNiAmIzQzOzcwNywxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpCiAJCQlpZiAoIWt2bV9oYXNfcGVyZl9jYXBzICZhbXA7JmFtcDsgcGVyZl9jYXBzW2ldKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJLyogSWdub3JlIHVuc3VwcG9ydGVkIGZlYXR1cmVzLiAqLwomIzQzOwkJCWlmIChwZXJmX2NhcHNbaV0gJmFtcDsgfmFkdmVydGlzZWRfcGVyZl9jYXBzKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKIAkJCXByX2luZm8oJiMzNDtUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XG4mIzM0OywKIAkJCQl2LCBwZXJmX2NhcHNbaV0pOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBQTVUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUuIFRoZSBjb3JlIGlzIGFsbCBhYm91dCBleHRlbmRpbmcgdGhlIEtWTSBQTVUgZW11bGF0aW9uIGZvciB4ODYuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGluY3JlYXNpbmcgYEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlNgIGZyb20gMyB0byA0LiBUaGF04oCZcyB0aGUgbW9zdCBvYnZpb3VzIGNoYW5nZS4gVGhlbiwgd2Ugc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBlcmZfbWV0cmljc2Agd2l0aGluIHRoZSBgc3RydWN0IGt2bV9wbXVgLCBhIGNsZWFyIGluZGljYXRvciBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgc3Ryb25nbHkgcG9pbnRzIHRvIHN1cHBvcnRpbmcgSW50ZWwmIzM5O3MgYE1TUl9QRVJGX01FVFJJQ1NgLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGNhcGFiaWxpdHksIGBQRVJGX0NBUF9QRVJGX01FVFJJQ1NgLCBhbmQgaG9va3MgaXQgaW50byB0aGUgcmVsZXZhbnQgbWFza3MgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzIChgR0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGYCwgYEdMT0JBTF9DVFJMX0VOX1BFUkZfTUVUUklDU2ApLiBUaGUgY29kZSB0aGVuIGltcGxlbWVudHMgaGFuZGxpbmcgZm9yIHRoZSBuZXcgTVNSIGluIGBpbnRlbF9wbXVfZ2V0X21zcmAgYW5kIGBpbnRlbF9wbXVfc2V0X21zcmAsIHdoaWNoIG1lYW5zIHRoZSBndWVzdCBjYW4gbm93IHJlYWQgYW5kIHdyaXRlIHRvIHRoaXMgTVNSLiBJdCBhbHNvIHRvdWNoZXMgb24gZ2V0dGluZyB0aGUgZXZlbnRzIGZyb20gZml4ZWQgY291bnRlcnMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLgoKVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBzcGFuIG11bHRpcGxlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhpcyBpbmNsdWRlcyB0aGUgdmFyaW91cyBgaW50ZWxfcG11XypgIGZ1bmN0aW9ucyBmb3IgbWFuYWdlbWVudCBhbmQgcmVmcmVzaCwgYWxvbmcgd2l0aCB0aGUgYHZteF8qYCBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggVk1YIGNvbnRleHQgc3dpdGNoaW5nIGFuZCBjYXBhYmlsaXRpZXMsIGFsb25nIHdpdGggaW50ZXJjZXB0aW5nIHRoZSBNU1IgY2FsbHMuIFRoaXMgY29uZmlybXMgdGhlIG5ldyBmZWF0dXJlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBob3N04oCZcyBQTVUgYW5kIGhvdyBpdOKAmXMgZXhwb3NlZCB0byB0aGUgZ3Vlc3QuIEkgc2VlIHRoYXQgYG1zcnNfdG9fc2F2ZV9wbXVgIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBlbnN1cmUgdGhlIG5ldyBNU1IgaXMgc2F2ZWQvcmVzdG9yZWQgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuCgpUaGlzIGFsbCBwb2ludHMgdG8gYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBgTVNSX1BFUkZfTUVUUklDU2AgZmVhdHVyZSwgYWxvbmcgd2l0aCBmaXhlZCBjb3VudGVyIDMgKHdoaWNoIEkmIzM5O20gYXNzdW1pbmcgaXMgdGhlIFRPUERPV04uU0xPVFMgY291bnRlcikuIFRoZSBjb2RlIGZsb3cgc2VlbXMgdG8gYmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gYm90aCBndWVzdCBNU1IgYWNjZXNzZXMgKFJETVNSL1dSTVNSKSBhbmQgS1ZNIFBNVSBjb250ZXh0IHN3aXRjaGluZywgbWVhbmluZyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWxseSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLgoKR2l2ZW4gdGhlIG1vZGlmaWNhdGlvbnMsIEtWTSAoYENPTkZJR19LVk1gKSBhbmQgSW50ZWwgS1ZNIChgQ09ORklHX0tWTV9JTlRFTGApIGFyZSBlc3NlbnRpYWwgcHJlcmVxdWlzaXRlcy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGEgZGVlcGVyIGRpdmUgd2lsbCBiZSBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBhbmQgdGhlIHJlbGF0ZWQgcmVmcmVzaCBhbmQgY29udGV4dC1zd2l0Y2hpbmcgcm91dGluZXMgKGBpbnRlbF9wbXVfcmVmcmVzaGAsIGBpbnRlbF9wbXVfcmVzZXRgLCBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgLCBgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllc2AsIGBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eWApLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBuZXcgTVNSIGFuZCB0aGUgZXh0ZW5kZWQgY291bnRlciBsaW1pdHMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYGVuYWJsZV9tZWRpYXRlZF9wbXVgLCBhbmQgdmVyaWZ5IHRoYXQgYWxsIG9mIHRoZSBuZXcgY2FwYWJpbGl0eSBjaGVja3MgYXJlIGluIHBsYWNlLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoZSBuZXcgZmVhdHVyZSBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gTG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIG92ZXJhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBhbmQgUGVyZm9ybWFuY2UqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY29uZmlncyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgdG8gc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBhbnkgcGFydGljdWxhciBjb25maWcgb3IgbW9kdWxlIHBhcmFtZXRlciB0aGF0IHdvdWxkIGFsbG93IHVzIHRvIGxldmVyYWdlIG1lZGlhdGVkIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdHMsIG9yICYjMzQ7UE1Vcy4mIzM0OyBMZXQmIzM5O3MgY2hlY2sgYGVuYWJsZV9tZWRpYXRlZF9wbXVgLCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IHRoZXJlIGlzIG1vcmUgdG8gaXQgdGhhbiBqdXN0IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlX21lZGlhdGVkX3BtdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3BtdS5jPTQwPW1vZHVsZV9wYXJhbShlbmFibGVfcG11LCBib29sLCAwNDQ0KTtcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDItLyogRW5hYmxlL2Rpc2FibGVkIG1lZGlhdGVkIFBNVSB2aXJ0dWFsaXphdGlvbi4gKi9cbmFyY2gveDg2L2t2bS9wbXUuYzo0Mzpib29sIF9fcmVhZF9tb3N0bHkgZW5hYmxlX21lZGlhdGVkX3BtdTtcbmFyY2gveDg2L2t2bS9wbXUuYzo0NDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoZW5hYmxlX21lZGlhdGVkX3BtdSk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNDUtXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTEyMT12b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTU0LVxuYXJjaC94ODYva3ZtL3BtdS5jOjE1NTpcdGlmICghZW5hYmxlX3BtdSB8fCAhZW5hYmxlX21lZGlhdGVkX3BtdSB8fCAha3ZtX2hvc3RfcG11Lm1lZGlhdGVkIHx8XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTU2LVx0ICAgICFwbXVfb3BzLVx1MDAzZWlzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQoXHUwMDI2a3ZtX2hvc3RfcG11KSlcbmFyY2gveDg2L2t2bS9wbXUuYzoxNTc6XHRcdGVuYWJsZV9tZWRpYXRlZF9wbXUgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS9wbXUuYy0xNTgtXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU5Olx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxuYXJjaC94ODYva3ZtL3BtdS5jLTE2MC1cdFx0cG11X29wcy1cdTAwM2V3cml0ZV9nbG9iYWxfY3RybCA9IE5VTEw7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTE4Ni1cbmFyY2gveDg2L2t2bS9wbXUuYzoxODc6XHRpZiAoIWVuYWJsZV9tZWRpYXRlZF9wbXUgXHUwMDI2XHUwMDI2IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCBcdTAwM2UgMylcbmFyY2gveDg2L2t2bS9wbXUuYy0xODgtXHRcdGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IDM7XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5oPTY1PWV4dGVybiBib29sIGVuYWJsZV9wbXU7XG5hcmNoL3g4Ni9rdm0vcG11Lmg6NjY6ZXh0ZXJuIGJvb2wgZW5hYmxlX21lZGlhdGVkX3BtdTtcbmFyY2gveDg2L2t2bS9wbXUuaC02Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vcG11Lmg9ODY9c3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3BtdS5oLTg3LXtcbmFyY2gveDg2L2t2bS9wbXUuaDo4ODpcdHJldHVybiBlbmFibGVfbWVkaWF0ZWRfcG11IFx1MDAyNlx1MDAyNiB2Y3B1X3RvX3BtdSh2Y3B1KS1cdTAwM2V2ZXJzaW9uO1xuYXJjaC94ODYva3ZtL3BtdS5oLTg5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE3OD1tb2R1bGVfcGFyYW0odm5taSwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTE3OS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MTgwOm1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTgxLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NzUyPXN0YXRpYyB2b2lkIHN2bV9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTc1Ny1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NzU4Olx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy03NTktXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NhcGFiaWxpdGllcy5oPTM5OT1zdGF0aWMgaW5saW5lIGJvb2wgdm14X3BlYnNfc3VwcG9ydGVkKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jYXBhYmlsaXRpZXMuaC00MDEtXHRyZXR1cm4gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BFQlMpIFx1MDAyNlx1MDAyNiBrdm1fcG11X2NhcC5wZWJzX2VwdCBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvY2FwYWJpbGl0aWVzLmg6NDAyOlx0ICAgICAgICFlbmFibGVfbWVkaWF0ZWRfcG11O1xuYXJjaC94ODYva3ZtL3ZteC9jYXBhYmlsaXRpZXMuaC00MDMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9MTU5PW1vZHVsZV9wYXJhbShhbGxvd19zbWFsbGVyX21heHBoeWFkZHIsIGJvb2wsIFNfSVJVR08pO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy0xNjAtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjE2MTptb2R1bGVfcGFyYW0oZW5hYmxlX21lZGlhdGVkX3BtdSwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTE2Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQyMDk9c3RhdGljIHZvaWQgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDIxOC1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDIxOTpcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDIyMC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDQzOT12b2lkIHZteF9zZXRfY29uc3RhbnRfaG9zdF9zdGF0ZShzdHJ1Y3QgdmNwdV92bXggKnZteClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ1MjYtXHQgKi9cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDUyNzpcdGlmIChlbmFibGVfbWVkaWF0ZWRfcG11KVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00NTI4LVx0XHR2bWNzX3dyaXRlNjQoSE9TVF9JQTMyX1BFUkZfR0xPQkFMX0NUUkwsIDApO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODAzOT1zdGF0aWMgX19pbml0IHU2NCB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MDUwLVx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0FSQ0hfTEJSKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODA1MTpcdCAgICAhZW5hYmxlX21lZGlhdGVkX3BtdSkge1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MDUyLVx0XHR4ODZfcGVyZl9nZXRfbGJyKFx1MDAyNnZteF9sYnJfY2Fwcyk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MDkwLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4MDkxOlx0aWYgKGVuYWJsZV9tZWRpYXRlZF9wbXUpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTgwOTItXHRcdHBlcmZfY2FwIHw9IGhvc3RfcGVyZl9jYXAgXHUwMDI2IFBFUkZfQ0FQX1BFUkZfTUVUUklDUztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwNjQ9aW50IGt2bV94ODZfdmVuZG9yX2luaXQoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxODYtXHRfX2t2bV9yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcyhvcHMtXHUwMDNlaGFuZGxlX2ludGVsX3B0X2ludHIsXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxODc6XHRcdFx0XHQgICAgICBlbmFibGVfbWVkaWF0ZWRfcG11ID8ga3ZtX2hhbmRsZV9ndWVzdF9tZWRpYXRlZF9wbWkgOiBOVUxMKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE4OC1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTI3NDA9aW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMjc2Mi1cbmFyY2gveDg2L2t2bS94ODYuYzoxMjc2MzpcdGlmIChlbmFibGVfbWVkaWF0ZWRfcG11IFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC5lbmFibGVfcG11IFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyNzY0LVx0ICAgICFrdm0tXHUwMDNlYXJjaC5jcmVhdGVkX21lZGlhdGVkX3BtdSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjc1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgYGVuYWJsZV9tZWRpYXRlZF9wbXVgIE15c3RlcnkqKgoKQWxyaWdodCwgc28gYGVuYWJsZV9tZWRpYXRlZF9wbXVgIGlzIHNob3dpbmcgdXAgYXMgYSBtb2R1bGUgcGFyYW1ldGVyIGZvciB0aGUgYGt2bS1pbnRlbGAgYW5kIGBrdm0tYW1kYCBtb2R1bGVzLiBIYW5nIG9uIGEgc2Vjb25kLi4uIG1vZHVsZSAqcGFyYW1ldGVyKiwgbm90IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHJpZ2h0PyBUaGF0IGRpc3RpbmN0aW9uIGlzIGNyaXRpY2FsLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgdGhhdCYjMzk7cyBzZXQgYXQgbW9kdWxlIGxvYWQgdGltZSwgbm90IGJha2VkIGludG8gdGhlIGtlcm5lbCBidWlsZCBpdHNlbGYuIFRoZSBhY3R1YWwgKmNvbmZpZ3MqIHRoYXQgaW5mbHVlbmNlIHRoaXMgYXJlIGdvaW5nIHRvIGJlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCAob3IgYEtWTV9BTURgKSwgbm90IHRoaXMgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIHRoZSBpbXBvcnRhbnQgcG9pbnQuCgpXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBsYW5kc2NhcGUgZnVsbHksIHNvIGxldCYjMzk7cyBkaWcgYSBiaXQgZnVydGhlci4gSXQmIzM5O3Mgc2FmZSB0byBhc3N1bWUgYGVuYWJsZV9tZWRpYXRlZF9wbXVgIHdpbGwgbmVlZCB0aGUgY29yZSBQTVUgaW5mcmFzdHJ1Y3R1cmU7IHdoaWNoIG1lYW5zLCBhdCBhIG1pbmltdW0sIHRoYXQgYENPTkZJR19QRVJGX0VWRU5UU2AgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGltZSB0byBpbnZlc3RpZ2F0ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSRl9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTIxMjE9bWVudSBcJiMzNDtLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1wmIzM0O1xuaW5pdC9LY29uZmlnLTIxMjItXG5pbml0L0tjb25maWc6MjEyMzpjb25maWcgUEVSRl9FVkVOVFNcbmluaXQvS2NvbmZpZy0yMTI0LVx0Ym9vbCBcJiMzNDtLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzA5CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQZXJmb3JtYW5jZSBFdmVudCBJbnN0cnVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUEVSRl9FVkVOVFNgIGlzIGVzc2VudGlhbCBoZXJlLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTttIHRha2luZyBhIGNsb3NlIGxvb2sgYXQ6IGBpbnRlbF9wbXVfZ2V0X21zcmAsIGBpbnRlbF9wbXVfc2V0X21zcmAsIGBpbnRlbF9wbXVfcmVmcmVzaGAsIGBpbnRlbF9wbXVfcmVzZXRgLCBgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWRgLCBgaW50ZWxfbWVkaWF0ZWRfcG11X3B1dGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCwgYW5kIGBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eWAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGhvdC1wYXRoIGZ1bmN0aW9ucywgdGhlIG9uZXMgdGhhdCBhcmUgY2FsbGVkIGZyZXF1ZW50bHkgYW5kIHdvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBwcm9maWxpbmcuIGBpbnRlbF9wbXVfZ2V0X21zcmAgYW5kIGBpbnRlbF9wbXVfc2V0X21zcmAgYXJlIHRpZWQgdG8gUkRNU1IvV1JNU1IsIHNvIHRoZXkmIzM5O3JlIG9uIHRoZSBzb21ld2hhdCBob3Qgc2lkZSwgYnV0IHZpdGFsIGZvciBNU1IgZnV6emluZy4gSSB3YXMgd29uZGVyaW5nIGFib3V0IHNraXBwaW5nIGBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZGAgYW5kIGBpbnRlbF9tZWRpYXRlZF9wbXVfcHV0YCwgYXMgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gdmNwdSBsb2FkL3B1dCBvcGVyYXRpb25zLCB3aGljaCBhcmUgcmF0aGVyIGZyZXF1ZW50LiBIb3dldmVyLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhleSYjMzk7cmUgdGhlIG9uZXMgc2F2aW5nL3Jlc3RvcmluZyBgTVNSX1BFUkZfTUVUUklDU2AsIG1ha2luZyB0aGVtIGNyaXRpY2FsLiBGdXJ0aGVyIGFuYWx5c2lzIHJldmVhbGVkIHRoZXkgYXJlIGNhbGxlZCBvbiBldmVyeSBWTSBleGl0L2VudHJ5IG9yIGNvbnRleHQgc3dpdGNoLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBob3QuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBsZXNzIGZyZXF1ZW50IG9uZXMuIGBpbnRlbF9wbXVfcmVmcmVzaGAgaXMgY2FsbGVkIG9uIENQVUlEIHVwZGF0ZXMsIG5vdCBhIGhvdHNwb3QuIGBpbnRlbF9wbXVfcmVzZXRgIGlzIGNhbGxlZCBvbiB2Y3B1IHJlc2V0OyBub3QgaG90LiBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgIGlzIGZvciBNU1IgaW50ZXJjZXB0IHJlY2FsY3VsYXRpb24uIEl0JiMzOTtzIG5vdCBob3QsIGVpdGhlciwgYW5kIHRoZSBvdGhlcnMsIHN1Y2ggYXMgYHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNgIGFuZCBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYXJlIGRlZmluaXRpdmVseSBub3Qgb24gdGhlIGhvdCBwYXRoLgoKU28sIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9ucyBhcyB0aGUgYXJlYXMgb2YgcHJpbWFyeSBjb25jZXJuOgpgaW50ZWxfcG11X2dldF9tc3JgCmBpbnRlbF9wbXVfc2V0X21zcmAKYGludGVsX3BtdV9yZWZyZXNoYApgaW50ZWxfcG11X3Jlc2V0YApgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgCmBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYAoKTmVlZCB0byB2ZXJpZnkgdGhhdCBsYXN0IG9uZSBpcyBpbmRlZWQgYSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz0zODg9c3RhdGljIGludCBpbnRlbF9wbXVfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00ODQtICovXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjQ4NTpzdGF0aWMgdTY0IGludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWwodW5zaWduZWQgaW50IGluZGV4KVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00ODYte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9NjI2PXN0YXRpYyB2b2lkIGludGVsX3BtdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTY0Ni1cdFx0cG11LVx1MDAzZWZpeGVkX2NvdW50ZXJzW2ldLmN1cnJlbnRfY29uZmlnID0gMDtcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6NjQ3Olx0XHRwbXUtXHUwMDNlZml4ZWRfY291bnRlcnNbaV0uZXZlbnRzZWwgPSBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsKGkpO1xuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy02NDgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTMyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMga2VybmVsLWxldmVsIHZpcnR1YWxpemF0aW9uIG9yIHBlcmZvcm1hbmNlIG1vbml0b3Jpbmcgd2l0aGluIGEgaHlwZXJ2aXNvcjoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3RzcG90cyBpbiBQTVUgTG9hZC9TYXZlIE9wZXJhdGlvbnMqKgoKUmlnaHQsIHRoYXQgc2VlbXMgaW1wb3J0YW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgYGludGVsX21lZGlhdGVkX3BtdV9sb2FkYCBhbmQgYGludGVsX21lZGlhdGVkX3BtdV9wdXRgIGFyZSBleHBlcmllbmNpbmcgaGlnaCBjb250ZW50aW9uLiBBcmUgdGhleSBjYXVzaW5nIGEgYm90dGxlbmVjaz8gVGhleSYjMzk7cmUgY3J1Y2lhbCBjb21wb25lbnRzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBpbXBhY3QuCgpOb3csIHdoZXJlIGRvIHRoZXNlIGZ1bmN0aW9ucyBnZXQgY2FsbGVkIGZyb20/IE9rYXksIGBrdm1fcG11X2xvYWRfZ3Vlc3RfcG1jc2AgYW5kIGBrdm1fcG11X3NhdmVfZ3Vlc3RfcG1jc2AsIHJpZ2h0LiBBbmQgdGhvc2UgYXJlIGNhbGxlZCBieSwgYWguLi4gYHZteF92Y3B1X2xvYWRgIGFuZCBgdm14X3ZjcHVfcHV0YCwgd2hpY2ggYXJlIGVzc2VudGlhbCB0byB2aXJ0dWFsIG1hY2hpbmUgbWFuYWdlbWVudC4gSGFuZyBvbiBhIHNlY29uZCwgYW0gSSBnZXR0aW5nIHRoYXQgcmlnaHQ/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNhbGwgcGF0aHMgaGVyZS4uLiBZZXAuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcnJlY3QgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludGVsX21lZGlhdGVkX3BtdV9sb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTgyMD1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfd3JpdGVfZ2xvYmFsX2N0cmwodTY0IGdsb2JhbF9jdHJsKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODI1LVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4MjY6c3RhdGljIHZvaWQgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04Mjcte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9ODc0PXN0cnVjdCBrdm1fcG11X29wcyBpbnRlbF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04ODYtXHQuaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCA9IGludGVsX3BtdV9pc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkLFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4ODc6XHQubWVkaWF0ZWRfbG9hZCA9IGludGVsX21lZGlhdGVkX3BtdV9sb2FkLFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04ODgtXHQubWVkaWF0ZWRfcHV0ID0gaW50ZWxfbWVkaWF0ZWRfcG11X3B1dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIFBNVSBNZWRpYXRlZCBBY2Nlc3MgUGF0aCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG1lZGlhdGVkIFBNVSBhY2Nlc3MgcGF0aCB3aXRoaW4gS1ZNLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBga3ZtX3BtdV9vcHMtJmd0O21lZGlhdGVkX2xvYWRgIGFuZCBgbWVkaWF0ZWRfcHV0YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBtZWRpYXRlZF9sb2FkYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgY3JpdGljYWwgcGllY2UgaGVyZSwgdGhlIGVudHJ5IHBvaW50LiBJIHdhbnQgdG8ga25vdyB3aGF0JiMzOTtzICppbml0aWF0aW5nKiB0aGlzIG1lZGlhdGVkIGxvYWRpbmcgcHJvY2Vzcy4gR290dGEgZm9sbG93IHRoZSBjYWxsIGdyYXBoIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hlcmUgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lZGlhdGVkX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9wbXUuYz0xMzYyPXZvaWQga3ZtX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTM5MC1cbmFyY2gveDg2L2t2bS9wbXUuYzoxMzkxOlx0a3ZtX3BtdV9jYWxsKG1lZGlhdGVkX2xvYWQpKHZjcHUpO1xuYXJjaC94ODYva3ZtL3BtdS5jLTEzOTItfVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuaD0yNj1zdHJ1Y3Qga3ZtX3BtdV9vcHMge1xuLS1cbmFyY2gveDg2L2t2bS9wbXUuaC00MS1cdGJvb2wgKCppc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkKShzdHJ1Y3QgeDg2X3BtdV9jYXBhYmlsaXR5ICpob3N0X3BtdSk7XG5hcmNoL3g4Ni9rdm0vcG11Lmg6NDI6XHR2b2lkICgqbWVkaWF0ZWRfbG9hZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9wbXUuaC00My1cdHZvaWQgKCptZWRpYXRlZF9wdXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYz0zMDQ9c3RydWN0IGt2bV9wbXVfb3BzIGFtZF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMTUtXHQuaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCA9IGFtZF9wbXVfaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM6MzE2Olx0Lm1lZGlhdGVkX2xvYWQgPSBhbWRfbWVkaWF0ZWRfcG11X2xvYWQsXG5hcmNoL3g4Ni9rdm0vc3ZtL3BtdS5jLTMxNy1cdC5tZWRpYXRlZF9wdXQgPSBhbWRfbWVkaWF0ZWRfcG11X3B1dCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTg3ND1zdHJ1Y3Qga3ZtX3BtdV9vcHMgaW50ZWxfcG11X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODg2LVx0LmlzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQgPSBpbnRlbF9wbXVfaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM6ODg3Olx0Lm1lZGlhdGVkX2xvYWQgPSBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZCxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODg4LVx0Lm1lZGlhdGVkX3B1dCA9IGludGVsX21lZGlhdGVkX3BtdV9wdXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgaW4gS1ZNL0ludGVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHBhdGggd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IG9uIEludGVsIHN5c3RlbXMuIEkga25vdyBga3ZtX21lZGlhdGVkX3BtdV9sb2FkYCBpcyBhIGNyaXRpY2FsIGhvdHNwb3QsIHRyaWdnZXJlZCBieSBga3ZtX2FyY2hfdmNwdV9sb2FkYCwgc28gSSYjMzk7bSBleGNsdWRpbmcgdGhlIGBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZGAgYW5kIGBpbnRlbF9tZWRpYXRlZF9wbXVfcHV0YCBmdW5jdGlvbnMgdG8gYXZvaWQgZ2V0dGluZyBib2dnZWQgZG93biBpbiB0aGUgbm9pc2UuCgpGaXJzdCwgSSBsb29rZWQgYXQgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgIG9ubHkgcnVucyBvbmNlIGF0IGJvb3QgYW5kLCBzaW1pbGFybHksIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCBhbHNvIHJ1bnMganVzdCBvbmNlIHBlciBib290LiBUaGVuLCBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgIGlzIHRyaWdnZXJlZCB3aGVuZXZlciBNU1IgaW50ZXJjZXB0IHVwZGF0ZXMgb2NjdXIuIGBpbnRlbF9wbXVfcmVmcmVzaGAgaXMgY2FsbGVkIHdoZW5ldmVyIENQVUlEIGluZm9ybWF0aW9uIGlzIHJlZnJlc2hlZCwgYW5kIGBpbnRlbF9wbXVfcmVzZXRgIGR1cmluZyB2Q1BVIHJlc2V0cy4gRmluYWxseSwgSSBub3RpY2VkIHRoZSBgaW50ZWxfcG11X2dldF9tc3JgIGFuZCBgaW50ZWxfcG11X3NldF9tc3JgIGZ1bmN0aW9ucywgd2hpY2gsIG9mIGNvdXJzZSwgYXJlIGNhbGxlZCBkdXJpbmcgUkRNU1IvV1JNU1IgaW5zdHJ1Y3Rpb25zLgoKQmFzZWQgb24gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBgaW50ZWxfcG11X3JlZnJlc2hgLCBgaW50ZWxfcG11X3Jlc2V0YCwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCwgYW5kIGBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBmcmVxdWVudGx5IGNhbGxlZC4KCk5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIHNhZmUgdG8gc2F5IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgZnVuZGFtZW50YWwsIHJpZ2h0PyBgUEVSRl9FVkVOVFNgIGlzIHR5cGljYWxseSBlbmFibGVkLCB3aGljaCBtZWFucyBpdCBzaG91bGRuJiMzOTt0IGJlIGFuIGlzc3VlLiBCdXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEtWTSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIEludGVsJiMzOTtzIGFyY2hpdGVjdHVyZSBhbmQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0cyAoUE1VcykuIFRoZSBmaWxlcyBsaXN0ZWQg4oCTIGBhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jYCwgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLCBgYXJjaC94ODYva3ZtL3BtdS5jYCwgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIOKAkyBhbGwgcG9pbnQgZGlyZWN0bHkgdG8gS1ZNJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIHBhcnRpY3VsYXJseSB0aGUgVk1YIChWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucykgZmVhdHVyZXMgb24gSW50ZWwgcHJvY2Vzc29ycy4KCkdpdmVuIHRoZSBmaWxlIG5hbWVzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBsaWtlbHkgZGljdGF0ZSB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuIGNvbXBpbGVkIGFuZCBpbmNsdWRlZC4gQnV0LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGVyZSBtaWdodCBiZSBzb21lIHNlY29uZGFyeSwgbW9yZSBncmFudWxhciBjb25maWd1cmF0aW9ucyB0aGF0IGNvbWUgaW50byBwbGF5LCBwb3RlbnRpYWxseSBlbmFibGluZyBvciBkaXNhYmxpbmcgc3BlY2lmaWMgYXNwZWN0cyBvZiBQTVUgdmlydHVhbGl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIG9yIHRoZSBjb2RlIGl0c2VsZiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgUE1VIGhhbmRsaW5nLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcuKlBNVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwODYKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogNTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gUE1VIEVtdWxhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNwZWNpZmljIEtWTSBjb25maWd1cmF0aW9ucyBleHBsaWNpdGx5IG1lbnRpb25lZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgZm9jdXMgaGFzIGJlZW4gb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBjaGFuZ2VzIHdpdGhpbiB0aGUgUE1VIGVtdWxhdGlvbi4gSSBzdGFydGVkIGJ5IHJldmlld2luZyB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkOiBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBgaW50ZWxfcG11X3JlZnJlc2hgLCBgaW50ZWxfcG11X3Jlc2V0YCwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCwgYW5kIGBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYC4gVGhlc2Ugc2VlbWVkIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBhbmQgbWFuYWdlbWVudCBmdW5jdGlvbnMgZm9yIHRoZSBndWVzdCYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBlbXVsYXRlZCBQTVUuCgpUaGVuLCBJIGV4cGFuZGVkIG15IHNjb3BlIHRvIGluY2x1ZGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoZSBQTVUgYmVoYXZpb3IsIGFkZGluZyBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgIGFuZCBgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllc2AgdG8gbXkgbWVudGFsIGxpc3QuIEkgbm90aWNlZCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBrdm1fcHJvYmVfbXNyX3RvX3NhdmVgIGFuZCBga3ZtX2luaXRfbXNyX2xpc3RzYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgd2hpY2ggY29uZmlybXMgdGhlIGluaXRpYWxpemF0aW9uIGFzcGVjdC4KCkkmIzM5O3ZlIGNsYXJpZmllZCB0aGUgcm9sZXMgb2YgZWFjaCBmdW5jdGlvbjogYGludGVsX3BtdV9nZXRfbXNyYCBhbmQgYGludGVsX3BtdV9zZXRfbXNyYCBoYW5kbGUgdGhlIGRpcmVjdCBNU1IgYWNjZXNzZXMgZnJvbSB0aGUgZ3Vlc3QuIGBpbnRlbF9wbXVfcmVmcmVzaGAgaXMga2V5IGR1cmluZyBDUFVJRCB1cGRhdGVzLCBhbmQgYGludGVsX3BtdV9yZXNldGAgZHVyaW5nIHZDUFUgcmVzZXRzLiBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgIG1hbmFnZXMgdGhlIE1TUiBpbnRlcmNlcHRpb24gbG9naWMsIGFuZCBgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbGAgZGVhbHMgd2l0aCBmaXhlZCBjb3VudGVyIGV2ZW50IHNlbGVjdG9ycy4KClNvLCB0byByZWNhcCwgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGFyZTogYGludGVsX3BtdV9nZXRfbXNyYCwgYGludGVsX3BtdV9zZXRfbXNyYCwgYGludGVsX3BtdV9yZWZyZXNoYCwgYGludGVsX3BtdV9yZXNldGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYCwgYGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5YCwgYW5kIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYC4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGVtdWxhdGlvbiBzdXBwb3J0IGZvciBgTVNSX1BFUkZfTUVUUklDU2AgYW5kIGZpeGVkIGNvdW50ZXIgMyAoYFRPUERPV04uU0xPVFNgKSBpbiBJbnRlbCBLVk0uIFRoaXMgaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byBNU1IgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIEdpdmVuIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBndWVzdCBSRE1TUi9XUk1TUiBhbmQgQ1BVSUQgaW5zdHJ1Y3Rpb25zLCBmdXp6aW5nIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgZW11bGF0aW9uIGlzIGNvcnJlY3QsIGF2b2lkaW5nIGhvc3QgY3Jhc2hlcyBhbmQgZGF0YSBjb3JydXB0aW9uLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZSBjb2RlLCBJIGV4cGVjdCB0aGUgS1ZNIGFuZCBLVk1fSU5URUwgY29uZmlndXJhdGlvbnMgdG8gYmUgcmVsZXZhbnQuCgpOb3csIGxldCYjMzk7cyBwcm9jZWVkIHdpdGggdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW50ZWxfcG11X2dldF9tc3ImIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3NldF9tc3ImIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3JlZnJlc2gmIzM0OywKICAgICYjMzQ7aW50ZWxfcG11X3Jlc2V0JiMzNDssCiAgICAmIzM0O3ZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzJiMzNDssCiAgICAmIzM0O2ludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWwmIzM0OywKICAgICYjMzQ7a3ZtX2luaXRfcG11X2NhcGFiaWxpdHkmIzM0OywKICAgICYjMzQ7dm14X2dldF9wZXJmX2NhcGFiaWxpdGllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIE1TUl9QRVJGX01FVFJJQ1MgYW5kIGZpeGVkIGNvdW50ZXIgMyAoVE9QRE9XTi5TTE9UUykgdG8gS1ZNJiMzOTtzIEludGVsIFBNVSBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIE1TUiByZWFkL3dyaXRlIGhhbmRsZXJzLCBDUFVJRCBldmFsdWF0aW9uLCBhbmQgUE1VIGluaXRpYWxpemF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdmlhIFJETVNSL1dSTVNSIGFuZCBDUFVJRCBpbnN0cnVjdGlvbnMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGVtdWxhdGlvbiBhbmQgYXZvaWQgaG9zdCBjcmFzaGVzIG9yIHN0YXRlIGNvcnJ1cHRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbnRlbF9wbXVfZ2V0X21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfc2V0X21zciYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtpbnRlbF9wbXVfcmVzZXQmIzM0OywKICAgICYjMzQ7dm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMmIzM0OywKICAgICYjMzQ7aW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCYjMzQ7LAogICAgJiMzNDtrdm1faW5pdF9wbXVfY2FwYWJpbGl0eSYjMzQ7LAogICAgJiMzNDt2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgTVNSX1BFUkZfTUVUUklDUyBhbmQgZml4ZWQgY291bnRlciAzIChUT1BET1dOLlNMT1RTKSB0byBLVk0mIzM5O3MgSW50ZWwgUE1VIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgTVNSIHJlYWQvd3JpdGUgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB2aWEgUkRNU1IvV1JNU1IgYW5kIENQVUlEIGluc3RydWN0aW9ucywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgZW11bGF0aW9uIGFuZCBhdm9pZCBob3N0IGNyYXNoZXMgb3Igc3RhdGUgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjAwLjUxOTM1NjIxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MjUyMzM2OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW50ZWxfcG11X2dldF9tc3JcIixcbiAgICBcImludGVsX3BtdV9zZXRfbXNyXCIsXG4gICAgXCJpbnRlbF9wbXVfcmVmcmVzaFwiLFxuICAgIFwiaW50ZWxfcG11X3Jlc2V0XCIsXG4gICAgXCJ2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c1wiLFxuICAgIFwiaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbFwiLFxuICAgIFwia3ZtX2luaXRfcG11X2NhcGFiaWxpdHlcIixcbiAgICBcInZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIE1TUl9QRVJGX01FVFJJQ1MgYW5kIGZpeGVkIGNvdW50ZXIgMyAoVE9QRE9XTi5TTE9UUykgdG8gS1ZNJ3MgSW50ZWwgUE1VIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgTVNSIHJlYWQvd3JpdGUgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB2aWEgUkRNU1IvV1JNU1IgYW5kIENQVUlEIGluc3RydWN0aW9ucywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgZW11bGF0aW9uIGFuZCBhdm9pZCBob3N0IGNyYXNoZXMgb3Igc3RhdGUgY29ycnVwdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MDAuNTE5MzYxOTc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxOTYzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMTIxYjg4YTU4YTc0NDRhZWViNTRlZmFkY2U3Njc1Yzg5MWU3ZDM5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDIzIDA0OjQ3OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggZWVlNDczNzE3YzBlNWEuLjRmNTQ5ZWYwMTJkMjA0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTU3NCw3ICs1NzQsNyBAQCBzdHJ1Y3Qga3ZtX3BtYyB7XFxuICNkZWZpbmUgS1ZNX01BWF9OUl9HUF9DT1VOVEVSU1xcdFxcdEtWTV9NQVgoS1ZNX01BWF9OUl9JTlRFTF9HUF9DT1VOVEVSUywgXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRLVk1fTUFYX05SX0FNRF9HUF9DT1VOVEVSUylcXG4gXFxuLSNkZWZpbmUgS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSU1xcdDNcXG4rI2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTXFx0NFxcbiAjZGVmaW5lIEtWTV9NQVhfTlJfQU1EX0ZJWEVEX0NPVU5URVJTXFx0MFxcbiAjZGVmaW5lIEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlNcXHRLVk1fTUFYKEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlMsIFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0S1ZNX01BWF9OUl9BTURfRklYRURfQ09VTlRFUlMpXFxuQEAgLTU5NCw2ICs1OTQsNyBAQCBzdHJ1Y3Qga3ZtX3BtdSB7XFxuIFxcdHU2NCBnbG9iYWxfc3RhdHVzX3JzdmQ7XFxuIFxcdHU2NCByZXNlcnZlZF9iaXRzO1xcbiBcXHR1NjQgcmF3X2V2ZW50X21hc2s7XFxuK1xcdHU2NCBwZXJmX21ldHJpY3M7XFxuIFxcdHN0cnVjdCBrdm1fcG1jIGdwX2NvdW50ZXJzW0tWTV9NQVhfTlJfR1BfQ09VTlRFUlNdO1xcbiBcXHRzdHJ1Y3Qga3ZtX3BtYyBmaXhlZF9jb3VudGVyc1tLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTXTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG5pbmRleCAxOGM0YmU3NWU5MjcxOS4uZmRjYWViNmM4MzUyYWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbkBAIC0zMzEsNiArMzMxLDcgQEBcXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0ZPUk1BVFxcdFxcdDB4ZjAwXFxuICNkZWZpbmUgUEVSRl9DQVBfRldfV1JJVEVTXFx0XFx0QklUX1VMTCgxMylcXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FXFx0XFx0QklUX1VMTCgxNClcXG4rI2RlZmluZSBQRVJGX0NBUF9QRVJGX01FVFJJQ1NcXHRcXHRCSVRfVUxMKDE1KVxcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfVElNSU5HX0lORk9cXHRCSVRfVUxMKDE3KVxcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfTUFTS1xcdFxcdChQRVJGX0NBUF9QRUJTX1RSQVAgfCBQRVJGX0NBUF9BUkNIX1JFRyB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IFBFUkZfQ0FQX1BFQlNfRk9STUFUIHwgUEVSRl9DQVBfUEVCU19CQVNFTElORSB8IFxcXFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXFxuaW5kZXggMWViMTM2NzNlODg5ZjkuLmJjMmUxY2JjZDliOTdlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxcbkBAIC00NDcsNiArNDQ3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3RvcGRvd25faWR4KGludCBpZHgpXFxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19BUkNIX1BFQlNfVEhSRVNIT0xEX0JJVFxcdDU0XFxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19BUkNIX1BFQlNfVEhSRVNIT0xEXFx0QklUX1VMTChHTE9CQUxfU1RBVFVTX0FSQ0hfUEVCU19USFJFU0hPTERfQklUKVxcbiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRl9CSVRcXHQ0OFxcbisjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRlxcdFxcdEJJVF9VTEwoR0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGX0JJVClcXG4gXFxuICNkZWZpbmUgR0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTXFx0XFx0QklUX1VMTCg0OClcXG4gLypcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BtdS5jIGIvYXJjaC94ODYva3ZtL3BtdS5jXFxuaW5kZXggYjkyZGQyZTU4MzM1NjcuLjBmYWY1ODA3ODJkNWFlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9wbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9wbXUuY1xcbkBAIC0xMjIsNiArMTIyLDggQEAgdm9pZCBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eShzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHMpXFxuIHtcXG4gXFx0Ym9vbCBpc19pbnRlbCA9IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMO1xcbiBcXHRpbnQgbWluX25yX2dwX2N0cnMgPSBwbXVfb3BzLVxcdTAwM2VNSU5fTlJfR1BfQ09VTlRFUlM7XFxuK1xcdHVuaW9uIGNwdWlkMTBfZWR4IGVkeDtcXG4rXFx0dTMyIGVheCwgZWJ4LCBlY3g7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBIeWJyaWQgUE1VcyBkb24ndCBwbGF5IG5pY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiB3aXRob3V0IGNhcmVmdWxcXG5AQCAtMTY5LDYgKzE3MSwyMiBAQCB2b2lkIGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5KHN0cnVjdCBrdm1fcG11X29wcyAqcG11X29wcylcXG4gXFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEludGVsIHBsYXRmb3JtcyBtYXkgc3VwcG9ydCBub24tY29udGlndW91cyBmaXhlZCBjb3VudGVycywgZS5nLiwgc29tZVxcbitcXHQgKiBFLWNvcmUgYmFzZWQgc2VydmVyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50IGZpeGVkIGNvdW50ZXIgMy5cXG4rXFx0ICpcXG4rXFx0ICogQmVmb3JlIEtWTSBzdXBwb3J0cyBub24tY29udGlndW91cyBmaXhlZCBjb3VudGVycywgbWFrZSBzdXJlIG9ubHlcXG4rXFx0ICogY29udGlndW91cyBvbmVzIGFyZSByZXRhaW5lZCBpbiBrdm1fcG11X2NhcC5cXG4rXFx0ICovXFxuK1xcdGlmIChrdm1faG9zdF9wbXUudmVyc2lvbiBcXHUwMDNlPSA1KSB7XFxuK1xcdFxcdGNwdWlkKDEwLCBcXHUwMDI2ZWF4LCBcXHUwMDI2ZWJ4LCBcXHUwMDI2ZWN4LCBcXHUwMDI2ZWR4LmZ1bGwpO1xcbitcXHRcXHRpZiAoa3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkIFxcdTAwM2UgZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZClcXG4rXFx0XFx0XFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11IFxcdTAwMjZcXHUwMDI2IGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCBcXHUwMDNlIDMpXFxuK1xcdFxcdGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IDM7XFxuK1xcbiBcXHRrdm1fcG11X2V2ZW50c2VsLklOU1RSVUNUSU9OU19SRVRJUkVEID1cXG4gXFx0XFx0cGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKFBFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TKTtcXG4gXFx0a3ZtX3BtdV9ldmVudHNlbC5CUkFOQ0hfSU5TVFJVQ1RJT05TX1JFVElSRUQgPVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xcbmluZGV4IGE3M2E5NTE1ZDk2Y2Q1Li4yYzMzNjdmNWUyZGZiOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY1xcbkBAIC0xODgsNiArMTg4LDggQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcXG4gXFx0c3dpdGNoIChtc3IpIHtcXG4gXFx0Y2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX3BtdV9oYXNfcGVyZl9nbG9iYWxfY3RybChwbXUpO1xcbitcXHRjYXNlIE1TUl9QRVJGX01FVFJJQ1M6XFxuK1xcdFxcdHJldHVybiB2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7XFxuIFxcdGNhc2UgTVNSX0lBMzJfUEVCU19FTkFCTEU6XFxuIFxcdFxcdHJldCA9IHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpIFxcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQ7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0zNDUsNiArMzQ3LDExIEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiBcXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XFxuIFxcdFxcdG1zcl9pbmZvLVxcdTAwM2VkYXRhID0gcG11LVxcdTAwM2VmaXhlZF9jdHJfY3RybDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTVNSX1BFUkZfTUVUUklDUzpcXG4rXFx0XFx0aWYgKCFtc3JfaW5mby1cXHUwMDNlaG9zdF9pbml0aWF0ZWQpXFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRtc3JfaW5mby1cXHUwMDNlZGF0YSA9IHBtdS1cXHUwMDNlcGVyZl9tZXRyaWNzO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcXG4gXFx0XFx0bXNyX2luZm8tXFx1MDAzZWRhdGEgPSBwbXUtXFx1MDAzZXBlYnNfZW5hYmxlO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMzk0LDYgKzQwMSwxNiBAQCBzdGF0aWMgaW50IGludGVsX3BtdV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4gXFx0XFx0aWYgKHBtdS1cXHUwMDNlZml4ZWRfY3RyX2N0cmwgIT0gZGF0YSlcXG4gXFx0XFx0XFx0cmVwcm9ncmFtX2ZpeGVkX2NvdW50ZXJzKHBtdSwgZGF0YSk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1TUl9QRVJGX01FVFJJQ1M6XFxuK1xcdFxcdGlmICghbXNyX2luZm8tXFx1MDAzZWhvc3RfaW5pdGlhdGVkKVxcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIElmIFRNQSBsZXZlbCAyIGlzIG5vdCBzdXBwb3J0ZWQsIGJpdHMgWzYzOjMyXSBhcmUgcmVzZXJ2ZWRcXG4rXFx0XFx0ICogYW5kIGlnbm9yZWQgb24gd3JpdGUsIHNvIG5vIHZhbGlkYXRpb24gaXMgbmVlZGVkIGhlcmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwbXUtXFx1MDAzZXBlcmZfbWV0cmljcyA9IGRhdGE7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxcbiBcXHRcXHRpZiAoZGF0YSBcXHUwMDI2IHBtdS1cXHUwMDNlcGVic19lbmFibGVfcnN2ZClcXG4gXFx0XFx0XFx0cmV0dXJuIDE7XFxuQEAgLTQ2NCwyOCArNDgxLDMwIEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiAgKiBkaWZmZXJlbnQgcGVyZl9ldmVudCBpcyBhbHJlYWR5IHV0aWxpemluZyB0aGUgcmVxdWVzdGVkIGNvdW50ZXIsIGJ1dCB0aGUgZW5kXFxuICAqIHJlc3VsdCBpcyB0aGUgc2FtZSAoaWdub3JpbmcgdGhlIGZhY3QgdGhhdCB1c2luZyBhIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyXFxuICAqIHdpbGwgbGlrZWx5IGV4YWNlcmJhdGUgY291bnRlciBjb250ZW50aW9uKS5cXG4tICpcXG4tICogRm9yY2libHkgaW5saW5lZCB0byBhbGxvdyBhc3NlcnRpbmcgb24gQGluZGV4IGF0IGJ1aWxkIHRpbWUsIGFuZCB0aGVyZSBzaG91bGRcXG4tICogbmV2ZXIgYmUgbW9yZSB0aGFuIG9uZSB1c2VyLlxcbiAgKi9cXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXFxuK3N0YXRpYyB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXFxuIHtcXG4gXFx0Y29uc3QgZW51bSBwZXJmX2h3X2lkIGZpeGVkX3BtY19wZXJmX2lkc1tdID0ge1xcbiBcXHRcXHRbMF0gPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcXG4gXFx0XFx0WzFdID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxcbiBcXHRcXHRbMl0gPSBQRVJGX0NPVU5UX0hXX1JFRl9DUFVfQ1lDTEVTLFxcbiBcXHR9O1xcbi1cXHR1NjQgZXZlbnRzZWw7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmaXhlZF9wbWNfcGVyZl9pZHMpICE9IEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlMpO1xcbi1cXHRCVUlMRF9CVUdfT04oaW5kZXggXFx1MDAzZT0gS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUyk7XFxuK1xcdHU2NCBldmVudHNlbCA9IDA7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBZZWxsIGlmIHBlcmYgcmVwb3J0cyBzdXBwb3J0IGZvciBhIGZpeGVkIGNvdW50ZXIgYnV0IHBlcmYgZG9lc24ndFxcbi1cXHQgKiBoYXZlIGEga25vd24gZW5jb2RpbmcgZm9yIHRoZSBhc3NvY2lhdGVkIGdlbmVyYWwgcHVycG9zZSBldmVudC5cXG4rXFx0ICogRml4ZWQgY291bnRlcnMgMyBhbmQgYWJvdmUgZG9uJ3QgaGF2ZSBjb3JyZXNwb25kaW5nIGdlbmVyaWMgaGFyZHdhcmVcXG4rXFx0ICogcGVyZiBldmVudCwgYW5kIEtWTSBkb2VzIG5vdCBpbnRlbmQgdG8gZW11bGF0ZSB0aGVtIG9uIG5vbi1tZWRpYXRlZFxcbitcXHQgKiB2UE1VLlxcbiBcXHQgKi9cXG4tXFx0ZXZlbnRzZWwgPSBwZXJmX2dldF9od19ldmVudF9jb25maWcoZml4ZWRfcG1jX3BlcmZfaWRzW2luZGV4XSk7XFxuLVxcdFdBUk5fT05fT05DRSghZXZlbnRzZWwgXFx1MDAyNlxcdTAwMjYgaW5kZXggXFx1MDAzYyBrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQpO1xcbitcXHRpZiAoaW5kZXggXFx1MDAzYyBBUlJBWV9TSVpFKGZpeGVkX3BtY19wZXJmX2lkcykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogWWVsbCBpZiBwZXJmIHJlcG9ydHMgc3VwcG9ydCBmb3IgYSBmaXhlZCBjb3VudGVyIGJ1dCBwZXJmXFxuK1xcdFxcdCAqIGRvZXNuJ3QgaGF2ZSBhIGtub3duIGVuY29kaW5nIGZvciB0aGUgYXNzb2NpYXRlZCBnZW5lcmFsXFxuK1xcdFxcdCAqIHB1cnBvc2UgZXZlbnQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRldmVudHNlbCA9IHBlcmZfZ2V0X2h3X2V2ZW50X2NvbmZpZyhmaXhlZF9wbWNfcGVyZl9pZHNbaW5kZXhdKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKCFldmVudHNlbCBcXHUwMDI2XFx1MDAyNiBpbmRleCBcXHUwMDNjIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIGV2ZW50c2VsO1xcbiB9XFxuIFxcbkBAIC01ODcsNiArNjA2LDExIEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZWZyZXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0cG11LVxcdTAwM2VnbG9iYWxfc3RhdHVzX3JzdmQgXFx1MDAyNj1cXG4gXFx0XFx0XFx0XFx0fk1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMX1RSQUNFX1RPUEFfUE1JO1xcbiBcXG4rXFx0aWYgKHBlcmZfY2FwYWJpbGl0aWVzIFxcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTKSB7XFxuK1xcdFxcdHBtdS1cXHUwMDNlZ2xvYmFsX2N0cmxfcnN2ZCBcXHUwMDI2PSB+R0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTO1xcbitcXHRcXHRwbXUtXFx1MDAzZWdsb2JhbF9zdGF0dXNfcnN2ZCBcXHUwMDI2PSB+R0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocGVyZl9jYXBhYmlsaXRpZXMgXFx1MDAyNiBQRVJGX0NBUF9QRUJTX0ZPUk1BVCkge1xcbiBcXHRcXHRpZiAocGVyZl9jYXBhYmlsaXRpZXMgXFx1MDAyNiBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FKSB7XFxuIFxcdFxcdFxcdHBtdS1cXHUwMDNlcGVic19lbmFibGVfcnN2ZCA9IGNvdW50ZXJfcnN2ZDtcXG5AQCAtNjMwLDYgKzY1NCw5IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4rXFx0c3RydWN0IGt2bV9wbXUgKnBtdSA9IHZjcHVfdG9fcG11KHZjcHUpO1xcbitcXG4rXFx0cG11LVxcdTAwM2VwZXJmX21ldHJpY3MgPSAwO1xcbiBcXHRpbnRlbF9wbXVfcmVsZWFzZV9ndWVzdF9sYnJfZXZlbnQodmNwdSk7XFxuIH1cXG4gXFxuQEAgLTgwMSw2ICs4MjgsMTMgQEAgc3RhdGljIHZvaWQgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzdHJ1Y3Qga3ZtX3BtdSAqcG11ID0gdmNwdV90b19wbXUodmNwdSk7XFxuIFxcdHU2NCBnbG9iYWxfc3RhdHVzLCB0b2dnbGU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQRVJGX01FVFJJQ1MgTVNSIG11c3QgYmUgcmVzdG9yZWQgY2xvc2VseSBhZnRlciBmaXhlZCBjb3VudGVyIDMsXFxuK1xcdCAqIHdoaWNoIHdhcyBqdXN0IHJlc3RvcmVkIGJ5IGt2bV9wbXVfbG9hZF9ndWVzdF9wbWNzKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAodmNwdV9oYXNfcGVyZl9tZXRyaWNzKHZjcHUpKVxcbitcXHRcXHR3cm1zcnEoTVNSX1BFUkZfTUVUUklDUywgcG11LVxcdTAwM2VwZXJmX21ldHJpY3MpO1xcbitcXG4gXFx0cmRtc3JxKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgZ2xvYmFsX3N0YXR1cyk7XFxuIFxcdHRvZ2dsZSA9IHBtdS1cXHUwMDNlZ2xvYmFsX3N0YXR1cyBeIGdsb2JhbF9zdGF0dXM7XFxuIFxcdGlmIChnbG9iYWxfc3RhdHVzIFxcdTAwMjYgdG9nZ2xlKVxcbkBAIC04MjksNiArODYzLDEyIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgKi9cXG4gXFx0aWYgKHBtdS1cXHUwMDNlZml4ZWRfY3RyX2N0cmxfaHcpXFxuIFxcdFxcdHdybXNycShNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLCAwKTtcXG4rXFxuK1xcdGlmICh2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSkpIHtcXG4rXFx0XFx0cG11LVxcdTAwM2VwZXJmX21ldHJpY3MgPSByZHBtYyhJTlRFTF9QTUNfRklYRURfUkRQTUNfTUVUUklDUyk7XFxuK1xcdFxcdGlmIChwbXUtXFx1MDAzZXBlcmZfbWV0cmljcylcXG4rXFx0XFx0XFx0d3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIDApO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0cnVjdCBrdm1fcG11X29wcyBpbnRlbF9wbXVfb3BzIF9faW5pdGRhdGEgPSB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmggYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXFxuaW5kZXggNWQ5MzU3NjQwYWExODAuLjU3NzA1NzczZGM0OWI0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXFxuQEAgLTQwLDQgKzQwLDkgQEAgc3RydWN0IGxicl9kZXNjIHtcXG4gXFxuIGV4dGVybiBzdHJ1Y3QgeDg2X3BtdV9sYnIgdm14X2xicl9jYXBzO1xcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHZjcHVfaGFzX3BlcmZfbWV0cmljcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIHZjcHVfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZjcHUpIFxcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTO1xcbit9XFxuK1xcbiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9QTVVfSU5URUxfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbmluZGV4IGExYTVlZGIzOWE3ZWRkLi41ODRkOTllZjYwMjZlYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC00MjYwLDYgKzQyNjAsMTAgQEAgc3RhdGljIHZvaWQgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRcXHRcXHQgIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xcbiBcXHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLFxcbiBcXHRcXHRcXHRcXHQgIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xcbitcXG4rXFx0aW50ZXJjZXB0ID0gIWhhc19tZWRpYXRlZF9wbXUgfHwgIXZjcHVfaGFzX3BlcmZfbWV0cmljcyh2Y3B1KTtcXG4rXFx0dm14X3NldF9pbnRlcmNlcHRfZm9yX21zcih2Y3B1LCBNU1JfUEVSRl9NRVRSSUNTLFxcbitcXHRcXHRcXHRcXHQgIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2bXhfcmVjYWxjX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtODA4NCw2ICs4MDg4LDkgQEAgc3RhdGljIF9faW5pdCB1NjQgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2b2lkKVxcbiBcXHRcXHRwZXJmX2NhcCBcXHUwMDI2PSB+UEVSRl9DQVBfUEVCU19CQVNFTElORTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGVuYWJsZV9tZWRpYXRlZF9wbXUpXFxuK1xcdFxcdHBlcmZfY2FwIHw9IGhvc3RfcGVyZl9jYXAgXFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1M7XFxuK1xcbiBcXHRyZXR1cm4gcGVyZl9jYXA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IGQ5ZDUxODAzYjdiMjA5Li45NjIzZjU1OGYzNTlkZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMzUwLDkgKzM1MCw5IEBAIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHtcXG4gXFxuIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX3BtdVtdID0ge1xcbiBcXHRNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAsIE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMSxcXG4tXFx0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICsgMixcXG4rXFx0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIyLCBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjMsXFxuIFxcdE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUyxcXG4tXFx0TVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCxcXG4rXFx0TVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgTVNSX1BFUkZfTUVUUklDUyxcXG4gXFx0TVNSX0lBMzJfUEVCU19FTkFCTEUsIE1TUl9JQTMyX0RTX0FSRUEsIE1TUl9QRUJTX0RBVEFfQ0ZHLFxcbiBcXG4gXFx0LyogVGhpcyBwYXJ0IG9mIE1TUnMgc2hvdWxkIG1hdGNoIEtWTV9NQVhfTlJfSU5URUxfR1BfQ09VTlRFUlMuICovXFxuQEAgLTc2NzksNiArNzY3OSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcHJvYmVfbXNyX3RvX3NhdmUodTMyIG1zcl9pbmRleClcXG4gXFx0XFx0ICAgICBpbnRlbF9wdF92YWxpZGF0ZV9od19jYXAoUFRfQ0FQX251bV9hZGRyZXNzX3JhbmdlcykgKiAyKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxcbitcXHRcXHRpZiAoIShrdm1fY2Fwcy5zdXBwb3J0ZWRfcGVyZl9jYXAgXFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgLi4uXFxuIFxcdCAgICAgTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCArIEtWTV9NQVhfTlJfR1BfQ09VTlRFUlMgLSAxOlxcbiBcXHRcXHRpZiAobXNyX2luZGV4IC0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCBcXHUwMDNlPVxcbkBAIC03NzQyLDcgKzc3NDYsNyBAQCBzdGF0aWMgdm9pZCBrdm1faW5pdF9tc3JfbGlzdHModm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBpO1xcbiBcXG4tXFx0QlVJTERfQlVHX09OX01TRyhLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTICE9IDMsXFxuK1xcdEJVSUxEX0JVR19PTl9NU0coS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyAhPSA0LFxcbiBcXHRcXHRcXHQgXFxcIlBsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXFxcIik7XFxuIFxcbiBcXHRudW1fbXNyc190b19zYXZlID0gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbmluZGV4IGVmZjI5NjQ1NzE5YmM3Li5lNzc0NWUyY2Q1NDNhOSAxMDA2NDRcXG4tLS0gYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxcbisrKyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXFxuQEAgLTMzMSw2ICszMzEsNyBAQFxcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfRk9STUFUXFx0XFx0MHhmMDBcXG4gI2RlZmluZSBQRVJGX0NBUF9GV19XUklURVNcXHRcXHRCSVRfVUxMKDEzKVxcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkVcXHRcXHRCSVRfVUxMKDE0KVxcbisjZGVmaW5lIFBFUkZfQ0FQX1BFUkZfTUVUUklDU1xcdFxcdEJJVF9VTEwoMTUpXFxuICNkZWZpbmUgUEVSRl9DQVBfUEVCU19USU1JTkdfSU5GT1xcdEJJVF9VTEwoMTcpXFxuICNkZWZpbmUgUEVSRl9DQVBfUEVCU19NQVNLXFx0XFx0KFBFUkZfQ0FQX1BFQlNfVFJBUCB8IFBFUkZfQ0FQX0FSQ0hfUkVHIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHQgUEVSRl9DQVBfUEVCU19GT1JNQVQgfCBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FIHwgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmhcXG5pbmRleCA2MDhlZDgzZDdjNmE2OS4uNmMxOTUwM2UwYmI3ZGQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oXFxuQEAgLTUyLDYgKzUyLDkgQEBcXG4gLyogRml4ZWQgUE1DIGNvbnRyb2xzLCBJbnRlbCBvbmx5LiAqL1xcbiAjZGVmaW5lIEZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoX2lkeClcXHRCSVRfVUxMKCgzMiArIChfaWR4KSkpXFxuIFxcbisvKiBQRVJGX01FVFJJQ1MgZW5hYmxlLCBJbnRlbCBvbmx5LiAqL1xcbisjZGVmaW5lIFBFUkZfTUVUUklDU19HTE9CQUxfQ1RSTF9FTkFCTEVcXHRcXHRCSVRfVUxMKDQ4KVxcbitcXG4gI2RlZmluZSBGSVhFRF9QTUNfS0VSTkVMXFx0XFx0XFx0QklUX1VMTCgwKVxcbiAjZGVmaW5lIEZJWEVEX1BNQ19VU0VSXFx0XFx0XFx0XFx0QklUX1VMTCgxKVxcbiAjZGVmaW5lIEZJWEVEX1BNQ19BTllUSFJFQURcXHRcXHRcXHRCSVRfVUxMKDIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xcbmluZGV4IGRjNmFmYWMzYWE5MTk1Li5kNDY4OGE3ZDFlNTU2OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJwbXUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInByb2Nlc3Nvci5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gXFxuIC8qIE51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wIGZvciB0aGUgZ3Vlc3QgbWVhc3VyZW1lbnQgcGF5bG9hZC4gKi9cXG4gI2RlZmluZSBOVU1fTE9PUFNcXHRcXHRcXHQxMFxcbkBAIC0yNDEsMTcgKzI0MiwyMCBAQCBkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfSB3aGlsZSAoMClcXG4gXFxuLSNkZWZpbmUgR1VFU1RfVEVTVF9FVkVOVChfaWR4LCBfcG1jLCBfcG1jX21zciwgX2N0cmxfbXNyLCBfdmFsdWUsIEZFUClcXHRcXHRcXFxcXFxuKyNkZWZpbmUgR1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUClcXHRcXHRcXHRcXHRcXFxcXFxuIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdHdybXNyKF9wbWNfbXNyLCAwKTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMVVNIT1BUKSlcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdEdVRVNUX01FQVNVUkVfRVZFTlQoX2N0cmxfbXNyLCBfdmFsdWUsIFxcXCJjbGZsdXNob3B0ICVbbV1cXFwiLCBGRVApO1xcdFxcXFxcXG4gXFx0ZWxzZSBpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxVU0gpKVxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXFxcImNsZmx1c2ggICVbbV1cXFwiLCBGRVApO1xcdFxcXFxcXG4gXFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXFxcIm5vcFxcXCIsIEZFUCk7XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30gd2hpbGUgKDApXFxuK1xcbisjZGVmaW5lIEdVRVNUX1RFU1RfRVZFTlQoX2lkeCwgX3BtYywgX3BtY19tc3IsIF9jdHJsX21zciwgX3ZhbHVlLCBGRVApXFx0XFx0XFxcXFxcbitkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR3cm1zcihfcG1jX21zciwgMCk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRHVUVTVF9SVU5fUEFZTE9BRChfY3RybF9tc3IsIF92YWx1ZSwgRkVQKTtcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGd1ZXN0X2Fzc2VydF9ldmVudF9jb3VudChfaWR4LCBfcG1jLCBfcG1jX21zcik7XFx0XFx0XFx0XFx0XFxcXFxcbiB9IHdoaWxlICgwKVxcbiBcXG5AQCAtMzE4LDYgKzMyMiw1NiBAQCBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnQodTggaWR4KVxcbiBcXHRcXHRcXHRcXHRGSVhFRF9QTUNfR0xPQkFMX0NUUkxfRU5BQkxFKGkpKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wZXJmX21ldHJpY3Modm9pZClcXG4re1xcbitcXHRpbnQgcmV0aXJpbmcsIGJhZF9zcGVjLCBmZV9ib3VuZCwgYmVfYm91bmQsIHN1bTtcXG4rXFx0dTY0IGdsb2JhbF9jdHJsLCBtZXRyaWNzO1xcbitcXG4rXFx0aWYgKChndWVzdF9nZXRfcG11X3ZlcnNpb24oKSBcXHUwMDNjIDIpIHx8XFx0LyogRG9lcyBndWVzdCBoYXZlIEdMT0JBTF9DVFJMPyAqL1xcbitcXHQgICAgIXRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9QRENNKSB8fFxcbitcXHQgICAgIShyZG1zcihNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUykgXFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCAwKTtcXG4rXFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIzLCAwKTtcXG4rXFx0d3Jtc3IoTVNSX1BFUkZfTUVUUklDUywgMCk7XFxuK1xcbitcXHQvKiBFbmFibGUgZml4ZWQgY3RyMyAoVE9QRE9XTi5TTE9UUykgYW5kIFBFUkZfTUVUUklDUy4gKi9cXG4rXFx0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgRklYRURfUE1DX0NUUkwoMywgRklYRURfUE1DX0tFUk5FTCkpO1xcbitcXHRnbG9iYWxfY3RybCA9IEZJWEVEX1BNQ19HTE9CQUxfQ1RSTF9FTkFCTEUoMykgfFxcbitcXHRcXHQgICAgICBQRVJGX01FVFJJQ1NfR0xPQkFMX0NUUkxfRU5BQkxFO1xcbitcXG4rXFx0R1VFU1RfUlVOX1BBWUxPQUQoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgZ2xvYmFsX2N0cmwsIFxcXCJcXFwiKTtcXG4rXFxuK1xcdC8qIENoZWNrIHRlc3QgcmVzdWx0cy4gKi9cXG4rXFx0bWV0cmljcyA9IHJkbXNyKE1TUl9QRVJGX01FVFJJQ1MpO1xcbitcXHRyZXRpcmluZyA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCg3LCAwKSwgbWV0cmljcyk7XFxuK1xcdGJhZF9zcGVjID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDE1LCA4KSwgbWV0cmljcyk7XFxuK1xcdGZlX2JvdW5kID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDIzLCAxNiksIG1ldHJpY3MpO1xcbitcXHRiZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgzMSwgMjQpLCBtZXRyaWNzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJlIGNvbnNlcnZhdGl2ZTogdGhlIG1lYXN1cmVkIHBheWxvYWQgZGVmaW5pdGVseSByZXRpcmVzIHdvcmssIHNvXFxuK1xcdCAqIFJldGlyaW5nIHNob3VsZCBiZSBub24temVyby5cXG4rXFx0ICovXFxuK1xcdEdVRVNUX0FTU0VSVF9ORShtZXRyaWNzLCAwVUxMKTtcXG4rXFx0R1VFU1RfQVNTRVJUX05FKHJldGlyaW5nLCAwVUxMKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBzdW0gb2YgdGhlIDQgbGV2ZWwtMSB0b3Bkb3duIG1ldHJpY3Mgc2hvdWxkIGJlIGNsb3NlIHRvIDEwMCUuXFxuK1xcdCAqIDMgaXMgY2hvc2VuIGFzIGEgbG9vc2Ugc2FuaXR5IGNoZWNrLlxcbitcXHQgKi9cXG4rXFx0c3VtID0gcmV0aXJpbmcgKyBiYWRfc3BlYyArIGZlX2JvdW5kICsgYmVfYm91bmQ7XFxuK1xcdEdVRVNUX0FTU0VSVChzdW0gXFx1MDAzZT0gMHhmZCBcXHUwMDI2XFx1MDAyNiBzdW0gXFx1MDAzYz0gMHgxMDIpO1xcbitcXG4rXFx0LyogU2FuaXR5IGNoZWNrIGFmdGVyIFBFUkZfTUVUUklDUyBkaXNhYmxlZC4gKi9cXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcImxvb3AgLlxcXCIgOiBcXFwiK2NcXFwiKChpbnQpe05VTV9MT09QU30pKTtcXG4rXFx0R1VFU1RfQVNTRVJUX0VRKHJkbXNyKE1TUl9QRVJGX01FVFJJQ1MpLCBtZXRyaWNzKTtcXG4rXFx0d3Jtc3IoTVNSX1BFUkZfTUVUUklDUywgMHhkZWFkZGVhZCk7XFxuK1xcbitcXHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIDB4ZGVhZGRlYWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXFxuIHtcXG4gXFx0dTggaTtcXG5AQCAtMzI1LDYgKzM3OSw4IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudHModm9pZClcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0lOVEVMX0FSQ0hfRVZFTlRTOyBpKyspXFxuIFxcdFxcdGd1ZXN0X3Rlc3RfYXJjaF9ldmVudChpKTtcXG4gXFxuK1xcdGd1ZXN0X3Rlc3RfcGVyZl9tZXRyaWNzKCk7XFxuK1xcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuQEAgLTM2MSw3ICs0MTcsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyY2hfZXZlbnRzKHU4IHBtdV92ZXJzaW9uLCB1NjQgcGVyZl9jYXBhYmlsaXRpZXMsXFxuICAqIG90aGVyIHRoYW4gUE1DcyBpbiB0aGUgZnV0dXJlLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfR1BfQ09VTlRFUlNcXHQ4XFxuLSNkZWZpbmUgTUFYX05SX0ZJWEVEX0NPVU5URVJTXFx0M1xcbisjZGVmaW5lIE1BWF9OUl9GSVhFRF9DT1VOVEVSU1xcdDRcXG4gXFxuICNkZWZpbmUgR1VFU1RfQVNTRVJUX1BNQ19NU1JfQUNDRVNTKGluc24sIG1zciwgZXhwZWN0X2dwLCB2ZWN0b3IpXFx0XFx0XFxcXFxcbiBfX0dVRVNUX0FTU0VSVChleHBlY3RfZ3AgPyB2ZWN0b3IgPT0gR1BfVkVDVE9SIDogIXZlY3RvcixcXHRcXHRcXHRcXFxcXFxuQEAgLTU4NSw2ICs2NDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIFxcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcXG4gXFx0dTggbnJfZ3BfY291bnRlcnMgPSBrdm1fY3B1X3Byb3BlcnR5KFg4Nl9QUk9QRVJUWV9QTVVfTlJfR1BfQ09VTlRFUlMpO1xcbiBcXHR1OCBwbXVfdmVyc2lvbiA9IGt2bV9jcHVfcHJvcGVydHkoWDg2X1BST1BFUlRZX1BNVV9WRVJTSU9OKTtcXG4rXFx0dTY0IGFkdmVydGlzZWRfcGVyZl9jYXBzID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUyk7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXHR1OCB2LCBqO1xcbiBcXHR1MzIgaztcXG5AQCAtNTkyLDYgKzY0OSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcXG4gXFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xcbiBcXHRcXHQwLFxcbiBcXHRcXHRQTVVfQ0FQX0ZXX1dSSVRFUyxcXG4rXFx0XFx0UEVSRl9DQVBfUEVSRl9NRVRSSUNTLFxcbiBcXHR9O1xcbiBcXG4gXFx0LypcXG5AQCAtNjQ5LDYgKzcwNywxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXFxuIFxcdFxcdFxcdGlmICgha3ZtX2hhc19wZXJmX2NhcHMgXFx1MDAyNlxcdTAwMjYgcGVyZl9jYXBzW2ldKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdFxcdC8qIElnbm9yZSB1bnN1cHBvcnRlZCBmZWF0dXJlcy4gKi9cXG4rXFx0XFx0XFx0aWYgKHBlcmZfY2Fwc1tpXSBcXHUwMDI2IH5hZHZlcnRpc2VkX3BlcmZfY2FwcylcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHR2LCBwZXJmX2NhcHNbaV0pO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MDEuMDY5MjUwMzc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTcwMjQzMjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImludGVsX3BtdV9nZXRfbXNyXCIsXG4gICAgXCJpbnRlbF9wbXVfc2V0X21zclwiLFxuICAgIFwiaW50ZWxfcG11X3JlZnJlc2hcIixcbiAgICBcImludGVsX3BtdV9yZXNldFwiLFxuICAgIFwidm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNcIixcbiAgICBcImludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWxcIixcbiAgICBcImt2bV9pbml0X3BtdV9jYXBhYmlsaXR5XCIsXG4gICAgXCJ2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBNU1JfUEVSRl9NRVRSSUNTIGFuZCBmaXhlZCBjb3VudGVyIDMgKFRPUERPV04uU0xPVFMpIHRvIEtWTSdzIEludGVsIFBNVSBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIE1TUiByZWFkL3dyaXRlIGhhbmRsZXJzLCBDUFVJRCBldmFsdWF0aW9uLCBhbmQgUE1VIGluaXRpYWxpemF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdmlhIFJETVNSL1dSTVNSIGFuZCBDUFVJRCBpbnN0cnVjdGlvbnMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGVtdWxhdGlvbiBhbmQgYXZvaWQgaG9zdCBjcmFzaGVzIG9yIHN0YXRlIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTEyMWI4OGE1OGE3NDQ0YWVlYjU0ZWZhZGNlNzY3NWM4OTFlN2QzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA0OjQ3OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGVlZTQ3MzcxN2MwZTVhLi40ZjU0OWVmMDEyZDIwNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC01NzQsNyArNTc0LDcgQEAgc3RydWN0IGt2bV9wbWMge1xuICNkZWZpbmUgS1ZNX01BWF9OUl9HUF9DT1VOVEVSU1x0XHRLVk1fTUFYKEtWTV9NQVhfTlJfSU5URUxfR1BfQ09VTlRFUlMsIFxcXG4gXHRcdFx0XHRcdFx0S1ZNX01BWF9OUl9BTURfR1BfQ09VTlRFUlMpXG4gXG4tI2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTXHQzXG4rI2RlZmluZSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTXHQ0XG4gI2RlZmluZSBLVk1fTUFYX05SX0FNRF9GSVhFRF9DT1VOVEVSU1x0MFxuICNkZWZpbmUgS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSU1x0S1ZNX01BWChLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTLCBcXFxuIFx0XHRcdFx0XHRcdEtWTV9NQVhfTlJfQU1EX0ZJWEVEX0NPVU5URVJTKVxuQEAgLTU5NCw2ICs1OTQsNyBAQCBzdHJ1Y3Qga3ZtX3BtdSB7XG4gXHR1NjQgZ2xvYmFsX3N0YXR1c19yc3ZkO1xuIFx0dTY0IHJlc2VydmVkX2JpdHM7XG4gXHR1NjQgcmF3X2V2ZW50X21hc2s7XG4rXHR1NjQgcGVyZl9tZXRyaWNzO1xuIFx0c3RydWN0IGt2bV9wbWMgZ3BfY291bnRlcnNbS1ZNX01BWF9OUl9HUF9DT1VOVEVSU107XG4gXHRzdHJ1Y3Qga3ZtX3BtYyBmaXhlZF9jb3VudGVyc1tLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTXTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5pbmRleCAxOGM0YmU3NWU5MjcxOS4uZmRjYWViNmM4MzUyYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbkBAIC0zMzEsNiArMzMxLDcgQEBcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfRk9STUFUXHRcdDB4ZjAwXG4gI2RlZmluZSBQRVJGX0NBUF9GV19XUklURVNcdFx0QklUX1VMTCgxMylcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfQkFTRUxJTkVcdFx0QklUX1VMTCgxNClcbisjZGVmaW5lIFBFUkZfQ0FQX1BFUkZfTUVUUklDU1x0XHRCSVRfVUxMKDE1KVxuICNkZWZpbmUgUEVSRl9DQVBfUEVCU19USU1JTkdfSU5GT1x0QklUX1VMTCgxNylcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfTUFTS1x0XHQoUEVSRl9DQVBfUEVCU19UUkFQIHwgUEVSRl9DQVBfQVJDSF9SRUcgfCBcXFxuIFx0XHRcdFx0XHQgUEVSRl9DQVBfUEVCU19GT1JNQVQgfCBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FIHwgXFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmhcbmluZGV4IDFlYjEzNjczZTg4OWY5Li5iYzJlMWNiY2Q5Yjk3ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oXG5AQCAtNDQ3LDYgKzQ0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc190b3Bkb3duX2lkeChpbnQgaWR4KVxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19BUkNIX1BFQlNfVEhSRVNIT0xEX0JJVFx0NTRcbiAjZGVmaW5lIEdMT0JBTF9TVEFUVVNfQVJDSF9QRUJTX1RIUkVTSE9MRFx0QklUX1VMTChHTE9CQUxfU1RBVFVTX0FSQ0hfUEVCU19USFJFU0hPTERfQklUKVxuICNkZWZpbmUgR0xPQkFMX1NUQVRVU19QRVJGX01FVFJJQ1NfT1ZGX0JJVFx0NDhcbisjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRlx0XHRCSVRfVUxMKEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRl9CSVQpXG4gXG4gI2RlZmluZSBHTE9CQUxfQ1RSTF9FTl9QRVJGX01FVFJJQ1NcdFx0QklUX1VMTCg0OClcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wbXUuYyBiL2FyY2gveDg2L2t2bS9wbXUuY1xuaW5kZXggYjkyZGQyZTU4MzM1NjcuLjBmYWY1ODA3ODJkNWFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3BtdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vcG11LmNcbkBAIC0xMjIsNiArMTIyLDggQEAgdm9pZCBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eShzdHJ1Y3Qga3ZtX3BtdV9vcHMgKnBtdV9vcHMpXG4ge1xuIFx0Ym9vbCBpc19pbnRlbCA9IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMO1xuIFx0aW50IG1pbl9ucl9ncF9jdHJzID0gcG11X29wcy1cdTAwM2VNSU5fTlJfR1BfQ09VTlRFUlM7XG4rXHR1bmlvbiBjcHVpZDEwX2VkeCBlZHg7XG4rXHR1MzIgZWF4LCBlYngsIGVjeDtcbiBcbiBcdC8qXG4gXHQgKiBIeWJyaWQgUE1VcyBkb24ndCBwbGF5IG5pY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiB3aXRob3V0IGNhcmVmdWxcbkBAIC0xNjksNiArMTcxLDIyIEBAIHZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKVxuIFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gbWluKGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCxcbiBcdFx0XHRcdFx0ICAgICBLVk1fTUFYX05SX0ZJWEVEX0NPVU5URVJTKTtcbiBcbitcdC8qXG4rXHQgKiBJbnRlbCBwbGF0Zm9ybXMgbWF5IHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgZml4ZWQgY291bnRlcnMsIGUuZy4sIHNvbWVcbitcdCAqIEUtY29yZSBiYXNlZCBzZXJ2ZXIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQgZml4ZWQgY291bnRlciAzLlxuK1x0ICpcbitcdCAqIEJlZm9yZSBLVk0gc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgZml4ZWQgY291bnRlcnMsIG1ha2Ugc3VyZSBvbmx5XG4rXHQgKiBjb250aWd1b3VzIG9uZXMgYXJlIHJldGFpbmVkIGluIGt2bV9wbXVfY2FwLlxuK1x0ICovXG4rXHRpZiAoa3ZtX2hvc3RfcG11LnZlcnNpb24gXHUwMDNlPSA1KSB7XG4rXHRcdGNwdWlkKDEwLCBcdTAwMjZlYXgsIFx1MDAyNmVieCwgXHUwMDI2ZWN4LCBcdTAwMjZlZHguZnVsbCk7XG4rXHRcdGlmIChrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQgXHUwMDNlIGVkeC5zcGxpdC5udW1fY291bnRlcnNfZml4ZWQpXG4rXHRcdFx0a3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkID0gZWR4LnNwbGl0Lm51bV9jb3VudGVyc19maXhlZDtcbitcdH1cbitcbitcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSBcdTAwMjZcdTAwMjYga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkIFx1MDAzZSAzKVxuK1x0XHRrdm1fcG11X2NhcC5udW1fY291bnRlcnNfZml4ZWQgPSAzO1xuK1xuIFx0a3ZtX3BtdV9ldmVudHNlbC5JTlNUUlVDVElPTlNfUkVUSVJFRCA9XG4gXHRcdHBlcmZfZ2V0X2h3X2V2ZW50X2NvbmZpZyhQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyk7XG4gXHRrdm1fcG11X2V2ZW50c2VsLkJSQU5DSF9JTlNUUlVDVElPTlNfUkVUSVJFRCA9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcbmluZGV4IGE3M2E5NTE1ZDk2Y2Q1Li4yYzMzNjdmNWUyZGZiOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmNcbkBAIC0xODgsNiArMTg4LDggQEAgc3RhdGljIGJvb2wgaW50ZWxfaXNfdmFsaWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcilcbiBcdHN3aXRjaCAobXNyKSB7XG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSk7XG4rXHRjYXNlIE1TUl9QRVJGX01FVFJJQ1M6XG4rXHRcdHJldHVybiB2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7XG4gXHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxuIFx0XHRyZXQgPSB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQ7XG4gXHRcdGJyZWFrO1xuQEAgLTM0NSw2ICszNDcsMTEgQEAgc3RhdGljIGludCBpbnRlbF9wbXVfZ2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4gXHRjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkw6XG4gXHRcdG1zcl9pbmZvLVx1MDAzZWRhdGEgPSBwbXUtXHUwMDNlZml4ZWRfY3RyX2N0cmw7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxuK1x0XHRpZiAoIW1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkKVxuK1x0XHRcdHJldHVybiAxO1xuK1x0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG11LVx1MDAzZXBlcmZfbWV0cmljcztcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE1TUl9JQTMyX1BFQlNfRU5BQkxFOlxuIFx0XHRtc3JfaW5mby1cdTAwM2VkYXRhID0gcG11LVx1MDAzZXBlYnNfZW5hYmxlO1xuIFx0XHRicmVhaztcbkBAIC0zOTQsNiArNDAxLDE2IEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIFx0XHRpZiAocG11LVx1MDAzZWZpeGVkX2N0cl9jdHJsICE9IGRhdGEpXG4gXHRcdFx0cmVwcm9ncmFtX2ZpeGVkX2NvdW50ZXJzKHBtdSwgZGF0YSk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBNU1JfUEVSRl9NRVRSSUNTOlxuK1x0XHRpZiAoIW1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkKVxuK1x0XHRcdHJldHVybiAxO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJZiBUTUEgbGV2ZWwgMiBpcyBub3Qgc3VwcG9ydGVkLCBiaXRzIFs2MzozMl0gYXJlIHJlc2VydmVkXG4rXHRcdCAqIGFuZCBpZ25vcmVkIG9uIHdyaXRlLCBzbyBubyB2YWxpZGF0aW9uIGlzIG5lZWRlZCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0cG11LVx1MDAzZXBlcmZfbWV0cmljcyA9IGRhdGE7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBNU1JfSUEzMl9QRUJTX0VOQUJMRTpcbiBcdFx0aWYgKGRhdGEgXHUwMDI2IHBtdS1cdTAwM2VwZWJzX2VuYWJsZV9yc3ZkKVxuIFx0XHRcdHJldHVybiAxO1xuQEAgLTQ2NCwyOCArNDgxLDMwIEBAIHN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuICAqIGRpZmZlcmVudCBwZXJmX2V2ZW50IGlzIGFscmVhZHkgdXRpbGl6aW5nIHRoZSByZXF1ZXN0ZWQgY291bnRlciwgYnV0IHRoZSBlbmRcbiAgKiByZXN1bHQgaXMgdGhlIHNhbWUgKGlnbm9yaW5nIHRoZSBmYWN0IHRoYXQgdXNpbmcgYSBnZW5lcmFsIHB1cnBvc2UgY291bnRlclxuICAqIHdpbGwgbGlrZWx5IGV4YWNlcmJhdGUgY291bnRlciBjb250ZW50aW9uKS5cbi0gKlxuLSAqIEZvcmNpYmx5IGlubGluZWQgdG8gYWxsb3cgYXNzZXJ0aW5nIG9uIEBpbmRleCBhdCBidWlsZCB0aW1lLCBhbmQgdGhlcmUgc2hvdWxkXG4tICogbmV2ZXIgYmUgbW9yZSB0aGFuIG9uZSB1c2VyLlxuICAqL1xuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IGludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWwodW5zaWduZWQgaW50IGluZGV4KVxuK3N0YXRpYyB1NjQgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbCh1bnNpZ25lZCBpbnQgaW5kZXgpXG4ge1xuIFx0Y29uc3QgZW51bSBwZXJmX2h3X2lkIGZpeGVkX3BtY19wZXJmX2lkc1tdID0ge1xuIFx0XHRbMF0gPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcbiBcdFx0WzFdID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuIFx0XHRbMl0gPSBQRVJGX0NPVU5UX0hXX1JFRl9DUFVfQ1lDTEVTLFxuIFx0fTtcbi1cdHU2NCBldmVudHNlbDtcbi1cbi1cdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGZpeGVkX3BtY19wZXJmX2lkcykgIT0gS1ZNX01BWF9OUl9JTlRFTF9GSVhFRF9DT1VOVEVSUyk7XG4tXHRCVUlMRF9CVUdfT04oaW5kZXggXHUwMDNlPSBLVk1fTUFYX05SX0lOVEVMX0ZJWEVEX0NPVU5URVJTKTtcbitcdHU2NCBldmVudHNlbCA9IDA7XG4gXG4gXHQvKlxuLVx0ICogWWVsbCBpZiBwZXJmIHJlcG9ydHMgc3VwcG9ydCBmb3IgYSBmaXhlZCBjb3VudGVyIGJ1dCBwZXJmIGRvZXNuJ3Rcbi1cdCAqIGhhdmUgYSBrbm93biBlbmNvZGluZyBmb3IgdGhlIGFzc29jaWF0ZWQgZ2VuZXJhbCBwdXJwb3NlIGV2ZW50LlxuK1x0ICogRml4ZWQgY291bnRlcnMgMyBhbmQgYWJvdmUgZG9uJ3QgaGF2ZSBjb3JyZXNwb25kaW5nIGdlbmVyaWMgaGFyZHdhcmVcbitcdCAqIHBlcmYgZXZlbnQsIGFuZCBLVk0gZG9lcyBub3QgaW50ZW5kIHRvIGVtdWxhdGUgdGhlbSBvbiBub24tbWVkaWF0ZWRcbitcdCAqIHZQTVUuXG4gXHQgKi9cbi1cdGV2ZW50c2VsID0gcGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKGZpeGVkX3BtY19wZXJmX2lkc1tpbmRleF0pO1xuLVx0V0FSTl9PTl9PTkNFKCFldmVudHNlbCBcdTAwMjZcdTAwMjYgaW5kZXggXHUwMDNjIGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCk7XG4rXHRpZiAoaW5kZXggXHUwMDNjIEFSUkFZX1NJWkUoZml4ZWRfcG1jX3BlcmZfaWRzKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBZZWxsIGlmIHBlcmYgcmVwb3J0cyBzdXBwb3J0IGZvciBhIGZpeGVkIGNvdW50ZXIgYnV0IHBlcmZcbitcdFx0ICogZG9lc24ndCBoYXZlIGEga25vd24gZW5jb2RpbmcgZm9yIHRoZSBhc3NvY2lhdGVkIGdlbmVyYWxcbitcdFx0ICogcHVycG9zZSBldmVudC5cbitcdFx0ICovXG4rXHRcdGV2ZW50c2VsID0gcGVyZl9nZXRfaHdfZXZlbnRfY29uZmlnKGZpeGVkX3BtY19wZXJmX2lkc1tpbmRleF0pO1xuK1x0XHRXQVJOX09OX09OQ0UoIWV2ZW50c2VsIFx1MDAyNlx1MDAyNiBpbmRleCBcdTAwM2Mga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkKTtcbitcdH1cbiBcdHJldHVybiBldmVudHNlbDtcbiB9XG4gXG5AQCAtNTg3LDYgKzYwNiwxMSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfcmVmcmVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHBtdS1cdTAwM2VnbG9iYWxfc3RhdHVzX3JzdmQgXHUwMDI2PVxuIFx0XHRcdFx0fk1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMX1RSQUNFX1RPUEFfUE1JO1xuIFxuK1x0aWYgKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpIHtcbitcdFx0cG11LVx1MDAzZWdsb2JhbF9jdHJsX3JzdmQgXHUwMDI2PSB+R0xPQkFMX0NUUkxfRU5fUEVSRl9NRVRSSUNTO1xuK1x0XHRwbXUtXHUwMDNlZ2xvYmFsX3N0YXR1c19yc3ZkIFx1MDAyNj0gfkdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRjtcbitcdH1cbitcbiBcdGlmIChwZXJmX2NhcGFiaWxpdGllcyBcdTAwMjYgUEVSRl9DQVBfUEVCU19GT1JNQVQpIHtcbiBcdFx0aWYgKHBlcmZfY2FwYWJpbGl0aWVzIFx1MDAyNiBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FKSB7XG4gXHRcdFx0cG11LVx1MDAzZXBlYnNfZW5hYmxlX3JzdmQgPSBjb3VudGVyX3JzdmQ7XG5AQCAtNjMwLDYgKzY1NCw5IEBAIHN0YXRpYyB2b2lkIGludGVsX3BtdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbitcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbitcbitcdHBtdS1cdTAwM2VwZXJmX21ldHJpY3MgPSAwO1xuIFx0aW50ZWxfcG11X3JlbGVhc2VfZ3Vlc3RfbGJyX2V2ZW50KHZjcHUpO1xuIH1cbiBcbkBAIC04MDEsNiArODI4LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCBrdm1fcG11ICpwbXUgPSB2Y3B1X3RvX3BtdSh2Y3B1KTtcbiBcdHU2NCBnbG9iYWxfc3RhdHVzLCB0b2dnbGU7XG4gXG4rXHQvKlxuK1x0ICogUEVSRl9NRVRSSUNTIE1TUiBtdXN0IGJlIHJlc3RvcmVkIGNsb3NlbHkgYWZ0ZXIgZml4ZWQgY291bnRlciAzLFxuK1x0ICogd2hpY2ggd2FzIGp1c3QgcmVzdG9yZWQgYnkga3ZtX3BtdV9sb2FkX2d1ZXN0X3BtY3MoKS5cbitcdCAqL1xuK1x0aWYgKHZjcHVfaGFzX3BlcmZfbWV0cmljcyh2Y3B1KSlcbitcdFx0d3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIHBtdS1cdTAwM2VwZXJmX21ldHJpY3MpO1xuK1xuIFx0cmRtc3JxKE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUywgZ2xvYmFsX3N0YXR1cyk7XG4gXHR0b2dnbGUgPSBwbXUtXHUwMDNlZ2xvYmFsX3N0YXR1cyBeIGdsb2JhbF9zdGF0dXM7XG4gXHRpZiAoZ2xvYmFsX3N0YXR1cyBcdTAwMjYgdG9nZ2xlKVxuQEAgLTgyOSw2ICs4NjMsMTIgQEAgc3RhdGljIHZvaWQgaW50ZWxfbWVkaWF0ZWRfcG11X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKi9cbiBcdGlmIChwbXUtXHUwMDNlZml4ZWRfY3RyX2N0cmxfaHcpXG4gXHRcdHdybXNycShNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLCAwKTtcbitcbitcdGlmICh2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSkpIHtcbitcdFx0cG11LVx1MDAzZXBlcmZfbWV0cmljcyA9IHJkcG1jKElOVEVMX1BNQ19GSVhFRF9SRFBNQ19NRVRSSUNTKTtcbitcdFx0aWYgKHBtdS1cdTAwM2VwZXJmX21ldHJpY3MpXG4rXHRcdFx0d3Jtc3JxKE1TUl9QRVJGX01FVFJJQ1MsIDApO1xuK1x0fVxuIH1cbiBcbiBzdHJ1Y3Qga3ZtX3BtdV9vcHMgaW50ZWxfcG11X29wcyBfX2luaXRkYXRhID0ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmggYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXG5pbmRleCA1ZDkzNTc2NDBhYTE4MC4uNTc3MDU3NzNkYzQ5YjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5oXG5AQCAtNDAsNCArNDAsOSBAQCBzdHJ1Y3QgbGJyX2Rlc2Mge1xuIFxuIGV4dGVybiBzdHJ1Y3QgeDg2X3BtdV9sYnIgdm14X2xicl9jYXBzO1xuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB2Y3B1X2hhc19wZXJmX21ldHJpY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiB2Y3B1X2dldF9wZXJmX2NhcGFiaWxpdGllcyh2Y3B1KSBcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTO1xuK31cbitcbiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9QTVVfSU5URUxfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCBhMWE1ZWRiMzlhN2VkZC4uNTg0ZDk5ZWY2MDI2ZWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNDI2MCw2ICs0MjYwLDEwIEBAIHN0YXRpYyB2b2lkIHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRcdCAgTVNSX1RZUEVfUlcsIGludGVyY2VwdCk7XG4gXHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLFxuIFx0XHRcdFx0ICBNU1JfVFlQRV9SVywgaW50ZXJjZXB0KTtcbitcbitcdGludGVyY2VwdCA9ICFoYXNfbWVkaWF0ZWRfcG11IHx8ICF2Y3B1X2hhc19wZXJmX21ldHJpY3ModmNwdSk7XG4rXHR2bXhfc2V0X2ludGVyY2VwdF9mb3JfbXNyKHZjcHUsIE1TUl9QRVJGX01FVFJJQ1MsXG4rXHRcdFx0XHQgIE1TUl9UWVBFX1JXLCBpbnRlcmNlcHQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2bXhfcmVjYWxjX21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC04MDg0LDYgKzgwODgsOSBAQCBzdGF0aWMgX19pbml0IHU2NCB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzKHZvaWQpXG4gXHRcdHBlcmZfY2FwIFx1MDAyNj0gflBFUkZfQ0FQX1BFQlNfQkFTRUxJTkU7XG4gXHR9XG4gXG4rXHRpZiAoZW5hYmxlX21lZGlhdGVkX3BtdSlcbitcdFx0cGVyZl9jYXAgfD0gaG9zdF9wZXJmX2NhcCBcdTAwMjYgUEVSRl9DQVBfUEVSRl9NRVRSSUNTO1xuK1xuIFx0cmV0dXJuIHBlcmZfY2FwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IGQ5ZDUxODAzYjdiMjA5Li45NjIzZjU1OGYzNTlkZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzUwLDkgKzM1MCw5IEBAIHN0YXRpYyBjb25zdCB1MzIgbXNyc190b19zYXZlX2Jhc2VbXSA9IHtcbiBcbiBzdGF0aWMgY29uc3QgdTMyIG1zcnNfdG9fc2F2ZV9wbXVbXSA9IHtcbiBcdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIxLFxuLVx0TVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICsgMixcbitcdE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMiwgTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIzLFxuIFx0TVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLFxuLVx0TVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCxcbitcdE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIE1TUl9QRVJGX01FVFJJQ1MsXG4gXHRNU1JfSUEzMl9QRUJTX0VOQUJMRSwgTVNSX0lBMzJfRFNfQVJFQSwgTVNSX1BFQlNfREFUQV9DRkcsXG4gXG4gXHQvKiBUaGlzIHBhcnQgb2YgTVNScyBzaG91bGQgbWF0Y2ggS1ZNX01BWF9OUl9JTlRFTF9HUF9DT1VOVEVSUy4gKi9cbkBAIC03Njc5LDYgKzc2NzksMTAgQEAgc3RhdGljIHZvaWQga3ZtX3Byb2JlX21zcl90b19zYXZlKHUzMiBtc3JfaW5kZXgpXG4gXHRcdCAgICAgaW50ZWxfcHRfdmFsaWRhdGVfaHdfY2FwKFBUX0NBUF9udW1fYWRkcmVzc19yYW5nZXMpICogMikpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRicmVhaztcbitcdGNhc2UgTVNSX1BFUkZfTUVUUklDUzpcbitcdFx0aWYgKCEoa3ZtX2NhcHMuc3VwcG9ydGVkX3BlcmZfY2FwIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxuK1x0XHRcdHJldHVybjtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgLi4uXG4gXHQgICAgIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgKyBLVk1fTUFYX05SX0dQX0NPVU5URVJTIC0gMTpcbiBcdFx0aWYgKG1zcl9pbmRleCAtIE1TUl9BUkNIX1BFUkZNT05fUEVSRkNUUjAgXHUwMDNlPVxuQEAgLTc3NDIsNyArNzc0Niw3IEBAIHN0YXRpYyB2b2lkIGt2bV9pbml0X21zcl9saXN0cyh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGk7XG4gXG4tXHRCVUlMRF9CVUdfT05fTVNHKEtWTV9NQVhfTlJfRklYRURfQ09VTlRFUlMgIT0gMyxcbitcdEJVSUxEX0JVR19PTl9NU0coS1ZNX01BWF9OUl9GSVhFRF9DT1VOVEVSUyAhPSA0LFxuIFx0XHRcdCBcIlBsZWFzZSB1cGRhdGUgdGhlIGZpeGVkIFBNQ3MgaW4gbXNyc190b19zYXZlX3BtdVtdXCIpO1xuIFxuIFx0bnVtX21zcnNfdG9fc2F2ZSA9IDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuaW5kZXggZWZmMjk2NDU3MTliYzcuLmU3NzQ1ZTJjZDU0M2E5IDEwMDY0NFxuLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbisrKyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG5AQCAtMzMxLDYgKzMzMSw3IEBAXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0ZPUk1BVFx0XHQweGYwMFxuICNkZWZpbmUgUEVSRl9DQVBfRldfV1JJVEVTXHRcdEJJVF9VTEwoMTMpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX0JBU0VMSU5FXHRcdEJJVF9VTEwoMTQpXG4rI2RlZmluZSBQRVJGX0NBUF9QRVJGX01FVFJJQ1NcdFx0QklUX1VMTCgxNSlcbiAjZGVmaW5lIFBFUkZfQ0FQX1BFQlNfVElNSU5HX0lORk9cdEJJVF9VTEwoMTcpXG4gI2RlZmluZSBQRVJGX0NBUF9QRUJTX01BU0tcdFx0KFBFUkZfQ0FQX1BFQlNfVFJBUCB8IFBFUkZfQ0FQX0FSQ0hfUkVHIHwgXFxcbiBcdFx0XHRcdFx0IFBFUkZfQ0FQX1BFQlNfRk9STUFUIHwgUEVSRl9DQVBfUEVCU19CQVNFTElORSB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3BtdS5oXG5pbmRleCA2MDhlZDgzZDdjNmE2OS4uNmMxOTUwM2UwYmI3ZGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvcG11LmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9wbXUuaFxuQEAgLTUyLDYgKzUyLDkgQEBcbiAvKiBGaXhlZCBQTUMgY29udHJvbHMsIEludGVsIG9ubHkuICovXG4gI2RlZmluZSBGSVhFRF9QTUNfR0xPQkFMX0NUUkxfRU5BQkxFKF9pZHgpXHRCSVRfVUxMKCgzMiArIChfaWR4KSkpXG4gXG4rLyogUEVSRl9NRVRSSUNTIGVuYWJsZSwgSW50ZWwgb25seS4gKi9cbisjZGVmaW5lIFBFUkZfTUVUUklDU19HTE9CQUxfQ1RSTF9FTkFCTEVcdFx0QklUX1VMTCg0OClcbitcbiAjZGVmaW5lIEZJWEVEX1BNQ19LRVJORUxcdFx0XHRCSVRfVUxMKDApXG4gI2RlZmluZSBGSVhFRF9QTUNfVVNFUlx0XHRcdFx0QklUX1VMTCgxKVxuICNkZWZpbmUgRklYRURfUE1DX0FOWVRIUkVBRFx0XHRcdEJJVF9VTEwoMilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3BtdV9jb3VudGVyc190ZXN0LmNcbmluZGV4IGRjNmFmYWMzYWE5MTk1Li5kNDY4OGE3ZDFlNTU2OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcG11X2NvdW50ZXJzX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wbXVfY291bnRlcnNfdGVzdC5jXG5AQCAtNiw2ICs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcInBtdS5oXCJcbiAjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gXG4gLyogTnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AgZm9yIHRoZSBndWVzdCBtZWFzdXJlbWVudCBwYXlsb2FkLiAqL1xuICNkZWZpbmUgTlVNX0xPT1BTXHRcdFx0MTBcbkBAIC0yNDEsMTcgKzI0MiwyMCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0KTtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4tI2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKVx0XHRcXFxuKyNkZWZpbmUgR1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUClcdFx0XHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHdybXNyKF9wbWNfbXNyLCAwKTtcdFx0XHRcdFx0XHRcdFxcXG4tXHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMVVNIT1BUKSlcdFx0XHRcdFxcXG4gXHRcdEdVRVNUX01FQVNVUkVfRVZFTlQoX2N0cmxfbXNyLCBfdmFsdWUsIFwiY2xmbHVzaG9wdCAlW21dXCIsIEZFUCk7XHRcXFxuIFx0ZWxzZSBpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxVU0gpKVx0XHRcdFx0XFxcbiBcdFx0R1VFU1RfTUVBU1VSRV9FVkVOVChfY3RybF9tc3IsIF92YWx1ZSwgXCJjbGZsdXNoICAlW21dXCIsIEZFUCk7XHRcXFxuIFx0ZWxzZVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdEdVRVNUX01FQVNVUkVfRVZFTlQoX2N0cmxfbXNyLCBfdmFsdWUsIFwibm9wXCIsIEZFUCk7XHRcdFxcXG4tXHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK30gd2hpbGUgKDApXG4rXG4rI2RlZmluZSBHVUVTVF9URVNUX0VWRU5UKF9pZHgsIF9wbWMsIF9wbWNfbXNyLCBfY3RybF9tc3IsIF92YWx1ZSwgRkVQKVx0XHRcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR3cm1zcihfcG1jX21zciwgMCk7XHRcdFx0XHRcdFx0XHRcXFxuK1x0R1VFU1RfUlVOX1BBWUxPQUQoX2N0cmxfbXNyLCBfdmFsdWUsIEZFUCk7XHRcdFx0XHRcXFxuIFx0Z3Vlc3RfYXNzZXJ0X2V2ZW50X2NvdW50KF9pZHgsIF9wbWMsIF9wbWNfbXNyKTtcdFx0XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbkBAIC0zMTgsNiArMzIyLDU2IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X3Rlc3RfYXJjaF9ldmVudCh1OCBpZHgpXG4gXHRcdFx0XHRGSVhFRF9QTUNfR0xPQkFMX0NUUkxfRU5BQkxFKGkpKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9wZXJmX21ldHJpY3Modm9pZClcbit7XG4rXHRpbnQgcmV0aXJpbmcsIGJhZF9zcGVjLCBmZV9ib3VuZCwgYmVfYm91bmQsIHN1bTtcbitcdHU2NCBnbG9iYWxfY3RybCwgbWV0cmljcztcbitcbitcdGlmICgoZ3Vlc3RfZ2V0X3BtdV92ZXJzaW9uKCkgXHUwMDNjIDIpIHx8XHQvKiBEb2VzIGd1ZXN0IGhhdmUgR0xPQkFMX0NUUkw/ICovXG4rXHQgICAgIXRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9QRENNKSB8fFxuK1x0ICAgICEocmRtc3IoTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVMpIFx1MDAyNiBQRVJGX0NBUF9QRVJGX01FVFJJQ1MpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR3cm1zcihNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCAwKTtcbitcdHdybXNyKE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMywgMCk7XG4rXHR3cm1zcihNU1JfUEVSRl9NRVRSSUNTLCAwKTtcbitcbitcdC8qIEVuYWJsZSBmaXhlZCBjdHIzIChUT1BET1dOLlNMT1RTKSBhbmQgUEVSRl9NRVRSSUNTLiAqL1xuK1x0d3Jtc3IoTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFJfQ1RSTCwgRklYRURfUE1DX0NUUkwoMywgRklYRURfUE1DX0tFUk5FTCkpO1xuK1x0Z2xvYmFsX2N0cmwgPSBGSVhFRF9QTUNfR0xPQkFMX0NUUkxfRU5BQkxFKDMpIHxcbitcdFx0ICAgICAgUEVSRl9NRVRSSUNTX0dMT0JBTF9DVFJMX0VOQUJMRTtcbitcbitcdEdVRVNUX1JVTl9QQVlMT0FEKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIGdsb2JhbF9jdHJsLCBcIlwiKTtcbitcbitcdC8qIENoZWNrIHRlc3QgcmVzdWx0cy4gKi9cbitcdG1ldHJpY3MgPSByZG1zcihNU1JfUEVSRl9NRVRSSUNTKTtcbitcdHJldGlyaW5nID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDcsIDApLCBtZXRyaWNzKTtcbitcdGJhZF9zcGVjID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDE1LCA4KSwgbWV0cmljcyk7XG4rXHRmZV9ib3VuZCA9IEZJRUxEX0dFVChHRU5NQVNLX1VMTCgyMywgMTYpLCBtZXRyaWNzKTtcbitcdGJlX2JvdW5kID0gRklFTERfR0VUKEdFTk1BU0tfVUxMKDMxLCAyNCksIG1ldHJpY3MpO1xuK1xuK1x0LypcbitcdCAqIEJlIGNvbnNlcnZhdGl2ZTogdGhlIG1lYXN1cmVkIHBheWxvYWQgZGVmaW5pdGVseSByZXRpcmVzIHdvcmssIHNvXG4rXHQgKiBSZXRpcmluZyBzaG91bGQgYmUgbm9uLXplcm8uXG4rXHQgKi9cbitcdEdVRVNUX0FTU0VSVF9ORShtZXRyaWNzLCAwVUxMKTtcbitcdEdVRVNUX0FTU0VSVF9ORShyZXRpcmluZywgMFVMTCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHN1bSBvZiB0aGUgNCBsZXZlbC0xIHRvcGRvd24gbWV0cmljcyBzaG91bGQgYmUgY2xvc2UgdG8gMTAwJS5cbitcdCAqIDMgaXMgY2hvc2VuIGFzIGEgbG9vc2Ugc2FuaXR5IGNoZWNrLlxuK1x0ICovXG4rXHRzdW0gPSByZXRpcmluZyArIGJhZF9zcGVjICsgZmVfYm91bmQgKyBiZV9ib3VuZDtcbitcdEdVRVNUX0FTU0VSVChzdW0gXHUwMDNlPSAweGZkIFx1MDAyNlx1MDAyNiBzdW0gXHUwMDNjPSAweDEwMik7XG4rXG4rXHQvKiBTYW5pdHkgY2hlY2sgYWZ0ZXIgUEVSRl9NRVRSSUNTIGRpc2FibGVkLiAqL1xuK1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCJsb29wIC5cIiA6IFwiK2NcIigoaW50KXtOVU1fTE9PUFN9KSk7XG4rXHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIG1ldHJpY3MpO1xuK1x0d3Jtc3IoTVNSX1BFUkZfTUVUUklDUywgMHhkZWFkZGVhZCk7XG4rXG4rXHRHVUVTVF9BU1NFUlRfRVEocmRtc3IoTVNSX1BFUkZfTUVUUklDUyksIDB4ZGVhZGRlYWQpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBndWVzdF90ZXN0X2FyY2hfZXZlbnRzKHZvaWQpXG4ge1xuIFx0dTggaTtcbkBAIC0zMjUsNiArMzc5LDggQEAgc3RhdGljIHZvaWQgZ3Vlc3RfdGVzdF9hcmNoX2V2ZW50cyh2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfSU5URUxfQVJDSF9FVkVOVFM7IGkrKylcbiBcdFx0Z3Vlc3RfdGVzdF9hcmNoX2V2ZW50KGkpO1xuIFxuK1x0Z3Vlc3RfdGVzdF9wZXJmX21ldHJpY3MoKTtcbitcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG5AQCAtMzYxLDcgKzQxNyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJjaF9ldmVudHModTggcG11X3ZlcnNpb24sIHU2NCBwZXJmX2NhcGFiaWxpdGllcyxcbiAgKiBvdGhlciB0aGFuIFBNQ3MgaW4gdGhlIGZ1dHVyZS5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9HUF9DT1VOVEVSU1x0OFxuLSNkZWZpbmUgTUFYX05SX0ZJWEVEX0NPVU5URVJTXHQzXG4rI2RlZmluZSBNQVhfTlJfRklYRURfQ09VTlRFUlNcdDRcbiBcbiAjZGVmaW5lIEdVRVNUX0FTU0VSVF9QTUNfTVNSX0FDQ0VTUyhpbnNuLCBtc3IsIGV4cGVjdF9ncCwgdmVjdG9yKVx0XHRcXFxuIF9fR1VFU1RfQVNTRVJUKGV4cGVjdF9ncCA/IHZlY3RvciA9PSBHUF9WRUNUT1IgOiAhdmVjdG9yLFx0XHRcdFxcXG5AQCAtNTg1LDYgKzY0MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW50ZWxfY291bnRlcnModm9pZClcbiBcdHU4IG5yX2ZpeGVkX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0ZJWEVEX0NPVU5URVJTKTtcbiBcdHU4IG5yX2dwX2NvdW50ZXJzID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX05SX0dQX0NPVU5URVJTKTtcbiBcdHU4IHBtdV92ZXJzaW9uID0ga3ZtX2NwdV9wcm9wZXJ0eShYODZfUFJPUEVSVFlfUE1VX1ZFUlNJT04pO1xuK1x0dTY0IGFkdmVydGlzZWRfcGVyZl9jYXBzID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUyk7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdHU4IHYsIGo7XG4gXHR1MzIgaztcbkBAIC01OTIsNiArNjQ5LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbnRlbF9jb3VudGVycyh2b2lkKVxuIFx0Y29uc3QgdTY0IHBlcmZfY2Fwc1tdID0ge1xuIFx0XHQwLFxuIFx0XHRQTVVfQ0FQX0ZXX1dSSVRFUyxcbitcdFx0UEVSRl9DQVBfUEVSRl9NRVRSSUNTLFxuIFx0fTtcbiBcbiBcdC8qXG5AQCAtNjQ5LDYgKzcwNywxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludGVsX2NvdW50ZXJzKHZvaWQpXG4gXHRcdFx0aWYgKCFrdm1faGFzX3BlcmZfY2FwcyBcdTAwMjZcdTAwMjYgcGVyZl9jYXBzW2ldKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4rXHRcdFx0LyogSWdub3JlIHVuc3VwcG9ydGVkIGZlYXR1cmVzLiAqL1xuK1x0XHRcdGlmIChwZXJmX2NhcHNbaV0gXHUwMDI2IH5hZHZlcnRpc2VkX3BlcmZfY2FwcylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdHByX2luZm8oXCJUZXN0aW5nIGFyY2ggZXZlbnRzLCBQTVUgdmVyc2lvbiAldSwgcGVyZl9jYXBzID0gJWx4XFxuXCIsXG4gXHRcdFx0XHR2LCBwZXJmX2NhcHNbaV0pO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MDEuMDY5MjUyMTA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg4OTM1MDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBNVSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgS1ZNIHBhdGNoLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hhdCdzIGhhcHBlbmluZyBoZXJlLiBUaGUgY29yZSBpcyBhbGwgYWJvdXQgZXh0ZW5kaW5nIHRoZSBLVk0gUE1VIGVtdWxhdGlvbiBmb3IgeDg2LiBTcGVjaWZpY2FsbHksIHdlJ3JlIGluY3JlYXNpbmcgYEtWTV9NQVhfTlJfSU5URUxfRklYRURfQ09VTlRFUlNgIGZyb20gMyB0byA0LiBUaGF04oCZcyB0aGUgbW9zdCBvYnZpb3VzIGNoYW5nZS4gVGhlbiwgd2Ugc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBlcmZfbWV0cmljc2Agd2l0aGluIHRoZSBgc3RydWN0IGt2bV9wbXVgLCBhIGNsZWFyIGluZGljYXRvciBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIFRoaXMgc3Ryb25nbHkgcG9pbnRzIHRvIHN1cHBvcnRpbmcgSW50ZWwncyBgTVNSX1BFUkZfTUVUUklDU2AuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBjYXBhYmlsaXR5LCBgUEVSRl9DQVBfUEVSRl9NRVRSSUNTYCwgYW5kIGhvb2tzIGl0IGludG8gdGhlIHJlbGV2YW50IG1hc2tzIGFuZCBjb250cm9sIHJlZ2lzdGVycyAoYEdMT0JBTF9TVEFUVVNfUEVSRl9NRVRSSUNTX09WRmAsIGBHTE9CQUxfQ1RSTF9FTl9QRVJGX01FVFJJQ1NgKS4gVGhlIGNvZGUgdGhlbiBpbXBsZW1lbnRzIGhhbmRsaW5nIGZvciB0aGUgbmV3IE1TUiBpbiBgaW50ZWxfcG11X2dldF9tc3JgIGFuZCBgaW50ZWxfcG11X3NldF9tc3JgLCB3aGljaCBtZWFucyB0aGUgZ3Vlc3QgY2FuIG5vdyByZWFkIGFuZCB3cml0ZSB0byB0aGlzIE1TUi4gSXQgYWxzbyB0b3VjaGVzIG9uIGdldHRpbmcgdGhlIGV2ZW50cyBmcm9tIGZpeGVkIGNvdW50ZXJzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBzcGFuIG11bHRpcGxlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhpcyBpbmNsdWRlcyB0aGUgdmFyaW91cyBgaW50ZWxfcG11XypgIGZ1bmN0aW9ucyBmb3IgbWFuYWdlbWVudCBhbmQgcmVmcmVzaCwgYWxvbmcgd2l0aCB0aGUgYHZteF8qYCBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggVk1YIGNvbnRleHQgc3dpdGNoaW5nIGFuZCBjYXBhYmlsaXRpZXMsIGFsb25nIHdpdGggaW50ZXJjZXB0aW5nIHRoZSBNU1IgY2FsbHMuIFRoaXMgY29uZmlybXMgdGhlIG5ldyBmZWF0dXJlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBob3N04oCZcyBQTVUgYW5kIGhvdyBpdOKAmXMgZXhwb3NlZCB0byB0aGUgZ3Vlc3QuIEkgc2VlIHRoYXQgYG1zcnNfdG9fc2F2ZV9wbXVgIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBlbnN1cmUgdGhlIG5ldyBNU1IgaXMgc2F2ZWQvcmVzdG9yZWQgZHVyaW5nIGNvbnRleHQgc3dpdGNoZXMuXG5cblRoaXMgYWxsIHBvaW50cyB0byBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIGBNU1JfUEVSRl9NRVRSSUNTYCBmZWF0dXJlLCBhbG9uZyB3aXRoIGZpeGVkIGNvdW50ZXIgMyAod2hpY2ggSSdtIGFzc3VtaW5nIGlzIHRoZSBUT1BET1dOLlNMT1RTIGNvdW50ZXIpLiBUaGUgY29kZSBmbG93IHNlZW1zIHRvIGJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIGJvdGggZ3Vlc3QgTVNSIGFjY2Vzc2VzIChSRE1TUi9XUk1TUikgYW5kIEtWTSBQTVUgY29udGV4dCBzd2l0Y2hpbmcsIG1lYW5pbmcgaXQncyBhIGZ1bmN0aW9uYWxseSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLlxuXG5HaXZlbiB0aGUgbW9kaWZpY2F0aW9ucywgS1ZNIChgQ09ORklHX0tWTWApIGFuZCBJbnRlbCBLVk0gKGBDT05GSUdfS1ZNX0lOVEVMYCkgYXJlIGVzc2VudGlhbCBwcmVyZXF1aXNpdGVzLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgYSBkZWVwZXIgZGl2ZSB3aWxsIGJlIGBpbnRlbF9wbXVfZ2V0X21zcmAsIGBpbnRlbF9wbXVfc2V0X21zcmAsIGFuZCB0aGUgcmVsYXRlZCByZWZyZXNoIGFuZCBjb250ZXh0LXN3aXRjaGluZyByb3V0aW5lcyAoYGludGVsX3BtdV9yZWZyZXNoYCwgYGludGVsX3BtdV9yZXNldGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCwgYGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5YCkuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgbmV3IE1TUiBhbmQgdGhlIGV4dGVuZGVkIGNvdW50ZXIgbGltaXRzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBlbmFibGVfbWVkaWF0ZWRfcG11YCwgYW5kIHZlcmlmeSB0aGF0IGFsbCBvZiB0aGUgbmV3IGNhcGFiaWxpdHkgY2hlY2tzIGFyZSBpbiBwbGFjZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoZSBuZXcgZmVhdHVyZSBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gTG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIG92ZXJhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODoxMC45NTg2MDQ1NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzMTY3NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODoxMS4zNjE3Nzc1ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc1MDA0MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIGFuZCBQZXJmb3JtYW5jZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNvbmZpZ3Mgd2UncmUgZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgdG8gc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBhbnkgcGFydGljdWxhciBjb25maWcgb3IgbW9kdWxlIHBhcmFtZXRlciB0aGF0IHdvdWxkIGFsbG93IHVzIHRvIGxldmVyYWdlIG1lZGlhdGVkIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdHMsIG9yIFwiUE1Vcy5cIiBMZXQncyBjaGVjayBgZW5hYmxlX21lZGlhdGVkX3BtdWAsIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBleHBlY3QgdGhlcmUgaXMgbW9yZSB0byBpdCB0aGFuIGp1c3QgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODoxNi42MzY3ODQwNDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyNTYzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5hYmxlX21lZGlhdGVkX3BtdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9wbXUuYz00MD1tb2R1bGVfcGFyYW0oZW5hYmxlX3BtdSwgYm9vbCwgMDQ0NCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDItLyogRW5hYmxlL2Rpc2FibGVkIG1lZGlhdGVkIFBNVSB2aXJ0dWFsaXphdGlvbi4gKi9cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NDM6Ym9vbCBfX3JlYWRfbW9zdGx5IGVuYWJsZV9tZWRpYXRlZF9wbXU7XFxuYXJjaC94ODYva3ZtL3BtdS5jOjQ0OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChlbmFibGVfbWVkaWF0ZWRfcG11KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtNDUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9MTIxPXZvaWQga3ZtX2luaXRfcG11X2NhcGFiaWxpdHkoc3RydWN0IGt2bV9wbXVfb3BzICpwbXVfb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTE1NC1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU1OlxcdGlmICghZW5hYmxlX3BtdSB8fCAhZW5hYmxlX21lZGlhdGVkX3BtdSB8fCAha3ZtX2hvc3RfcG11Lm1lZGlhdGVkIHx8XFxuYXJjaC94ODYva3ZtL3BtdS5jLTE1Ni1cXHQgICAgIXBtdV9vcHMtXFx1MDAzZWlzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQoXFx1MDAyNmt2bV9ob3N0X3BtdSkpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE1NzpcXHRcXHRlbmFibGVfbWVkaWF0ZWRfcG11ID0gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3BtdS5jLTE1OC1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6MTU5OlxcdGlmICghZW5hYmxlX21lZGlhdGVkX3BtdSlcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTYwLVxcdFxcdHBtdV9vcHMtXFx1MDAzZXdyaXRlX2dsb2JhbF9jdHJsID0gTlVMTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xODYtXFxuYXJjaC94ODYva3ZtL3BtdS5jOjE4NzpcXHRpZiAoIWVuYWJsZV9tZWRpYXRlZF9wbXUgXFx1MDAyNlxcdTAwMjYga3ZtX3BtdV9jYXAubnVtX2NvdW50ZXJzX2ZpeGVkIFxcdTAwM2UgMylcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTg4LVxcdFxcdGt2bV9wbXVfY2FwLm51bV9jb3VudGVyc19maXhlZCA9IDM7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11Lmg9NjU9ZXh0ZXJuIGJvb2wgZW5hYmxlX3BtdTtcXG5hcmNoL3g4Ni9rdm0vcG11Lmg6NjY6ZXh0ZXJuIGJvb2wgZW5hYmxlX21lZGlhdGVkX3BtdTtcXG5hcmNoL3g4Ni9rdm0vcG11LmgtNjctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11Lmg9ODY9c3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2hhc19tZWRpYXRlZF9wbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9wbXUuaC04Ny17XFxuYXJjaC94ODYva3ZtL3BtdS5oOjg4OlxcdHJldHVybiBlbmFibGVfbWVkaWF0ZWRfcG11IFxcdTAwMjZcXHUwMDI2IHZjcHVfdG9fcG11KHZjcHUpLVxcdTAwM2V2ZXJzaW9uO1xcbmFyY2gveDg2L2t2bS9wbXUuaC04OS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTE3OD1tb2R1bGVfcGFyYW0odm5taSwgYm9vbCwgMDQ0NCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xNzktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoxODA6bW9kdWxlX3BhcmFtKGVuYWJsZV9tZWRpYXRlZF9wbXUsIGJvb2wsIDA0NDQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTgxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz03NTI9c3RhdGljIHZvaWQgc3ZtX3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy03NTctXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo3NTg6XFx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNzU5LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY2FwYWJpbGl0aWVzLmg9Mzk5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bXhfcGVic19zdXBwb3J0ZWQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvY2FwYWJpbGl0aWVzLmgtNDAxLVxcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEVCUykgXFx1MDAyNlxcdTAwMjYga3ZtX3BtdV9jYXAucGVic19lcHQgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L2NhcGFiaWxpdGllcy5oOjQwMjpcXHQgICAgICAgIWVuYWJsZV9tZWRpYXRlZF9wbXU7XFxuYXJjaC94ODYva3ZtL3ZteC9jYXBhYmlsaXRpZXMuaC00MDMtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz0xNTk9bW9kdWxlX3BhcmFtKGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciwgYm9vbCwgU19JUlVHTyk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy0xNjAtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoxNjE6bW9kdWxlX3BhcmFtKGVuYWJsZV9tZWRpYXRlZF9wbXUsIGJvb2wsIDA0NDQpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTYyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz00MjA5PXN0YXRpYyB2b2lkIHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDIxOC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjQyMTk6XFx0aWYgKCFlbmFibGVfbWVkaWF0ZWRfcG11KVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDIyMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ0Mzk9dm9pZCB2bXhfc2V0X2NvbnN0YW50X2hvc3Rfc3RhdGUoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ1MjYtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0NTI3OlxcdGlmIChlbmFibGVfbWVkaWF0ZWRfcG11KVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDUyOC1cXHRcXHR2bWNzX3dyaXRlNjQoSE9TVF9JQTMyX1BFUkZfR0xPQkFMX0NUUkwsIDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04MDM5PXN0YXRpYyBfX2luaXQgdTY0IHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODA1MC1cXHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVJDSF9MQlIpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4MDUxOlxcdCAgICAhZW5hYmxlX21lZGlhdGVkX3BtdSkge1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODA1Mi1cXHRcXHR4ODZfcGVyZl9nZXRfbGJyKFxcdTAwMjZ2bXhfbGJyX2NhcHMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MDkwLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODA5MTpcXHRpZiAoZW5hYmxlX21lZGlhdGVkX3BtdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTgwOTItXFx0XFx0cGVyZl9jYXAgfD0gaG9zdF9wZXJmX2NhcCBcXHUwMDI2IFBFUkZfQ0FQX1BFUkZfTUVUUklDUztcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDA2ND1pbnQga3ZtX3g4Nl92ZW5kb3JfaW5pdChzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTg2LVxcdF9fa3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKG9wcy1cXHUwMDNlaGFuZGxlX2ludGVsX3B0X2ludHIsXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMTg3OlxcdFxcdFxcdFxcdCAgICAgIGVuYWJsZV9tZWRpYXRlZF9wbXUgPyBrdm1faGFuZGxlX2d1ZXN0X21lZGlhdGVkX3BtaSA6IE5VTEwpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE4OC1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMjc0MD1pbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTI3NjItXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEyNzYzOlxcdGlmIChlbmFibGVfbWVkaWF0ZWRfcG11IFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC5lbmFibGVfcG11IFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyNzY0LVxcdCAgICAha3ZtLVxcdTAwM2VhcmNoLmNyZWF0ZWRfbWVkaWF0ZWRfcG11KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjE2LjY5NzA0Nzc1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTcxMzM5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBlbmFibGVfbWVkaWF0ZWRfcG11YCBNeXN0ZXJ5KipcblxuQWxyaWdodCwgc28gYGVuYWJsZV9tZWRpYXRlZF9wbXVgIGlzIHNob3dpbmcgdXAgYXMgYSBtb2R1bGUgcGFyYW1ldGVyIGZvciB0aGUgYGt2bS1pbnRlbGAgYW5kIGBrdm0tYW1kYCBtb2R1bGVzLiBIYW5nIG9uIGEgc2Vjb25kLi4uIG1vZHVsZSAqcGFyYW1ldGVyKiwgbm90IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHJpZ2h0PyBUaGF0IGRpc3RpbmN0aW9uIGlzIGNyaXRpY2FsLiBXZSdyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyB0aGF0J3Mgc2V0IGF0IG1vZHVsZSBsb2FkIHRpbWUsIG5vdCBiYWtlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgaXRzZWxmLiBUaGUgYWN0dWFsICpjb25maWdzKiB0aGF0IGluZmx1ZW5jZSB0aGlzIGFyZSBnb2luZyB0byBiZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAgKG9yIGBLVk1fQU1EYCksIG5vdCB0aGlzIHBhcmFtZXRlci4gVGhhdCdzIHRoZSBpbXBvcnRhbnQgcG9pbnQuXG5cbldlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHdob2xlIGxhbmRzY2FwZSBmdWxseSwgc28gbGV0J3MgZGlnIGEgYml0IGZ1cnRoZXIuIEl0J3Mgc2FmZSB0byBhc3N1bWUgYGVuYWJsZV9tZWRpYXRlZF9wbXVgIHdpbGwgbmVlZCB0aGUgY29yZSBQTVUgaW5mcmFzdHJ1Y3R1cmU7IHdoaWNoIG1lYW5zLCBhdCBhIG1pbmltdW0sIHRoYXQgYENPTkZJR19QRVJGX0VWRU5UU2AgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGltZSB0byBpbnZlc3RpZ2F0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODoyMS42MTQxODQzMzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxOTg0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBFUkZfRVZFTlRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MjEyMT1tZW51IFxcXCJLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1xcXCJcXG5pbml0L0tjb25maWctMjEyMi1cXG5pbml0L0tjb25maWc6MjEyMzpjb25maWcgUEVSRl9FVkVOVFNcXG5pbml0L0tjb25maWctMjEyNC1cXHRib29sIFxcXCJLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MjEuNjY5Mzg4MzI1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQwMjgxMjk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGVyZm9ybWFuY2UgRXZlbnQgSW5zdHJ1bWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUEVSRl9FVkVOVFNgIGlzIGVzc2VudGlhbCBoZXJlLCB0aGF0J3MgYSBnaXZlbi4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlc2UgZm9jdXMgc3ltYm9scy4gSSdtIHRha2luZyBhIGNsb3NlIGxvb2sgYXQ6IGBpbnRlbF9wbXVfZ2V0X21zcmAsIGBpbnRlbF9wbXVfc2V0X21zcmAsIGBpbnRlbF9wbXVfcmVmcmVzaGAsIGBpbnRlbF9wbXVfcmVzZXRgLCBgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWRgLCBgaW50ZWxfbWVkaWF0ZWRfcG11X3B1dGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCwgYW5kIGBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgaG90LXBhdGggZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0IGFyZSBjYWxsZWQgZnJlcXVlbnRseSBhbmQgd291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIHByb2ZpbGluZy4gYGludGVsX3BtdV9nZXRfbXNyYCBhbmQgYGludGVsX3BtdV9zZXRfbXNyYCBhcmUgdGllZCB0byBSRE1TUi9XUk1TUiwgc28gdGhleSdyZSBvbiB0aGUgc29tZXdoYXQgaG90IHNpZGUsIGJ1dCB2aXRhbCBmb3IgTVNSIGZ1enppbmcuIEkgd2FzIHdvbmRlcmluZyBhYm91dCBza2lwcGluZyBgaW50ZWxfbWVkaWF0ZWRfcG11X2xvYWRgIGFuZCBgaW50ZWxfbWVkaWF0ZWRfcG11X3B1dGAsIGFzIHRoZXNlIGFyZSByZWxhdGVkIHRvIHZjcHUgbG9hZC9wdXQgb3BlcmF0aW9ucywgd2hpY2ggYXJlIHJhdGhlciBmcmVxdWVudC4gSG93ZXZlciwgYSBxdWljayBjaGVjayByZXZlYWxzIHRoZXkncmUgdGhlIG9uZXMgc2F2aW5nL3Jlc3RvcmluZyBgTVNSX1BFUkZfTUVUUklDU2AsIG1ha2luZyB0aGVtIGNyaXRpY2FsLiBGdXJ0aGVyIGFuYWx5c2lzIHJldmVhbGVkIHRoZXkgYXJlIGNhbGxlZCBvbiBldmVyeSBWTSBleGl0L2VudHJ5IG9yIGNvbnRleHQgc3dpdGNoLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBob3QuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgbGVzcyBmcmVxdWVudCBvbmVzLiBgaW50ZWxfcG11X3JlZnJlc2hgIGlzIGNhbGxlZCBvbiBDUFVJRCB1cGRhdGVzLCBub3QgYSBob3RzcG90LiBgaW50ZWxfcG11X3Jlc2V0YCBpcyBjYWxsZWQgb24gdmNwdSByZXNldDsgbm90IGhvdC4gYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCBpcyBmb3IgTVNSIGludGVyY2VwdCByZWNhbGN1bGF0aW9uLiBJdCdzIG5vdCBob3QsIGVpdGhlciwgYW5kIHRoZSBvdGhlcnMsIHN1Y2ggYXMgYHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNgIGFuZCBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYXJlIGRlZmluaXRpdmVseSBub3Qgb24gdGhlIGhvdCBwYXRoLlxuXG5TbywgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgZnVuY3Rpb25zIGFzIHRoZSBhcmVhcyBvZiBwcmltYXJ5IGNvbmNlcm46XG5gaW50ZWxfcG11X2dldF9tc3JgXG5gaW50ZWxfcG11X3NldF9tc3JgXG5gaW50ZWxfcG11X3JlZnJlc2hgXG5gaW50ZWxfcG11X3Jlc2V0YFxuYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYFxuYGludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWxgXG5cbk5lZWQgdG8gdmVyaWZ5IHRoYXQgbGFzdCBvbmUgaXMgaW5kZWVkIGEgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzA5LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjMxLjA3MjIwMzU4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3NjcxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9Mzg4PXN0YXRpYyBpbnQgaW50ZWxfcG11X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy00ODQtICovXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo0ODU6c3RhdGljIHU2NCBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsKHVuc2lnbmVkIGludCBpbmRleClcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTQ4Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jPTYyNj1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTY0Ni1cXHRcXHRwbXUtXFx1MDAzZWZpeGVkX2NvdW50ZXJzW2ldLmN1cnJlbnRfY29uZmlnID0gMDtcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjY0NzpcXHRcXHRwbXUtXFx1MDAzZWZpeGVkX2NvdW50ZXJzW2ldLmV2ZW50c2VsID0gaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbChpKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTY0OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjMxLjEyNjk4MDA5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg5MDM2NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhIGFuZCB0aGUgY29udGV4dCBpcyBrZXJuZWwtbGV2ZWwgdmlydHVhbGl6YXRpb24gb3IgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB3aXRoaW4gYSBoeXBlcnZpc29yOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSG90c3BvdHMgaW4gUE1VIExvYWQvU2F2ZSBPcGVyYXRpb25zKipcblxuUmlnaHQsIHRoYXQgc2VlbXMgaW1wb3J0YW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgYGludGVsX21lZGlhdGVkX3BtdV9sb2FkYCBhbmQgYGludGVsX21lZGlhdGVkX3BtdV9wdXRgIGFyZSBleHBlcmllbmNpbmcgaGlnaCBjb250ZW50aW9uLiBBcmUgdGhleSBjYXVzaW5nIGEgYm90dGxlbmVjaz8gVGhleSdyZSBjcnVjaWFsIGNvbXBvbmVudHMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC5cblxuTm93LCB3aGVyZSBkbyB0aGVzZSBmdW5jdGlvbnMgZ2V0IGNhbGxlZCBmcm9tPyBPa2F5LCBga3ZtX3BtdV9sb2FkX2d1ZXN0X3BtY3NgIGFuZCBga3ZtX3BtdV9zYXZlX2d1ZXN0X3BtY3NgLCByaWdodC4gQW5kIHRob3NlIGFyZSBjYWxsZWQgYnksIGFoLi4uIGB2bXhfdmNwdV9sb2FkYCBhbmQgYHZteF92Y3B1X3B1dGAsIHdoaWNoIGFyZSBlc3NlbnRpYWwgdG8gdmlydHVhbCBtYWNoaW5lIG1hbmFnZW1lbnQuIEhhbmcgb24gYSBzZWNvbmQsIGFtIEkgZ2V0dGluZyB0aGF0IHJpZ2h0PyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjYWxsIHBhdGhzIGhlcmUuLi4gWWVwLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcnJlY3QgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTMyLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MzUuMDE2MDE5MTEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzgwODEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmM9ODIwPXN0YXRpYyB2b2lkIGludGVsX3BtdV93cml0ZV9nbG9iYWxfY3RybCh1NjQgZ2xvYmFsX2N0cmwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTgyNS1cXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jOjgyNjpzdGF0aWMgdm9pZCBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYy04Mjcte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz04NzQ9c3RydWN0IGt2bV9wbXVfb3BzIGludGVsX3BtdV9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODg2LVxcdC5pc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkID0gaW50ZWxfcG11X2lzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQsXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4ODc6XFx0Lm1lZGlhdGVkX2xvYWQgPSBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZCxcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTg4OC1cXHQubWVkaWF0ZWRfcHV0ID0gaW50ZWxfbWVkaWF0ZWRfcG11X3B1dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MzUuMDY5ODMzNDQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTExMDA1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEtWTSBQTVUgTWVkaWF0ZWQgQWNjZXNzIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbWVkaWF0ZWQgUE1VIGFjY2VzcyBwYXRoIHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGt2bV9wbXVfb3BzLVx1MDAzZW1lZGlhdGVkX2xvYWRgIGFuZCBgbWVkaWF0ZWRfcHV0YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBtZWRpYXRlZF9sb2FkYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgY3JpdGljYWwgcGllY2UgaGVyZSwgdGhlIGVudHJ5IHBvaW50LiBJIHdhbnQgdG8ga25vdyB3aGF0J3MgKmluaXRpYXRpbmcqIHRoaXMgbWVkaWF0ZWQgbG9hZGluZyBwcm9jZXNzLiBHb3R0YSBmb2xsb3cgdGhlIGNhbGwgZ3JhcGggdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gTGV0J3Mgc2VlIHdoZXJlIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBpbnZva2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjM3Ljg4MDkzNjA0NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwNTE1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVkaWF0ZWRfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9wbXUuYz0xMzYyPXZvaWQga3ZtX21lZGlhdGVkX3BtdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuYy0xMzkwLVxcbmFyY2gveDg2L2t2bS9wbXUuYzoxMzkxOlxcdGt2bV9wbXVfY2FsbChtZWRpYXRlZF9sb2FkKSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmMtMTM5Mi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11Lmg9MjY9c3RydWN0IGt2bV9wbXVfb3BzIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9wbXUuaC00MS1cXHRib29sICgqaXNfbWVkaWF0ZWRfcG11X3N1cHBvcnRlZCkoc3RydWN0IHg4Nl9wbXVfY2FwYWJpbGl0eSAqaG9zdF9wbXUpO1xcbmFyY2gveDg2L2t2bS9wbXUuaDo0MjpcXHR2b2lkICgqbWVkaWF0ZWRfbG9hZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vcG11LmgtNDMtXFx0dm9pZCAoKm1lZGlhdGVkX3B1dCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vcG11LmM9MzA0PXN0cnVjdCBrdm1fcG11X29wcyBhbWRfcG11X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMTUtXFx0LmlzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQgPSBhbWRfcG11X2lzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQsXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYzozMTY6XFx0Lm1lZGlhdGVkX2xvYWQgPSBhbWRfbWVkaWF0ZWRfcG11X2xvYWQsXFxuYXJjaC94ODYva3ZtL3N2bS9wbXUuYy0zMTctXFx0Lm1lZGlhdGVkX3B1dCA9IGFtZF9tZWRpYXRlZF9wbXVfcHV0LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYz04NzQ9c3RydWN0IGt2bV9wbXVfb3BzIGludGVsX3BtdV9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG11X2ludGVsLmMtODg2LVxcdC5pc19tZWRpYXRlZF9wbXVfc3VwcG9ydGVkID0gaW50ZWxfcG11X2lzX21lZGlhdGVkX3BtdV9zdXBwb3J0ZWQsXFxuYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuYzo4ODc6XFx0Lm1lZGlhdGVkX2xvYWQgPSBpbnRlbF9tZWRpYXRlZF9wbXVfbG9hZCxcXG5hcmNoL3g4Ni9rdm0vdm14L3BtdV9pbnRlbC5jLTg4OC1cXHQubWVkaWF0ZWRfcHV0ID0gaW50ZWxfbWVkaWF0ZWRfcG11X3B1dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6MzcuOTM0OTkzMDAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDQxMzczMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBpbiBLVk0vSW50ZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHBhdGggd2l0aGluIEtWTSwgc3BlY2lmaWNhbGx5IG9uIEludGVsIHN5c3RlbXMuIEkga25vdyBga3ZtX21lZGlhdGVkX3BtdV9sb2FkYCBpcyBhIGNyaXRpY2FsIGhvdHNwb3QsIHRyaWdnZXJlZCBieSBga3ZtX2FyY2hfdmNwdV9sb2FkYCwgc28gSSdtIGV4Y2x1ZGluZyB0aGUgYGludGVsX21lZGlhdGVkX3BtdV9sb2FkYCBhbmQgYGludGVsX21lZGlhdGVkX3BtdV9wdXRgIGZ1bmN0aW9ucyB0byBhdm9pZCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHRoZSBub2lzZS5cblxuRmlyc3QsIEkgbG9va2VkIGF0IHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gYGt2bV9pbml0X3BtdV9jYXBhYmlsaXR5YCBvbmx5IHJ1bnMgb25jZSBhdCBib290IGFuZCwgc2ltaWxhcmx5LCBgdm14X2dldF9wZXJmX2NhcGFiaWxpdGllc2AgYWxzbyBydW5zIGp1c3Qgb25jZSBwZXIgYm9vdC4gVGhlbiwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCBpcyB0cmlnZ2VyZWQgd2hlbmV2ZXIgTVNSIGludGVyY2VwdCB1cGRhdGVzIG9jY3VyLiBgaW50ZWxfcG11X3JlZnJlc2hgIGlzIGNhbGxlZCB3aGVuZXZlciBDUFVJRCBpbmZvcm1hdGlvbiBpcyByZWZyZXNoZWQsIGFuZCBgaW50ZWxfcG11X3Jlc2V0YCBkdXJpbmcgdkNQVSByZXNldHMuIEZpbmFsbHksIEkgbm90aWNlZCB0aGUgYGludGVsX3BtdV9nZXRfbXNyYCBhbmQgYGludGVsX3BtdV9zZXRfbXNyYCBmdW5jdGlvbnMsIHdoaWNoLCBvZiBjb3Vyc2UsIGFyZSBjYWxsZWQgZHVyaW5nIFJETVNSL1dSTVNSIGluc3RydWN0aW9ucy5cblxuQmFzZWQgb24gdGhpcywgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBgaW50ZWxfcG11X3JlZnJlc2hgLCBgaW50ZWxfcG11X3Jlc2V0YCwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCwgYW5kIGBpbnRlbF9nZXRfZml4ZWRfcG1jX2V2ZW50c2VsYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBmcmVxdWVudGx5IGNhbGxlZC5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zLiBJdCdzIHNhZmUgdG8gc2F5IGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgZnVuZGFtZW50YWwsIHJpZ2h0PyBgUEVSRl9FVkVOVFNgIGlzIHR5cGljYWxseSBlbmFibGVkLCB3aGljaCBtZWFucyBpdCBzaG91bGRuJ3QgYmUgYW4gaXNzdWUuIEJ1dCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6NDQuMTc5MTMyNzI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjU4NzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA0OjQ4OjQ0LjIzNTcyNjE2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYzMDkyMTgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUga2VybmVsJ3MgS1ZNIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRpbmcgdG8gSW50ZWwncyBhcmNoaXRlY3R1cmUgYW5kIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdHMgKFBNVXMpLiBUaGUgZmlsZXMgbGlzdGVkIOKAkyBgYXJjaC94ODYva3ZtL3ZteC9wbXVfaW50ZWwuY2AsIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYCwgYGFyY2gveDg2L2t2bS9wbXUuY2AsIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYCDigJMgYWxsIHBvaW50IGRpcmVjdGx5IHRvIEtWTSdzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIHBhcnRpY3VsYXJseSB0aGUgVk1YIChWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucykgZmVhdHVyZXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cblxuR2l2ZW4gdGhlIGZpbGUgbmFtZXMsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYEtWTWAgYW5kIGBLVk1fSU5URUxgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbGlrZWx5IGRpY3RhdGUgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiBjb21waWxlZCBhbmQgaW5jbHVkZWQuIEJ1dCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUgbWlnaHQgYmUgc29tZSBzZWNvbmRhcnksIG1vcmUgZ3JhbnVsYXIgY29uZmlndXJhdGlvbnMgdGhhdCBjb21lIGludG8gcGxheSwgcG90ZW50aWFsbHkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHNwZWNpZmljIGFzcGVjdHMgb2YgUE1VIHZpcnR1YWxpemF0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIG9yIHRoZSBjb2RlIGl0c2VsZiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgUE1VIGhhbmRsaW5nLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNDo0ODo1NC44NjY2NTA1NjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzA2ODU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKlBNVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDg6NTQuOTIyOTY2NDE2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzY0MzQ3MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gUE1VIEVtdWxhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlcmUgYXJlbid0IGFueSBzcGVjaWZpYyBLVk0gY29uZmlndXJhdGlvbnMgZXhwbGljaXRseSBtZW50aW9uZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIGZvY3VzIGhhcyBiZWVuIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgY2hhbmdlcyB3aXRoaW4gdGhlIFBNVSBlbXVsYXRpb24uIEkgc3RhcnRlZCBieSByZXZpZXdpbmcgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZDogYGludGVsX3BtdV9nZXRfbXNyYCwgYGludGVsX3BtdV9zZXRfbXNyYCwgYGludGVsX3BtdV9yZWZyZXNoYCwgYGludGVsX3BtdV9yZXNldGAsIGB2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c2AsIGFuZCBgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbGAuIFRoZXNlIHNlZW1lZCB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYW5kIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGZvciB0aGUgZ3Vlc3QncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBlbXVsYXRlZCBQTVUuXG5cblRoZW4sIEkgZXhwYW5kZWQgbXkgc2NvcGUgdG8gaW5jbHVkZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhlIFBNVSBiZWhhdmlvciwgYWRkaW5nIGBrdm1faW5pdF9wbXVfY2FwYWJpbGl0eWAgYW5kIGB2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzYCB0byBteSBtZW50YWwgbGlzdC4gSSBub3RpY2VkIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGt2bV9wcm9iZV9tc3JfdG9fc2F2ZWAgYW5kIGBrdm1faW5pdF9tc3JfbGlzdHNgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCB3aGljaCBjb25maXJtcyB0aGUgaW5pdGlhbGl6YXRpb24gYXNwZWN0LlxuXG5JJ3ZlIGNsYXJpZmllZCB0aGUgcm9sZXMgb2YgZWFjaCBmdW5jdGlvbjogYGludGVsX3BtdV9nZXRfbXNyYCBhbmQgYGludGVsX3BtdV9zZXRfbXNyYCBoYW5kbGUgdGhlIGRpcmVjdCBNU1IgYWNjZXNzZXMgZnJvbSB0aGUgZ3Vlc3QuIGBpbnRlbF9wbXVfcmVmcmVzaGAgaXMga2V5IGR1cmluZyBDUFVJRCB1cGRhdGVzLCBhbmQgYGludGVsX3BtdV9yZXNldGAgZHVyaW5nIHZDUFUgcmVzZXRzLiBgdm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNgIG1hbmFnZXMgdGhlIE1TUiBpbnRlcmNlcHRpb24gbG9naWMsIGFuZCBgaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbGAgZGVhbHMgd2l0aCBmaXhlZCBjb3VudGVyIGV2ZW50IHNlbGVjdG9ycy5cblxuU28sIHRvIHJlY2FwLCB0aGUga2V5IGZvY3VzIHN5bWJvbHMgYXJlOiBgaW50ZWxfcG11X2dldF9tc3JgLCBgaW50ZWxfcG11X3NldF9tc3JgLCBgaW50ZWxfcG11X3JlZnJlc2hgLCBgaW50ZWxfcG11X3Jlc2V0YCwgYHZteF9yZWNhbGNfcG11X21zcl9pbnRlcmNlcHRzYCwgYGludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWxgLCBga3ZtX2luaXRfcG11X2NhcGFiaWxpdHlgLCBhbmQgYHZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNgLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGUgcGF0Y2gncyBwdXJwb3NlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGVtdWxhdGlvbiBzdXBwb3J0IGZvciBgTVNSX1BFUkZfTUVUUklDU2AgYW5kIGZpeGVkIGNvdW50ZXIgMyAoYFRPUERPV04uU0xPVFNgKSBpbiBJbnRlbCBLVk0uIFRoaXMgaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byBNU1IgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIEdpdmVuIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBndWVzdCBSRE1TUi9XUk1TUiBhbmQgQ1BVSUQgaW5zdHJ1Y3Rpb25zLCBmdXp6aW5nIGlzIGEgY3JpdGljYWwgc3RlcCB0byBlbnN1cmUgdGhhdCB0aGUgZW11bGF0aW9uIGlzIGNvcnJlY3QsIGF2b2lkaW5nIGhvc3QgY3Jhc2hlcyBhbmQgZGF0YSBjb3JydXB0aW9uLiBDb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZSBjb2RlLCBJIGV4cGVjdCB0aGUgS1ZNIGFuZCBLVk1fSU5URUwgY29uZmlndXJhdGlvbnMgdG8gYmUgcmVsZXZhbnQuXG5cbk5vdywgbGV0J3MgcHJvY2VlZCB3aXRoIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA4NiwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDQ6NDk6MDYuNjg3MzE2NTY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzNjIzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW50ZWxfcG11X2dldF9tc3JcIixcbiAgICBcImludGVsX3BtdV9zZXRfbXNyXCIsXG4gICAgXCJpbnRlbF9wbXVfcmVmcmVzaFwiLFxuICAgIFwiaW50ZWxfcG11X3Jlc2V0XCIsXG4gICAgXCJ2bXhfcmVjYWxjX3BtdV9tc3JfaW50ZXJjZXB0c1wiLFxuICAgIFwiaW50ZWxfZ2V0X2ZpeGVkX3BtY19ldmVudHNlbFwiLFxuICAgIFwia3ZtX2luaXRfcG11X2NhcGFiaWxpdHlcIixcbiAgICBcInZteF9nZXRfcGVyZl9jYXBhYmlsaXRpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIE1TUl9QRVJGX01FVFJJQ1MgYW5kIGZpeGVkIGNvdW50ZXIgMyAoVE9QRE9XTi5TTE9UUykgdG8gS1ZNJ3MgSW50ZWwgUE1VIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgTVNSIHJlYWQvd3JpdGUgaGFuZGxlcnMsIENQVUlEIGV2YWx1YXRpb24sIGFuZCBQTVUgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB2aWEgUkRNU1IvV1JNU1IgYW5kIENQVUlEIGluc3RydWN0aW9ucywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgZW11bGF0aW9uIGFuZCBhdm9pZCBob3N0IGNyYXNoZXMgb3Igc3RhdGUgY29ycnVwdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImludGVsX3BtdV9nZXRfbXNyXCIsXG4gICAgXCJpbnRlbF9wbXVfc2V0X21zclwiLFxuICAgIFwiaW50ZWxfcG11X3JlZnJlc2hcIixcbiAgICBcImludGVsX3BtdV9yZXNldFwiLFxuICAgIFwidm14X3JlY2FsY19wbXVfbXNyX2ludGVyY2VwdHNcIixcbiAgICBcImludGVsX2dldF9maXhlZF9wbWNfZXZlbnRzZWxcIixcbiAgICBcImt2bV9pbml0X3BtdV9jYXBhYmlsaXR5XCIsXG4gICAgXCJ2bXhfZ2V0X3BlcmZfY2FwYWJpbGl0aWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBNU1JfUEVSRl9NRVRSSUNTIGFuZCBmaXhlZCBjb3VudGVyIDMgKFRPUERPV04uU0xPVFMpIHRvIEtWTSdzIEludGVsIFBNVSBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIE1TUiByZWFkL3dyaXRlIGhhbmRsZXJzLCBDUFVJRCBldmFsdWF0aW9uLCBhbmQgUE1VIGluaXRpYWxpemF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdmlhIFJETVNSL1dSTVNSIGFuZCBDUFVJRCBpbnN0cnVjdGlvbnMsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGVtdWxhdGlvbiBhbmQgYXZvaWQgaG9zdCBjcmFzaGVzIG9yIHN0YXRlIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6clsm[1] Phase: Succeeded StartedAt: 2026-06-23 04:49:17 +0000 UTC FinishedAt: 2026-06-23 04:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 04:49:17 +0000 UTC FinishedAt: 2026-06-23 04:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2] Phase: Succeeded StartedAt: 2026-06-23 04:49:17 +0000 UTC FinishedAt: 2026-06-23 08:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-23 04:49:17 +0000 UTC FinishedAt: 2026-06-23 08:38:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-23 04:49:17 +0000 UTC FinishedAt: 2026-06-23 04:49:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-23 04:49:17 +0000 UTC FinishedAt: 2026-06-23 04:49:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6clsm/series-workflow6clsm-convert-artifact-1203226357/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-23 04:49:27 +0000 UTC FinishedAt: 2026-06-23 05:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-23 04:49:27 +0000 UTC FinishedAt: 2026-06-23 05:10:26 +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:*86d55fe1-aa57-4071-ac93-a1988d348596,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-workflow6clsm/series-workflow6clsm-convert-artifact-1203226357/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": "6553147f-4df2-48df-ae13-2797cadaf8f2", "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-workflow6clsm/series-workflow6clsm-build-action-2346393819/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-23 04:49:27 +0000 UTC FinishedAt: 2026-06-23 05:10:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*86d55fe1-aa57-4071-ac93-a1988d348596,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-workflow6clsm/series-workflow6clsm-convert-artifact-1203226357/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": "6553147f-4df2-48df-ae13-2797cadaf8f2", "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-workflow6clsm/series-workflow6clsm-build-action-2346393819/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 05:10:26 +0000 UTC FinishedAt: 2026-06-23 05:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-23 05:10:26 +0000 UTC FinishedAt: 2026-06-23 05:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 05:10:26 +0000 UTC FinishedAt: 2026-06-23 05:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 05:10:26 +0000 UTC FinishedAt: 2026-06-23 05:10:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6clsm/series-workflow6clsm-convert-artifact-1190250064/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 05:10:36 +0000 UTC FinishedAt: 2026-06-23 05:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 05:10:36 +0000 UTC FinishedAt: 2026-06-23 05:12:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6553147f-4df2-48df-ae13-2797cadaf8f2,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-workflow6clsm/series-workflow6clsm-build-action-2346393819/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-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 05:12:33 +0000 UTC FinishedAt: 2026-06-23 05:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 05:12:33 +0000 UTC FinishedAt: 2026-06-23 05:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 05:12:33 +0000 UTC FinishedAt: 2026-06-23 05:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 05:12:33 +0000 UTC FinishedAt: 2026-06-23 05: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:*86d55fe1-aa57-4071-ac93-a1988d348596,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-workflow6clsm/series-workflow6clsm-convert-artifact-1190250064/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": "a1fd87a4-c7d7-4279-9f7d-d40db66ca341", "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-workflow6clsm/series-workflow6clsm-build-action-2392228812/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 05:12:33 +0000 UTC FinishedAt: 2026-06-23 05:33:36 +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:*86d55fe1-aa57-4071-ac93-a1988d348596,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-workflow6clsm/series-workflow6clsm-convert-artifact-1190250064/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": "a1fd87a4-c7d7-4279-9f7d-d40db66ca341", "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-workflow6clsm/series-workflow6clsm-build-action-2392228812/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 05:33:46 +0000 UTC FinishedAt: 2026-06-23 05:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 05:33:46 +0000 UTC FinishedAt: 2026-06-23 05:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 05:33:46 +0000 UTC FinishedAt: 2026-06-23 05:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 05:33:46 +0000 UTC FinishedAt: 2026-06-23 05:35:37 +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:*a1fd87a4-c7d7-4279-9f7d-d40db66ca341,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-workflow6clsm/series-workflow6clsm-build-action-2392228812/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-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-23 05:35:47 +0000 UTC FinishedAt: 2026-06-23 08:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 05:35:47 +0000 UTC FinishedAt: 2026-06-23 08:38:55 +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":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"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:*6553147f-4df2-48df-ae13-2797cadaf8f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a1fd87a4-c7d7-4279-9f7d-d40db66ca341,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-workflow6clsm/series-workflow6clsm-build-action-2346393819/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-workflow6clsm/series-workflow6clsm-build-action-2392228812/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 05:35:47 +0000 UTC FinishedAt: 2026-06-23 05:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 05:35:47 +0000 UTC FinishedAt: 2026-06-23 05:35:52 +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":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"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-workflow6clsm/series-workflow6clsm-convert-artifact-1537234505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-23 05:35:47 +0000 UTC FinishedAt: 2026-06-23 05:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 05:35:47 +0000 UTC FinishedAt: 2026-06-23 05:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 05:35:47 +0000 UTC FinishedAt: 2026-06-23 05:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 05:35:57 +0000 UTC FinishedAt: 2026-06-23 08:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6clsm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["intel_pmu_get_msr","intel_pmu_set_msr","intel_pmu_refresh","intel_pmu_reset","vmx_recalc_pmu_msr_intercepts","intel_get_fixed_pmc_eventsel","kvm_init_pmu_capability","vmx_get_perf_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9d4853b044beefa21c4ee3e18c40653601a64ced","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"1d7dc93d-28e5-4ab6-8f40-933e7dd17521","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 05:35:57 +0000 UTC FinishedAt: 2026-06-23 08:38:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6553147f-4df2-48df-ae13-2797cadaf8f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a1fd87a4-c7d7-4279-9f7d-d40db66ca341,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-workflow6clsm/series-workflow6clsm-build-action-2346393819/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-workflow6clsm/series-workflow6clsm-build-action-2392228812/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-workflow6clsm/series-workflow6clsm-convert-artifact-1537234505/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,}