Name: series-workflow4d4kx Phase: Succeeded StartedAt: 2026-07-02 17:48:14 +0000 UTC FinishedAt: 2026-07-02 19:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[0] Phase: Succeeded StartedAt: 2026-07-02 17:48:14 +0000 UTC FinishedAt: 2026-07-02 18:18:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 17:48:14 +0000 UTC FinishedAt: 2026-07-02 18:18:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "be170480-0198-4cbd-9193-a16cc5ec04d4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "dat_crste_walk_range", "gmap_create_shadow", "kvm_s390_vm_stop_migration", "kvm_s390_set_cmma_bits", "kvm_arch_commit_memory_region", "handle_essa", "cmma_d_count_pte" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9jcnN0ZV93YWxrX3JhbmdlJiMzNDssCiAgICAmIzM0O2dtYXBfY3JlYXRlX3NoYWRvdyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2NtbWFfZF9jb3VudF9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEl0IGZpeGVzIGEgYnVnIGluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgd2hlcmUgdGhlIHJldHVybiBjb2RlIHdhcyBpZ25vcmVkLCByZXNvbHZlcyBhIGRlYWRsb2NrIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGJ5IHVzaW5nIGB3cml0ZV90cnlsb2NrYCwgZml4ZXMgYSBkYXRhIHJhY2UgaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29ycmVjdHMgbWlncmF0aW9uIHN0b3AgbG9naWMgaW4gYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGFkanVzdHMgdGhlIHRpbWluZyBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNThjNzllYTRhYzI0YzQwMTc0YTg5M2RkYmI1Nzg1YTgwMmEyZDViMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTY6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbmluZGV4IDVmMTk2MGVjOTgyZDA0Li5lZDQyNTlkMTc2Mjk1NCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC01NzAsNiAmIzQzOzU3MCw4IEBAIHN0YXRpYyBsb25nIGRhdF9jcnN0ZV93YWxrX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsXG4gXHRcdFx0ZWxzZSBpZiAod2Fsay1cdTAwM2VvcHMtXHUwMDNlcHRlX2VudHJ5KVxuIFx0XHRcdFx0cmMgPSBkYXRfcHRlX3dhbGtfcmFuZ2UobWF4KHN0YXJ0LCBjdXIpLCBtaW4oZW5kLCBuZXh0KSxcbiBcdFx0XHRcdFx0XHRcdGRlcmVmZXJlbmNlX3BtZChjcnN0ZS5wbWQpLCB3YWxrKTtcbiYjNDM7XHRcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggMjk4ZmJhZWNlYzI4ZDUuLjhhYmI0ZjU1YjMwNmJhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMTM3NCw4ICYjNDM7MTM3NCwxMyBAQCBzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZVxuIFx0XHRcdC8qIE9ubHkgYWxsb3cgb25lIHJlYWwtc3BhY2UgZ21hcCBzaGFkb3cuICovXG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZywgXHUwMDI2cGFyZW50LVx1MDAzZWNoaWxkcmVuLCBsaXN0KSB7XG4gXHRcdFx0XHRpZiAoc2ctXHUwMDNlZ3Vlc3RfYXNjZS5yKSB7XG4tXHRcdFx0XHRcdHNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCBcdTAwMjZwYXJlbnQtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuJiM0MztcdFx0XHRcdFx0aWYgKHdyaXRlX3RyeWxvY2soXHUwMDI2cGFyZW50LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaykpIHtcbiBcdFx0XHRcdFx0XHRnbWFwX3Vuc2hhZG93KHNnKTtcbiYjNDM7XHRcdFx0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcdFx0XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRcdFx0Z21hcF9wdXQobmV3KTtcbiYjNDM7XHRcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XG4mIzQzO1x0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDIzYzgxNzU5NWUyOGQ1Li5kZWVjNjczYTkyMDY1NyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtOTU1LDcgJiM0Mzs5NTUsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfUzM5MF9VU0VSX09QRVJFWEVDOlxuIFx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtFTkFCTEU6IENBUF9TMzkwX1VTRVJfT1BFUkVYRUNcJiMzNDspO1xuLVx0XHRrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjID0gMTtcbiYjNDM7XHRcdFdSSVRFX09OQ0Uoa3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYywgMSk7XG4gXHRcdGljcHRfb3BlcmV4Y19vbl9hbGxfdmNwdXMoa3ZtKTtcbiBcdFx0ciA9IDA7XG4gXHRcdGJyZWFrO1xuQEAgLTEyODAsOCAmIzQzOzEyODAsMTAgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gXHQgKiBQR1NURXMgbWlnaHQgaGF2ZSBjbW1hX2Qgc2V0LlxuIFx0ICovXG4gXHRXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlLCAwKTtcbi1cdGlmIChrdm0tXHUwMDNlYXJjaC51c2VfY21tYSlcbi1cdFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuJiM0MztcdGlmICgha3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuIFx0LyogQ2xlYXIgY21tYV9kIG9uIGFsbCBleGlzdGluZyBQR1NURXMgYW5kIHNldCBjbW1hX2RpcnR5X3BhZ2VzIHRvIDAuICovXG4gXHRnbWFwX3NldF9jbW1hX2FsbF9jbGVhbihrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbiBcdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCAwKTtcbkBAIC0yMzg0LDcgJiM0MzsyMzg2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiAvKipcbkBAIC0zNjA0LDEwICYjNDM7MzYwNiw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZXBkeCA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZXBkeDtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXA7XG4mIzQzO1x0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRzY2FfYWRkX3ZjcHUodmNwdSk7XG4tXHR9XG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuQEAgLTM4NTAsNiAmIzQzOzM4NTAsOCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4gXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcJiMzNDssXG5AQCAtNTc5MiwxMSAmIzQzOzU3OTQsMTkgQEAgaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcbiYjNDM7e1xuJiM0MztcdGlmIChwZ3N0ZV9vZihwdGVwKS1cdTAwM2VjbW1hX2QpXG4mIzQzO1x0XHRhdG9taWM2NF9kZWMod2Fsay1cdTAwM2Vwcml2KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcbiBcdFx0XHRcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcbiBcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtNTgxMCw2ICYjNDM7NTgyMCwxMiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH1cbiBcbiBcdHNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCBcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spIHtcbiYjNDM7XHRcdGlmIChrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEpIHtcbiYjNDM7XHRcdFx0X2RhdF93YWxrX2dmbl9yYW5nZShvbGQtXHUwMDNlYmFzZV9nZm4sIG9sZC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBvbGQtXHUwMDNlbnBhZ2VzLFxuJiM0MztcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5pbmRleCBhZDBkZGM0MzNhNzNjMy4uYjBmM2E0N2IxODI5ZjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0xMjYwLDggJiM0MzsxMjYwLDkgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdC8qIFJldHJ5IHRoZSBFU1NBIGluc3RydWN0aW9uICovXG4gXHRcdGt2bV9zMzkwX3JldHJ5X2luc3RyKHZjcHUpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4tXHRcdFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKVxuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiYjNDM7XHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9jcnN0ZV93YWxrX3JhbmdlJiMzNDssCiAgICAmIzM0O2dtYXBfY3JlYXRlX3NoYWRvdyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2NtbWFfZF9jb3VudF9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEl0IGZpeGVzIGEgYnVnIGluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgd2hlcmUgdGhlIHJldHVybiBjb2RlIHdhcyBpZ25vcmVkLCByZXNvbHZlcyBhIGRlYWRsb2NrIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGJ5IHVzaW5nIGB3cml0ZV90cnlsb2NrYCwgZml4ZXMgYSBkYXRhIHJhY2UgaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29ycmVjdHMgbWlncmF0aW9uIHN0b3AgbG9naWMgaW4gYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGFkanVzdHMgdGhlIHRpbWluZyBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1OGM3OWVhNGFjMjRjNDAxNzRhODkzZGRiYjU3ODVhODAyYTJkNWIxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxODoxNjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCmluZGV4IDVmMTk2MGVjOTgyZDA0Li5lZDQyNTlkMTc2Mjk1NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCkBAIC01NzAsNiAmIzQzOzU3MCw4IEBAIHN0YXRpYyBsb25nIGRhdF9jcnN0ZV93YWxrX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsCiAJCQllbHNlIGlmICh3YWxrLSZndDtvcHMtJmd0O3B0ZV9lbnRyeSkKIAkJCQlyYyA9IGRhdF9wdGVfd2Fsa19yYW5nZShtYXgoc3RhcnQsIGN1ciksIG1pbihlbmQsIG5leHQpLAogCQkJCQkJCWRlcmVmZXJlbmNlX3BtZChjcnN0ZS5wbWQpLCB3YWxrKTsKJiM0MzsJCQlpZiAocmMpCiYjNDM7CQkJCWJyZWFrOwogCQl9CiAJfQogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZ21hcC5jIGIvYXJjaC9zMzkwL2t2bS9nbWFwLmMKaW5kZXggMjk4ZmJhZWNlYzI4ZDUuLjhhYmI0ZjU1YjMwNmJhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2dtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2dtYXAuYwpAQCAtMTM3NCw4ICYjNDM7MTM3NCwxMyBAQCBzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZQogCQkJLyogT25seSBhbGxvdyBvbmUgcmVhbC1zcGFjZSBnbWFwIHNoYWRvdy4gKi8KIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2csICZhbXA7cGFyZW50LSZndDtjaGlsZHJlbiwgbGlzdCkgewogCQkJCWlmIChzZy0mZ3Q7Z3Vlc3RfYXNjZS5yKSB7Ci0JCQkJCXNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCAmYW1wO3BhcmVudC0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJCWlmICh3cml0ZV90cnlsb2NrKCZhbXA7cGFyZW50LSZndDtrdm0tJmd0O21tdV9sb2NrKSkgewogCQkJCQkJZ21hcF91bnNoYWRvdyhzZyk7CiYjNDM7CQkJCQkJd3JpdGVfdW5sb2NrKCZhbXA7cGFyZW50LSZndDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJCQkJCX0gZWxzZSB7CiYjNDM7CQkJCQkJZ21hcF9wdXQobmV3KTsKJiM0MzsJCQkJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKJiM0MzsJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDIzYzgxNzU5NWUyOGQ1Li5kZWVjNjczYTkyMDY1NyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtOTU1LDcgJiM0Mzs5NTUsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcCkKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX1MzOTBfVVNFUl9PUEVSRVhFQzoKIAkJVk1fRVZFTlQoa3ZtLCAzLCAmIzM0OyVzJiMzNDssICYjMzQ7RU5BQkxFOiBDQVBfUzM5MF9VU0VSX09QRVJFWEVDJiMzNDspOwotCQlrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlYyA9IDE7CiYjNDM7CQlXUklURV9PTkNFKGt2bS0mZ3Q7YXJjaC51c2VyX29wZXJleGVjLCAxKTsKIAkJaWNwdF9vcGVyZXhjX29uX2FsbF92Y3B1cyhrdm0pOwogCQlyID0gMDsKIAkJYnJlYWs7CkBAIC0xMjgwLDggJiM0MzsxMjgwLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKQogCSAqIFBHU1RFcyBtaWdodCBoYXZlIGNtbWFfZCBzZXQuCiAJICovCiAJV1JJVEVfT05DRShrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUsIDApOwotCWlmIChrdm0tJmd0O2FyY2gudXNlX2NtbWEpCi0JCWt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUT1BfTUlHUkFUSU9OKTsKJiM0MzsJaWYgKCFrdm0tJmd0O2FyY2gudXNlX2NtbWEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJa3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pOwogCS8qIENsZWFyIGNtbWFfZCBvbiBhbGwgZXhpc3RpbmcgUEdTVEVzIGFuZCBzZXQgY21tYV9kaXJ0eV9wYWdlcyB0byAwLiAqLwogCWdtYXBfc2V0X2NtbWFfYWxsX2NsZWFuKGt2bS0mZ3Q7YXJjaC5nbWFwKTsKIAlhdG9taWM2NF9zZXQoJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcywgMCk7CkBAIC0yMzg0LDcgJiM0MzsyMzg2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSwKIAogCXNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCAmYW1wO2t2bS0mZ3Q7YXJjaC5nbWFwLSZndDtmbGFncyk7CiAKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmx0Oz0gMCA/IHIgOiAtRUZBVUxUOwogfQogCiAvKioKQEAgLTM2MDQsMTAgJiM0MzszNjA2LDggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtlcGR4ID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmVwZHg7CiAJcHJlZW1wdF9lbmFibGUoKTsKIAltdXRleF91bmxvY2soJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2xvY2spOwotCWlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKLQkJdmNwdS0mZ3Q7YXJjaC5nbWFwID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmdtYXA7CiYjNDM7CWlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpCiAJCXNjYV9hZGRfdmNwdSh2Y3B1KTsKLQl9CiAJaWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtJmd0O2t2bSwgNzQpIHx8IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX2luc3RyMCB8fAogCSAgICB2Y3B1LSZndDtrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlYykKIAkJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2ljdGwgfD0gSUNUTF9PUEVSRVhDOwpAQCAtMzg1MCw2ICYjNDM7Mzg1MCw4IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXZjcHUtJmd0O2FyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5nbWFwLCAtMVVMKTsKIAkJaWYgKCF2Y3B1LSZndDthcmNoLmdtYXApCiAJCQlnb3RvIG91dF9mcmVlX3NpZV9ibG9jazsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXZjcHUtJmd0O2FyY2guZ21hcCA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5nbWFwOwogCX0KIAogCVZNX0VWRU5UKHZjcHUtJmd0O2t2bSwgMywgJiMzNDtjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwJiMzNDssCkBAIC01NzkyLDExICYjNDM7NTc5NCwxOSBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CWlmIChwZ3N0ZV9vZihwdGVwKS0mZ3Q7Y21tYV9kKQomIzQzOwkJYXRvbWljNjRfZGVjKHdhbGstJmd0O3ByaXYpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiAJCQkJY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LAogCQkJCWVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTsKIAlzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyA9IE5VTEw7CiAJaW50IHJjID0gMDsKIApAQCAtNTgxMCw2ICYjNDM7NTgyMCwxMiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAl9CiAKIAlzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgJmFtcDtrdm0tJmd0O21tdV9sb2NrKSB7CiYjNDM7CQlpZiAoa3ZtLSZndDthcmNoLm1pZ3JhdGlvbl9tb2RlICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnVzZV9jbW1hKSB7CiYjNDM7CQkJX2RhdF93YWxrX2dmbl9yYW5nZShvbGQtJmd0O2Jhc2VfZ2ZuLCBvbGQtJmd0O2Jhc2VfZ2ZuICYjNDM7IG9sZC0mZ3Q7bnBhZ2VzLAomIzQzOwkJCQkJICAgIGt2bS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCAmYW1wO29wcywgREFUX1dBTEtfSUdOX0hPTEVTLAomIzQzOwkJCQkJICAgICZhbXA7a3ZtLSZndDthcmNoLmNtbWFfZGlydHlfcGFnZXMpOwomIzQzOwkJfQomIzQzOwogCQlzd2l0Y2ggKGNoYW5nZSkgewogCQljYXNlIEtWTV9NUl9ERUxFVEU6CiAJCQlyYyA9IGRhdF9kZWxldGVfc2xvdChtYywga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2UsIG9sZC0mZ3Q7YmFzZV9nZm4sIG9sZC0mZ3Q7bnBhZ2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKaW5kZXggYWQwZGRjNDMzYTczYzMuLmIwZjNhNDdiMTgyOWYyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMTI2MCw4ICYjNDM7MTI2MCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqLwogCQlrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTsKIAl9IGVsc2UgewotCQlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiYjNDM7CQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzbG90c19sb2NrKQomIzQzOwkJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwogCQlpZiAoaSAmbHQ7IDApCiAJCQlyZXR1cm4gaTsKIAkJLyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIHMzOTAgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0b3VjaGluZyB0aGUgYGFyY2gvczM5MC9rdm0vYCBhcmVhLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHBpZWNlIGJ5IHBpZWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBmYWlybHkgbG93LWxldmVsIGNvZGUgYW5kIHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwgY3JpdGljYWwgYXJlYXMgd2l0aGluIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpGaXJzdCwgYGFyY2gvczM5MC9rdm0vZGF0LmNgLiBUaGUgY2hhbmdlIGhlcmUgaXMgYSBzaW1wbGUgYGlmIChyYykgYnJlYWs7YCBhZnRlciBjYWxsaW5nIGBkYXRfcHRlX3dhbGtfcmFuZ2VgIHdpdGhpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGVycm9yLWhhbmRsaW5nIGVuaGFuY2VtZW50IGluIHRoZSBEQVQgKER5bmFtaWMgQWRkcmVzcyBUcmFuc2xhdGlvbikgd2Fsay4KCk5leHQsIGBhcmNoL3MzOTAva3ZtL2dtYXAuY2AgaGFzIGEgbW9yZSBpbnRlcmVzdGluZyBjaGFuZ2UgaW4gYGdtYXBfY3JlYXRlX3NoYWRvd2AuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBzaW1wbGUgd3JpdGUgbG9jayB3aXRoIGBzY29wZWRfZ3VhcmRgLCBidXQgdGhpcyBwYXRjaCByZXBsYWNlZCBpdCB3aXRoIGB3cml0ZV90cnlsb2NrYC4gSWYgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLCB3ZSBub3cgZ3JhY2VmdWxseSByZXR1cm4gYW4gYEVBR0FJTmAgZXJyb3IuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gdGhlIGxvY2tpbmcgc3RyYXRlZ3kuIEl0IGFwcGVhcnMgdG8gbWFrZSB0aGUgb3BlcmF0aW9uIG1vcmUgcmVzaWxpZW50IHRvIGxvY2sgY29udGVudGlvbi4KCk5vdywgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgaGFzIGEgbW9yZSBzaWduaWZpY2FudCBiYXRjaCBvZiBjaGFuZ2VzLiBJbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCB0aGUgYXNzaWdubWVudCBga3ZtLSZndDthcmNoLnVzZXJfb3BlcmV4ZWMgPSAxO2AgaXMgcmVwbGFjZWQgd2l0aCBgV1JJVEVfT05DRShrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlYywgMSk7YC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbXVsdGktdGhyZWFkZWQgc2NlbmFyaW8sIGFuZCBlbnN1cmluZyBhdG9taWMgdXBkYXRlcyB0byBzaGFyZWQgbWVtb3J5LiBJbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBhIGxvZ2ljIGludmVyc2lvbiBpcyBhZGRlZCB3aGVyZSBga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdGAgaXMgc2tpcHBlZCBpZiBga3ZtLSZndDthcmNoLnVzZV9jbW1hYCBpcyBmYWxzZS4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uLiBXaXRoaW4gYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHNsaWdodGx5IGNoYW5nZWQgdG8gcHJldmVudCBzdWNjZXNzLCBpZiBhIGZhaWx1cmUgb2NjdXJyZWQuIFRoZSBjb2RlIGZyb20gYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgbW92aW5nIGB2Y3B1LSZndDthcmNoLmdtYXAgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcDtgIHRvIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgaXMgbWlub3I7IGl0IGNoYW5nZXMgd2hlbiB0aGUgZ21hcCBpcyBpbml0aWFsaXplZCBmb3IgdGhlIHZDUFUuIEZpbmFsbHksIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIHRoZXJlJiMzOTtzIGEgbmV3IGBjbW1hX2RfY291bnRfcHRlYCBhbmQgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCB3aGVuIGEgbWVtb3J5IHNsb3QgaXMgZGVsZXRlZC4gVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCBjbW1hIGRpcnR5IHBhZ2UgYWNjb3VudGluZy4KCkZpbmFsbHksIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AgaW50cm9kdWNlcyBhIGBzY29wZWRfZ3VhcmRgIGFyb3VuZCB0aGUgYHNsb3RzX2xvY2tgIG11dGV4IGluIGBoYW5kbGVfZXNzYWAgd2hlbiBjYWxsaW5nIGBfX2RvX2Vzc2FgLiBUaGlzIG1ha2VzIEVTU0EgKEVuaGFuY2VkIFN5c3RlbSBTdG9yYWdlIEFyY2hpdGVjdHVyZSkgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcgc2FmZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHNsb3QgbG9jay4KCkluIHN1bW1hcnksIHRoaXMgc2VyaWVzIHRvdWNoZXMgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggbG9ja2luZyBpbXByb3ZlbWVudHMsIGEgZmV3IGFyY2hpdGVjdHVyYWwgb3B0aW1pemF0aW9ucywgRVNTQSBpbnN0cnVjdGlvbiBoYW5kbGluZyB3aXRoIG11dGV4IHByb3RlY3Rpb24sIGFuZCBnbWFwIGhhbmRsaW5nLiBJdCBhcHBlYXJzIHRvIGZvY3VzIG9uIHJlZmluaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwcm90ZWN0aW5nIGNyaXRpY2FsIHJlZ2lvbnMuIFRoaXMgY29tYmluYXRpb24gb2YgZnVuY3Rpb25hbGl0eSBtYWtlcyBpdCBhIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjaGFuZ2VzIHdpdGhpbiBgYXJjaC9zMzkwL2t2bS9gLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGBLVk1gLCB3aGljaCBzaG91bGQgYmUgcmVhZGlseSBhdmFpbGFibGUgaW4gYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgS1ZNYCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgZ2V0dGluZyBhIGxheSBvZiB0aGUgbGFuZC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGdtYXBfY3JlYXRlX3NoYWRvd2AsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kIGBoYW5kbGVfZXNzYWAuCgpSaWdodCBvZmYgdGhlIGJhdCwgSSB3YW50IHRvIGRyaWxsIGRvd24gb24gYGhhbmRsZV9lc3NhYC4gSXQmIzM5O3MgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlciwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0IGNvdWxkIGJlIGEgaG90IHBhdGguIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgd2hlcmUgSSB3YW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgpgZ21hcF9jcmVhdGVfc2hhZG93YCwgZnJvbSBhIHF1aWNrIGdsYW5jZSwgbG9va3MgdG8gYmUgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgYSBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0aGVyZSwgb2YgY291cnNlLCBidXQgdGhhdCYjMzk7cyB0aGUgaW5pdGlhbCBoeXBvdGhlc2lzLgoKYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyB0cmlnZ2VyZWQgZHVyaW5nIG1pZ3JhdGlvbiBzdG9wcGluZy4gR29vZCB0byBrbm93LCBidXQgbGlrZWx5IG5vdCBhIGNvcmUgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4KCk5vdywgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLi4uIHRoYXQgc21lbGxzIGxpa2UgYW4gaW9jdGwgY2FsbCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdDsgdGhhdCBjb250ZXh0IGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyOTA9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjM0Ni0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMzQ3OnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjM0OC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAxNy1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzAxODpcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDE5LVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgczM5MCBLVk0gQ01BIEJpdHMgU2V0dGluZyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY29uZmlybWluZyB3aGF0IEkgc3VzcGVjdGVkLiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AgKmlzKiBpbmRlZWQgaW52b2tlZCB0aHJvdWdoIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIHBhdGguIFRoaXMgbWVhbnMgdGhhdCBmdW5jdGlvbmFsaXR5IGlzIHJlYWNoYWJsZSBmcm9tIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpOb3csIHRoYXQmIzM5O3Mgc2V0dGxlZC4gVGhlIHF1ZXN0aW9uIHRoYXQgaGFzIGFyaXNlbiBpcyB0byBkZXRlcm1pbmUgd2hhdCBwcm9jZXNzIGNhdXNlcyB0aGlzIHNwZWNpZmljIGlvY3RsLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgZ3V0cy4gSXQgaXMgdGltZSB0byBzZWUgd2hlcmUgYGdtYXBfY3JlYXRlX3NoYWRvd2AgZml0cyBpbnRvIGFsbCBvZiB0aGlzLiBNeSBmb2N1cyBpcyBub3cgb24gbWFwcGluZyBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aG9zZSB0d28gY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnbWFwX2NyZWF0ZV9zaGFkb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYz0xMzAxPXN0YXRpYyBpbnQgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2cpXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMyMy0vKipcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEzMjQ6ICogZ21hcF9jcmVhdGVfc2hhZG93KCkgLSBDcmVhdGUvZmluZCBhIHNoYWRvdyBndWVzdCBhZGRyZXNzIHNwYWNlLlxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMyNS0gKiBAbWM6IFRoZSBjYWNoZSB0byB1c2UgdG8gYWxsb2NhdGUgZGF0IHRhYmxlcy5cbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzQwLSAqL1xuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTM0MTpzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZW50LFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0Mi1cdFx0XHRcdHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9MTA4PXZvaWQgX2dtYXBfaGFuZGxlX3ZzaWVfdW5zaGFkb3dfZXZlbnQoc3RydWN0IGdtYXAgKnBhcmVudCwgZ2ZuX3QgZ2ZuKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwOTpzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCxcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTExMC1cdFx0XHRcdHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpO1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEzMDA9c3RhdGljIHN0cnVjdCBnbWFwICphY3F1aXJlX2dtYXBfc2hhZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEzMjktYWdhaW46XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMzMwOlx0Z21hcCA9IGdtYXBfY3JlYXRlX3NoYWRvdyh2Y3B1LVx1MDAzZWFyY2gubWMsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgYXNjZSwgZWRhdCk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzMxLVx0aWYgKElTX0VSUihnbWFwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDA4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiDigJMgQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGlzIHVzZWQgaW4gYHZzaWUuY2AsIGFuZCB0aGF0JiMzOTtzIGEga2V5IGZpbGUgZm9yIHVuZGVyc3RhbmRpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBNeSBicmFpbiBpbW1lZGlhdGVseSB3YW50cyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyB1c2Ugd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWMgbG9jYXRpb24uIEkgYW0gc3VyZSB0aGVyZSBhcmUgb3RoZXIgdXNlcywgYnV0IHRoaXMgaXMgY2xlYXJseSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZS4gQSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHByb2Nlc3MgZm9yIGEgZ3Vlc3Qgc3RhcnQgYW5kIHN0b3AsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgRy1tYXAgaXMgY3JlYXRlZCwgdXBkYXRlZCBhbmQgZGVsZXRlZC4KCkdpdmVuIHRoYXQgY29udGV4dCwgaXQgbWFrZXMgc2Vuc2UgdG8gdGhlbiBzaGlmdCBmb2N1cyB0byBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLiBUaGlzIGZ1bmN0aW9uIHNvdW5kcyBsaWtlIGEgbG9naWNhbCBwb2ludCB0byBzZWUgaG93IHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29udGV4dCAoYW5kIHNwZWNpZmljYWxseSB0aGUgc2hhZG93IEctbWFwIGlmIEkgaGFkIHRvIGd1ZXNzKSBpcyBoYW5kbGVkIGR1cmluZyBhIG1pZ3JhdGlvbiBzdG9wLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCByZXNvdXJjZXMgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd291bGQgbmVlZCB0byBiZSBjbGVhbmVkIHVwIG9yIHRyYW5zaXRpb25lZCBhcHByb3ByaWF0ZWx5IGR1cmluZyBhIG1pZ3JhdGlvbiBzdG9wLCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGdtYXBfY3JlYXRlX3NoYWRvd2AgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjExPXN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjIxLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNyY3UgaGVsZCB0byBhdm9pZCByYWNlcyBvbiBtZW1zbG90cywgYW5kIHdpdGhcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIyOiAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyMjMtICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIyNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzAtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI3MTpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjcyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTI5OD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMzA4LVx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RPUDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMzA5Olx0XHRyZXMgPSBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEzMTAtXHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzUxPWludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzkwLVx0ICAgICEobmV3LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc5MTpcdFx0V0FSTihrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3OTItXHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGVcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipUcmFjaW5nIE1pZ3JhdGlvbiBTdG9wcyBpbiBLVk0vczM5MHgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtaWdyYXRpb24gaXMgc3RvcHBlZCBpbiB0aGUgS1ZNL3MzOTB4IGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gTm93LCB3aGVyZSBpcyAqdGhhdCogY2FsbGVkIGZyb20/IExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgdGVsbHMgbWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCB3aGljaCBJIHJlbWVtYmVyIGlzIGFuIGlvY3RsIGNhbGwsIGFuZCBhbHNvIGZyb20gYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAuIFRoYXQgc2Vjb25kIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgbWlncmF0aW9uIG1pZ2h0IGJlIGludGVycnVwdGVkIGR1cmluZyBtZW1vcnkgcHJlcGFyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlIGlmIHRoZXJlIGFyZSBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuCgpIbW0sIEkgc2hvdWxkIHByb2JhYmx5IHVuZGVyc3RhbmQgdGhlIGBoYW5kbGVfZXNzYWAgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCBtaWdodCByZWxhdGUgdG8gYW55IG1pZ3JhdGlvbiBpc3N1ZXMgdGhhdCBvY2N1ciB3aGVuIHVzaW5nIGl0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gbmV4dCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYz0xMTkwPXN0YXRpYyB2b2lkIF9lc3NhX2NsZWFyX2Nicmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICpjYnJsLCBpbnQgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTUtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjE2OnN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxNy17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4Mz1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjkyLVx0Y2FzZSAweGFiOlxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5MzpcdFx0cmV0dXJuIGhhbmRsZV9lc3NhKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5NC1cdGNhc2UgMHhhZjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluc3RydWN0aW9uIEhhbmRsZXIgYGhhbmRsZV9lc3NhYCoqCgpPa2F5LCBzbyBgaGFuZGxlX2Vzc2FgIGlzIHRyaWdnZXJlZCBieSBga3ZtX3MzOTBfaGFuZGxlX2I5YCwgd2hpY2ggbWFrZXMgaXQgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlci4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBmb2N1cy4gTXkgYXR0ZW50aW9uIHNob3VsZCBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBnbWFwX2NyZWF0ZV9zaGFkb3dgLCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCwgb2YgY291cnNlLCBgaGFuZGxlX2Vzc2FgIGl0c2VsZi4KCldhaXQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQuIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYSBzdGFuZGFyZCBLVk0gZnVuY3Rpb24uIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCBpcyBhIHNwZWNpZmljIGlvY3RsIGNhbGwsIHdoaWNoIGlzIHZlcnkgcmVsZXZhbnQuIEFuZCBhZ2FpbiwgYGhhbmRsZV9lc3NhYCBpcyB0aGUgdGFyZ2V0IGluc3RydWN0aW9uIGhhbmRsZXIuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYEtWTWAgaXMgdGhlIGdlbmVyYWwgY2F0ZWdvcnksIG9idmlvdXNseS4gQnV0IGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBDTU1BIG9yIHRoZSBFU0EgaW5zdHJ1Y3Rpb24gc2V0IHRoYXQgbWlnaHQgYWZmZWN0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYmVoYXZlPyBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBkaWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q01NQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUzM5MCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHJlYWN0aW9uIHdhcyAmIzM0O05vLCYjMzQ7IGJ1dCB0aGVuIEkgc2F3IGBLVk1fUzM5MF9VQ09OVFJPTGAgYW5kIG15IG1pbmQgc2hpZnRlZC4gVGhpcyBwYXRjaC4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBJIHNlZSB0aGUgY2hhbmdlczogdGhlIHJlbW92YWwgb2YgdGhlIGdtYXAgYXNzaWdubWVudCBjb25kaXRpb25hbCBpbnNpZGUgdGhlIGBrdm1faXNfdWNvbnRyb2xgIGNoZWNrLCBhbmQgdGhlIHN1YnNlcXVlbnQgZ21hcCBpbml0aWFsaXphdGlvbi4gSXQgc2VlbXMgdGhlc2UgY2hhbmdlcyBhcmUgKmFwcGxpZWQgdG8gYm90aCogdWNvbnRyb2wgYW5kIG5vbi11Y29udHJvbCBjb25maWd1cmF0aW9ucy4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhpcyBpc24mIzM5O3QganVzdCBhIHVjb250cm9sLXNwZWNpZmljIGlzc3VlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIElzIHRoaXMgYSBicm9hZGVyIHJlZmFjdG9yaW5nLCBvciBhIGNyaXRpY2FsIGZpeCB0aGF0IGFmZmVjdHMgYWxsIGBLVk1fUzM5MGAgc2V0dXBzPyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gVGltZSB0byBjaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipLVk0gQ29uZmlndXJhdGlvbiBhbmQgRGF0YSBSYW5nZSBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29yZSBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGRlZmluaXRlbHkgY2VudGVyZWQgYXJvdW5kIGBLVk1gLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlIG5lZWQgdG8gdW5kZXJzdGFuZC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHNvbWV0aGluZyBzcGVjaWZpYywgc3BlY2lmaWNhbGx5IHRoYXQgYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCBmdW5jdGlvbiBvciBtb2R1bGUgb3Igd2hhdGV2ZXIgaXQgaXMuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgYSBrZXkgYXJlYSBmb3IgZXhwbG9yYXRpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhhdCBkb2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbSwgdG8gcmVhbGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIEtWTSBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZGVwZW5kZW5jaWVzIGFuZCBvdXRwdXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXRfY3JzdGVfd2Fsa19yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZGF0LmM9NTE0PXN0YXRpYyBsb25nIGRhdF9wdGVfd2Fsa19yYW5nZShnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZGF0X3dhbGsgKncpXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy01MzMtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjUzNDpzdGF0aWMgbG9uZyBkYXRfY3JzdGVfd2Fsa19yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBzdHJ1Y3QgY3JzdF90YWJsZSAqdGFibGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTUzNS1cdFx0XHRcdCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy01NjctXHRcdFx0aWYgKCFpc19wbWQoY3JzdGUpKVxuYXJjaC9zMzkwL2t2bS9kYXQuYzo1Njg6XHRcdFx0XHRyYyA9IGRhdF9jcnN0ZV93YWxrX3JhbmdlKG1heChzdGFydCwgY3VyKSwgbWluKGVuZCwgbmV4dCksXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTU2OS1cdFx0XHRcdFx0XHRcdCAgX2RlcmVmZXJlbmNlX2Nyc3RlKGNyc3RlKSwgd2Fsayk7XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz01OTU9bG9uZyBfZGF0X3dhbGtfZ2ZuX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHVuaW9uIGFzY2UgYXNjZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTYxMi1cbmFyY2gvczM5MC9rdm0vZGF0LmM6NjEzOlx0cmV0dXJuIGRhdF9jcnN0ZV93YWxrX3JhbmdlKHN0YXJ0LCBtaW4oZW5kLCBhc2NlX2VuZChhc2NlKSksIHRhYmxlLCBcdTAwMjZ3YWxrKTtcbmFyY2gvczM5MC9rdm0vZGF0LmMtNjE0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4ODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgZm9yIEtWTSBzMzkwIEJ1ZyBGaXhlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgdGhlIGNhbGwgY2hhaW4gdGhhdCBzZWVtcyBtb3N0IHJlbGV2YW50IHN0YXJ0cyB3aXRoIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLiBUaGF0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5OiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgLCBgZ21hcF9jcmVhdGVfc2hhZG93YCwgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhbmQgYGhhbmRsZV9lc3NhYCwgcGx1cyB0aGUgYWZvcmVtZW50aW9uZWQgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gU2luY2UgYF9kYXRfd2Fsa19nZm5fcmFuZ2VgIGlzIHRoZSBleHBvcnRlZCB2ZXJzaW9uLCBidXQgYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCBpcyB0aGUgc3RhdGljLCBJJiMzOTtsbCBzdGljayB3aXRoIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgZm9yIGNsYXJpdHkuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOgoKMS4gIEluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAsIHRoZXkgYWRkZWQgYW4gYGlmIChyYykgYnJlYWs7YCBhZnRlciBgZGF0X3B0ZV93YWxrX3JhbmdlYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgYnVnIHdoZXJlIGByY2Agd2FzIGdldHRpbmcgc3RvbXBlZCBvbiBvciBpZ25vcmVkLiBDbGFzc2ljLgoyLiAgYGdtYXBfY3JlYXRlX3NoYWRvd2AgaXMgY2hhbmdpbmcgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIHRvIGB3cml0ZV90cnlsb2NrYCBhbmQgcmV0dXJuaW5nIGAtRUFHQUlOYCBvbiBmYWlsdXJlLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlIHRvIGF2b2lkIGEgZGVhZGxvY2ssIEkgY2FuIHNlZSB0aGF0LgozLiAgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBoYXMgYSBgV1JJVEVfT05DRWAgZm9yIGBrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlY2AsIHdoaWNoIG1pdGlnYXRlcyBhIGRhdGEgcmFjZS4gQWx3YXlzIGdvb2QgdG8gc2VlIHRob3NlLgo0LiAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCBub3cgY2hlY2tzIGAha3ZtLSZndDthcmNoLnVzZV9jbW1hYCBhbmQgcmV0dXJucyBlYXJseS4gVGhhdCYjMzk7cyB0YXJnZXRlZCBidWcgZml4aW5nIOKAkyBwcmV2ZW50aW5nIHRoZSBtaWdyYXRpb24gc3RvcCBmcm9tIGRvaW5nIHRoaW5ncyBpdCBzaG91bGRuJiMzOTt0IHdoZW4gQ01NQSBpc24mIzM5O3QgaW4gcGxheS4KNS4gIEluIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgdGhleSYjMzk7cmUgcmV0dXJuaW5nIGByICZsdDs9IDAgPyByIDogLUVGQVVMVDtgLiBGaXhpbmcgdGhhdCBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgYnVnIHRvIHVzZXJzcGFjZSBpcyBhIGdvb2QgdGhpbmcgdG8gZml4Lgo2LiAgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgLyBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGFyZSBqdXN0IG1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgdmNwdS0mZ3Q7YXJjaC5nbWFwYC4KNy4gIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgbm93IGNhbGxzIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgLiBUaGF0JiMzOTtzIHRoYXQgZnVuY3Rpb24gY2FsbCB3ZSBtZW50aW9uZWQgZWFybGllci4KOC4gIGBoYW5kbGVfZXNzYWAgbm93IGluY2x1ZGVzIGBzbG90c19sb2NrYCBhcm91bmQgYF9fZG9fZXNzYWAuIE1ha2VzIHNlbnNlIHRvIGFkZCB0aGF0IGxvY2sgdGhlcmUuCgpMb29rcyBsaWtlIGFsbCB0aGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc291bmQgYW5kIGFkZHJlc3MgcmVhbCBidWdzIHdpdGhpbiB0aGUgS1ZNIHMzOTAgY29udGV4dC4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGlzIGBLVk1gLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2vigKYgeWVzLCBLVk0gaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBuZWVkZWQuCgpOb3csIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG9uIHdoZXRoZXIgYEtWTV9TMzkwX1VDT05UUk9MYCBoYXMgYW55dGhpbmcgdG8gZG8gd2l0aCB0aGVzZSBjaGFuZ2VzLiBMb29raW5nIGF0IHRoZSBjb2RlOgpgYGBjCi0JaWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewotCQl2Y3B1LSZndDthcmNoLmdtYXAgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcDsKJiM0MzsJaWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKIAkJc2NhX2FkZF92Y3B1KHZjcHUpOwotCX0KYGBgClRoZSBwYXRjaCBoYXMgY29kZSB0aGF0IGNoZWNrcyBga3ZtX2lzX3Vjb250cm9sYCByZWdhcmRsZXNzIG9mIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHNvLCBldmVuIHRob3VnaCB0aGUgY29kZSBwYXRoIGlzIGV4ZWN1dGVkIHJlZ2FyZGxlc3MsIEkgbmVlZCB0byBjaGVjayBob3cgYGt2bV9pc191Y29udHJvbGAgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2lzX3Vjb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9nbWFwLmM9ODk9c3RhdGljIHZvaWQgZ21hcF9hZGRfY2hpbGQoc3RydWN0IGdtYXAgKnBhcmVudCwgc3RydWN0IGdtYXAgKmNoaWxkKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExMzpcdGlmIChrdm1faXNfdWNvbnRyb2wocGFyZW50LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTQtXHRcdGNsZWFyX2JpdChHTUFQX0ZMQUdfT1dOU19QQUdFVEFCTEVTLCBcdTAwMjZjaGlsZC1cdTAwM2VmbGFncyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MTM9aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTYtXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjYxNzpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI4MDk9c3RhdGljIGludCBmbGljX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODIyLVx0Y2FzZSBLVk1fREVWX0ZMSUNfQVBGX0VOQUJMRTpcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgyMzpcdFx0aWYgKGt2bV9pc191Y29udHJvbChkZXYtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgyNC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MjctXHRjYXNlIEtWTV9ERVZfRkxJQ19BUEZfRElTQUJMRV9XQUlUOlxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODI4Olx0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGRldi1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODI5LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzExMj1pbnQga3ZtX3NldF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxMjEtXHRjYXNlIEtWTV9JUlFfUk9VVElOR19TMzkwX0FEQVBURVI6XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMxMjI6XHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzEyMy1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NjAyPWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY0NS1cdFx0ciA9IDA7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NjQ2Olx0XHRpZiAoaHBhZ2UgXHUwMDI2XHUwMDI2ICEoa3ZtIFx1MDAyNlx1MDAyNiBrdm1faXNfdWNvbnRyb2woa3ZtKSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjQ3LVx0XHRcdHIgPSAxO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NTAtXHRcdHIgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjY1MTpcdFx0aWYgKGhwYWdlXzJnIFx1MDAyNlx1MDAyNiAhKGt2bSBcdTAwMjZcdTAwMjYga3ZtX2lzX3Vjb250cm9sKGt2bSkpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY1Mi1cdFx0XHRyID0gMTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NzQ2PWludCBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc1My1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo3NTQ6XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Nzg4PWludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy04OTItXHRcdFx0ciA9IC1FQlVTWTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo4OTM6XHRcdGVsc2UgaWYgKCFocGFnZSB8fCBrdm0tXHUwMDNlYXJjaC51c2VfY21tYSB8fCBrdm1faXNfdWNvbnRyb2woa3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy04OTQtXHRcdFx0ciA9IC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTkxMy1cdFx0XHRyID0gLUVCVVNZO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjkxNDpcdFx0fSBlbHNlIGlmICghaHBhZ2VfMmcgfHwga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEgfHwga3ZtX2lzX3Vjb250cm9sKGt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05MTUtXHRcdFx0ciA9IC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTk5Mz1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwNDAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTA0MTpcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwNDItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM0MDE9dm9pZCBrdm1fYXJjaF92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDA4LVx0a3ZtX2NsZWFyX2FzeW5jX3BmX2NvbXBsZXRpb25fcXVldWUodmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQwOTpcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDEwLVx0XHRzY2FfZGVsX3ZjcHUodmNwdSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTItXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQxMzpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxNC1cdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MDgtXHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYwOTpcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjEwLVx0XHRzY2FfYWRkX3ZjcHUodmNwdSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM2OTk9c3RhdGljIGludCBrdm1fczM5MF92Y3B1X3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzcyMy1cdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VlY2IgfD0gRUNCX1RFO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3MjQ6XHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzcyNS1cdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VlY2IgfD0gRUNCX1NQRUNJO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzg2PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNzg3LXtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNzg4Olx0aWYgKCFrdm1faXNfdWNvbnRyb2woa3ZtKSBcdTAwMjZcdTAwMjYgIXNjYV9jYW5fYWRkX3ZjcHUoa3ZtLCBpZCkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc4OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM3OTM9aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg0Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODQ4Olx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODQ5LVx0XHRyYyA9IC1FTk9NRU07XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM4Njgtb3V0X3Vjb250cm9sX3VuaW5pdDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODY5Olx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODcwLVx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQzMTc9c3RhdGljIGludCB2Y3B1X3Vjb250cm9sX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90ICpnYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDMyMC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MzIxOlx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MzIyLVx0XHRyYyA9IGdtYXBfdWNhc190cmFuc2xhdGUodmNwdS1cdTAwM2VhcmNoLm1jLCB2Y3B1LVx1MDAzZWFyY2guZ21hcCwgZ2FkZHIpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NTUxPXN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU2NC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTY1Olx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU2Ni1cdFx0cmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUxNz1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1OTctXHRcdHIgPSAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1OTg6XHRcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTk5LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjE1LVx0XHRyID0gLUVJTlZBTDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NjE2Olx0XHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxNy1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTczMj12bV9mYXVsdF90IGt2bV9hcmNoX3ZjcHVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTczNS1cdGlmICgodm1mLVx1MDAzZXBnb2ZmID09IEtWTV9TMzkwX1NJRV9QQUdFX09GRlNFVClcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzM2Olx0XHQgXHUwMDI2XHUwMDI2IChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MzctXHRcdHZtZi1cdTAwM2VwYWdlID0gdmlydF90b19wYWdlKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzUxPWludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzU1LXtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzU2Olx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pIFx1MDAyNlx1MDAyNiBuZXcgXHUwMDI2XHUwMDI2IG5ldy1cdTAwM2VpZCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01ODc0PWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg3OS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODgwOlx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg4MS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTExMT1zdGF0aWMgaW5saW5lIGludCBpc192Y3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0xMTUtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6MTE2OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9pc191Y29udHJvbChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMTE3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTkKCQkJCQkJCW91dHB1dDogMzA5CgkJCQkJCQl0aG91Z2h0czogODcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYXNvbmluZyBmb3IgS1ZNL3MzOTAgUGF0Y2ggVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQgdG91Y2hlcyBga3ZtX2lzX3Vjb250cm9sYC4gVGhpcyByaW5ncyBhIGJlbGwg4oCTIHRoYXQmIzM5O3MgY29udHJvbGxlZCBieSB0aGUgYEtWTV9TMzkwX1VDT05UUk9MYCBjb25maWcuIFNpbmNlIHRoZSBwYXRjaCBjb2RlIGlzIHVzaW5nIGBrdm1faXNfdWNvbnRyb2xgLCBJIHNob3VsZCBwcm9iYWJseSBlbmFibGUgdGhhdCBjb25maWcgdG8gZW5zdXJlIGJvdGggY29kZSBwYXRocyBhcmUgdGVzdGVkIGZ1bGx5LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzIGF2YWlsYWJsZSBpbiBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYC4gWXVwLCB0aGVyZSBpdCBpczogYCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lcyYjMzQ7YC4gUGVyZmVjdC4gU28gSSYjMzk7bGwgYWRkIGBLVk1fUzM5MF9VQ09OVFJPTGAgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIG5ldyBgRW5hYmxlQ29uZmlnc2Agd2lsbCBpbmNsdWRlIGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgdGhlIGZ1enplcnMgYXJlIGhpdHRpbmcgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZToKCiogICBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgCiogICBgZ21hcF9jcmVhdGVfc2hhZG93YAoqICAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYAoqICAgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgCiogICBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gCiogICBgaGFuZGxlX2Vzc2FgCgpga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzIGEgc3RhbmRhcmQgS1ZNIGhvb2ssIGJ1dCBub3QgYSBob3QgcGF0aC4gYGhhbmRsZV9lc3NhYCBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlciwgd2hpY2ggY291bGQgYmUgZnJlcXVlbnRseSBjYWxsZWQgZGVwZW5kaW5nIG9uIHRoZSBndWVzdCYjMzk7cyB3b3JrbG9hZCwgYnV0IGl0JiMzOTtzIHNwZWNpZmljIGVub3VnaC4gYGdtYXBfY3JlYXRlX3NoYWRvd2AgaXMgcmVsZXZhbnQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gIGlzIGltcG9ydGFudCBmb3IgbWlncmF0aW9uLiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AgaXMgYW4gaW9jdGwgY2FsbCwgd2hpY2ggaXMgd29ydGggdGVzdGluZy4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCBpcyBhIHBhZ2UgdGFibGUgd2FsayBmdW5jdGlvbiBhbmQgaXMgc3BlY2lmaWNhbGx5IG1vZGlmaWVkIGhlcmUsIHNvIGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgYSBmb2N1cy4KCkFoLCBJIG1pc3NlZCBvbmUhIFRoZXJlJiMzOTtzIGFsc28gYGNtbWFfZF9jb3VudF9wdGVgLCBhIHN0YXRpYyBmdW5jdGlvbiBhZGRlZCBpbiB0aGUgcGF0Y2guIExldCBtZSBhZGQgdGhhdCB0byB0aGUgbGlzdC4gSSBhbHNvIG5vdGljZWQgdGhhdCBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIGlzIGFsc28gc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIHVwZGF0ZSB0aGUgZm9jdXMgc3ltYm9sczoKCiogICBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgCiogICBgZ21hcF9jcmVhdGVfc2hhZG93YAoqICAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYAoqICAgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgCiogICBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gCiogICBgaGFuZGxlX2Vzc2FgCiogICBgY21tYV9kX2NvdW50X3B0ZWAKClJpZ2h0LCBub3csIGFyZSBgS1ZNYCBhbmQgYEtWTV9TMzkwX1VDT05UUk9MYCBlbm91Z2ggdG8gY292ZXIgYWxsIHRoZSBtb2RpZmljYXRpb25zPyBZZXAsIHRob3NlIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKRmluYWxseSwgSSBuZWVkIHRvIGFydGljdWxhdGUgbXkgcmVhc29uaW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEl0IGFkZHJlc3NlcyBhIHJldHVybiBjb2RlIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgLCByZXNvbHZlcyBhIGRlYWRsb2NrIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIHVzaW5nIGB3cml0ZV90cnlsb2NrYCwgZml4ZXMgYSBkYXRhIHJhY2UgaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29ycmVjdHMgdGhlIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGVuc3VyZXMgdGhlIGNvcnJlY3QgcmV0dXJuIHZhbHVlIG9mIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYWRqdXN0cyB0aGUgdGltaW5nIG9mIGB2Y3B1LSZndDthcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSBhbGwgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBhcmUgbm93IHJlYWNoYWJsZSwgc28gZnV6emluZyB0aGVtIGlzIGNydWNpYWwuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0w8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TMzkwX1VDT05UUk9MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF0X2Nyc3RlX3dhbGtfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z21hcF9jcmVhdGVfc2hhZG93JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3NldF9jbW1hX2JpdHMmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7Y21tYV9kX2NvdW50X3B0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbi4gSXQgZml4ZXMgYSBidWcgaW4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCB3aGVyZSB0aGUgcmV0dXJuIGNvZGUgd2FzIGlnbm9yZWQsIHJlc29sdmVzIGEgZGVhZGxvY2sgaW4gYGdtYXBfY3JlYXRlX3NoYWRvd2AgYnkgdXNpbmcgYHdyaXRlX3RyeWxvY2tgLCBmaXhlcyBhIGRhdGEgcmFjZSBpbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBjb3JyZWN0cyBtaWdyYXRpb24gc3RvcCBsb2dpYyBpbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYWRqdXN0cyB0aGUgdGltaW5nIG9mIGB2Y3B1LVx1MDAzZWFyY2guZ21hcGAgYXNzaWdubWVudCwgYWRkcyBsb2dpYyB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBhZGRzIGxvY2tpbmcgaW4gYGhhbmRsZV9lc3NhYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEtWTSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjE2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgS1ZNIEZlYXR1cmUqKgoKUmlnaHQsIHNvIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXNuJiMzOTt0IHNob3dpbmcgdXAgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGF0JiMzOTtzLi4uIHVuZXhwZWN0ZWQuIEkgY291bGQgaGF2ZSBzd29ybiBJJiMzOTtkIHNlZW4gaXQgbWVudGlvbmVkIHNvbWV3aGVyZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgbWF5YmUgYW4gb2xkIHBhdGNoIG9yIGEgZHJhZnQgcHJvcG9zYWwuIE9rYXksIGZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE5vIHBvaW50IGluIGFzc3VtaW5nIGFueXRoaW5nIGhlcmUuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGlzIGFjdHVhbGx5IHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSBvciBhIHR5cG8gc29tZXdoZXJlIGluIG15IG5vdGVzLiBCYWNrIHRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIGEgY2xvc2VyIGxvb2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTczCgkJCQkJCQlvdXRwdXQ6IDI5NgoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGNlcnRhaW4gdGhhdCBmZWF0dXJlIHdhc24mIzM5O3QgZGVmaW5lZCwgYnV0IG15IHF1aWNrIHNlYXJjaCBqdXN0IHlpZWxkZWQgKm5vdGhpbmcqLiBUaGUgZnV6emVyIGlzIGNvbXBsYWluaW5nIGFib3V0IGEgbWlzc2luZyBjb25maWd1cmF0aW9uLCBidXQgSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IGl0IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGlzIGlzIHN0cmFuZ2UuIFdoeSBpcyBgc2V0LXJlc3VsdHNgIHRlbGxpbmcgbWUgaXQmIzM5O3Mgbm90IHRoZXJlPwoKSG1tLCBJIGJldCBJIGtub3cgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIE15IGZpcnN0IGd1ZXNzIGlzIHRoYXQgdGhlIGZ1enppbmcgc2V0dXAgaXNuJiMzOTt0IHVzaW5nIHRoZSByaWdodCBhcmNoaXRlY3R1cmUuIE1heWJlIGl0JiMzOTtzIGNvbmZpZ3VyZWQgZm9yIHNvbWV0aGluZyBkaWZmZXJlbnQuIE9yIHBlcmhhcHMgdGhlIHRvb2wgdGhhdCYjMzk7cyBjaGVja2luZyBmb3IgdGhlIGV4aXN0ZW5jZSBpcyBvbmx5IHVzaW5nIHRoZSBnbG9iYWwgS2NvbmZpZyBpbmRleCwgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgbWlzc2luZyBmcm9tIHRoYXQgdmlldy4KCkFscmlnaHQsIG5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzLiBTaW5jZSBLVk0gaXMgZGVmaW5pdGVseSB0aGVyZSwgSSYjMzk7bGwganVzdCByZWx5IG9uIHRoYXQgaW5zdGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9jcnN0ZV93YWxrX3JhbmdlJiMzNDssCiAgICAmIzM0O2dtYXBfY3JlYXRlX3NoYWRvdyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2NtbWFfZF9jb3VudF9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEl0IGZpeGVzIGEgYnVnIGluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgd2hlcmUgdGhlIHJldHVybiBjb2RlIHdhcyBpZ25vcmVkLCByZXNvbHZlcyBhIGRlYWRsb2NrIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGJ5IHVzaW5nIGB3cml0ZV90cnlsb2NrYCwgZml4ZXMgYSBkYXRhIHJhY2UgaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29ycmVjdHMgbWlncmF0aW9uIHN0b3AgbG9naWMgaW4gYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGFkanVzdHMgdGhlIHRpbWluZyBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfY3JzdGVfd2Fsa19yYW5nZSYjMzQ7LAogICAgJiMzNDtnbWFwX2NyZWF0ZV9zaGFkb3cmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfc2V0X2NtbWFfYml0cyYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNzYSYjMzQ7LAogICAgJiMzNDtjbW1hX2RfY291bnRfcHRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIHdoZXJlIHRoZSByZXR1cm4gY29kZSB3YXMgaWdub3JlZCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCBieSB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhZGp1c3RzIHRoZSB0aW1pbmcgb2YgYHZjcHUtXHUwMDNlYXJjaC5nbWFwYCBhc3NpZ25tZW50LCBhZGRzIGxvZ2ljIHRvIGRlY3JlbWVudCBgY21tYV9kaXJ0eV9wYWdlc2AgaW4gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kIGFkZHMgbG9ja2luZyBpbiBgaGFuZGxlX2Vzc2FgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgS1ZNIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjE3LjQ2NTQ2ODQzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTMwNzU2ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhdF9jcnN0ZV93YWxrX3JhbmdlXCIsXG4gICAgXCJnbWFwX2NyZWF0ZV9zaGFkb3dcIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImNtbWFfZF9jb3VudF9wdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbi4gSXQgZml4ZXMgYSBidWcgaW4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCB3aGVyZSB0aGUgcmV0dXJuIGNvZGUgd2FzIGlnbm9yZWQsIHJlc29sdmVzIGEgZGVhZGxvY2sgaW4gYGdtYXBfY3JlYXRlX3NoYWRvd2AgYnkgdXNpbmcgYHdyaXRlX3RyeWxvY2tgLCBmaXhlcyBhIGRhdGEgcmFjZSBpbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBjb3JyZWN0cyBtaWdyYXRpb24gc3RvcCBsb2dpYyBpbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYWRqdXN0cyB0aGUgdGltaW5nIG9mIGB2Y3B1LVxcdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjoxNy40NjU0NzQwNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNjI2MjQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU4Yzc5ZWE0YWMyNGM0MDE3NGE4OTNkZGJiNTc4NWE4MDJhMmQ1YjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAxODoxNjoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbmluZGV4IDVmMTk2MGVjOTgyZDA0Li5lZDQyNTlkMTc2Mjk1NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbkBAIC01NzAsNiArNTcwLDggQEAgc3RhdGljIGxvbmcgZGF0X2Nyc3RlX3dhbGtfcmFuZ2UoZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgc3RydWN0IGNyc3RfdGFibGUgKnRhYmxcXG4gXFx0XFx0XFx0ZWxzZSBpZiAod2Fsay1cXHUwMDNlb3BzLVxcdTAwM2VwdGVfZW50cnkpXFxuIFxcdFxcdFxcdFxcdHJjID0gZGF0X3B0ZV93YWxrX3JhbmdlKG1heChzdGFydCwgY3VyKSwgbWluKGVuZCwgbmV4dCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRlcmVmZXJlbmNlX3BtZChjcnN0ZS5wbWQpLCB3YWxrKTtcXG4rXFx0XFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHJldHVybiByYztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xcbmluZGV4IDI5OGZiYWVjZWMyOGQ1Li44YWJiNGY1NWIzMDZiYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2dtYXAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXFxuQEAgLTEzNzQsOCArMTM3NCwxMyBAQCBzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZVxcbiBcXHRcXHRcXHQvKiBPbmx5IGFsbG93IG9uZSByZWFsLXNwYWNlIGdtYXAgc2hhZG93LiAqL1xcbiBcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNnLCBcXHUwMDI2cGFyZW50LVxcdTAwM2VjaGlsZHJlbiwgbGlzdCkge1xcbiBcXHRcXHRcXHRcXHRpZiAoc2ctXFx1MDAzZWd1ZXN0X2FzY2Uucikge1xcbi1cXHRcXHRcXHRcXHRcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNnBhcmVudC1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHdyaXRlX3RyeWxvY2soXFx1MDAyNnBhcmVudC1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaykpIHtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Z21hcF91bnNoYWRvdyhzZyk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2cGFyZW50LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Z21hcF9wdXQobmV3KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XFxuK1xcdFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5pbmRleCAyM2M4MTc1OTVlMjhkNS4uZGVlYzY3M2E5MjA2NTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTk1NSw3ICs5NTUsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX0NBUF9TMzkwX1VTRVJfT1BFUkVYRUM6XFxuIFxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIiVzXFxcIiwgXFxcIkVOQUJMRTogQ0FQX1MzOTBfVVNFUl9PUEVSRVhFQ1xcXCIpO1xcbi1cXHRcXHRrdm0tXFx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYyA9IDE7XFxuK1xcdFxcdFdSSVRFX09OQ0Uoa3ZtLVxcdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMsIDEpO1xcbiBcXHRcXHRpY3B0X29wZXJleGNfb25fYWxsX3ZjcHVzKGt2bSk7XFxuIFxcdFxcdHIgPSAwO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMTI4MCw4ICsxMjgwLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHQgKiBQR1NURXMgbWlnaHQgaGF2ZSBjbW1hX2Qgc2V0LlxcbiBcXHQgKi9cXG4gXFx0V1JJVEVfT05DRShrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUsIDApO1xcbi1cXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hKVxcbi1cXHRcXHRrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KGt2bSwgS1ZNX1JFUV9TVE9QX01JR1JBVElPTik7XFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUT1BfTUlHUkFUSU9OKTtcXG4gXFx0LyogQ2xlYXIgY21tYV9kIG9uIGFsbCBleGlzdGluZyBQR1NURXMgYW5kIHNldCBjbW1hX2RpcnR5X3BhZ2VzIHRvIDAuICovXFxuIFxcdGdtYXBfc2V0X2NtbWFfYWxsX2NsZWFuKGt2bS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4gXFx0YXRvbWljNjRfc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcywgMCk7XFxuQEAgLTIzODQsNyArMjM4Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcbiBcXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzYwNCwxMCArMzYwNiw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWVwZHggPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZXBkeDtcXG4gXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbi1cXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5nbWFwO1xcbitcXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRzY2FfYWRkX3ZjcHUodmNwdSk7XFxuLVxcdH1cXG4gXFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXFx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxcbiBcXHQgICAgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcXG5AQCAtMzg1MCw2ICszODUwLDggQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9uZXdfY2hpbGQodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xcbiBcXHRcXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2guZ21hcClcXG4gXFx0XFx0XFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5nbWFwO1xcbiBcXHR9XFxuIFxcbiBcXHRWTV9FVkVOVCh2Y3B1LVxcdTAwM2Vrdm0sIDMsIFxcXCJjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXFxcIixcXG5AQCAtNTc5MiwxMSArNTc5NCwxOSBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4re1xcbitcXHRpZiAocGdzdGVfb2YocHRlcCktXFx1MDAzZWNtbWFfZClcXG4rXFx0XFx0YXRvbWljNjRfZGVjKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxcbiB7XFxuK1xcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcXG4gXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXG5AQCAtNTgxMCw2ICs1ODIwLDEyIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHR9XFxuIFxcbiBcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4rXFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEpIHtcXG4rXFx0XFx0XFx0X2RhdF93YWxrX2dmbl9yYW5nZShvbGQtXFx1MDAzZWJhc2VfZ2ZuLCBvbGQtXFx1MDAzZWJhc2VfZ2ZuICsgb2xkLVxcdTAwM2VucGFnZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgXFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0c3dpdGNoIChjaGFuZ2UpIHtcXG4gXFx0XFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxcbiBcXHRcXHRcXHRyYyA9IGRhdF9kZWxldGVfc2xvdChtYywga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIG9sZC1cXHUwMDNlYmFzZV9nZm4sIG9sZC1cXHUwMDNlbnBhZ2VzKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbmluZGV4IGFkMGRkYzQzM2E3M2MzLi5iMGYzYTQ3YjE4MjlmMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuQEAgLTEyNjAsOCArMTI2MCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xcbiBcXHRcXHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuLVxcdFxcdFxcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcXG4rXFx0XFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19sb2NrKVxcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4rXFx0XFx0XFx0XFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjoxOC4zNzI3MzY3MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjIzNDc0MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhdF9jcnN0ZV93YWxrX3JhbmdlXCIsXG4gICAgXCJnbWFwX2NyZWF0ZV9zaGFkb3dcIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImNtbWFfZF9jb3VudF9wdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbi4gSXQgZml4ZXMgYSBidWcgaW4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCB3aGVyZSB0aGUgcmV0dXJuIGNvZGUgd2FzIGlnbm9yZWQsIHJlc29sdmVzIGEgZGVhZGxvY2sgaW4gYGdtYXBfY3JlYXRlX3NoYWRvd2AgYnkgdXNpbmcgYHdyaXRlX3RyeWxvY2tgLCBmaXhlcyBhIGRhdGEgcmFjZSBpbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBjb3JyZWN0cyBtaWdyYXRpb24gc3RvcCBsb2dpYyBpbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYWRqdXN0cyB0aGUgdGltaW5nIG9mIGB2Y3B1LVxcdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4Yzc5ZWE0YWMyNGM0MDE3NGE4OTNkZGJiNTc4NWE4MDJhMmQ1YjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjE2OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbmluZGV4IDVmMTk2MGVjOTgyZDA0Li5lZDQyNTlkMTc2Mjk1NCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC01NzAsNiArNTcwLDggQEAgc3RhdGljIGxvbmcgZGF0X2Nyc3RlX3dhbGtfcmFuZ2UoZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgc3RydWN0IGNyc3RfdGFibGUgKnRhYmxcbiBcdFx0XHRlbHNlIGlmICh3YWxrLVx1MDAzZW9wcy1cdTAwM2VwdGVfZW50cnkpXG4gXHRcdFx0XHRyYyA9IGRhdF9wdGVfd2Fsa19yYW5nZShtYXgoc3RhcnQsIGN1ciksIG1pbihlbmQsIG5leHQpLFxuIFx0XHRcdFx0XHRcdFx0ZGVyZWZlcmVuY2VfcG1kKGNyc3RlLnBtZCksIHdhbGspO1xuK1x0XHRcdGlmIChyYylcbitcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggMjk4ZmJhZWNlYzI4ZDUuLjhhYmI0ZjU1YjMwNmJhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMTM3NCw4ICsxMzc0LDEzIEBAIHN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlXG4gXHRcdFx0LyogT25seSBhbGxvdyBvbmUgcmVhbC1zcGFjZSBnbWFwIHNoYWRvdy4gKi9cbiBcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNnLCBcdTAwMjZwYXJlbnQtXHUwMDNlY2hpbGRyZW4sIGxpc3QpIHtcbiBcdFx0XHRcdGlmIChzZy1cdTAwM2VndWVzdF9hc2NlLnIpIHtcbi1cdFx0XHRcdFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNnBhcmVudC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRcdGlmICh3cml0ZV90cnlsb2NrKFx1MDAyNnBhcmVudC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spKSB7XG4gXHRcdFx0XHRcdFx0Z21hcF91bnNoYWRvdyhzZyk7XG4rXHRcdFx0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0XHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHRcdGdtYXBfcHV0KG5ldyk7XG4rXHRcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XG4rXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMjNjODE3NTk1ZTI4ZDUuLmRlZWM2NzNhOTIwNjU3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC05NTUsNyArOTU1LDcgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX1MzOTBfVVNFUl9PUEVSRVhFQzpcbiBcdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcIiVzXCIsIFwiRU5BQkxFOiBDQVBfUzM5MF9VU0VSX09QRVJFWEVDXCIpO1xuLVx0XHRrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjID0gMTtcbitcdFx0V1JJVEVfT05DRShrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjLCAxKTtcbiBcdFx0aWNwdF9vcGVyZXhjX29uX2FsbF92Y3B1cyhrdm0pO1xuIFx0XHRyID0gMDtcbiBcdFx0YnJlYWs7XG5AQCAtMTI4MCw4ICsxMjgwLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIFx0ICogUEdTVEVzIG1pZ2h0IGhhdmUgY21tYV9kIHNldC5cbiBcdCAqL1xuIFx0V1JJVEVfT05DRShrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSwgMCk7XG4tXHRpZiAoa3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEpXG4tXHRcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUT1BfTUlHUkFUSU9OKTtcbitcdGlmICgha3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuIFx0LyogQ2xlYXIgY21tYV9kIG9uIGFsbCBleGlzdGluZyBQR1NURXMgYW5kIHNldCBjbW1hX2RpcnR5X3BhZ2VzIHRvIDAuICovXG4gXHRnbWFwX3NldF9jbW1hX2FsbF9jbGVhbihrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbiBcdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCAwKTtcbkBAIC0yMzg0LDcgKzIzODYsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLyoqXG5AQCAtMzYwNCwxMCArMzYwNiw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZXBkeCA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZXBkeDtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXA7XG4rXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHNjYV9hZGRfdmNwdSh2Y3B1KTtcbi1cdH1cbiBcdGlmICh0ZXN0X2t2bV9mYWNpbGl0eSh2Y3B1LVx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9pbnN0cjAgfHxcbiBcdCAgICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlaWN0bCB8PSBJQ1RMX09QRVJFWEM7XG5AQCAtMzg1MCw2ICszODUwLDggQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuIFx0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5nbWFwKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xuK1x0fSBlbHNlIHtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXA7XG4gXHR9XG4gXG4gXHRWTV9FVkVOVCh2Y3B1LVx1MDAzZWt2bSwgMywgXCJjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXCIsXG5AQCAtNTc5MiwxMSArNTc5NCwxOSBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4re1xuK1x0aWYgKHBnc3RlX29mKHB0ZXApLVx1MDAzZWNtbWFfZClcbitcdFx0YXRvbWljNjRfZGVjKHdhbGstXHUwMDNlcHJpdik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcbiBcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtNTgxMCw2ICs1ODIwLDEyIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0fVxuIFxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hKSB7XG4rXHRcdFx0X2RhdF93YWxrX2dmbl9yYW5nZShvbGQtXHUwMDNlYmFzZV9nZm4sIG9sZC1cdTAwM2ViYXNlX2dmbiArIG9sZC1cdTAwM2VucGFnZXMsXG4rXHRcdFx0XHRcdCAgICBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4rXHRcdH1cbitcbiBcdFx0c3dpdGNoIChjaGFuZ2UpIHtcbiBcdFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxuIFx0XHRcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZW5wYWdlcyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuaW5kZXggYWQwZGRjNDMzYTczYzMuLmIwZjNhNDdiMTgyOWYyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5AQCAtMTI2MCw4ICsxMjYwLDkgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdC8qIFJldHJ5IHRoZSBFU1NBIGluc3RydWN0aW9uICovXG4gXHRcdGt2bV9zMzkwX3JldHJ5X2luc3RyKHZjcHUpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4tXHRcdFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spXG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MTguMzcyNzM4NDgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU2NDU5OTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIHMzOTAgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hpbmcgdGhlIGBhcmNoL3MzOTAva3ZtL2AgYXJlYS4gTGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHBpZWNlIGJ5IHBpZWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBmYWlybHkgbG93LWxldmVsIGNvZGUgYW5kIHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwgY3JpdGljYWwgYXJlYXMgd2l0aGluIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cbkZpcnN0LCBgYXJjaC9zMzkwL2t2bS9kYXQuY2AuIFRoZSBjaGFuZ2UgaGVyZSBpcyBhIHNpbXBsZSBgaWYgKHJjKSBicmVhaztgIGFmdGVyIGNhbGxpbmcgYGRhdF9wdGVfd2Fsa19yYW5nZWAgd2l0aGluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZXJyb3ItaGFuZGxpbmcgZW5oYW5jZW1lbnQgaW4gdGhlIERBVCAoRHluYW1pYyBBZGRyZXNzIFRyYW5zbGF0aW9uKSB3YWxrLlxuXG5OZXh0LCBgYXJjaC9zMzkwL2t2bS9nbWFwLmNgIGhhcyBhIG1vcmUgaW50ZXJlc3RpbmcgY2hhbmdlIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgc2ltcGxlIHdyaXRlIGxvY2sgd2l0aCBgc2NvcGVkX2d1YXJkYCwgYnV0IHRoaXMgcGF0Y2ggcmVwbGFjZWQgaXQgd2l0aCBgd3JpdGVfdHJ5bG9ja2AuIElmIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZCwgd2Ugbm93IGdyYWNlZnVsbHkgcmV0dXJuIGFuIGBFQUdBSU5gIGVycm9yLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlIHRvIHRoZSBsb2NraW5nIHN0cmF0ZWd5LiBJdCBhcHBlYXJzIHRvIG1ha2UgdGhlIG9wZXJhdGlvbiBtb3JlIHJlc2lsaWVudCB0byBsb2NrIGNvbnRlbnRpb24uXG5cbk5vdywgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgaGFzIGEgbW9yZSBzaWduaWZpY2FudCBiYXRjaCBvZiBjaGFuZ2VzLiBJbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCB0aGUgYXNzaWdubWVudCBga3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYyA9IDE7YCBpcyByZXBsYWNlZCB3aXRoIGBXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMsIDEpO2AuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGEgbXVsdGktdGhyZWFkZWQgc2NlbmFyaW8sIGFuZCBlbnN1cmluZyBhdG9taWMgdXBkYXRlcyB0byBzaGFyZWQgbWVtb3J5LiBJbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBhIGxvZ2ljIGludmVyc2lvbiBpcyBhZGRlZCB3aGVyZSBga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdGAgaXMgc2tpcHBlZCBpZiBga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWFgIGlzIGZhbHNlLiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgYnVnIGZpeCBvciBvcHRpbWl6YXRpb24uIFdpdGhpbiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIHRoZSByZXR1cm4gdmFsdWUgaXMgc2xpZ2h0bHkgY2hhbmdlZCB0byBwcmV2ZW50IHN1Y2Nlc3MsIGlmIGEgZmFpbHVyZSBvY2N1cnJlZC4gVGhlIGNvZGUgZnJvbSBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCBtb3ZpbmcgYHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwO2AgdG8gYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCBpcyBtaW5vcjsgaXQgY2hhbmdlcyB3aGVuIHRoZSBnbWFwIGlzIGluaXRpYWxpemVkIGZvciB0aGUgdkNQVS4gRmluYWxseSwgaW4gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgdGhlcmUncyBhIG5ldyBgY21tYV9kX2NvdW50X3B0ZWAgYW5kIGxvZ2ljIHRvIGRlY3JlbWVudCBgY21tYV9kaXJ0eV9wYWdlc2Agd2hlbiBhIG1lbW9yeSBzbG90IGlzIGRlbGV0ZWQuIFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggY21tYSBkaXJ0eSBwYWdlIGFjY291bnRpbmcuXG5cbkZpbmFsbHksIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AgaW50cm9kdWNlcyBhIGBzY29wZWRfZ3VhcmRgIGFyb3VuZCB0aGUgYHNsb3RzX2xvY2tgIG11dGV4IGluIGBoYW5kbGVfZXNzYWAgd2hlbiBjYWxsaW5nIGBfX2RvX2Vzc2FgLiBUaGlzIG1ha2VzIEVTU0EgKEVuaGFuY2VkIFN5c3RlbSBTdG9yYWdlIEFyY2hpdGVjdHVyZSkgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcgc2FmZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHNsb3QgbG9jay5cblxuSW4gc3VtbWFyeSwgdGhpcyBzZXJpZXMgdG91Y2hlcyBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aCBsb2NraW5nIGltcHJvdmVtZW50cywgYSBmZXcgYXJjaGl0ZWN0dXJhbCBvcHRpbWl6YXRpb25zLCBFU1NBIGluc3RydWN0aW9uIGhhbmRsaW5nIHdpdGggbXV0ZXggcHJvdGVjdGlvbiwgYW5kIGdtYXAgaGFuZGxpbmcuIEl0IGFwcGVhcnMgdG8gZm9jdXMgb24gcmVmaW5pbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb3RlY3RpbmcgY3JpdGljYWwgcmVnaW9ucy4gVGhpcyBjb21iaW5hdGlvbiBvZiBmdW5jdGlvbmFsaXR5IG1ha2VzIGl0IGEgaGlnaCBwcmlvcml0eSBmb3IgZnV6emluZy4gR2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggY2hhbmdlcyB3aXRoaW4gYGFyY2gvczM5MC9rdm0vYCwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBgS1ZNYCwgd2hpY2ggc2hvdWxkIGJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDI1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MjcuOTM3MzQwMjM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTgxNDg5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjI4LjIyOTE2NjAwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDkwNDcyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEtWTWAgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgZ2V0dGluZyBhIGxheSBvZiB0aGUgbGFuZC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGdtYXBfY3JlYXRlX3NoYWRvd2AsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kIGBoYW5kbGVfZXNzYWAuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gZHJpbGwgZG93biBvbiBgaGFuZGxlX2Vzc2FgLiBJdCdzIGFuIGluc3RydWN0aW9uIGhhbmRsZXIsIHdoaWNoIGxpa2VseSBtZWFucyBpdCBjb3VsZCBiZSBhIGhvdCBwYXRoLiBUaGF0J3MgaW1tZWRpYXRlbHkgd2hlcmUgSSB3YW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cbmBnbWFwX2NyZWF0ZV9zaGFkb3dgLCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCBsb29rcyB0byBiZSByZWxhdGVkIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBhIHNpbWlsYXIgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdGhlcmUsIG9mIGNvdXJzZSwgYnV0IHRoYXQncyB0aGUgaW5pdGlhbCBoeXBvdGhlc2lzLlxuXG5ga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MgdHJpZ2dlcmVkIGR1cmluZyBtaWdyYXRpb24gc3RvcHBpbmcuIEdvb2QgdG8ga25vdywgYnV0IGxpa2VseSBub3QgYSBjb3JlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suXG5cbk5vdywgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLi4uIHRoYXQgc21lbGxzIGxpa2UgYW4gaW9jdGwgY2FsbCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdDsgdGhhdCBjb250ZXh0IGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5MiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjozMi45MzgyMTU1NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNzk0NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyOTA9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMzQ2LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMzQ3OnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIzNDgtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qga3ZtX3MzOTBfY21tYV9sb2cgKmFyZ3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNT1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAxNy1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDE4OlxcdFxcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDE5LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MzMuMjYxMDE3MjY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODg5Njc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgczM5MCBLVk0gQ01BIEJpdHMgU2V0dGluZyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBjb25maXJtaW5nIHdoYXQgSSBzdXNwZWN0ZWQuIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCAqaXMqIGluZGVlZCBpbnZva2VkIHRocm91Z2ggdGhlIGBrdm1fYXJjaF92bV9pb2N0bGAgcGF0aC4gVGhpcyBtZWFucyB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGZyb20gdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCB0aGF0J3Mgc2V0dGxlZC4gVGhlIHF1ZXN0aW9uIHRoYXQgaGFzIGFyaXNlbiBpcyB0byBkZXRlcm1pbmUgd2hhdCBwcm9jZXNzIGNhdXNlcyB0aGlzIHNwZWNpZmljIGlvY3RsLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBndXRzLiBJdCBpcyB0aW1lIHRvIHNlZSB3aGVyZSBgZ21hcF9jcmVhdGVfc2hhZG93YCBmaXRzIGludG8gYWxsIG9mIHRoaXMuIE15IGZvY3VzIGlzIG5vdyBvbiBtYXBwaW5nIG91dCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRob3NlIHR3byBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MzYuNjU5OTE2NjY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTIxNTcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX2NyZWF0ZV9zaGFkb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTMwMT1zdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMyMy0vKipcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzI0OiAqIGdtYXBfY3JlYXRlX3NoYWRvdygpIC0gQ3JlYXRlL2ZpbmQgYSBzaGFkb3cgZ3Vlc3QgYWRkcmVzcyBzcGFjZS5cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzI1LSAqIEBtYzogVGhlIGNhY2hlIHRvIHVzZSB0byBhbGxvY2F0ZSBkYXQgdGFibGVzLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0MC0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzQxOnN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlbnQsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0Mi1cXHRcXHRcXHRcXHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9MTA4PXZvaWQgX2dtYXBfaGFuZGxlX3ZzaWVfdW5zaGFkb3dfZXZlbnQoc3RydWN0IGdtYXAgKnBhcmVudCwgZ2ZuX3QgZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDk6c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmgtMTEwLVxcdFxcdFxcdFxcdHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTMwMD1zdGF0aWMgc3RydWN0IGdtYXAgKmFjcXVpcmVfZ21hcF9zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzI5LWFnYWluOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzMzA6XFx0Z21hcCA9IGdtYXBfY3JlYXRlX3NoYWRvdyh2Y3B1LVxcdTAwM2VhcmNoLm1jLCB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgYXNjZSwgZWRhdCk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMzMS1cXHRpZiAoSVNfRVJSKGdtYXApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjozNi45MDExMzk0MDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM4OTA3ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTmVzdGVkIFZpcnR1YWxpemF0aW9uIOKAkyBBIFF1aWNrIENoZWNrKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZ21hcF9jcmVhdGVfc2hhZG93YCBpcyB1c2VkIGluIGB2c2llLmNgLCBhbmQgdGhhdCdzIGEga2V5IGZpbGUgZm9yIHVuZGVyc3RhbmRpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBNeSBicmFpbiBpbW1lZGlhdGVseSB3YW50cyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyB1c2Ugd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWMgbG9jYXRpb24uIEkgYW0gc3VyZSB0aGVyZSBhcmUgb3RoZXIgdXNlcywgYnV0IHRoaXMgaXMgY2xlYXJseSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZS4gQSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHByb2Nlc3MgZm9yIGEgZ3Vlc3Qgc3RhcnQgYW5kIHN0b3AsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgRy1tYXAgaXMgY3JlYXRlZCwgdXBkYXRlZCBhbmQgZGVsZXRlZC5cblxuR2l2ZW4gdGhhdCBjb250ZXh0LCBpdCBtYWtlcyBzZW5zZSB0byB0aGVuIHNoaWZ0IGZvY3VzIHRvIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAuIFRoaXMgZnVuY3Rpb24gc291bmRzIGxpa2UgYSBsb2dpY2FsIHBvaW50IHRvIHNlZSBob3cgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0IChhbmQgc3BlY2lmaWNhbGx5IHRoZSBzaGFkb3cgRy1tYXAgaWYgSSBoYWQgdG8gZ3Vlc3MpIGlzIGhhbmRsZWQgZHVyaW5nIGEgbWlncmF0aW9uIHN0b3AuIEl0J3MgbGlrZWx5IHRoYXQgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdvdWxkIG5lZWQgdG8gYmUgY2xlYW5lZCB1cCBvciB0cmFuc2l0aW9uZWQgYXBwcm9wcmlhdGVseSBkdXJpbmcgYSBtaWdyYXRpb24gc3RvcCwgc28gdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGdtYXBfY3JlYXRlX3NoYWRvd2AgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDA4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6NDAuNDQwMDUwNDU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzYyMzU3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMTE9c3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMS0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIyOiAqIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMy0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMjU9c3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzAtICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyNzE6c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyOTg9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMzA4LVxcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUT1A6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEzMDk6XFx0XFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTMxMC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzUxPWludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3OTAtXFx0ICAgICEobmV3LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc5MTpcXHRcXHRXQVJOKGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKGt2bSksXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3OTItXFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGVcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6NDEuMTc2MjkzMzQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDIyMjk2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqVHJhY2luZyBNaWdyYXRpb24gU3RvcHMgaW4gS1ZNL3MzOTB4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1pZ3JhdGlvbiBpcyBzdG9wcGVkIGluIHRoZSBLVk0vczM5MHggaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBOb3csIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQgZnJvbT8gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIHRlbGxzIG1lIGl0J3MgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCB3aGljaCBJIHJlbWVtYmVyIGlzIGFuIGlvY3RsIGNhbGwsIGFuZCBhbHNvIGZyb20gYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAuIFRoYXQgc2Vjb25kIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgbWlncmF0aW9uIG1pZ2h0IGJlIGludGVycnVwdGVkIGR1cmluZyBtZW1vcnkgcHJlcGFyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlIGlmIHRoZXJlIGFyZSBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuXG5cbkhtbSwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCB0aGUgYGhhbmRsZV9lc3NhYCBmdW5jdGlvbiB0byBzZWUgaG93IGl0IG1pZ2h0IHJlbGF0ZSB0byBhbnkgbWlncmF0aW9uIGlzc3VlcyB0aGF0IG9jY3VyIHdoZW4gdXNpbmcgaXQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIG5leHQgdG8gc2VlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo0NC40MTg1MjUzMjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTA0MjYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfZXNzYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz0xMTkwPXN0YXRpYyB2b2lkIF9lc3NhX2NsZWFyX2Nicmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICpjYnJsLCBpbnQgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxNS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjE2OnN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4Mz1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTItXFx0Y2FzZSAweGFiOlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTM6XFx0XFx0cmV0dXJuIGhhbmRsZV9lc3NhKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTQtXFx0Y2FzZSAweGFmOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo0NC42OTc1NzM5NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3NTM5Nzg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEluc3RydWN0aW9uIEhhbmRsZXIgYGhhbmRsZV9lc3NhYCoqXG5cbk9rYXksIHNvIGBoYW5kbGVfZXNzYWAgaXMgdHJpZ2dlcmVkIGJ5IGBrdm1fczM5MF9oYW5kbGVfYjlgLCB3aGljaCBtYWtlcyBpdCBhbiBpbnN0cnVjdGlvbiBoYW5kbGVyLiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgdGhlIGZvY3VzLiBNeSBhdHRlbnRpb24gc2hvdWxkIGJlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZDogYGdtYXBfY3JlYXRlX3NoYWRvd2AsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kLCBvZiBjb3Vyc2UsIGBoYW5kbGVfZXNzYWAgaXRzZWxmLlxuXG5XYWl0LCBsZXQncyBzdGVwIGJhY2sgYSBiaXQuIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYSBzdGFuZGFyZCBLVk0gZnVuY3Rpb24uIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCBpcyBhIHNwZWNpZmljIGlvY3RsIGNhbGwsIHdoaWNoIGlzIHZlcnkgcmVsZXZhbnQuIEFuZCBhZ2FpbiwgYGhhbmRsZV9lc3NhYCBpcyB0aGUgdGFyZ2V0IGluc3RydWN0aW9uIGhhbmRsZXIuXG5cblRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCBpcyB0aGUgZ2VuZXJhbCBjYXRlZ29yeSwgb2J2aW91c2x5LiBCdXQgYXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIENNTUEgb3IgdGhlIEVTQSBpbnN0cnVjdGlvbiBzZXQgdGhhdCBtaWdodCBhZmZlY3QgaG93IHRoZXNlIGZ1bmN0aW9ucyBiZWhhdmU/IFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZGlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjQ5LjA3Mjk3NDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDgzNDYwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ01NQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjQ5LjMzMzgxOTUzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ3OTA0MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFMzOTAgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIFwiTm8sXCIgYnV0IHRoZW4gSSBzYXcgYEtWTV9TMzkwX1VDT05UUk9MYCBhbmQgbXkgbWluZCBzaGlmdGVkLiBUaGlzIHBhdGNoLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIEkgc2VlIHRoZSBjaGFuZ2VzOiB0aGUgcmVtb3ZhbCBvZiB0aGUgZ21hcCBhc3NpZ25tZW50IGNvbmRpdGlvbmFsIGluc2lkZSB0aGUgYGt2bV9pc191Y29udHJvbGAgY2hlY2ssIGFuZCB0aGUgc3Vic2VxdWVudCBnbWFwIGluaXRpYWxpemF0aW9uLiBJdCBzZWVtcyB0aGVzZSBjaGFuZ2VzIGFyZSAqYXBwbGllZCB0byBib3RoKiB1Y29udHJvbCBhbmQgbm9uLXVjb250cm9sIGNvbmZpZ3VyYXRpb25zLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGlzIGlzbid0IGp1c3QgYSB1Y29udHJvbC1zcGVjaWZpYyBpc3N1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgYnJvYWRlciByZWZhY3RvcmluZywgb3IgYSBjcml0aWNhbCBmaXggdGhhdCBhZmZlY3RzIGFsbCBgS1ZNX1MzOTBgIHNldHVwcz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRpbWUgdG8gY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjUzLjY4MTcyNzMzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDM3MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo1My45MDMxNzA0OTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNjU0MTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gYW5kIERhdGEgUmFuZ2UgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBjb25maWd1cmF0aW9uIEknbSB3b3JraW5nIHdpdGggaXMgZGVmaW5pdGVseSBjZW50ZXJlZCBhcm91bmQgYEtWTWAuIFRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHNvbWV0aGluZyBzcGVjaWZpYywgc3BlY2lmaWNhbGx5IHRoYXQgYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCBmdW5jdGlvbiBvciBtb2R1bGUgb3Igd2hhdGV2ZXIgaXQgaXMuIEknbSB0aGlua2luZywgdGhpcyBpcyBhIGtleSBhcmVhIGZvciBleHBsb3JhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGF0IGRvZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLCB0byByZWFsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgS1ZNIHNldHVwLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGRlcGVuZGVuY2llcyBhbmQgb3V0cHV0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo1Ni41Mzk3MTYxNTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjUxMzUyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXRfY3JzdGVfd2Fsa19yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2RhdC5jPTUxND1zdGF0aWMgbG9uZyBkYXRfcHRlX3dhbGtfcmFuZ2UoZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IGRhdF93YWxrICp3KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy01MzMtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo1MzQ6c3RhdGljIGxvbmcgZGF0X2Nyc3RlX3dhbGtfcmFuZ2UoZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgc3RydWN0IGNyc3RfdGFibGUgKnRhYmxlLFxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNTM1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTU2Ny1cXHRcXHRcXHRpZiAoIWlzX3BtZChjcnN0ZSkpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo1Njg6XFx0XFx0XFx0XFx0cmMgPSBkYXRfY3JzdGVfd2Fsa19yYW5nZShtYXgoc3RhcnQsIGN1ciksIG1pbihlbmQsIG5leHQpLFxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNTY5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgX2RlcmVmZXJlbmNlX2Nyc3RlKGNyc3RlKSwgd2Fsayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTU5NT1sb25nIF9kYXRfd2Fsa19nZm5fcmFuZ2UoZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgdW5pb24gYXNjZSBhc2NlLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTItXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo2MTM6XFx0cmV0dXJuIGRhdF9jcnN0ZV93YWxrX3JhbmdlKHN0YXJ0LCBtaW4oZW5kLCBhc2NlX2VuZChhc2NlKSksIHRhYmxlLCBcXHUwMDI2d2Fsayk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo1Ni44NDIyMzcwNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MTEzMDc0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgZm9yIEtWTSBzMzkwIEJ1ZyBGaXhlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIHRoZSBjYWxsIGNoYWluIHRoYXQgc2VlbXMgbW9zdCByZWxldmFudCBzdGFydHMgd2l0aCBgX2RhdF93YWxrX2dmbl9yYW5nZWAgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gVGhhdCBtZWFucyB0aGVzZSBmdW5jdGlvbnMgYXJlIGtleTogYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCwgYGdtYXBfY3JlYXRlX3NoYWRvd2AsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYW5kIGBoYW5kbGVfZXNzYWAsIHBsdXMgdGhlIGFmb3JlbWVudGlvbmVkIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAuIFNpbmNlIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCBpcyB0aGUgZXhwb3J0ZWQgdmVyc2lvbiwgYnV0IGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgaXMgdGhlIHN0YXRpYywgSSdsbCBzdGljayB3aXRoIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgZm9yIGNsYXJpdHkuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczpcblxuMS4gIEluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAsIHRoZXkgYWRkZWQgYW4gYGlmIChyYykgYnJlYWs7YCBhZnRlciBgZGF0X3B0ZV93YWxrX3JhbmdlYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgYnVnIHdoZXJlIGByY2Agd2FzIGdldHRpbmcgc3RvbXBlZCBvbiBvciBpZ25vcmVkLiBDbGFzc2ljLlxuMi4gIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGlzIGNoYW5naW5nIHRoZSBsb2NraW5nIG1lY2hhbmlzbSB0byBgd3JpdGVfdHJ5bG9ja2AgYW5kIHJldHVybmluZyBgLUVBR0FJTmAgb24gZmFpbHVyZS4gVGhhdCdzIGEgZ29vZCBtb3ZlIHRvIGF2b2lkIGEgZGVhZGxvY2ssIEkgY2FuIHNlZSB0aGF0LlxuMy4gIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaGFzIGEgYFdSSVRFX09OQ0VgIGZvciBga3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlY2AsIHdoaWNoIG1pdGlnYXRlcyBhIGRhdGEgcmFjZS4gQWx3YXlzIGdvb2QgdG8gc2VlIHRob3NlLlxuNC4gIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAgbm93IGNoZWNrcyBgIWt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hYCBhbmQgcmV0dXJucyBlYXJseS4gVGhhdCdzIHRhcmdldGVkIGJ1ZyBmaXhpbmcg4oCTIHByZXZlbnRpbmcgdGhlIG1pZ3JhdGlvbiBzdG9wIGZyb20gZG9pbmcgdGhpbmdzIGl0IHNob3VsZG4ndCB3aGVuIENNTUEgaXNuJ3QgaW4gcGxheS5cbjUuICBJbiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIHRoZXkncmUgcmV0dXJuaW5nIGByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO2AuIEZpeGluZyB0aGF0IHBvc2l0aXZlIHJldHVybiB2YWx1ZSBidWcgdG8gdXNlcnNwYWNlIGlzIGEgZ29vZCB0aGluZyB0byBmaXguXG42LiAgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgLyBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGFyZSBqdXN0IG1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgLlxuNy4gIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgbm93IGNhbGxzIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgLiBUaGF0J3MgdGhhdCBmdW5jdGlvbiBjYWxsIHdlIG1lbnRpb25lZCBlYXJsaWVyLlxuOC4gIGBoYW5kbGVfZXNzYWAgbm93IGluY2x1ZGVzIGBzbG90c19sb2NrYCBhcm91bmQgYF9fZG9fZXNzYWAuIE1ha2VzIHNlbnNlIHRvIGFkZCB0aGF0IGxvY2sgdGhlcmUuXG5cbkxvb2tzIGxpa2UgYWxsIHRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgYWRkcmVzcyByZWFsIGJ1Z3Mgd2l0aGluIHRoZSBLVk0gczM5MCBjb250ZXh0LlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGtleSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBpcyBgS1ZNYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNr4oCmIHllcywgS1ZNIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gbmVlZGVkLlxuXG5Ob3csIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG9uIHdoZXRoZXIgYEtWTV9TMzkwX1VDT05UUk9MYCBoYXMgYW55dGhpbmcgdG8gZG8gd2l0aCB0aGVzZSBjaGFuZ2VzLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuYGBgY1xuLVx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwO1xuK1x0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRzY2FfYWRkX3ZjcHUodmNwdSk7XG4tXHR9XG5gYGBcblRoZSBwYXRjaCBoYXMgY29kZSB0aGF0IGNoZWNrcyBga3ZtX2lzX3Vjb250cm9sYCByZWdhcmRsZXNzIG9mIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHNvLCBldmVuIHRob3VnaCB0aGUgY29kZSBwYXRoIGlzIGV4ZWN1dGVkIHJlZ2FyZGxlc3MsIEkgbmVlZCB0byBjaGVjayBob3cgYGt2bV9pc191Y29udHJvbGAgaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MDcuNzUzNTQ3MjgxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk1NDgyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2lzX3Vjb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZ21hcC5jPTg5PXN0YXRpYyB2b2lkIGdtYXBfYWRkX2NoaWxkKHN0cnVjdCBnbWFwICpwYXJlbnQsIHN0cnVjdCBnbWFwICpjaGlsZClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMi1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMTM6XFx0aWYgKGt2bV9pc191Y29udHJvbChwYXJlbnQtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTE0LVxcdFxcdGNsZWFyX2JpdChHTUFQX0ZMQUdfT1dOU19QQUdFVEFCTEVTLCBcXHUwMDI2Y2hpbGQtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NjEzPWludCBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTYtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo2MTc6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjE4LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgwOT1zdGF0aWMgaW50IGZsaWNfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgyMi1cXHRjYXNlIEtWTV9ERVZfRkxJQ19BUEZfRU5BQkxFOlxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgyMzpcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGRldi1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MjQtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MjctXFx0Y2FzZSBLVk1fREVWX0ZMSUNfQVBGX0RJU0FCTEVfV0FJVDpcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mjg6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChkZXYtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODI5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMTEyPWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTIxLVxcdGNhc2UgS1ZNX0lSUV9ST1VUSU5HX1MzOTBfQURBUFRFUjpcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMxMjI6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzEyMy1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz02MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NDUtXFx0XFx0ciA9IDA7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjY0NjpcXHRcXHRpZiAoaHBhZ2UgXFx1MDAyNlxcdTAwMjYgIShrdm0gXFx1MDAyNlxcdTAwMjYga3ZtX2lzX3Vjb250cm9sKGt2bSkpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NDctXFx0XFx0XFx0ciA9IDE7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjUwLVxcdFxcdHIgPSAwO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2NTE6XFx0XFx0aWYgKGhwYWdlXzJnIFxcdTAwMjZcXHUwMDI2ICEoa3ZtIFxcdTAwMjZcXHUwMDI2IGt2bV9pc191Y29udHJvbChrdm0pKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjUyLVxcdFxcdFxcdHIgPSAxO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc0Nj1pbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc1My1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NzU0OlxcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzU1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc4OD1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy04OTItXFx0XFx0XFx0ciA9IC1FQlVTWTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6ODkzOlxcdFxcdGVsc2UgaWYgKCFocGFnZSB8fCBrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEgfHwga3ZtX2lzX3Vjb250cm9sKGt2bSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTg5NC1cXHRcXHRcXHRyID0gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05MTMtXFx0XFx0XFx0ciA9IC1FQlVTWTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6OTE0OlxcdFxcdH0gZWxzZSBpZiAoIWhwYWdlXzJnIHx8IGt2bS1cXHUwMDNlYXJjaC51c2VfY21tYSB8fCBrdm1faXNfdWNvbnRyb2woa3ZtKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05MTUtXFx0XFx0XFx0ciA9IC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9OTkzPXN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDQwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMDQxOlxcdFxcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTA0Mi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNDAxPXZvaWQga3ZtX2FyY2hfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDA4LVxcdGt2bV9jbGVhcl9hc3luY19wZl9jb21wbGV0aW9uX3F1ZXVlKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNDA5OlxcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTAtXFx0XFx0c2NhX2RlbF92Y3B1KHZjcHUpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM0MTM6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTQtXFx0XFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWNoaWxkcmVuX2xvY2spXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYwOC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM2MDk6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxMC1cXHRcXHRzY2FfYWRkX3ZjcHUodmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzY5OT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3MjMtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWVjYiB8PSBFQ0JfVEU7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3MjQ6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzcyNS1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZWNiIHw9IEVDQl9TUEVDSTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzg2PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc4Ny17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3ODg6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2woa3ZtKSBcXHUwMDI2XFx1MDAyNiAhc2NhX2Nhbl9hZGRfdmNwdShrdm0sIGlkKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc4OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzkzPWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg0Ny1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg0ODpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg0OS1cXHRcXHRyYyA9IC1FTk9NRU07XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg2OC1vdXRfdWNvbnRyb2xfdW5pbml0OlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODY5OlxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODcwLVxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDMxNz1zdGF0aWMgaW50IHZjcHVfdWNvbnRyb2xfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKmdhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzMjAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQzMjE6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzMjItXFx0XFx0cmMgPSBnbWFwX3VjYXNfdHJhbnNsYXRlKHZjcHUtXFx1MDAzZWFyY2gubWMsIHZjcHUtXFx1MDAzZWFyY2guZ21hcCwgZ2FkZHIpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ1NTE9c3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NjQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1NjU6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTY2LVxcdFxcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUxNz1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU5Ny1cXHRcXHRyID0gLUVJTlZBTDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU5ODpcXHRcXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTk5LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MTUtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MTY6XFx0XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxNy1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzMyPXZtX2ZhdWx0X3Qga3ZtX2FyY2hfdmNwdV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MzUtXFx0aWYgKCh2bWYtXFx1MDAzZXBnb2ZmID09IEtWTV9TMzkwX1NJRV9QQUdFX09GRlNFVClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTczNjpcXHRcXHQgXFx1MDAyNlxcdTAwMjYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzM3LVxcdFxcdHZtZi1cXHUwMDNlcGFnZSA9IHZpcnRfdG9fcGFnZSh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc1MT1pbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzU1LXtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc1NjpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkgXFx1MDAyNlxcdTAwMjYgbmV3IFxcdTAwMjZcXHUwMDI2IG5ldy1cXHUwMDNlaWQgXFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTg3ND1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg3OS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg4MDpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4ODEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9MTExPXN0YXRpYyBpbmxpbmUgaW50IGlzX3ZjcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMTE1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDoxMTY6c3RhdGljIGlubGluZSBpbnQga3ZtX2lzX3Vjb250cm9sKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMTE3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MDcuOTYzMTAxNzI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTIyNTY0MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBmb3IgS1ZNL3MzOTAgUGF0Y2ggVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgYGt2bV9pc191Y29udHJvbGAuIFRoaXMgcmluZ3MgYSBiZWxsIOKAkyB0aGF0J3MgY29udHJvbGxlZCBieSB0aGUgYEtWTV9TMzkwX1VDT05UUk9MYCBjb25maWcuIFNpbmNlIHRoZSBwYXRjaCBjb2RlIGlzIHVzaW5nIGBrdm1faXNfdWNvbnRyb2xgLCBJIHNob3VsZCBwcm9iYWJseSBlbmFibGUgdGhhdCBjb25maWcgdG8gZW5zdXJlIGJvdGggY29kZSBwYXRocyBhcmUgdGVzdGVkIGZ1bGx5LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzIGF2YWlsYWJsZSBpbiBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYC4gWXVwLCB0aGVyZSBpdCBpczogYFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wiYC4gUGVyZmVjdC4gU28gSSdsbCBhZGQgYEtWTV9TMzkwX1VDT05UUk9MYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgbmV3IGBFbmFibGVDb25maWdzYCB3aWxsIGluY2x1ZGUgYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEkndmUgZ290IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emVycyBhcmUgaGl0dGluZyB0aGUgbW9kaWZpZWQgY29kZSBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlOlxuXG4qICAgYGRhdF9jcnN0ZV93YWxrX3JhbmdlYFxuKiAgIGBnbWFwX2NyZWF0ZV9zaGFkb3dgXG4qICAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYFxuKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYFxuKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmBcbiogICBgaGFuZGxlX2Vzc2FgXG5cbmBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYSBzdGFuZGFyZCBLVk0gaG9vaywgYnV0IG5vdCBhIGhvdCBwYXRoLiBgaGFuZGxlX2Vzc2FgIGlzIGludGVyZXN0aW5nOyBpdCdzIGFuIGluc3RydWN0aW9uIGhhbmRsZXIsIHdoaWNoIGNvdWxkIGJlIGZyZXF1ZW50bHkgY2FsbGVkIGRlcGVuZGluZyBvbiB0aGUgZ3Vlc3QncyB3b3JrbG9hZCwgYnV0IGl0J3Mgc3BlY2lmaWMgZW5vdWdoLiBgZ21hcF9jcmVhdGVfc2hhZG93YCBpcyByZWxldmFudCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAgaXMgaW1wb3J0YW50IGZvciBtaWdyYXRpb24uIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCBpcyBhbiBpb2N0bCBjYWxsLCB3aGljaCBpcyB3b3J0aCB0ZXN0aW5nLiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIGlzIGEgcGFnZSB0YWJsZSB3YWxrIGZ1bmN0aW9uIGFuZCBpcyBzcGVjaWZpY2FsbHkgbW9kaWZpZWQgaGVyZSwgc28gZGVmaW5pdGVseSBuZWVkcyB0byBiZSBhIGZvY3VzLlxuXG5BaCwgSSBtaXNzZWQgb25lISBUaGVyZSdzIGFsc28gYGNtbWFfZF9jb3VudF9wdGVgLCBhIHN0YXRpYyBmdW5jdGlvbiBhZGRlZCBpbiB0aGUgcGF0Y2guIExldCBtZSBhZGQgdGhhdCB0byB0aGUgbGlzdC4gSSBhbHNvIG5vdGljZWQgdGhhdCBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIGlzIGFsc28gc3RhdGljLlxuXG5Pa2F5LCBsZXQncyB1cGRhdGUgdGhlIGZvY3VzIHN5bWJvbHM6XG5cbiogICBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgXG4qICAgYGdtYXBfY3JlYXRlX3NoYWRvd2BcbiogICBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gXG4qICAgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgXG4qICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYFxuKiAgIGBoYW5kbGVfZXNzYWBcbiogICBgY21tYV9kX2NvdW50X3B0ZWBcblxuUmlnaHQsIG5vdywgYXJlIGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgIGVub3VnaCB0byBjb3ZlciBhbGwgdGhlIG1vZGlmaWNhdGlvbnM/IFllcCwgdGhvc2Ugc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBhcnRpY3VsYXRlIG15IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBhZGRyZXNzZXMgYSByZXR1cm4gY29kZSBidWcgaW4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIHRoZSBtaWdyYXRpb24gc3RvcCBsb2dpYyBpbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBlbnN1cmVzIHRoZSBjb3JyZWN0IHJldHVybiB2YWx1ZSBvZiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGFkanVzdHMgdGhlIHRpbWluZyBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSBhbGwgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBhcmUgbm93IHJlYWNoYWJsZSwgc28gZnV6emluZyB0aGVtIGlzIGNydWNpYWwuXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUxOSwiT3V0cHV0VG9rZW5zIjozMDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MjAuODg1NjcwNDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzI3NzAwMzkyLCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTCIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TMzkwX1VDT05UUk9MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X2Nyc3RlX3dhbGtfcmFuZ2VcIixcbiAgICBcImdtYXBfY3JlYXRlX3NoYWRvd1wiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwiY21tYV9kX2NvdW50X3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIHdoZXJlIHRoZSByZXR1cm4gY29kZSB3YXMgaWdub3JlZCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCBieSB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhZGp1c3RzIHRoZSB0aW1pbmcgb2YgYHZjcHUtXFx1MDAzZWFyY2guZ21hcGAgYXNzaWdubWVudCwgYWRkcyBsb2dpYyB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBhZGRzIGxvY2tpbmcgaW4gYGhhbmRsZV9lc3NhYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEtWTSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjI0LjYxMzM4Mzc4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODE0MzQzOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWlzc2luZyBLVk0gRmVhdHVyZSoqXG5cblJpZ2h0LCBzbyBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzbid0IHNob3dpbmcgdXAgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGF0J3MuLi4gdW5leHBlY3RlZC4gSSBjb3VsZCBoYXZlIHN3b3JuIEknZCBzZWVuIGl0IG1lbnRpb25lZCBzb21ld2hlcmUgaW4gdGhlIGRvY3VtZW50YXRpb24sIG1heWJlIGFuIG9sZCBwYXRjaCBvciBhIGRyYWZ0IHByb3Bvc2FsLiBPa2F5LCBmaXJzdCB0aGluZydzIGZpcnN0OiBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTm8gcG9pbnQgaW4gYXNzdW1pbmcgYW55dGhpbmcgaGVyZS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgaXMgYWN0dWFsbHkgdGhlIHNvdXJjZSBvZiB0cnV0aCwgYW5kIHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgb3IgYSB0eXBvIHNvbWV3aGVyZSBpbiBteSBub3Rlcy4gQmFjayB0byB0aGUgS2NvbmZpZyBmaWxlIGZvciBhIGNsb3NlciBsb29rLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjE2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjI3LjQyNzcyOTk3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMjcwMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjI3LjYwOTAwODA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDY1MjQxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBjZXJ0YWluIHRoYXQgZmVhdHVyZSB3YXNuJ3QgZGVmaW5lZCwgYnV0IG15IHF1aWNrIHNlYXJjaCBqdXN0IHlpZWxkZWQgKm5vdGhpbmcqLiBUaGUgZnV6emVyIGlzIGNvbXBsYWluaW5nIGFib3V0IGEgbWlzc2luZyBjb25maWd1cmF0aW9uLCBidXQgSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IGl0IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGlzIGlzIHN0cmFuZ2UuIFdoeSBpcyBgc2V0LXJlc3VsdHNgIHRlbGxpbmcgbWUgaXQncyBub3QgdGhlcmU/XG5cbkhtbSwgSSBiZXQgSSBrbm93IHdoYXQncyBoYXBwZW5pbmcuIE15IGZpcnN0IGd1ZXNzIGlzIHRoYXQgdGhlIGZ1enppbmcgc2V0dXAgaXNuJ3QgdXNpbmcgdGhlIHJpZ2h0IGFyY2hpdGVjdHVyZS4gTWF5YmUgaXQncyBjb25maWd1cmVkIGZvciBzb21ldGhpbmcgZGlmZmVyZW50LiBPciBwZXJoYXBzIHRoZSB0b29sIHRoYXQncyBjaGVja2luZyBmb3IgdGhlIGV4aXN0ZW5jZSBpcyBvbmx5IHVzaW5nIHRoZSBnbG9iYWwgS2NvbmZpZyBpbmRleCwgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgbWlzc2luZyBmcm9tIHRoYXQgdmlldy5cblxuQWxyaWdodCwgbm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3MuIFNpbmNlIEtWTSBpcyBkZWZpbml0ZWx5IHRoZXJlLCBJJ2xsIGp1c3QgcmVseSBvbiB0aGF0IGluc3RlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTczLCJPdXRwdXRUb2tlbnMiOjI5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjMzLjM1NTUzNTU4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDY2Njk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X2Nyc3RlX3dhbGtfcmFuZ2VcIixcbiAgICBcImdtYXBfY3JlYXRlX3NoYWRvd1wiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwiY21tYV9kX2NvdW50X3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIHdoZXJlIHRoZSByZXR1cm4gY29kZSB3YXMgaWdub3JlZCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCBieSB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhZGp1c3RzIHRoZSB0aW1pbmcgb2YgYHZjcHUtXFx1MDAzZWFyY2guZ21hcGAgYXNzaWdubWVudCwgYWRkcyBsb2dpYyB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBhZGRzIGxvY2tpbmcgaW4gYGhhbmRsZV9lc3NhYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEtWTSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X2Nyc3RlX3dhbGtfcmFuZ2VcIixcbiAgICBcImdtYXBfY3JlYXRlX3NoYWRvd1wiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwiY21tYV9kX2NvdW50X3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIHdoZXJlIHRoZSByZXR1cm4gY29kZSB3YXMgaWdub3JlZCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCBieSB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhZGp1c3RzIHRoZSB0aW1pbmcgb2YgYHZjcHUtXFx1MDAzZWFyY2guZ21hcGAgYXNzaWdubWVudCwgYWRkcyBsb2dpYyB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBhZGRzIGxvY2tpbmcgaW4gYGhhbmRsZV9lc3NhYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEtWTSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4d4kx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 17:48:14 +0000 UTC FinishedAt: 2026-07-02 18:17:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "be170480-0198-4cbd-9193-a16cc5ec04d4" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "dat_crste_walk_range", "gmap_create_shadow", "kvm_s390_vm_stop_migration", "kvm_s390_set_cmma_bits", "kvm_arch_commit_memory_region", "handle_essa", "cmma_d_count_pte" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9jcnN0ZV93YWxrX3JhbmdlJiMzNDssCiAgICAmIzM0O2dtYXBfY3JlYXRlX3NoYWRvdyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2NtbWFfZF9jb3VudF9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEl0IGZpeGVzIGEgYnVnIGluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgd2hlcmUgdGhlIHJldHVybiBjb2RlIHdhcyBpZ25vcmVkLCByZXNvbHZlcyBhIGRlYWRsb2NrIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGJ5IHVzaW5nIGB3cml0ZV90cnlsb2NrYCwgZml4ZXMgYSBkYXRhIHJhY2UgaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29ycmVjdHMgbWlncmF0aW9uIHN0b3AgbG9naWMgaW4gYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGFkanVzdHMgdGhlIHRpbWluZyBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNThjNzllYTRhYzI0YzQwMTc0YTg5M2RkYmI1Nzg1YTgwMmEyZDViMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTY6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbmluZGV4IDVmMTk2MGVjOTgyZDA0Li5lZDQyNTlkMTc2Mjk1NCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC01NzAsNiAmIzQzOzU3MCw4IEBAIHN0YXRpYyBsb25nIGRhdF9jcnN0ZV93YWxrX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsXG4gXHRcdFx0ZWxzZSBpZiAod2Fsay1cdTAwM2VvcHMtXHUwMDNlcHRlX2VudHJ5KVxuIFx0XHRcdFx0cmMgPSBkYXRfcHRlX3dhbGtfcmFuZ2UobWF4KHN0YXJ0LCBjdXIpLCBtaW4oZW5kLCBuZXh0KSxcbiBcdFx0XHRcdFx0XHRcdGRlcmVmZXJlbmNlX3BtZChjcnN0ZS5wbWQpLCB3YWxrKTtcbiYjNDM7XHRcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggMjk4ZmJhZWNlYzI4ZDUuLjhhYmI0ZjU1YjMwNmJhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMTM3NCw4ICYjNDM7MTM3NCwxMyBAQCBzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZVxuIFx0XHRcdC8qIE9ubHkgYWxsb3cgb25lIHJlYWwtc3BhY2UgZ21hcCBzaGFkb3cuICovXG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzZywgXHUwMDI2cGFyZW50LVx1MDAzZWNoaWxkcmVuLCBsaXN0KSB7XG4gXHRcdFx0XHRpZiAoc2ctXHUwMDNlZ3Vlc3RfYXNjZS5yKSB7XG4tXHRcdFx0XHRcdHNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCBcdTAwMjZwYXJlbnQtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuJiM0MztcdFx0XHRcdFx0aWYgKHdyaXRlX3RyeWxvY2soXHUwMDI2cGFyZW50LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaykpIHtcbiBcdFx0XHRcdFx0XHRnbWFwX3Vuc2hhZG93KHNnKTtcbiYjNDM7XHRcdFx0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcdFx0XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRcdFx0Z21hcF9wdXQobmV3KTtcbiYjNDM7XHRcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XG4mIzQzO1x0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDIzYzgxNzU5NWUyOGQ1Li5kZWVjNjczYTkyMDY1NyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtOTU1LDcgJiM0Mzs5NTUsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfUzM5MF9VU0VSX09QRVJFWEVDOlxuIFx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtFTkFCTEU6IENBUF9TMzkwX1VTRVJfT1BFUkVYRUNcJiMzNDspO1xuLVx0XHRrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjID0gMTtcbiYjNDM7XHRcdFdSSVRFX09OQ0Uoa3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYywgMSk7XG4gXHRcdGljcHRfb3BlcmV4Y19vbl9hbGxfdmNwdXMoa3ZtKTtcbiBcdFx0ciA9IDA7XG4gXHRcdGJyZWFrO1xuQEAgLTEyODAsOCAmIzQzOzEyODAsMTAgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gXHQgKiBQR1NURXMgbWlnaHQgaGF2ZSBjbW1hX2Qgc2V0LlxuIFx0ICovXG4gXHRXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlLCAwKTtcbi1cdGlmIChrdm0tXHUwMDNlYXJjaC51c2VfY21tYSlcbi1cdFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuJiM0MztcdGlmICgha3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuIFx0LyogQ2xlYXIgY21tYV9kIG9uIGFsbCBleGlzdGluZyBQR1NURXMgYW5kIHNldCBjbW1hX2RpcnR5X3BhZ2VzIHRvIDAuICovXG4gXHRnbWFwX3NldF9jbW1hX2FsbF9jbGVhbihrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbiBcdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCAwKTtcbkBAIC0yMzg0LDcgJiM0MzsyMzg2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiAvKipcbkBAIC0zNjA0LDEwICYjNDM7MzYwNiw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZXBkeCA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZXBkeDtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXA7XG4mIzQzO1x0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRzY2FfYWRkX3ZjcHUodmNwdSk7XG4tXHR9XG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuQEAgLTM4NTAsNiAmIzQzOzM4NTAsOCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4gXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcJiMzNDssXG5AQCAtNTc5MiwxMSAmIzQzOzU3OTQsMTkgQEAgaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcbiYjNDM7e1xuJiM0MztcdGlmIChwZ3N0ZV9vZihwdGVwKS1cdTAwM2VjbW1hX2QpXG4mIzQzO1x0XHRhdG9taWM2NF9kZWMod2Fsay1cdTAwM2Vwcml2KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcbiBcdFx0XHRcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcbiBcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtNTgxMCw2ICYjNDM7NTgyMCwxMiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdH1cbiBcbiBcdHNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCBcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spIHtcbiYjNDM7XHRcdGlmIChrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEpIHtcbiYjNDM7XHRcdFx0X2RhdF93YWxrX2dmbl9yYW5nZShvbGQtXHUwMDNlYmFzZV9nZm4sIG9sZC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBvbGQtXHUwMDNlbnBhZ2VzLFxuJiM0MztcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5pbmRleCBhZDBkZGM0MzNhNzNjMy4uYjBmM2E0N2IxODI5ZjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0xMjYwLDggJiM0MzsxMjYwLDkgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdC8qIFJldHJ5IHRoZSBFU1NBIGluc3RydWN0aW9uICovXG4gXHRcdGt2bV9zMzkwX3JldHJ5X2luc3RyKHZjcHUpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4tXHRcdFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19sb2NrKVxuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiYjNDM7XHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9jcnN0ZV93YWxrX3JhbmdlJiMzNDssCiAgICAmIzM0O2dtYXBfY3JlYXRlX3NoYWRvdyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2NtbWFfZF9jb3VudF9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEl0IGZpeGVzIGEgYnVnIGluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgd2hlcmUgdGhlIHJldHVybiBjb2RlIHdhcyBpZ25vcmVkLCByZXNvbHZlcyBhIGRlYWRsb2NrIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGJ5IHVzaW5nIGB3cml0ZV90cnlsb2NrYCwgZml4ZXMgYSBkYXRhIHJhY2UgaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29ycmVjdHMgbWlncmF0aW9uIHN0b3AgbG9naWMgaW4gYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGFkanVzdHMgdGhlIHRpbWluZyBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1OGM3OWVhNGFjMjRjNDAxNzRhODkzZGRiYjU3ODVhODAyYTJkNWIxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxODoxNjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCmluZGV4IDVmMTk2MGVjOTgyZDA0Li5lZDQyNTlkMTc2Mjk1NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCkBAIC01NzAsNiAmIzQzOzU3MCw4IEBAIHN0YXRpYyBsb25nIGRhdF9jcnN0ZV93YWxrX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHN0cnVjdCBjcnN0X3RhYmxlICp0YWJsCiAJCQllbHNlIGlmICh3YWxrLSZndDtvcHMtJmd0O3B0ZV9lbnRyeSkKIAkJCQlyYyA9IGRhdF9wdGVfd2Fsa19yYW5nZShtYXgoc3RhcnQsIGN1ciksIG1pbihlbmQsIG5leHQpLAogCQkJCQkJCWRlcmVmZXJlbmNlX3BtZChjcnN0ZS5wbWQpLCB3YWxrKTsKJiM0MzsJCQlpZiAocmMpCiYjNDM7CQkJCWJyZWFrOwogCQl9CiAJfQogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZ21hcC5jIGIvYXJjaC9zMzkwL2t2bS9nbWFwLmMKaW5kZXggMjk4ZmJhZWNlYzI4ZDUuLjhhYmI0ZjU1YjMwNmJhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2dtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2dtYXAuYwpAQCAtMTM3NCw4ICYjNDM7MTM3NCwxMyBAQCBzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZQogCQkJLyogT25seSBhbGxvdyBvbmUgcmVhbC1zcGFjZSBnbWFwIHNoYWRvdy4gKi8KIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2csICZhbXA7cGFyZW50LSZndDtjaGlsZHJlbiwgbGlzdCkgewogCQkJCWlmIChzZy0mZ3Q7Z3Vlc3RfYXNjZS5yKSB7Ci0JCQkJCXNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCAmYW1wO3BhcmVudC0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJCWlmICh3cml0ZV90cnlsb2NrKCZhbXA7cGFyZW50LSZndDtrdm0tJmd0O21tdV9sb2NrKSkgewogCQkJCQkJZ21hcF91bnNoYWRvdyhzZyk7CiYjNDM7CQkJCQkJd3JpdGVfdW5sb2NrKCZhbXA7cGFyZW50LSZndDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJCQkJCX0gZWxzZSB7CiYjNDM7CQkJCQkJZ21hcF9wdXQobmV3KTsKJiM0MzsJCQkJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKJiM0MzsJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDIzYzgxNzU5NWUyOGQ1Li5kZWVjNjczYTkyMDY1NyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtOTU1LDcgJiM0Mzs5NTUsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcCkKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX1MzOTBfVVNFUl9PUEVSRVhFQzoKIAkJVk1fRVZFTlQoa3ZtLCAzLCAmIzM0OyVzJiMzNDssICYjMzQ7RU5BQkxFOiBDQVBfUzM5MF9VU0VSX09QRVJFWEVDJiMzNDspOwotCQlrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlYyA9IDE7CiYjNDM7CQlXUklURV9PTkNFKGt2bS0mZ3Q7YXJjaC51c2VyX29wZXJleGVjLCAxKTsKIAkJaWNwdF9vcGVyZXhjX29uX2FsbF92Y3B1cyhrdm0pOwogCQlyID0gMDsKIAkJYnJlYWs7CkBAIC0xMjgwLDggJiM0MzsxMjgwLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKQogCSAqIFBHU1RFcyBtaWdodCBoYXZlIGNtbWFfZCBzZXQuCiAJICovCiAJV1JJVEVfT05DRShrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUsIDApOwotCWlmIChrdm0tJmd0O2FyY2gudXNlX2NtbWEpCi0JCWt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUT1BfTUlHUkFUSU9OKTsKJiM0MzsJaWYgKCFrdm0tJmd0O2FyY2gudXNlX2NtbWEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJa3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pOwogCS8qIENsZWFyIGNtbWFfZCBvbiBhbGwgZXhpc3RpbmcgUEdTVEVzIGFuZCBzZXQgY21tYV9kaXJ0eV9wYWdlcyB0byAwLiAqLwogCWdtYXBfc2V0X2NtbWFfYWxsX2NsZWFuKGt2bS0mZ3Q7YXJjaC5nbWFwKTsKIAlhdG9taWM2NF9zZXQoJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcywgMCk7CkBAIC0yMzg0LDcgJiM0MzsyMzg2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSwKIAogCXNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCAmYW1wO2t2bS0mZ3Q7YXJjaC5nbWFwLSZndDtmbGFncyk7CiAKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmx0Oz0gMCA/IHIgOiAtRUZBVUxUOwogfQogCiAvKioKQEAgLTM2MDQsMTAgJiM0MzszNjA2LDggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtlcGR4ID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmVwZHg7CiAJcHJlZW1wdF9lbmFibGUoKTsKIAltdXRleF91bmxvY2soJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2xvY2spOwotCWlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKLQkJdmNwdS0mZ3Q7YXJjaC5nbWFwID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmdtYXA7CiYjNDM7CWlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpCiAJCXNjYV9hZGRfdmNwdSh2Y3B1KTsKLQl9CiAJaWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtJmd0O2t2bSwgNzQpIHx8IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX2luc3RyMCB8fAogCSAgICB2Y3B1LSZndDtrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlYykKIAkJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2ljdGwgfD0gSUNUTF9PUEVSRVhDOwpAQCAtMzg1MCw2ICYjNDM7Mzg1MCw4IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXZjcHUtJmd0O2FyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5nbWFwLCAtMVVMKTsKIAkJaWYgKCF2Y3B1LSZndDthcmNoLmdtYXApCiAJCQlnb3RvIG91dF9mcmVlX3NpZV9ibG9jazsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXZjcHUtJmd0O2FyY2guZ21hcCA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5nbWFwOwogCX0KIAogCVZNX0VWRU5UKHZjcHUtJmd0O2t2bSwgMywgJiMzNDtjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwJiMzNDssCkBAIC01NzkyLDExICYjNDM7NTc5NCwxOSBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CWlmIChwZ3N0ZV9vZihwdGVwKS0mZ3Q7Y21tYV9kKQomIzQzOwkJYXRvbWljNjRfZGVjKHdhbGstJmd0O3ByaXYpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiAJCQkJY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LAogCQkJCWVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTsKIAlzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyA9IE5VTEw7CiAJaW50IHJjID0gMDsKIApAQCAtNTgxMCw2ICYjNDM7NTgyMCwxMiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAl9CiAKIAlzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgJmFtcDtrdm0tJmd0O21tdV9sb2NrKSB7CiYjNDM7CQlpZiAoa3ZtLSZndDthcmNoLm1pZ3JhdGlvbl9tb2RlICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnVzZV9jbW1hKSB7CiYjNDM7CQkJX2RhdF93YWxrX2dmbl9yYW5nZShvbGQtJmd0O2Jhc2VfZ2ZuLCBvbGQtJmd0O2Jhc2VfZ2ZuICYjNDM7IG9sZC0mZ3Q7bnBhZ2VzLAomIzQzOwkJCQkJICAgIGt2bS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCAmYW1wO29wcywgREFUX1dBTEtfSUdOX0hPTEVTLAomIzQzOwkJCQkJICAgICZhbXA7a3ZtLSZndDthcmNoLmNtbWFfZGlydHlfcGFnZXMpOwomIzQzOwkJfQomIzQzOwogCQlzd2l0Y2ggKGNoYW5nZSkgewogCQljYXNlIEtWTV9NUl9ERUxFVEU6CiAJCQlyYyA9IGRhdF9kZWxldGVfc2xvdChtYywga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2UsIG9sZC0mZ3Q7YmFzZV9nZm4sIG9sZC0mZ3Q7bnBhZ2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmMKaW5kZXggYWQwZGRjNDMzYTczYzMuLmIwZjNhNDdiMTgyOWYyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMTI2MCw4ICYjNDM7MTI2MCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqLwogCQlrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTsKIAl9IGVsc2UgewotCQlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCQlpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7CiYjNDM7CQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzbG90c19sb2NrKQomIzQzOwkJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwogCQlpZiAoaSAmbHQ7IDApCiAJCQlyZXR1cm4gaTsKIAkJLyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIHMzOTAgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0b3VjaGluZyB0aGUgYGFyY2gvczM5MC9rdm0vYCBhcmVhLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHBpZWNlIGJ5IHBpZWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBmYWlybHkgbG93LWxldmVsIGNvZGUgYW5kIHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwgY3JpdGljYWwgYXJlYXMgd2l0aGluIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpGaXJzdCwgYGFyY2gvczM5MC9rdm0vZGF0LmNgLiBUaGUgY2hhbmdlIGhlcmUgaXMgYSBzaW1wbGUgYGlmIChyYykgYnJlYWs7YCBhZnRlciBjYWxsaW5nIGBkYXRfcHRlX3dhbGtfcmFuZ2VgIHdpdGhpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGVycm9yLWhhbmRsaW5nIGVuaGFuY2VtZW50IGluIHRoZSBEQVQgKER5bmFtaWMgQWRkcmVzcyBUcmFuc2xhdGlvbikgd2Fsay4KCk5leHQsIGBhcmNoL3MzOTAva3ZtL2dtYXAuY2AgaGFzIGEgbW9yZSBpbnRlcmVzdGluZyBjaGFuZ2UgaW4gYGdtYXBfY3JlYXRlX3NoYWRvd2AuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBzaW1wbGUgd3JpdGUgbG9jayB3aXRoIGBzY29wZWRfZ3VhcmRgLCBidXQgdGhpcyBwYXRjaCByZXBsYWNlZCBpdCB3aXRoIGB3cml0ZV90cnlsb2NrYC4gSWYgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLCB3ZSBub3cgZ3JhY2VmdWxseSByZXR1cm4gYW4gYEVBR0FJTmAgZXJyb3IuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgdG8gdGhlIGxvY2tpbmcgc3RyYXRlZ3kuIEl0IGFwcGVhcnMgdG8gbWFrZSB0aGUgb3BlcmF0aW9uIG1vcmUgcmVzaWxpZW50IHRvIGxvY2sgY29udGVudGlvbi4KCk5vdywgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgaGFzIGEgbW9yZSBzaWduaWZpY2FudCBiYXRjaCBvZiBjaGFuZ2VzLiBJbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCB0aGUgYXNzaWdubWVudCBga3ZtLSZndDthcmNoLnVzZXJfb3BlcmV4ZWMgPSAxO2AgaXMgcmVwbGFjZWQgd2l0aCBgV1JJVEVfT05DRShrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlYywgMSk7YC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbXVsdGktdGhyZWFkZWQgc2NlbmFyaW8sIGFuZCBlbnN1cmluZyBhdG9taWMgdXBkYXRlcyB0byBzaGFyZWQgbWVtb3J5LiBJbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBhIGxvZ2ljIGludmVyc2lvbiBpcyBhZGRlZCB3aGVyZSBga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdGAgaXMgc2tpcHBlZCBpZiBga3ZtLSZndDthcmNoLnVzZV9jbW1hYCBpcyBmYWxzZS4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGJ1ZyBmaXggb3Igb3B0aW1pemF0aW9uLiBXaXRoaW4gYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHNsaWdodGx5IGNoYW5nZWQgdG8gcHJldmVudCBzdWNjZXNzLCBpZiBhIGZhaWx1cmUgb2NjdXJyZWQuIFRoZSBjb2RlIGZyb20gYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgbW92aW5nIGB2Y3B1LSZndDthcmNoLmdtYXAgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcDtgIHRvIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgaXMgbWlub3I7IGl0IGNoYW5nZXMgd2hlbiB0aGUgZ21hcCBpcyBpbml0aWFsaXplZCBmb3IgdGhlIHZDUFUuIEZpbmFsbHksIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIHRoZXJlJiMzOTtzIGEgbmV3IGBjbW1hX2RfY291bnRfcHRlYCBhbmQgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCB3aGVuIGEgbWVtb3J5IHNsb3QgaXMgZGVsZXRlZC4gVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCBjbW1hIGRpcnR5IHBhZ2UgYWNjb3VudGluZy4KCkZpbmFsbHksIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AgaW50cm9kdWNlcyBhIGBzY29wZWRfZ3VhcmRgIGFyb3VuZCB0aGUgYHNsb3RzX2xvY2tgIG11dGV4IGluIGBoYW5kbGVfZXNzYWAgd2hlbiBjYWxsaW5nIGBfX2RvX2Vzc2FgLiBUaGlzIG1ha2VzIEVTU0EgKEVuaGFuY2VkIFN5c3RlbSBTdG9yYWdlIEFyY2hpdGVjdHVyZSkgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcgc2FmZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHNsb3QgbG9jay4KCkluIHN1bW1hcnksIHRoaXMgc2VyaWVzIHRvdWNoZXMgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggbG9ja2luZyBpbXByb3ZlbWVudHMsIGEgZmV3IGFyY2hpdGVjdHVyYWwgb3B0aW1pemF0aW9ucywgRVNTQSBpbnN0cnVjdGlvbiBoYW5kbGluZyB3aXRoIG11dGV4IHByb3RlY3Rpb24sIGFuZCBnbWFwIGhhbmRsaW5nLiBJdCBhcHBlYXJzIHRvIGZvY3VzIG9uIHJlZmluaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwcm90ZWN0aW5nIGNyaXRpY2FsIHJlZ2lvbnMuIFRoaXMgY29tYmluYXRpb24gb2YgZnVuY3Rpb25hbGl0eSBtYWtlcyBpdCBhIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjaGFuZ2VzIHdpdGhpbiBgYXJjaC9zMzkwL2t2bS9gLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGBLVk1gLCB3aGljaCBzaG91bGQgYmUgcmVhZGlseSBhdmFpbGFibGUgaW4gYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgS1ZNYCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgZ2V0dGluZyBhIGxheSBvZiB0aGUgbGFuZC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGdtYXBfY3JlYXRlX3NoYWRvd2AsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kIGBoYW5kbGVfZXNzYWAuCgpSaWdodCBvZmYgdGhlIGJhdCwgSSB3YW50IHRvIGRyaWxsIGRvd24gb24gYGhhbmRsZV9lc3NhYC4gSXQmIzM5O3MgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlciwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0IGNvdWxkIGJlIGEgaG90IHBhdGguIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgd2hlcmUgSSB3YW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgpgZ21hcF9jcmVhdGVfc2hhZG93YCwgZnJvbSBhIHF1aWNrIGdsYW5jZSwgbG9va3MgdG8gYmUgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgYSBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0aGVyZSwgb2YgY291cnNlLCBidXQgdGhhdCYjMzk7cyB0aGUgaW5pdGlhbCBoeXBvdGhlc2lzLgoKYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyB0cmlnZ2VyZWQgZHVyaW5nIG1pZ3JhdGlvbiBzdG9wcGluZy4gR29vZCB0byBrbm93LCBidXQgbGlrZWx5IG5vdCBhIGNvcmUgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4KCk5vdywgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLi4uIHRoYXQgc21lbGxzIGxpa2UgYW4gaW9jdGwgY2FsbCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdDsgdGhhdCBjb250ZXh0IGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyOTA9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjM0Ni0gKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMzQ3OnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjM0OC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGt2bV9zMzkwX2NtbWFfbG9nICphcmdzKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI1PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAxNy1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzAxODpcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDE5LVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgczM5MCBLVk0gQ01BIEJpdHMgU2V0dGluZyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY29uZmlybWluZyB3aGF0IEkgc3VzcGVjdGVkLiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AgKmlzKiBpbmRlZWQgaW52b2tlZCB0aHJvdWdoIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIHBhdGguIFRoaXMgbWVhbnMgdGhhdCBmdW5jdGlvbmFsaXR5IGlzIHJlYWNoYWJsZSBmcm9tIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpOb3csIHRoYXQmIzM5O3Mgc2V0dGxlZC4gVGhlIHF1ZXN0aW9uIHRoYXQgaGFzIGFyaXNlbiBpcyB0byBkZXRlcm1pbmUgd2hhdCBwcm9jZXNzIGNhdXNlcyB0aGlzIHNwZWNpZmljIGlvY3RsLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgZ3V0cy4gSXQgaXMgdGltZSB0byBzZWUgd2hlcmUgYGdtYXBfY3JlYXRlX3NoYWRvd2AgZml0cyBpbnRvIGFsbCBvZiB0aGlzLiBNeSBmb2N1cyBpcyBub3cgb24gbWFwcGluZyBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aG9zZSB0d28gY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnbWFwX2NyZWF0ZV9zaGFkb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2dtYXAuYz0xMzAxPXN0YXRpYyBpbnQgZ21hcF9wcm90ZWN0X2FzY2VfdG9wX2xldmVsKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqc2cpXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMyMy0vKipcbmFyY2gvczM5MC9rdm0vZ21hcC5jOjEzMjQ6ICogZ21hcF9jcmVhdGVfc2hhZG93KCkgLSBDcmVhdGUvZmluZCBhIHNoYWRvdyBndWVzdCBhZGRyZXNzIHNwYWNlLlxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMyNS0gKiBAbWM6IFRoZSBjYWNoZSB0byB1c2UgdG8gYWxsb2NhdGUgZGF0IHRhYmxlcy5cbi0tXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzQwLSAqL1xuYXJjaC9zMzkwL2t2bS9nbWFwLmM6MTM0MTpzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZW50LFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0Mi1cdFx0XHRcdHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpXG4tLVxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9MTA4PXZvaWQgX2dtYXBfaGFuZGxlX3ZzaWVfdW5zaGFkb3dfZXZlbnQoc3RydWN0IGdtYXAgKnBhcmVudCwgZ2ZuX3QgZ2ZuKTtcbmFyY2gvczM5MC9rdm0vZ21hcC5oOjEwOTpzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqZ21hcCxcbmFyY2gvczM5MC9rdm0vZ21hcC5oLTExMC1cdFx0XHRcdHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpO1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEzMDA9c3RhdGljIHN0cnVjdCBnbWFwICphY3F1aXJlX2dtYXBfc2hhZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEzMjktYWdhaW46XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMzMwOlx0Z21hcCA9IGdtYXBfY3JlYXRlX3NoYWRvdyh2Y3B1LVx1MDAzZWFyY2gubWMsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgYXNjZSwgZWRhdCk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzMxLVx0aWYgKElTX0VSUihnbWFwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDA4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiDigJMgQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGlzIHVzZWQgaW4gYHZzaWUuY2AsIGFuZCB0aGF0JiMzOTtzIGEga2V5IGZpbGUgZm9yIHVuZGVyc3RhbmRpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBNeSBicmFpbiBpbW1lZGlhdGVseSB3YW50cyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyB1c2Ugd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWMgbG9jYXRpb24uIEkgYW0gc3VyZSB0aGVyZSBhcmUgb3RoZXIgdXNlcywgYnV0IHRoaXMgaXMgY2xlYXJseSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZS4gQSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHByb2Nlc3MgZm9yIGEgZ3Vlc3Qgc3RhcnQgYW5kIHN0b3AsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgRy1tYXAgaXMgY3JlYXRlZCwgdXBkYXRlZCBhbmQgZGVsZXRlZC4KCkdpdmVuIHRoYXQgY29udGV4dCwgaXQgbWFrZXMgc2Vuc2UgdG8gdGhlbiBzaGlmdCBmb2N1cyB0byBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLiBUaGlzIGZ1bmN0aW9uIHNvdW5kcyBsaWtlIGEgbG9naWNhbCBwb2ludCB0byBzZWUgaG93IHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29udGV4dCAoYW5kIHNwZWNpZmljYWxseSB0aGUgc2hhZG93IEctbWFwIGlmIEkgaGFkIHRvIGd1ZXNzKSBpcyBoYW5kbGVkIGR1cmluZyBhIG1pZ3JhdGlvbiBzdG9wLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCByZXNvdXJjZXMgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd291bGQgbmVlZCB0byBiZSBjbGVhbmVkIHVwIG9yIHRyYW5zaXRpb25lZCBhcHByb3ByaWF0ZWx5IGR1cmluZyBhIG1pZ3JhdGlvbiBzdG9wLCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGdtYXBfY3JlYXRlX3NoYWRvd2AgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjExPXN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjIxLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNyY3UgaGVsZCB0byBhdm9pZCByYWNlcyBvbiBtZW1zbG90cywgYW5kIHdpdGhcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIyOiAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyMjMtICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTIyNT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzAtICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI3MTpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjcyLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTI5OD1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMzA4LVx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RPUDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMzA5Olx0XHRyZXMgPSBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEzMTAtXHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzUxPWludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzkwLVx0ICAgICEobmV3LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc5MTpcdFx0V0FSTihrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihrdm0pLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3OTItXHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGVcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipUcmFjaW5nIE1pZ3JhdGlvbiBTdG9wcyBpbiBLVk0vczM5MHgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtaWdyYXRpb24gaXMgc3RvcHBlZCBpbiB0aGUgS1ZNL3MzOTB4IGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZS4gTm93LCB3aGVyZSBpcyAqdGhhdCogY2FsbGVkIGZyb20/IExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgdGVsbHMgbWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCB3aGljaCBJIHJlbWVtYmVyIGlzIGFuIGlvY3RsIGNhbGwsIGFuZCBhbHNvIGZyb20gYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAuIFRoYXQgc2Vjb25kIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgbWlncmF0aW9uIG1pZ2h0IGJlIGludGVycnVwdGVkIGR1cmluZyBtZW1vcnkgcHJlcGFyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlIGlmIHRoZXJlIGFyZSBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuCgpIbW0sIEkgc2hvdWxkIHByb2JhYmx5IHVuZGVyc3RhbmQgdGhlIGBoYW5kbGVfZXNzYWAgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCBtaWdodCByZWxhdGUgdG8gYW55IG1pZ3JhdGlvbiBpc3N1ZXMgdGhhdCBvY2N1ciB3aGVuIHVzaW5nIGl0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gbmV4dCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYz0xMTkwPXN0YXRpYyB2b2lkIF9lc3NhX2NsZWFyX2Nicmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICpjYnJsLCBpbnQgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTUtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjE2OnN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxNy17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4Mz1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjkyLVx0Y2FzZSAweGFiOlxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5MzpcdFx0cmV0dXJuIGhhbmRsZV9lc3NhKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5NC1cdGNhc2UgMHhhZjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluc3RydWN0aW9uIEhhbmRsZXIgYGhhbmRsZV9lc3NhYCoqCgpPa2F5LCBzbyBgaGFuZGxlX2Vzc2FgIGlzIHRyaWdnZXJlZCBieSBga3ZtX3MzOTBfaGFuZGxlX2I5YCwgd2hpY2ggbWFrZXMgaXQgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlci4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBmb2N1cy4gTXkgYXR0ZW50aW9uIHNob3VsZCBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBnbWFwX2NyZWF0ZV9zaGFkb3dgLCBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCwgb2YgY291cnNlLCBgaGFuZGxlX2Vzc2FgIGl0c2VsZi4KCldhaXQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQuIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYSBzdGFuZGFyZCBLVk0gZnVuY3Rpb24uIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCBpcyBhIHNwZWNpZmljIGlvY3RsIGNhbGwsIHdoaWNoIGlzIHZlcnkgcmVsZXZhbnQuIEFuZCBhZ2FpbiwgYGhhbmRsZV9lc3NhYCBpcyB0aGUgdGFyZ2V0IGluc3RydWN0aW9uIGhhbmRsZXIuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYEtWTWAgaXMgdGhlIGdlbmVyYWwgY2F0ZWdvcnksIG9idmlvdXNseS4gQnV0IGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBDTU1BIG9yIHRoZSBFU0EgaW5zdHJ1Y3Rpb24gc2V0IHRoYXQgbWlnaHQgYWZmZWN0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYmVoYXZlPyBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBkaWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q01NQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUzM5MCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHJlYWN0aW9uIHdhcyAmIzM0O05vLCYjMzQ7IGJ1dCB0aGVuIEkgc2F3IGBLVk1fUzM5MF9VQ09OVFJPTGAgYW5kIG15IG1pbmQgc2hpZnRlZC4gVGhpcyBwYXRjaC4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBJIHNlZSB0aGUgY2hhbmdlczogdGhlIHJlbW92YWwgb2YgdGhlIGdtYXAgYXNzaWdubWVudCBjb25kaXRpb25hbCBpbnNpZGUgdGhlIGBrdm1faXNfdWNvbnRyb2xgIGNoZWNrLCBhbmQgdGhlIHN1YnNlcXVlbnQgZ21hcCBpbml0aWFsaXphdGlvbi4gSXQgc2VlbXMgdGhlc2UgY2hhbmdlcyBhcmUgKmFwcGxpZWQgdG8gYm90aCogdWNvbnRyb2wgYW5kIG5vbi11Y29udHJvbCBjb25maWd1cmF0aW9ucy4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhpcyBpc24mIzM5O3QganVzdCBhIHVjb250cm9sLXNwZWNpZmljIGlzc3VlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIElzIHRoaXMgYSBicm9hZGVyIHJlZmFjdG9yaW5nLCBvciBhIGNyaXRpY2FsIGZpeCB0aGF0IGFmZmVjdHMgYWxsIGBLVk1fUzM5MGAgc2V0dXBzPyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gVGltZSB0byBjaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipLVk0gQ29uZmlndXJhdGlvbiBhbmQgRGF0YSBSYW5nZSBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29yZSBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGRlZmluaXRlbHkgY2VudGVyZWQgYXJvdW5kIGBLVk1gLiBUaGF0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIHdlIG5lZWQgdG8gdW5kZXJzdGFuZC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHNvbWV0aGluZyBzcGVjaWZpYywgc3BlY2lmaWNhbGx5IHRoYXQgYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCBmdW5jdGlvbiBvciBtb2R1bGUgb3Igd2hhdGV2ZXIgaXQgaXMuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgYSBrZXkgYXJlYSBmb3IgZXhwbG9yYXRpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhhdCBkb2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbSwgdG8gcmVhbGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIEtWTSBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZGVwZW5kZW5jaWVzIGFuZCBvdXRwdXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXRfY3JzdGVfd2Fsa19yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vZGF0LmM9NTE0PXN0YXRpYyBsb25nIGRhdF9wdGVfd2Fsa19yYW5nZShnZm5fdCBnZm4sIGdmbl90IGVuZCwgc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZGF0X3dhbGsgKncpXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy01MzMtXG5hcmNoL3MzOTAva3ZtL2RhdC5jOjUzNDpzdGF0aWMgbG9uZyBkYXRfY3JzdGVfd2Fsa19yYW5nZShnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBzdHJ1Y3QgY3JzdF90YWJsZSAqdGFibGUsXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTUzNS1cdFx0XHRcdCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYy01NjctXHRcdFx0aWYgKCFpc19wbWQoY3JzdGUpKVxuYXJjaC9zMzkwL2t2bS9kYXQuYzo1Njg6XHRcdFx0XHRyYyA9IGRhdF9jcnN0ZV93YWxrX3JhbmdlKG1heChzdGFydCwgY3VyKSwgbWluKGVuZCwgbmV4dCksXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTU2OS1cdFx0XHRcdFx0XHRcdCAgX2RlcmVmZXJlbmNlX2Nyc3RlKGNyc3RlKSwgd2Fsayk7XG4tLVxuYXJjaC9zMzkwL2t2bS9kYXQuYz01OTU9bG9uZyBfZGF0X3dhbGtfZ2ZuX3JhbmdlKGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIHVuaW9uIGFzY2UgYXNjZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTYxMi1cbmFyY2gvczM5MC9rdm0vZGF0LmM6NjEzOlx0cmV0dXJuIGRhdF9jcnN0ZV93YWxrX3JhbmdlKHN0YXJ0LCBtaW4oZW5kLCBhc2NlX2VuZChhc2NlKSksIHRhYmxlLCBcdTAwMjZ3YWxrKTtcbmFyY2gvczM5MC9rdm0vZGF0LmMtNjE0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4ODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgZm9yIEtWTSBzMzkwIEJ1ZyBGaXhlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgdGhlIGNhbGwgY2hhaW4gdGhhdCBzZWVtcyBtb3N0IHJlbGV2YW50IHN0YXJ0cyB3aXRoIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLiBUaGF0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5OiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgLCBgZ21hcF9jcmVhdGVfc2hhZG93YCwgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhbmQgYGhhbmRsZV9lc3NhYCwgcGx1cyB0aGUgYWZvcmVtZW50aW9uZWQgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gU2luY2UgYF9kYXRfd2Fsa19nZm5fcmFuZ2VgIGlzIHRoZSBleHBvcnRlZCB2ZXJzaW9uLCBidXQgYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCBpcyB0aGUgc3RhdGljLCBJJiMzOTtsbCBzdGljayB3aXRoIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgZm9yIGNsYXJpdHkuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOgoKMS4gIEluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAsIHRoZXkgYWRkZWQgYW4gYGlmIChyYykgYnJlYWs7YCBhZnRlciBgZGF0X3B0ZV93YWxrX3JhbmdlYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgYnVnIHdoZXJlIGByY2Agd2FzIGdldHRpbmcgc3RvbXBlZCBvbiBvciBpZ25vcmVkLiBDbGFzc2ljLgoyLiAgYGdtYXBfY3JlYXRlX3NoYWRvd2AgaXMgY2hhbmdpbmcgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIHRvIGB3cml0ZV90cnlsb2NrYCBhbmQgcmV0dXJuaW5nIGAtRUFHQUlOYCBvbiBmYWlsdXJlLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlIHRvIGF2b2lkIGEgZGVhZGxvY2ssIEkgY2FuIHNlZSB0aGF0LgozLiAgYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCBoYXMgYSBgV1JJVEVfT05DRWAgZm9yIGBrdm0tJmd0O2FyY2gudXNlcl9vcGVyZXhlY2AsIHdoaWNoIG1pdGlnYXRlcyBhIGRhdGEgcmFjZS4gQWx3YXlzIGdvb2QgdG8gc2VlIHRob3NlLgo0LiAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCBub3cgY2hlY2tzIGAha3ZtLSZndDthcmNoLnVzZV9jbW1hYCBhbmQgcmV0dXJucyBlYXJseS4gVGhhdCYjMzk7cyB0YXJnZXRlZCBidWcgZml4aW5nIOKAkyBwcmV2ZW50aW5nIHRoZSBtaWdyYXRpb24gc3RvcCBmcm9tIGRvaW5nIHRoaW5ncyBpdCBzaG91bGRuJiMzOTt0IHdoZW4gQ01NQSBpc24mIzM5O3QgaW4gcGxheS4KNS4gIEluIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgdGhleSYjMzk7cmUgcmV0dXJuaW5nIGByICZsdDs9IDAgPyByIDogLUVGQVVMVDtgLiBGaXhpbmcgdGhhdCBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgYnVnIHRvIHVzZXJzcGFjZSBpcyBhIGdvb2QgdGhpbmcgdG8gZml4Lgo2LiAgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgLyBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGFyZSBqdXN0IG1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgdmNwdS0mZ3Q7YXJjaC5nbWFwYC4KNy4gIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgbm93IGNhbGxzIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgLiBUaGF0JiMzOTtzIHRoYXQgZnVuY3Rpb24gY2FsbCB3ZSBtZW50aW9uZWQgZWFybGllci4KOC4gIGBoYW5kbGVfZXNzYWAgbm93IGluY2x1ZGVzIGBzbG90c19sb2NrYCBhcm91bmQgYF9fZG9fZXNzYWAuIE1ha2VzIHNlbnNlIHRvIGFkZCB0aGF0IGxvY2sgdGhlcmUuCgpMb29rcyBsaWtlIGFsbCB0aGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc291bmQgYW5kIGFkZHJlc3MgcmVhbCBidWdzIHdpdGhpbiB0aGUgS1ZNIHMzOTAgY29udGV4dC4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGlzIGBLVk1gLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2vigKYgeWVzLCBLVk0gaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBuZWVkZWQuCgpOb3csIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG9uIHdoZXRoZXIgYEtWTV9TMzkwX1VDT05UUk9MYCBoYXMgYW55dGhpbmcgdG8gZG8gd2l0aCB0aGVzZSBjaGFuZ2VzLiBMb29raW5nIGF0IHRoZSBjb2RlOgpgYGBjCi0JaWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewotCQl2Y3B1LSZndDthcmNoLmdtYXAgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcDsKJiM0MzsJaWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKIAkJc2NhX2FkZF92Y3B1KHZjcHUpOwotCX0KYGBgClRoZSBwYXRjaCBoYXMgY29kZSB0aGF0IGNoZWNrcyBga3ZtX2lzX3Vjb250cm9sYCByZWdhcmRsZXNzIG9mIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHNvLCBldmVuIHRob3VnaCB0aGUgY29kZSBwYXRoIGlzIGV4ZWN1dGVkIHJlZ2FyZGxlc3MsIEkgbmVlZCB0byBjaGVjayBob3cgYGt2bV9pc191Y29udHJvbGAgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2lzX3Vjb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9nbWFwLmM9ODk9c3RhdGljIHZvaWQgZ21hcF9hZGRfY2hpbGQoc3RydWN0IGdtYXAgKnBhcmVudCwgc3RydWN0IGdtYXAgKmNoaWxkKVxuLS1cbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMi1cbmFyY2gvczM5MC9rdm0vZ21hcC5jOjExMzpcdGlmIChrdm1faXNfdWNvbnRyb2wocGFyZW50LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMTQtXHRcdGNsZWFyX2JpdChHTUFQX0ZMQUdfT1dOU19QQUdFVEFCTEVTLCBcdTAwMjZjaGlsZC1cdTAwM2VmbGFncyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MTM9aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTYtXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjYxNzpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI4MDk9c3RhdGljIGludCBmbGljX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODIyLVx0Y2FzZSBLVk1fREVWX0ZMSUNfQVBGX0VOQUJMRTpcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgyMzpcdFx0aWYgKGt2bV9pc191Y29udHJvbChkZXYtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgyNC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MjctXHRjYXNlIEtWTV9ERVZfRkxJQ19BUEZfRElTQUJMRV9XQUlUOlxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODI4Olx0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGRldi1cdTAwM2Vrdm0pKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODI5LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzExMj1pbnQga3ZtX3NldF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxMjEtXHRjYXNlIEtWTV9JUlFfUk9VVElOR19TMzkwX0FEQVBURVI6XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMxMjI6XHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzEyMy1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NjAyPWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY0NS1cdFx0ciA9IDA7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NjQ2Olx0XHRpZiAoaHBhZ2UgXHUwMDI2XHUwMDI2ICEoa3ZtIFx1MDAyNlx1MDAyNiBrdm1faXNfdWNvbnRyb2woa3ZtKSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjQ3LVx0XHRcdHIgPSAxO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NTAtXHRcdHIgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjY1MTpcdFx0aWYgKGhwYWdlXzJnIFx1MDAyNlx1MDAyNiAhKGt2bSBcdTAwMjZcdTAwMjYga3ZtX2lzX3Vjb250cm9sKGt2bSkpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTY1Mi1cdFx0XHRyID0gMTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NzQ2PWludCBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc1My1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo3NTQ6XHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Nzg4PWludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy04OTItXHRcdFx0ciA9IC1FQlVTWTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo4OTM6XHRcdGVsc2UgaWYgKCFocGFnZSB8fCBrdm0tXHUwMDNlYXJjaC51c2VfY21tYSB8fCBrdm1faXNfdWNvbnRyb2woa3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy04OTQtXHRcdFx0ciA9IC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTkxMy1cdFx0XHRyID0gLUVCVVNZO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjkxNDpcdFx0fSBlbHNlIGlmICghaHBhZ2VfMmcgfHwga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEgfHwga3ZtX2lzX3Vjb250cm9sKGt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05MTUtXHRcdFx0ciA9IC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTk5Mz1zdGF0aWMgaW50IGt2bV9zMzkwX3NldF9tZW1fY29udHJvbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwNDAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTA0MTpcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEwNDItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM0MDE9dm9pZCBrdm1fYXJjaF92Y3B1X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDA4LVx0a3ZtX2NsZWFyX2FzeW5jX3BmX2NvbXBsZXRpb25fcXVldWUodmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQwOTpcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDEwLVx0XHRzY2FfZGVsX3ZjcHUodmNwdSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTItXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzQxMzpcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQxNC1cdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MDgtXHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYwOTpcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjEwLVx0XHRzY2FfYWRkX3ZjcHUodmNwdSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM2OTk9c3RhdGljIGludCBrdm1fczM5MF92Y3B1X3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzcyMy1cdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VlY2IgfD0gRUNCX1RFO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3MjQ6XHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzcyNS1cdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VlY2IgfD0gRUNCX1NQRUNJO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzg2PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNzg3LXtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNzg4Olx0aWYgKCFrdm1faXNfdWNvbnRyb2woa3ZtKSBcdTAwMjZcdTAwMjYgIXNjYV9jYW5fYWRkX3ZjcHUoa3ZtLCBpZCkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc4OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM3OTM9aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg0Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODQ4Olx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODQ5LVx0XHRyYyA9IC1FTk9NRU07XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM4Njgtb3V0X3Vjb250cm9sX3VuaW5pdDpcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODY5Olx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODcwLVx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQzMTc9c3RhdGljIGludCB2Y3B1X3Vjb250cm9sX3RyYW5zbGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90ICpnYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDMyMC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MzIxOlx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MzIyLVx0XHRyYyA9IGdtYXBfdWNhc190cmFuc2xhdGUodmNwdS1cdTAwM2VhcmNoLm1jLCB2Y3B1LVx1MDAzZWFyY2guZ21hcCwgZ2FkZHIpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NTUxPXN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU2NC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTY1Olx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU2Ni1cdFx0cmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUxNz1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1OTctXHRcdHIgPSAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1OTg6XHRcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTk5LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjE1LVx0XHRyID0gLUVJTlZBTDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NjE2Olx0XHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxNy1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTczMj12bV9mYXVsdF90IGt2bV9hcmNoX3ZjcHVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTczNS1cdGlmICgodm1mLVx1MDAzZXBnb2ZmID09IEtWTV9TMzkwX1NJRV9QQUdFX09GRlNFVClcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzM2Olx0XHQgXHUwMDI2XHUwMDI2IChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSkge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MzctXHRcdHZtZi1cdTAwM2VwYWdlID0gdmlydF90b19wYWdlKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzUxPWludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzU1LXtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzU2Olx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pIFx1MDAyNlx1MDAyNiBuZXcgXHUwMDI2XHUwMDI2IG5ldy1cdTAwM2VpZCBcdTAwM2MgS1ZNX1VTRVJfTUVNX1NMT1RTKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01ODc0PWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg3OS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODgwOlx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg4MS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTExMT1zdGF0aWMgaW5saW5lIGludCBpc192Y3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0xMTUtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6MTE2OnN0YXRpYyBpbmxpbmUgaW50IGt2bV9pc191Y29udHJvbChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMTE3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTkKCQkJCQkJCW91dHB1dDogMzA5CgkJCQkJCQl0aG91Z2h0czogODcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYXNvbmluZyBmb3IgS1ZNL3MzOTAgUGF0Y2ggVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQgdG91Y2hlcyBga3ZtX2lzX3Vjb250cm9sYC4gVGhpcyByaW5ncyBhIGJlbGwg4oCTIHRoYXQmIzM5O3MgY29udHJvbGxlZCBieSB0aGUgYEtWTV9TMzkwX1VDT05UUk9MYCBjb25maWcuIFNpbmNlIHRoZSBwYXRjaCBjb2RlIGlzIHVzaW5nIGBrdm1faXNfdWNvbnRyb2xgLCBJIHNob3VsZCBwcm9iYWJseSBlbmFibGUgdGhhdCBjb25maWcgdG8gZW5zdXJlIGJvdGggY29kZSBwYXRocyBhcmUgdGVzdGVkIGZ1bGx5LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzIGF2YWlsYWJsZSBpbiBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYC4gWXVwLCB0aGVyZSBpdCBpczogYCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lcyYjMzQ7YC4gUGVyZmVjdC4gU28gSSYjMzk7bGwgYWRkIGBLVk1fUzM5MF9VQ09OVFJPTGAgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIG5ldyBgRW5hYmxlQ29uZmlnc2Agd2lsbCBpbmNsdWRlIGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgdGhlIGZ1enplcnMgYXJlIGhpdHRpbmcgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJIHNlZToKCiogICBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgCiogICBgZ21hcF9jcmVhdGVfc2hhZG93YAoqICAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYAoqICAgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgCiogICBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gCiogICBgaGFuZGxlX2Vzc2FgCgpga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzIGEgc3RhbmRhcmQgS1ZNIGhvb2ssIGJ1dCBub3QgYSBob3QgcGF0aC4gYGhhbmRsZV9lc3NhYCBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlciwgd2hpY2ggY291bGQgYmUgZnJlcXVlbnRseSBjYWxsZWQgZGVwZW5kaW5nIG9uIHRoZSBndWVzdCYjMzk7cyB3b3JrbG9hZCwgYnV0IGl0JiMzOTtzIHNwZWNpZmljIGVub3VnaC4gYGdtYXBfY3JlYXRlX3NoYWRvd2AgaXMgcmVsZXZhbnQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gIGlzIGltcG9ydGFudCBmb3IgbWlncmF0aW9uLiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AgaXMgYW4gaW9jdGwgY2FsbCwgd2hpY2ggaXMgd29ydGggdGVzdGluZy4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCBpcyBhIHBhZ2UgdGFibGUgd2FsayBmdW5jdGlvbiBhbmQgaXMgc3BlY2lmaWNhbGx5IG1vZGlmaWVkIGhlcmUsIHNvIGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgYSBmb2N1cy4KCkFoLCBJIG1pc3NlZCBvbmUhIFRoZXJlJiMzOTtzIGFsc28gYGNtbWFfZF9jb3VudF9wdGVgLCBhIHN0YXRpYyBmdW5jdGlvbiBhZGRlZCBpbiB0aGUgcGF0Y2guIExldCBtZSBhZGQgdGhhdCB0byB0aGUgbGlzdC4gSSBhbHNvIG5vdGljZWQgdGhhdCBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIGlzIGFsc28gc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIHVwZGF0ZSB0aGUgZm9jdXMgc3ltYm9sczoKCiogICBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgCiogICBgZ21hcF9jcmVhdGVfc2hhZG93YAoqICAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYAoqICAgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgCiogICBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gCiogICBgaGFuZGxlX2Vzc2FgCiogICBgY21tYV9kX2NvdW50X3B0ZWAKClJpZ2h0LCBub3csIGFyZSBgS1ZNYCBhbmQgYEtWTV9TMzkwX1VDT05UUk9MYCBlbm91Z2ggdG8gY292ZXIgYWxsIHRoZSBtb2RpZmljYXRpb25zPyBZZXAsIHRob3NlIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKRmluYWxseSwgSSBuZWVkIHRvIGFydGljdWxhdGUgbXkgcmVhc29uaW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEl0IGFkZHJlc3NlcyBhIHJldHVybiBjb2RlIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgLCByZXNvbHZlcyBhIGRlYWRsb2NrIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIHVzaW5nIGB3cml0ZV90cnlsb2NrYCwgZml4ZXMgYSBkYXRhIHJhY2UgaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29ycmVjdHMgdGhlIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGVuc3VyZXMgdGhlIGNvcnJlY3QgcmV0dXJuIHZhbHVlIG9mIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYWRqdXN0cyB0aGUgdGltaW5nIG9mIGB2Y3B1LSZndDthcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSBhbGwgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBhcmUgbm93IHJlYWNoYWJsZSwgc28gZnV6emluZyB0aGVtIGlzIGNydWNpYWwuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0w8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9TMzkwX1VDT05UUk9MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF0X2Nyc3RlX3dhbGtfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z21hcF9jcmVhdGVfc2hhZG93JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3NldF9jbW1hX2JpdHMmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7Y21tYV9kX2NvdW50X3B0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbi4gSXQgZml4ZXMgYSBidWcgaW4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCB3aGVyZSB0aGUgcmV0dXJuIGNvZGUgd2FzIGlnbm9yZWQsIHJlc29sdmVzIGEgZGVhZGxvY2sgaW4gYGdtYXBfY3JlYXRlX3NoYWRvd2AgYnkgdXNpbmcgYHdyaXRlX3RyeWxvY2tgLCBmaXhlcyBhIGRhdGEgcmFjZSBpbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBjb3JyZWN0cyBtaWdyYXRpb24gc3RvcCBsb2dpYyBpbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYWRqdXN0cyB0aGUgdGltaW5nIG9mIGB2Y3B1LVx1MDAzZWFyY2guZ21hcGAgYXNzaWdubWVudCwgYWRkcyBsb2dpYyB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBhZGRzIGxvY2tpbmcgaW4gYGhhbmRsZV9lc3NhYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEtWTSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjE2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgS1ZNIEZlYXR1cmUqKgoKUmlnaHQsIHNvIGBLVk1fUzM5MF9VQ09OVFJPTGAgaXNuJiMzOTt0IHNob3dpbmcgdXAgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGF0JiMzOTtzLi4uIHVuZXhwZWN0ZWQuIEkgY291bGQgaGF2ZSBzd29ybiBJJiMzOTtkIHNlZW4gaXQgbWVudGlvbmVkIHNvbWV3aGVyZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgbWF5YmUgYW4gb2xkIHBhdGNoIG9yIGEgZHJhZnQgcHJvcG9zYWwuIE9rYXksIGZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE5vIHBvaW50IGluIGFzc3VtaW5nIGFueXRoaW5nIGhlcmUuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGlzIGFjdHVhbGx5IHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSBvciBhIHR5cG8gc29tZXdoZXJlIGluIG15IG5vdGVzLiBCYWNrIHRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIGEgY2xvc2VyIGxvb2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTczCgkJCQkJCQlvdXRwdXQ6IDI5NgoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGNlcnRhaW4gdGhhdCBmZWF0dXJlIHdhc24mIzM5O3QgZGVmaW5lZCwgYnV0IG15IHF1aWNrIHNlYXJjaCBqdXN0IHlpZWxkZWQgKm5vdGhpbmcqLiBUaGUgZnV6emVyIGlzIGNvbXBsYWluaW5nIGFib3V0IGEgbWlzc2luZyBjb25maWd1cmF0aW9uLCBidXQgSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IGl0IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGlzIGlzIHN0cmFuZ2UuIFdoeSBpcyBgc2V0LXJlc3VsdHNgIHRlbGxpbmcgbWUgaXQmIzM5O3Mgbm90IHRoZXJlPwoKSG1tLCBJIGJldCBJIGtub3cgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIE15IGZpcnN0IGd1ZXNzIGlzIHRoYXQgdGhlIGZ1enppbmcgc2V0dXAgaXNuJiMzOTt0IHVzaW5nIHRoZSByaWdodCBhcmNoaXRlY3R1cmUuIE1heWJlIGl0JiMzOTtzIGNvbmZpZ3VyZWQgZm9yIHNvbWV0aGluZyBkaWZmZXJlbnQuIE9yIHBlcmhhcHMgdGhlIHRvb2wgdGhhdCYjMzk7cyBjaGVja2luZyBmb3IgdGhlIGV4aXN0ZW5jZSBpcyBvbmx5IHVzaW5nIHRoZSBnbG9iYWwgS2NvbmZpZyBpbmRleCwgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgbWlzc2luZyBmcm9tIHRoYXQgdmlldy4KCkFscmlnaHQsIG5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzLiBTaW5jZSBLVk0gaXMgZGVmaW5pdGVseSB0aGVyZSwgSSYjMzk7bGwganVzdCByZWx5IG9uIHRoYXQgaW5zdGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhdF9jcnN0ZV93YWxrX3JhbmdlJiMzNDssCiAgICAmIzM0O2dtYXBfY3JlYXRlX3NoYWRvdyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9zZXRfY21tYV9iaXRzJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2NtbWFfZF9jb3VudF9wdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24uIEl0IGZpeGVzIGEgYnVnIGluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgd2hlcmUgdGhlIHJldHVybiBjb2RlIHdhcyBpZ25vcmVkLCByZXNvbHZlcyBhIGRlYWRsb2NrIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGJ5IHVzaW5nIGB3cml0ZV90cnlsb2NrYCwgZml4ZXMgYSBkYXRhIHJhY2UgaW4gYGt2bV92bV9pb2N0bF9lbmFibGVfY2FwYCwgY29ycmVjdHMgbWlncmF0aW9uIHN0b3AgbG9naWMgaW4gYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYCwgZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGFkanVzdHMgdGhlIHRpbWluZyBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXRfY3JzdGVfd2Fsa19yYW5nZSYjMzQ7LAogICAgJiMzNDtnbWFwX2NyZWF0ZV9zaGFkb3cmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfc2V0X2NtbWFfYml0cyYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNzYSYjMzQ7LAogICAgJiMzNDtjbW1hX2RfY291bnRfcHRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIHdoZXJlIHRoZSByZXR1cm4gY29kZSB3YXMgaWdub3JlZCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCBieSB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhZGp1c3RzIHRoZSB0aW1pbmcgb2YgYHZjcHUtXHUwMDNlYXJjaC5nbWFwYCBhc3NpZ25tZW50LCBhZGRzIGxvZ2ljIHRvIGRlY3JlbWVudCBgY21tYV9kaXJ0eV9wYWdlc2AgaW4gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kIGFkZHMgbG9ja2luZyBpbiBgaGFuZGxlX2Vzc2FgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgS1ZNIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjE3LjQ2NTQ2ODQzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTMwNzU2ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhdF9jcnN0ZV93YWxrX3JhbmdlXCIsXG4gICAgXCJnbWFwX2NyZWF0ZV9zaGFkb3dcIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImNtbWFfZF9jb3VudF9wdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbi4gSXQgZml4ZXMgYSBidWcgaW4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCB3aGVyZSB0aGUgcmV0dXJuIGNvZGUgd2FzIGlnbm9yZWQsIHJlc29sdmVzIGEgZGVhZGxvY2sgaW4gYGdtYXBfY3JlYXRlX3NoYWRvd2AgYnkgdXNpbmcgYHdyaXRlX3RyeWxvY2tgLCBmaXhlcyBhIGRhdGEgcmFjZSBpbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBjb3JyZWN0cyBtaWdyYXRpb24gc3RvcCBsb2dpYyBpbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYWRqdXN0cyB0aGUgdGltaW5nIG9mIGB2Y3B1LVxcdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjoxNy40NjU0NzQwNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNjI2MjQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU4Yzc5ZWE0YWMyNGM0MDE3NGE4OTNkZGJiNTc4NWE4MDJhMmQ1YjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAxODoxNjoxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbmluZGV4IDVmMTk2MGVjOTgyZDA0Li5lZDQyNTlkMTc2Mjk1NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbkBAIC01NzAsNiArNTcwLDggQEAgc3RhdGljIGxvbmcgZGF0X2Nyc3RlX3dhbGtfcmFuZ2UoZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgc3RydWN0IGNyc3RfdGFibGUgKnRhYmxcXG4gXFx0XFx0XFx0ZWxzZSBpZiAod2Fsay1cXHUwMDNlb3BzLVxcdTAwM2VwdGVfZW50cnkpXFxuIFxcdFxcdFxcdFxcdHJjID0gZGF0X3B0ZV93YWxrX3JhbmdlKG1heChzdGFydCwgY3VyKSwgbWluKGVuZCwgbmV4dCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRlcmVmZXJlbmNlX3BtZChjcnN0ZS5wbWQpLCB3YWxrKTtcXG4rXFx0XFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHJldHVybiByYztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xcbmluZGV4IDI5OGZiYWVjZWMyOGQ1Li44YWJiNGY1NWIzMDZiYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2dtYXAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXFxuQEAgLTEzNzQsOCArMTM3NCwxMyBAQCBzdHJ1Y3QgZ21hcCAqZ21hcF9jcmVhdGVfc2hhZG93KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3QgZ21hcCAqcGFyZVxcbiBcXHRcXHRcXHQvKiBPbmx5IGFsbG93IG9uZSByZWFsLXNwYWNlIGdtYXAgc2hhZG93LiAqL1xcbiBcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNnLCBcXHUwMDI2cGFyZW50LVxcdTAwM2VjaGlsZHJlbiwgbGlzdCkge1xcbiBcXHRcXHRcXHRcXHRpZiAoc2ctXFx1MDAzZWd1ZXN0X2FzY2Uucikge1xcbi1cXHRcXHRcXHRcXHRcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNnBhcmVudC1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHdyaXRlX3RyeWxvY2soXFx1MDAyNnBhcmVudC1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaykpIHtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Z21hcF91bnNoYWRvdyhzZyk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2cGFyZW50LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Z21hcF9wdXQobmV3KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XFxuK1xcdFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5pbmRleCAyM2M4MTc1OTVlMjhkNS4uZGVlYzY3M2E5MjA2NTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTk1NSw3ICs5NTUsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX0NBUF9TMzkwX1VTRVJfT1BFUkVYRUM6XFxuIFxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIiVzXFxcIiwgXFxcIkVOQUJMRTogQ0FQX1MzOTBfVVNFUl9PUEVSRVhFQ1xcXCIpO1xcbi1cXHRcXHRrdm0tXFx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYyA9IDE7XFxuK1xcdFxcdFdSSVRFX09OQ0Uoa3ZtLVxcdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMsIDEpO1xcbiBcXHRcXHRpY3B0X29wZXJleGNfb25fYWxsX3ZjcHVzKGt2bSk7XFxuIFxcdFxcdHIgPSAwO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMTI4MCw4ICsxMjgwLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHQgKiBQR1NURXMgbWlnaHQgaGF2ZSBjbW1hX2Qgc2V0LlxcbiBcXHQgKi9cXG4gXFx0V1JJVEVfT05DRShrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUsIDApO1xcbi1cXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hKVxcbi1cXHRcXHRrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KGt2bSwgS1ZNX1JFUV9TVE9QX01JR1JBVElPTik7XFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUT1BfTUlHUkFUSU9OKTtcXG4gXFx0LyogQ2xlYXIgY21tYV9kIG9uIGFsbCBleGlzdGluZyBQR1NURXMgYW5kIHNldCBjbW1hX2RpcnR5X3BhZ2VzIHRvIDAuICovXFxuIFxcdGdtYXBfc2V0X2NtbWFfYWxsX2NsZWFuKGt2bS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4gXFx0YXRvbWljNjRfc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcywgMCk7XFxuQEAgLTIzODQsNyArMjM4Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcbiBcXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzYwNCwxMCArMzYwNiw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWVwZHggPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZXBkeDtcXG4gXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbi1cXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5nbWFwO1xcbitcXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRzY2FfYWRkX3ZjcHUodmNwdSk7XFxuLVxcdH1cXG4gXFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXFx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxcbiBcXHQgICAgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcXG5AQCAtMzg1MCw2ICszODUwLDggQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9uZXdfY2hpbGQodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xcbiBcXHRcXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2guZ21hcClcXG4gXFx0XFx0XFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5nbWFwO1xcbiBcXHR9XFxuIFxcbiBcXHRWTV9FVkVOVCh2Y3B1LVxcdTAwM2Vrdm0sIDMsIFxcXCJjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXFxcIixcXG5AQCAtNTc5MiwxMSArNTc5NCwxOSBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4re1xcbitcXHRpZiAocGdzdGVfb2YocHRlcCktXFx1MDAzZWNtbWFfZClcXG4rXFx0XFx0YXRvbWljNjRfZGVjKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxcbiB7XFxuK1xcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcXG4gXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xcbiBcXHRpbnQgcmMgPSAwO1xcbiBcXG5AQCAtNTgxMCw2ICs1ODIwLDEyIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHR9XFxuIFxcbiBcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4rXFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEpIHtcXG4rXFx0XFx0XFx0X2RhdF93YWxrX2dmbl9yYW5nZShvbGQtXFx1MDAzZWJhc2VfZ2ZuLCBvbGQtXFx1MDAzZWJhc2VfZ2ZuICsgb2xkLVxcdTAwM2VucGFnZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgXFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0c3dpdGNoIChjaGFuZ2UpIHtcXG4gXFx0XFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxcbiBcXHRcXHRcXHRyYyA9IGRhdF9kZWxldGVfc2xvdChtYywga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIG9sZC1cXHUwMDNlYmFzZV9nZm4sIG9sZC1cXHUwMDNlbnBhZ2VzKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbmluZGV4IGFkMGRkYzQzM2E3M2MzLi5iMGYzYTQ3YjE4MjlmMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuQEAgLTEyNjAsOCArMTI2MCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xcbiBcXHRcXHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuLVxcdFxcdFxcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcXG4rXFx0XFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzbG90c19sb2NrKVxcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4rXFx0XFx0XFx0XFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjoxOC4zNzI3MzY3MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjIzNDc0MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhdF9jcnN0ZV93YWxrX3JhbmdlXCIsXG4gICAgXCJnbWFwX2NyZWF0ZV9zaGFkb3dcIixcbiAgICBcImt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fczM5MF9zZXRfY21tYV9iaXRzXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImNtbWFfZF9jb3VudF9wdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbi4gSXQgZml4ZXMgYSBidWcgaW4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCB3aGVyZSB0aGUgcmV0dXJuIGNvZGUgd2FzIGlnbm9yZWQsIHJlc29sdmVzIGEgZGVhZGxvY2sgaW4gYGdtYXBfY3JlYXRlX3NoYWRvd2AgYnkgdXNpbmcgYHdyaXRlX3RyeWxvY2tgLCBmaXhlcyBhIGRhdGEgcmFjZSBpbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCBjb3JyZWN0cyBtaWdyYXRpb24gc3RvcCBsb2dpYyBpbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYWRqdXN0cyB0aGUgdGltaW5nIG9mIGB2Y3B1LVxcdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4Yzc5ZWE0YWMyNGM0MDE3NGE4OTNkZGJiNTc4NWE4MDJhMmQ1YjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjE2OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbmluZGV4IDVmMTk2MGVjOTgyZDA0Li5lZDQyNTlkMTc2Mjk1NCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC01NzAsNiArNTcwLDggQEAgc3RhdGljIGxvbmcgZGF0X2Nyc3RlX3dhbGtfcmFuZ2UoZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgc3RydWN0IGNyc3RfdGFibGUgKnRhYmxcbiBcdFx0XHRlbHNlIGlmICh3YWxrLVx1MDAzZW9wcy1cdTAwM2VwdGVfZW50cnkpXG4gXHRcdFx0XHRyYyA9IGRhdF9wdGVfd2Fsa19yYW5nZShtYXgoc3RhcnQsIGN1ciksIG1pbihlbmQsIG5leHQpLFxuIFx0XHRcdFx0XHRcdFx0ZGVyZWZlcmVuY2VfcG1kKGNyc3RlLnBtZCksIHdhbGspO1xuK1x0XHRcdGlmIChyYylcbitcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nbWFwLmMgYi9hcmNoL3MzOTAva3ZtL2dtYXAuY1xuaW5kZXggMjk4ZmJhZWNlYzI4ZDUuLjhhYmI0ZjU1YjMwNmJhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9nbWFwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZ21hcC5jXG5AQCAtMTM3NCw4ICsxMzc0LDEzIEBAIHN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlXG4gXHRcdFx0LyogT25seSBhbGxvdyBvbmUgcmVhbC1zcGFjZSBnbWFwIHNoYWRvdy4gKi9cbiBcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNnLCBcdTAwMjZwYXJlbnQtXHUwMDNlY2hpbGRyZW4sIGxpc3QpIHtcbiBcdFx0XHRcdGlmIChzZy1cdTAwM2VndWVzdF9hc2NlLnIpIHtcbi1cdFx0XHRcdFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNnBhcmVudC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRcdGlmICh3cml0ZV90cnlsb2NrKFx1MDAyNnBhcmVudC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spKSB7XG4gXHRcdFx0XHRcdFx0Z21hcF91bnNoYWRvdyhzZyk7XG4rXHRcdFx0XHRcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0XHRcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0XHRcdGdtYXBfcHV0KG5ldyk7XG4rXHRcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XG4rXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMjNjODE3NTk1ZTI4ZDUuLmRlZWM2NzNhOTIwNjU3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC05NTUsNyArOTU1LDcgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX1MzOTBfVVNFUl9PUEVSRVhFQzpcbiBcdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcIiVzXCIsIFwiRU5BQkxFOiBDQVBfUzM5MF9VU0VSX09QRVJFWEVDXCIpO1xuLVx0XHRrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjID0gMTtcbitcdFx0V1JJVEVfT05DRShrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjLCAxKTtcbiBcdFx0aWNwdF9vcGVyZXhjX29uX2FsbF92Y3B1cyhrdm0pO1xuIFx0XHRyID0gMDtcbiBcdFx0YnJlYWs7XG5AQCAtMTI4MCw4ICsxMjgwLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIFx0ICogUEdTVEVzIG1pZ2h0IGhhdmUgY21tYV9kIHNldC5cbiBcdCAqL1xuIFx0V1JJVEVfT05DRShrdm0tXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSwgMCk7XG4tXHRpZiAoa3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEpXG4tXHRcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1NUT1BfTUlHUkFUSU9OKTtcbitcdGlmICgha3ZtLVx1MDAzZWFyY2gudXNlX2NtbWEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfU1RPUF9NSUdSQVRJT04pO1xuIFx0LyogQ2xlYXIgY21tYV9kIG9uIGFsbCBleGlzdGluZyBQR1NURXMgYW5kIHNldCBjbW1hX2RpcnR5X3BhZ2VzIHRvIDAuICovXG4gXHRnbWFwX3NldF9jbW1hX2FsbF9jbGVhbihrdm0tXHUwMDNlYXJjaC5nbWFwKTtcbiBcdGF0b21pYzY0X3NldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzLCAwKTtcbkBAIC0yMzg0LDcgKzIzODYsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLyoqXG5AQCAtMzYwNCwxMCArMzYwNiw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZXBkeCA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZXBkeDtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXA7XG4rXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHNjYV9hZGRfdmNwdSh2Y3B1KTtcbi1cdH1cbiBcdGlmICh0ZXN0X2t2bV9mYWNpbGl0eSh2Y3B1LVx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9pbnN0cjAgfHxcbiBcdCAgICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlaWN0bCB8PSBJQ1RMX09QRVJFWEM7XG5AQCAtMzg1MCw2ICszODUwLDggQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuIFx0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5nbWFwKVxuIFx0XHRcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xuK1x0fSBlbHNlIHtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXA7XG4gXHR9XG4gXG4gXHRWTV9FVkVOVCh2Y3B1LVx1MDAzZWt2bSwgMywgXCJjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXCIsXG5AQCAtNTc5MiwxMSArNTc5NCwxOSBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4re1xuK1x0aWYgKHBnc3RlX29mKHB0ZXApLVx1MDAzZWNtbWFfZClcbitcdFx0YXRvbWljNjRfZGVjKHdhbGstXHUwMDNlcHJpdik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcbiBcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtNTgxMCw2ICs1ODIwLDEyIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0fVxuIFxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hKSB7XG4rXHRcdFx0X2RhdF93YWxrX2dmbl9yYW5nZShvbGQtXHUwMDNlYmFzZV9nZm4sIG9sZC1cdTAwM2ViYXNlX2dmbiArIG9sZC1cdTAwM2VucGFnZXMsXG4rXHRcdFx0XHRcdCAgICBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2a3ZtLVx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XG4rXHRcdH1cbitcbiBcdFx0c3dpdGNoIChjaGFuZ2UpIHtcbiBcdFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxuIFx0XHRcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZW5wYWdlcyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuaW5kZXggYWQwZGRjNDMzYTczYzMuLmIwZjNhNDdiMTgyOWYyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5AQCAtMTI2MCw4ICsxMjYwLDkgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdC8qIFJldHJ5IHRoZSBFU1NBIGluc3RydWN0aW9uICovXG4gXHRcdGt2bV9zMzkwX3JldHJ5X2luc3RyKHZjcHUpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4tXHRcdFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2xvY2spXG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MTguMzcyNzM4NDgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU2NDU5OTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIHMzOTAgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hpbmcgdGhlIGBhcmNoL3MzOTAva3ZtL2AgYXJlYS4gTGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHBpZWNlIGJ5IHBpZWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBmYWlybHkgbG93LWxldmVsIGNvZGUgYW5kIHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwgY3JpdGljYWwgYXJlYXMgd2l0aGluIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cbkZpcnN0LCBgYXJjaC9zMzkwL2t2bS9kYXQuY2AuIFRoZSBjaGFuZ2UgaGVyZSBpcyBhIHNpbXBsZSBgaWYgKHJjKSBicmVhaztgIGFmdGVyIGNhbGxpbmcgYGRhdF9wdGVfd2Fsa19yYW5nZWAgd2l0aGluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZXJyb3ItaGFuZGxpbmcgZW5oYW5jZW1lbnQgaW4gdGhlIERBVCAoRHluYW1pYyBBZGRyZXNzIFRyYW5zbGF0aW9uKSB3YWxrLlxuXG5OZXh0LCBgYXJjaC9zMzkwL2t2bS9nbWFwLmNgIGhhcyBhIG1vcmUgaW50ZXJlc3RpbmcgY2hhbmdlIGluIGBnbWFwX2NyZWF0ZV9zaGFkb3dgLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIGEgc2ltcGxlIHdyaXRlIGxvY2sgd2l0aCBgc2NvcGVkX2d1YXJkYCwgYnV0IHRoaXMgcGF0Y2ggcmVwbGFjZWQgaXQgd2l0aCBgd3JpdGVfdHJ5bG9ja2AuIElmIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZCwgd2Ugbm93IGdyYWNlZnVsbHkgcmV0dXJuIGFuIGBFQUdBSU5gIGVycm9yLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlIHRvIHRoZSBsb2NraW5nIHN0cmF0ZWd5LiBJdCBhcHBlYXJzIHRvIG1ha2UgdGhlIG9wZXJhdGlvbiBtb3JlIHJlc2lsaWVudCB0byBsb2NrIGNvbnRlbnRpb24uXG5cbk5vdywgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgaGFzIGEgbW9yZSBzaWduaWZpY2FudCBiYXRjaCBvZiBjaGFuZ2VzLiBJbiBga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXBgLCB0aGUgYXNzaWdubWVudCBga3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYyA9IDE7YCBpcyByZXBsYWNlZCB3aXRoIGBXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMsIDEpO2AuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGEgbXVsdGktdGhyZWFkZWQgc2NlbmFyaW8sIGFuZCBlbnN1cmluZyBhdG9taWMgdXBkYXRlcyB0byBzaGFyZWQgbWVtb3J5LiBJbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBhIGxvZ2ljIGludmVyc2lvbiBpcyBhZGRlZCB3aGVyZSBga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdGAgaXMgc2tpcHBlZCBpZiBga3ZtLVx1MDAzZWFyY2gudXNlX2NtbWFgIGlzIGZhbHNlLiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgYnVnIGZpeCBvciBvcHRpbWl6YXRpb24uIFdpdGhpbiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIHRoZSByZXR1cm4gdmFsdWUgaXMgc2xpZ2h0bHkgY2hhbmdlZCB0byBwcmV2ZW50IHN1Y2Nlc3MsIGlmIGEgZmFpbHVyZSBvY2N1cnJlZC4gVGhlIGNvZGUgZnJvbSBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCBtb3ZpbmcgYHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwO2AgdG8gYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCBpcyBtaW5vcjsgaXQgY2hhbmdlcyB3aGVuIHRoZSBnbWFwIGlzIGluaXRpYWxpemVkIGZvciB0aGUgdkNQVS4gRmluYWxseSwgaW4gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgdGhlcmUncyBhIG5ldyBgY21tYV9kX2NvdW50X3B0ZWAgYW5kIGxvZ2ljIHRvIGRlY3JlbWVudCBgY21tYV9kaXJ0eV9wYWdlc2Agd2hlbiBhIG1lbW9yeSBzbG90IGlzIGRlbGV0ZWQuIFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggY21tYSBkaXJ0eSBwYWdlIGFjY291bnRpbmcuXG5cbkZpbmFsbHksIGBhcmNoL3MzOTAva3ZtL3ByaXYuY2AgaW50cm9kdWNlcyBhIGBzY29wZWRfZ3VhcmRgIGFyb3VuZCB0aGUgYHNsb3RzX2xvY2tgIG11dGV4IGluIGBoYW5kbGVfZXNzYWAgd2hlbiBjYWxsaW5nIGBfX2RvX2Vzc2FgLiBUaGlzIG1ha2VzIEVTU0EgKEVuaGFuY2VkIFN5c3RlbSBTdG9yYWdlIEFyY2hpdGVjdHVyZSkgaW5zdHJ1Y3Rpb24gaGFuZGxpbmcgc2FmZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHNsb3QgbG9jay5cblxuSW4gc3VtbWFyeSwgdGhpcyBzZXJpZXMgdG91Y2hlcyBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aCBsb2NraW5nIGltcHJvdmVtZW50cywgYSBmZXcgYXJjaGl0ZWN0dXJhbCBvcHRpbWl6YXRpb25zLCBFU1NBIGluc3RydWN0aW9uIGhhbmRsaW5nIHdpdGggbXV0ZXggcHJvdGVjdGlvbiwgYW5kIGdtYXAgaGFuZGxpbmcuIEl0IGFwcGVhcnMgdG8gZm9jdXMgb24gcmVmaW5pbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHByb3RlY3RpbmcgY3JpdGljYWwgcmVnaW9ucy4gVGhpcyBjb21iaW5hdGlvbiBvZiBmdW5jdGlvbmFsaXR5IG1ha2VzIGl0IGEgaGlnaCBwcmlvcml0eSBmb3IgZnV6emluZy4gR2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggY2hhbmdlcyB3aXRoaW4gYGFyY2gvczM5MC9rdm0vYCwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBgS1ZNYCwgd2hpY2ggc2hvdWxkIGJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDI1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MjcuOTM3MzQwMjM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTgxNDg5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjI4LjIyOTE2NjAwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDkwNDcyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEtWTWAgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgZ2V0dGluZyBhIGxheSBvZiB0aGUgbGFuZC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGdtYXBfY3JlYXRlX3NoYWRvd2AsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kIGBoYW5kbGVfZXNzYWAuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gZHJpbGwgZG93biBvbiBgaGFuZGxlX2Vzc2FgLiBJdCdzIGFuIGluc3RydWN0aW9uIGhhbmRsZXIsIHdoaWNoIGxpa2VseSBtZWFucyBpdCBjb3VsZCBiZSBhIGhvdCBwYXRoLiBUaGF0J3MgaW1tZWRpYXRlbHkgd2hlcmUgSSB3YW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cbmBnbWFwX2NyZWF0ZV9zaGFkb3dgLCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCBsb29rcyB0byBiZSByZWxhdGVkIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBhIHNpbWlsYXIgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdGhlcmUsIG9mIGNvdXJzZSwgYnV0IHRoYXQncyB0aGUgaW5pdGlhbCBoeXBvdGhlc2lzLlxuXG5ga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MgdHJpZ2dlcmVkIGR1cmluZyBtaWdyYXRpb24gc3RvcHBpbmcuIEdvb2QgdG8ga25vdywgYnV0IGxpa2VseSBub3QgYSBjb3JlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suXG5cbk5vdywgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLi4uIHRoYXQgc21lbGxzIGxpa2UgYW4gaW9jdGwgY2FsbCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdDsgdGhhdCBjb250ZXh0IGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5MiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjozMi45MzgyMTU1NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNzk0NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTIyOTA9c3RhdGljIGludCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMzQ2LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMzQ3OnN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIzNDgtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qga3ZtX3MzOTBfY21tYV9sb2cgKmFyZ3MpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNT1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAxNy1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDE4OlxcdFxcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDE5LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MzMuMjYxMDE3MjY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODg5Njc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgczM5MCBLVk0gQ01BIEJpdHMgU2V0dGluZyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBjb25maXJtaW5nIHdoYXQgSSBzdXNwZWN0ZWQuIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCAqaXMqIGluZGVlZCBpbnZva2VkIHRocm91Z2ggdGhlIGBrdm1fYXJjaF92bV9pb2N0bGAgcGF0aC4gVGhpcyBtZWFucyB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgcmVhY2hhYmxlIGZyb20gdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCB0aGF0J3Mgc2V0dGxlZC4gVGhlIHF1ZXN0aW9uIHRoYXQgaGFzIGFyaXNlbiBpcyB0byBkZXRlcm1pbmUgd2hhdCBwcm9jZXNzIGNhdXNlcyB0aGlzIHNwZWNpZmljIGlvY3RsLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBndXRzLiBJdCBpcyB0aW1lIHRvIHNlZSB3aGVyZSBgZ21hcF9jcmVhdGVfc2hhZG93YCBmaXRzIGludG8gYWxsIG9mIHRoaXMuIE15IGZvY3VzIGlzIG5vdyBvbiBtYXBwaW5nIG91dCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRob3NlIHR3byBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6MzYuNjU5OTE2NjY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTIxNTcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWFwX2NyZWF0ZV9zaGFkb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9nbWFwLmM9MTMwMT1zdGF0aWMgaW50IGdtYXBfcHJvdGVjdF9hc2NlX3RvcF9sZXZlbChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKnNnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTMyMy0vKipcXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzI0OiAqIGdtYXBfY3JlYXRlX3NoYWRvdygpIC0gQ3JlYXRlL2ZpbmQgYSBzaGFkb3cgZ3Vlc3QgYWRkcmVzcyBzcGFjZS5cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYy0xMzI1LSAqIEBtYzogVGhlIGNhY2hlIHRvIHVzZSB0byBhbGxvY2F0ZSBkYXQgdGFibGVzLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0MC0gKi9cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMzQxOnN0cnVjdCBnbWFwICpnbWFwX2NyZWF0ZV9zaGFkb3coc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBnbWFwICpwYXJlbnQsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTM0Mi1cXHRcXHRcXHRcXHR1bmlvbiBhc2NlIGFzY2UsIGludCBlZGF0X2xldmVsKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmg9MTA4PXZvaWQgX2dtYXBfaGFuZGxlX3ZzaWVfdW5zaGFkb3dfZXZlbnQoc3RydWN0IGdtYXAgKnBhcmVudCwgZ2ZuX3QgZ2ZuKTtcXG5hcmNoL3MzOTAva3ZtL2dtYXAuaDoxMDk6c3RydWN0IGdtYXAgKmdtYXBfY3JlYXRlX3NoYWRvdyhzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGdtYXAgKmdtYXAsXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmgtMTEwLVxcdFxcdFxcdFxcdHVuaW9uIGFzY2UgYXNjZSwgaW50IGVkYXRfbGV2ZWwpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTMwMD1zdGF0aWMgc3RydWN0IGdtYXAgKmFjcXVpcmVfZ21hcF9zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzI5LWFnYWluOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzMzA6XFx0Z21hcCA9IGdtYXBfY3JlYXRlX3NoYWRvdyh2Y3B1LVxcdTAwM2VhcmNoLm1jLCB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgYXNjZSwgZWRhdCk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMzMS1cXHRpZiAoSVNfRVJSKGdtYXApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjozNi45MDExMzk0MDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM4OTA3ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTmVzdGVkIFZpcnR1YWxpemF0aW9uIOKAkyBBIFF1aWNrIENoZWNrKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZ21hcF9jcmVhdGVfc2hhZG93YCBpcyB1c2VkIGluIGB2c2llLmNgLCBhbmQgdGhhdCdzIGEga2V5IGZpbGUgZm9yIHVuZGVyc3RhbmRpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBNeSBicmFpbiBpbW1lZGlhdGVseSB3YW50cyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGl0cyB1c2Ugd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWMgbG9jYXRpb24uIEkgYW0gc3VyZSB0aGVyZSBhcmUgb3RoZXIgdXNlcywgYnV0IHRoaXMgaXMgY2xlYXJseSBhIHJlbGV2YW50IGFyZWEgdG8gZXhhbWluZS4gQSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHByb2Nlc3MgZm9yIGEgZ3Vlc3Qgc3RhcnQgYW5kIHN0b3AsIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgRy1tYXAgaXMgY3JlYXRlZCwgdXBkYXRlZCBhbmQgZGVsZXRlZC5cblxuR2l2ZW4gdGhhdCBjb250ZXh0LCBpdCBtYWtlcyBzZW5zZSB0byB0aGVuIHNoaWZ0IGZvY3VzIHRvIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAuIFRoaXMgZnVuY3Rpb24gc291bmRzIGxpa2UgYSBsb2dpY2FsIHBvaW50IHRvIHNlZSBob3cgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0IChhbmQgc3BlY2lmaWNhbGx5IHRoZSBzaGFkb3cgRy1tYXAgaWYgSSBoYWQgdG8gZ3Vlc3MpIGlzIGhhbmRsZWQgZHVyaW5nIGEgbWlncmF0aW9uIHN0b3AuIEl0J3MgbGlrZWx5IHRoYXQgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdvdWxkIG5lZWQgdG8gYmUgY2xlYW5lZCB1cCBvciB0cmFuc2l0aW9uZWQgYXBwcm9wcmlhdGVseSBkdXJpbmcgYSBtaWdyYXRpb24gc3RvcCwgc28gdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGdtYXBfY3JlYXRlX3NoYWRvd2AgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDA4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6NDAuNDQwMDUwNDU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzYyMzU3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMTE9c3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMS0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjIyOiAqIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTIyMy0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyMjU9c3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzAtICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyNzE6c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyNzIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyOTg9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMzA4LVxcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUT1A6XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEzMDk6XFx0XFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTMxMC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzUxPWludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3OTAtXFx0ICAgICEobmV3LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc5MTpcXHRcXHRXQVJOKGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKGt2bSksXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3OTItXFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIHN0b3AgbWlncmF0aW9uIG1vZGVcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTY6NDEuMTc2MjkzMzQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDIyMjk2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqVHJhY2luZyBNaWdyYXRpb24gU3RvcHMgaW4gS1ZNL3MzOTB4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1pZ3JhdGlvbiBpcyBzdG9wcGVkIGluIHRoZSBLVk0vczM5MHggaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBOb3csIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQgZnJvbT8gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIHRlbGxzIG1lIGl0J3MgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCB3aGljaCBJIHJlbWVtYmVyIGlzIGFuIGlvY3RsIGNhbGwsIGFuZCBhbHNvIGZyb20gYGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbmAuIFRoYXQgc2Vjb25kIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgbWlncmF0aW9uIG1pZ2h0IGJlIGludGVycnVwdGVkIGR1cmluZyBtZW1vcnkgcHJlcGFyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlIGlmIHRoZXJlIGFyZSBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuXG5cbkhtbSwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCB0aGUgYGhhbmRsZV9lc3NhYCBmdW5jdGlvbiB0byBzZWUgaG93IGl0IG1pZ2h0IHJlbGF0ZSB0byBhbnkgbWlncmF0aW9uIGlzc3VlcyB0aGF0IG9jY3VyIHdoZW4gdXNpbmcgaXQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIG5leHQgdG8gc2VlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo0NC40MTg1MjUzMjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTA0MjYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfZXNzYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz0xMTkwPXN0YXRpYyB2b2lkIF9lc3NhX2NsZWFyX2Nicmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICpjYnJsLCBpbnQgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxNS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjE2OnN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4Mz1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTItXFx0Y2FzZSAweGFiOlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTM6XFx0XFx0cmV0dXJuIGhhbmRsZV9lc3NhKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTQtXFx0Y2FzZSAweGFmOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo0NC42OTc1NzM5NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3NTM5Nzg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEluc3RydWN0aW9uIEhhbmRsZXIgYGhhbmRsZV9lc3NhYCoqXG5cbk9rYXksIHNvIGBoYW5kbGVfZXNzYWAgaXMgdHJpZ2dlcmVkIGJ5IGBrdm1fczM5MF9oYW5kbGVfYjlgLCB3aGljaCBtYWtlcyBpdCBhbiBpbnN0cnVjdGlvbiBoYW5kbGVyLiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgdGhlIGZvY3VzLiBNeSBhdHRlbnRpb24gc2hvdWxkIGJlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZDogYGdtYXBfY3JlYXRlX3NoYWRvd2AsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kLCBvZiBjb3Vyc2UsIGBoYW5kbGVfZXNzYWAgaXRzZWxmLlxuXG5XYWl0LCBsZXQncyBzdGVwIGJhY2sgYSBiaXQuIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYSBzdGFuZGFyZCBLVk0gZnVuY3Rpb24uIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCBpcyBhIHNwZWNpZmljIGlvY3RsIGNhbGwsIHdoaWNoIGlzIHZlcnkgcmVsZXZhbnQuIEFuZCBhZ2FpbiwgYGhhbmRsZV9lc3NhYCBpcyB0aGUgdGFyZ2V0IGluc3RydWN0aW9uIGhhbmRsZXIuXG5cblRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCBpcyB0aGUgZ2VuZXJhbCBjYXRlZ29yeSwgb2J2aW91c2x5LiBCdXQgYXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIENNTUEgb3IgdGhlIEVTQSBpbnN0cnVjdGlvbiBzZXQgdGhhdCBtaWdodCBhZmZlY3QgaG93IHRoZXNlIGZ1bmN0aW9ucyBiZWhhdmU/IFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZGlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjQ5LjA3Mjk3NDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDgzNDYwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ01NQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjQ5LjMzMzgxOTUzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ3OTA0MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFMzOTAgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIFwiTm8sXCIgYnV0IHRoZW4gSSBzYXcgYEtWTV9TMzkwX1VDT05UUk9MYCBhbmQgbXkgbWluZCBzaGlmdGVkLiBUaGlzIHBhdGNoLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIEkgc2VlIHRoZSBjaGFuZ2VzOiB0aGUgcmVtb3ZhbCBvZiB0aGUgZ21hcCBhc3NpZ25tZW50IGNvbmRpdGlvbmFsIGluc2lkZSB0aGUgYGt2bV9pc191Y29udHJvbGAgY2hlY2ssIGFuZCB0aGUgc3Vic2VxdWVudCBnbWFwIGluaXRpYWxpemF0aW9uLiBJdCBzZWVtcyB0aGVzZSBjaGFuZ2VzIGFyZSAqYXBwbGllZCB0byBib3RoKiB1Y29udHJvbCBhbmQgbm9uLXVjb250cm9sIGNvbmZpZ3VyYXRpb25zLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGlzIGlzbid0IGp1c3QgYSB1Y29udHJvbC1zcGVjaWZpYyBpc3N1ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgYnJvYWRlciByZWZhY3RvcmluZywgb3IgYSBjcml0aWNhbCBmaXggdGhhdCBhZmZlY3RzIGFsbCBgS1ZNX1MzOTBgIHNldHVwcz8gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRpbWUgdG8gY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTUyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE2OjUzLjY4MTcyNzMzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDM3MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo1My45MDMxNzA0OTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNjU0MTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gYW5kIERhdGEgUmFuZ2UgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBjb25maWd1cmF0aW9uIEknbSB3b3JraW5nIHdpdGggaXMgZGVmaW5pdGVseSBjZW50ZXJlZCBhcm91bmQgYEtWTWAuIFRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHNvbWV0aGluZyBzcGVjaWZpYywgc3BlY2lmaWNhbGx5IHRoYXQgYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCBmdW5jdGlvbiBvciBtb2R1bGUgb3Igd2hhdGV2ZXIgaXQgaXMuIEknbSB0aGlua2luZywgdGhpcyBpcyBhIGtleSBhcmVhIGZvciBleHBsb3JhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGF0IGRvZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLCB0byByZWFsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgS1ZNIHNldHVwLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGRlcGVuZGVuY2llcyBhbmQgb3V0cHV0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo1Ni41Mzk3MTYxNTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjUxMzUyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXRfY3JzdGVfd2Fsa19yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2RhdC5jPTUxND1zdGF0aWMgbG9uZyBkYXRfcHRlX3dhbGtfcmFuZ2UoZ2ZuX3QgZ2ZuLCBnZm5fdCBlbmQsIHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IGRhdF93YWxrICp3KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy01MzMtXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo1MzQ6c3RhdGljIGxvbmcgZGF0X2Nyc3RlX3dhbGtfcmFuZ2UoZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgc3RydWN0IGNyc3RfdGFibGUgKnRhYmxlLFxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNTM1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jLTU2Ny1cXHRcXHRcXHRpZiAoIWlzX3BtZChjcnN0ZSkpXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo1Njg6XFx0XFx0XFx0XFx0cmMgPSBkYXRfY3JzdGVfd2Fsa19yYW5nZShtYXgoc3RhcnQsIGN1ciksIG1pbihlbmQsIG5leHQpLFxcbmFyY2gvczM5MC9rdm0vZGF0LmMtNTY5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgX2RlcmVmZXJlbmNlX2Nyc3RlKGNyc3RlKSwgd2Fsayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2RhdC5jPTU5NT1sb25nIF9kYXRfd2Fsa19nZm5fcmFuZ2UoZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgdW5pb24gYXNjZSBhc2NlLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTItXFxuYXJjaC9zMzkwL2t2bS9kYXQuYzo2MTM6XFx0cmV0dXJuIGRhdF9jcnN0ZV93YWxrX3JhbmdlKHN0YXJ0LCBtaW4oZW5kLCBhc2NlX2VuZChhc2NlKSksIHRhYmxlLCBcXHUwMDI2d2Fsayk7XFxuYXJjaC9zMzkwL2t2bS9kYXQuYy02MTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxNjo1Ni44NDIyMzcwNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MTEzMDc0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgZm9yIEtWTSBzMzkwIEJ1ZyBGaXhlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIHRoZSBjYWxsIGNoYWluIHRoYXQgc2VlbXMgbW9zdCByZWxldmFudCBzdGFydHMgd2l0aCBgX2RhdF93YWxrX2dmbl9yYW5nZWAgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gVGhhdCBtZWFucyB0aGVzZSBmdW5jdGlvbnMgYXJlIGtleTogYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCwgYGdtYXBfY3JlYXRlX3NoYWRvd2AsIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCwgYW5kIGBoYW5kbGVfZXNzYWAsIHBsdXMgdGhlIGFmb3JlbWVudGlvbmVkIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAuIFNpbmNlIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCBpcyB0aGUgZXhwb3J0ZWQgdmVyc2lvbiwgYnV0IGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgaXMgdGhlIHN0YXRpYywgSSdsbCBzdGljayB3aXRoIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAgZm9yIGNsYXJpdHkuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczpcblxuMS4gIEluIGBkYXRfY3JzdGVfd2Fsa19yYW5nZWAsIHRoZXkgYWRkZWQgYW4gYGlmIChyYykgYnJlYWs7YCBhZnRlciBgZGF0X3B0ZV93YWxrX3JhbmdlYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgYnVnIHdoZXJlIGByY2Agd2FzIGdldHRpbmcgc3RvbXBlZCBvbiBvciBpZ25vcmVkLiBDbGFzc2ljLlxuMi4gIGBnbWFwX2NyZWF0ZV9zaGFkb3dgIGlzIGNoYW5naW5nIHRoZSBsb2NraW5nIG1lY2hhbmlzbSB0byBgd3JpdGVfdHJ5bG9ja2AgYW5kIHJldHVybmluZyBgLUVBR0FJTmAgb24gZmFpbHVyZS4gVGhhdCdzIGEgZ29vZCBtb3ZlIHRvIGF2b2lkIGEgZGVhZGxvY2ssIEkgY2FuIHNlZSB0aGF0LlxuMy4gIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAgaGFzIGEgYFdSSVRFX09OQ0VgIGZvciBga3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlY2AsIHdoaWNoIG1pdGlnYXRlcyBhIGRhdGEgcmFjZS4gQWx3YXlzIGdvb2QgdG8gc2VlIHRob3NlLlxuNC4gIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAgbm93IGNoZWNrcyBgIWt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hYCBhbmQgcmV0dXJucyBlYXJseS4gVGhhdCdzIHRhcmdldGVkIGJ1ZyBmaXhpbmcg4oCTIHByZXZlbnRpbmcgdGhlIG1pZ3JhdGlvbiBzdG9wIGZyb20gZG9pbmcgdGhpbmdzIGl0IHNob3VsZG4ndCB3aGVuIENNTUEgaXNuJ3QgaW4gcGxheS5cbjUuICBJbiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIHRoZXkncmUgcmV0dXJuaW5nIGByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO2AuIEZpeGluZyB0aGF0IHBvc2l0aXZlIHJldHVybiB2YWx1ZSBidWcgdG8gdXNlcnNwYWNlIGlzIGEgZ29vZCB0aGluZyB0byBmaXguXG42LiAgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAgLyBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGFyZSBqdXN0IG1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgLlxuNy4gIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgbm93IGNhbGxzIGBfZGF0X3dhbGtfZ2ZuX3JhbmdlYCB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgLiBUaGF0J3MgdGhhdCBmdW5jdGlvbiBjYWxsIHdlIG1lbnRpb25lZCBlYXJsaWVyLlxuOC4gIGBoYW5kbGVfZXNzYWAgbm93IGluY2x1ZGVzIGBzbG90c19sb2NrYCBhcm91bmQgYF9fZG9fZXNzYWAuIE1ha2VzIHNlbnNlIHRvIGFkZCB0aGF0IGxvY2sgdGhlcmUuXG5cbkxvb2tzIGxpa2UgYWxsIHRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgYWRkcmVzcyByZWFsIGJ1Z3Mgd2l0aGluIHRoZSBLVk0gczM5MCBjb250ZXh0LlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGtleSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBpcyBgS1ZNYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNr4oCmIHllcywgS1ZNIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gbmVlZGVkLlxuXG5Ob3csIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG9uIHdoZXRoZXIgYEtWTV9TMzkwX1VDT05UUk9MYCBoYXMgYW55dGhpbmcgdG8gZG8gd2l0aCB0aGVzZSBjaGFuZ2VzLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuYGBgY1xuLVx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwO1xuK1x0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRzY2FfYWRkX3ZjcHUodmNwdSk7XG4tXHR9XG5gYGBcblRoZSBwYXRjaCBoYXMgY29kZSB0aGF0IGNoZWNrcyBga3ZtX2lzX3Vjb250cm9sYCByZWdhcmRsZXNzIG9mIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHNvLCBldmVuIHRob3VnaCB0aGUgY29kZSBwYXRoIGlzIGV4ZWN1dGVkIHJlZ2FyZGxlc3MsIEkgbmVlZCB0byBjaGVjayBob3cgYGt2bV9pc191Y29udHJvbGAgaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MDcuNzUzNTQ3MjgxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk1NDgyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2lzX3Vjb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZ21hcC5jPTg5PXN0YXRpYyB2b2lkIGdtYXBfYWRkX2NoaWxkKHN0cnVjdCBnbWFwICpwYXJlbnQsIHN0cnVjdCBnbWFwICpjaGlsZClcXG4tLVxcbmFyY2gvczM5MC9rdm0vZ21hcC5jLTExMi1cXG5hcmNoL3MzOTAva3ZtL2dtYXAuYzoxMTM6XFx0aWYgKGt2bV9pc191Y29udHJvbChwYXJlbnQtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9nbWFwLmMtMTE0LVxcdFxcdGNsZWFyX2JpdChHTUFQX0ZMQUdfT1dOU19QQUdFVEFCTEVTLCBcXHUwMDI2Y2hpbGQtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NjEzPWludCBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy02MTYtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo2MTc6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjE4LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgwOT1zdGF0aWMgaW50IGZsaWNfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgyMi1cXHRjYXNlIEtWTV9ERVZfRkxJQ19BUEZfRU5BQkxFOlxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgyMzpcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGRldi1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MjQtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MjctXFx0Y2FzZSBLVk1fREVWX0ZMSUNfQVBGX0RJU0FCTEVfV0FJVDpcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mjg6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChkZXYtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODI5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMTEyPWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTIxLVxcdGNhc2UgS1ZNX0lSUV9ST1VUSU5HX1MzOTBfQURBUFRFUjpcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMxMjI6XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzEyMy1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz02MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NDUtXFx0XFx0ciA9IDA7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjY0NjpcXHRcXHRpZiAoaHBhZ2UgXFx1MDAyNlxcdTAwMjYgIShrdm0gXFx1MDAyNlxcdTAwMjYga3ZtX2lzX3Vjb250cm9sKGt2bSkpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy02NDctXFx0XFx0XFx0ciA9IDE7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjUwLVxcdFxcdHIgPSAwO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo2NTE6XFx0XFx0aWYgKGhwYWdlXzJnIFxcdTAwMjZcXHUwMDI2ICEoa3ZtIFxcdTAwMjZcXHUwMDI2IGt2bV9pc191Y29udHJvbChrdm0pKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNjUyLVxcdFxcdFxcdHIgPSAxO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc0Nj1pbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTc1My1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NzU0OlxcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNzU1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTc4OD1pbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy04OTItXFx0XFx0XFx0ciA9IC1FQlVTWTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6ODkzOlxcdFxcdGVsc2UgaWYgKCFocGFnZSB8fCBrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEgfHwga3ZtX2lzX3Vjb250cm9sKGt2bSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTg5NC1cXHRcXHRcXHRyID0gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05MTMtXFx0XFx0XFx0ciA9IC1FQlVTWTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6OTE0OlxcdFxcdH0gZWxzZSBpZiAoIWhwYWdlXzJnIHx8IGt2bS1cXHUwMDNlYXJjaC51c2VfY21tYSB8fCBrdm1faXNfdWNvbnRyb2woa3ZtKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy05MTUtXFx0XFx0XFx0ciA9IC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9OTkzPXN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X21lbV9jb250cm9sKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDQwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMDQxOlxcdFxcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTA0Mi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNDAxPXZvaWQga3ZtX2FyY2hfdmNwdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDA4LVxcdGt2bV9jbGVhcl9hc3luY19wZl9jb21wbGV0aW9uX3F1ZXVlKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozNDA5OlxcdGlmICgha3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTAtXFx0XFx0c2NhX2RlbF92Y3B1KHZjcHUpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM0MTM6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM0MTQtXFx0XFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWNoaWxkcmVuX2xvY2spXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYwOC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM2MDk6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxMC1cXHRcXHRzY2FfYWRkX3ZjcHUodmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzY5OT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM3MjMtXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWVjYiB8PSBFQ0JfVEU7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3MjQ6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzcyNS1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZWNiIHw9IEVDQl9TUEVDSTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzg2PWludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc4Ny17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM3ODg6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2woa3ZtKSBcXHUwMDI2XFx1MDAyNiAhc2NhX2Nhbl9hZGRfdmNwdShrdm0sIGlkKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzc4OS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNzkzPWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg0Ny1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzg0ODpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg0OS1cXHRcXHRyYyA9IC1FTk9NRU07XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzg2OC1vdXRfdWNvbnRyb2xfdW5pbml0OlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODY5OlxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODcwLVxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDMxNz1zdGF0aWMgaW50IHZjcHVfdWNvbnRyb2xfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKmdhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzMjAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQzMjE6XFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQzMjItXFx0XFx0cmMgPSBnbWFwX3VjYXNfdHJhbnNsYXRlKHZjcHUtXFx1MDAzZWFyY2gubWMsIHZjcHUtXFx1MDAzZWFyY2guZ21hcCwgZ2FkZHIpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ1NTE9c3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NjQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1NjU6XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTY2LVxcdFxcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUxNz1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU5Ny1cXHRcXHRyID0gLUVJTlZBTDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU5ODpcXHRcXHRpZiAoIWt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTk5LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MTUtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MTY6XFx0XFx0aWYgKCFrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxNy1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NzMyPXZtX2ZhdWx0X3Qga3ZtX2FyY2hfdmNwdV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MzUtXFx0aWYgKCh2bWYtXFx1MDAzZXBnb2ZmID09IEtWTV9TMzkwX1NJRV9QQUdFX09GRlNFVClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTczNjpcXHRcXHQgXFx1MDAyNlxcdTAwMjYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSkge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzM3LVxcdFxcdHZtZi1cXHUwMDNlcGFnZSA9IHZpcnRfdG9fcGFnZSh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc1MT1pbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzU1LXtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTc1NjpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkgXFx1MDAyNlxcdTAwMjYgbmV3IFxcdTAwMjZcXHUwMDI2IG5ldy1cXHUwMDNlaWQgXFx1MDAzYyBLVk1fVVNFUl9NRU1fU0xPVFMpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3NTctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTg3ND1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg3OS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg4MDpcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4ODEtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9MTExPXN0YXRpYyBpbmxpbmUgaW50IGlzX3ZjcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMTE1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDoxMTY6c3RhdGljIGlubGluZSBpbnQga3ZtX2lzX3Vjb250cm9sKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMTE3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MDcuOTYzMTAxNzI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTIyNTY0MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBmb3IgS1ZNL3MzOTAgUGF0Y2ggVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgYGt2bV9pc191Y29udHJvbGAuIFRoaXMgcmluZ3MgYSBiZWxsIOKAkyB0aGF0J3MgY29udHJvbGxlZCBieSB0aGUgYEtWTV9TMzkwX1VDT05UUk9MYCBjb25maWcuIFNpbmNlIHRoZSBwYXRjaCBjb2RlIGlzIHVzaW5nIGBrdm1faXNfdWNvbnRyb2xgLCBJIHNob3VsZCBwcm9iYWJseSBlbmFibGUgdGhhdCBjb25maWcgdG8gZW5zdXJlIGJvdGggY29kZSBwYXRocyBhcmUgdGVzdGVkIGZ1bGx5LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzIGF2YWlsYWJsZSBpbiBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYC4gWXVwLCB0aGVyZSBpdCBpczogYFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wiYC4gUGVyZmVjdC4gU28gSSdsbCBhZGQgYEtWTV9TMzkwX1VDT05UUk9MYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgbmV3IGBFbmFibGVDb25maWdzYCB3aWxsIGluY2x1ZGUgYEtWTWAgYW5kIGBLVk1fUzM5MF9VQ09OVFJPTGAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEkndmUgZ290IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emVycyBhcmUgaGl0dGluZyB0aGUgbW9kaWZpZWQgY29kZSBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlOlxuXG4qICAgYGRhdF9jcnN0ZV93YWxrX3JhbmdlYFxuKiAgIGBnbWFwX2NyZWF0ZV9zaGFkb3dgXG4qICAgYGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uYFxuKiAgIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYFxuKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmBcbiogICBgaGFuZGxlX2Vzc2FgXG5cbmBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgaXMgYSBzdGFuZGFyZCBLVk0gaG9vaywgYnV0IG5vdCBhIGhvdCBwYXRoLiBgaGFuZGxlX2Vzc2FgIGlzIGludGVyZXN0aW5nOyBpdCdzIGFuIGluc3RydWN0aW9uIGhhbmRsZXIsIHdoaWNoIGNvdWxkIGJlIGZyZXF1ZW50bHkgY2FsbGVkIGRlcGVuZGluZyBvbiB0aGUgZ3Vlc3QncyB3b3JrbG9hZCwgYnV0IGl0J3Mgc3BlY2lmaWMgZW5vdWdoLiBgZ21hcF9jcmVhdGVfc2hhZG93YCBpcyByZWxldmFudCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAgaXMgaW1wb3J0YW50IGZvciBtaWdyYXRpb24uIGBrdm1fczM5MF9zZXRfY21tYV9iaXRzYCBpcyBhbiBpb2N0bCBjYWxsLCB3aGljaCBpcyB3b3J0aCB0ZXN0aW5nLiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIGlzIGEgcGFnZSB0YWJsZSB3YWxrIGZ1bmN0aW9uIGFuZCBpcyBzcGVjaWZpY2FsbHkgbW9kaWZpZWQgaGVyZSwgc28gZGVmaW5pdGVseSBuZWVkcyB0byBiZSBhIGZvY3VzLlxuXG5BaCwgSSBtaXNzZWQgb25lISBUaGVyZSdzIGFsc28gYGNtbWFfZF9jb3VudF9wdGVgLCBhIHN0YXRpYyBmdW5jdGlvbiBhZGRlZCBpbiB0aGUgcGF0Y2guIExldCBtZSBhZGQgdGhhdCB0byB0aGUgbGlzdC4gSSBhbHNvIG5vdGljZWQgdGhhdCBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIGlzIGFsc28gc3RhdGljLlxuXG5Pa2F5LCBsZXQncyB1cGRhdGUgdGhlIGZvY3VzIHN5bWJvbHM6XG5cbiogICBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgXG4qICAgYGdtYXBfY3JlYXRlX3NoYWRvd2BcbiogICBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gXG4qICAgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgXG4qICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYFxuKiAgIGBoYW5kbGVfZXNzYWBcbiogICBgY21tYV9kX2NvdW50X3B0ZWBcblxuUmlnaHQsIG5vdywgYXJlIGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgIGVub3VnaCB0byBjb3ZlciBhbGwgdGhlIG1vZGlmaWNhdGlvbnM/IFllcCwgdGhvc2Ugc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBhcnRpY3VsYXRlIG15IHJlYXNvbmluZy4gVGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBhZGRyZXNzZXMgYSByZXR1cm4gY29kZSBidWcgaW4gYGRhdF9jcnN0ZV93YWxrX3JhbmdlYCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIHRoZSBtaWdyYXRpb24gc3RvcCBsb2dpYyBpbiBga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25gLCBlbnN1cmVzIHRoZSBjb3JyZWN0IHJldHVybiB2YWx1ZSBvZiBga3ZtX3MzOTBfc2V0X2NtbWFfYml0c2AsIGFkanVzdHMgdGhlIHRpbWluZyBvZiBgdmNwdS1cdTAwM2VhcmNoLmdtYXBgIGFzc2lnbm1lbnQsIGFkZHMgbG9naWMgdG8gZGVjcmVtZW50IGBjbW1hX2RpcnR5X3BhZ2VzYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYWRkcyBsb2NraW5nIGluIGBoYW5kbGVfZXNzYWAuIFRoZXNlIGFyZSBhbGwgY29yZSBLVk0gZmVhdHVyZXMgdGhhdCBhcmUgbm93IHJlYWNoYWJsZSwgc28gZnV6emluZyB0aGVtIGlzIGNydWNpYWwuXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUxOSwiT3V0cHV0VG9rZW5zIjozMDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTc6MjAuODg1NjcwNDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzI3NzAwMzkyLCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTCIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TMzkwX1VDT05UUk9MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X2Nyc3RlX3dhbGtfcmFuZ2VcIixcbiAgICBcImdtYXBfY3JlYXRlX3NoYWRvd1wiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwiY21tYV9kX2NvdW50X3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIHdoZXJlIHRoZSByZXR1cm4gY29kZSB3YXMgaWdub3JlZCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCBieSB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhZGp1c3RzIHRoZSB0aW1pbmcgb2YgYHZjcHUtXFx1MDAzZWFyY2guZ21hcGAgYXNzaWdubWVudCwgYWRkcyBsb2dpYyB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBhZGRzIGxvY2tpbmcgaW4gYGhhbmRsZV9lc3NhYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEtWTSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjI0LjYxMzM4Mzc4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODE0MzQzOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWlzc2luZyBLVk0gRmVhdHVyZSoqXG5cblJpZ2h0LCBzbyBgS1ZNX1MzOTBfVUNPTlRST0xgIGlzbid0IHNob3dpbmcgdXAgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGF0J3MuLi4gdW5leHBlY3RlZC4gSSBjb3VsZCBoYXZlIHN3b3JuIEknZCBzZWVuIGl0IG1lbnRpb25lZCBzb21ld2hlcmUgaW4gdGhlIGRvY3VtZW50YXRpb24sIG1heWJlIGFuIG9sZCBwYXRjaCBvciBhIGRyYWZ0IHByb3Bvc2FsLiBPa2F5LCBmaXJzdCB0aGluZydzIGZpcnN0OiBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTm8gcG9pbnQgaW4gYXNzdW1pbmcgYW55dGhpbmcgaGVyZS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgaXMgYWN0dWFsbHkgdGhlIHNvdXJjZSBvZiB0cnV0aCwgYW5kIHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhIGNvbmRpdGlvbmFsIGRlcGVuZGVuY3kgb3IgYSB0eXBvIHNvbWV3aGVyZSBpbiBteSBub3Rlcy4gQmFjayB0byB0aGUgS2NvbmZpZyBmaWxlIGZvciBhIGNsb3NlciBsb29rLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjE2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjI3LjQyNzcyOTk3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMjcwMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjI3LjYwOTAwODA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDY1MjQxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBjZXJ0YWluIHRoYXQgZmVhdHVyZSB3YXNuJ3QgZGVmaW5lZCwgYnV0IG15IHF1aWNrIHNlYXJjaCBqdXN0IHlpZWxkZWQgKm5vdGhpbmcqLiBUaGUgZnV6emVyIGlzIGNvbXBsYWluaW5nIGFib3V0IGEgbWlzc2luZyBjb25maWd1cmF0aW9uLCBidXQgSSBjb3VsZCBoYXZlIHN3b3JuIEkgc2F3IGl0IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGlzIGlzIHN0cmFuZ2UuIFdoeSBpcyBgc2V0LXJlc3VsdHNgIHRlbGxpbmcgbWUgaXQncyBub3QgdGhlcmU/XG5cbkhtbSwgSSBiZXQgSSBrbm93IHdoYXQncyBoYXBwZW5pbmcuIE15IGZpcnN0IGd1ZXNzIGlzIHRoYXQgdGhlIGZ1enppbmcgc2V0dXAgaXNuJ3QgdXNpbmcgdGhlIHJpZ2h0IGFyY2hpdGVjdHVyZS4gTWF5YmUgaXQncyBjb25maWd1cmVkIGZvciBzb21ldGhpbmcgZGlmZmVyZW50LiBPciBwZXJoYXBzIHRoZSB0b29sIHRoYXQncyBjaGVja2luZyBmb3IgdGhlIGV4aXN0ZW5jZSBpcyBvbmx5IHVzaW5nIHRoZSBnbG9iYWwgS2NvbmZpZyBpbmRleCwgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgbWlzc2luZyBmcm9tIHRoYXQgdmlldy5cblxuQWxyaWdodCwgbm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3MuIFNpbmNlIEtWTSBpcyBkZWZpbml0ZWx5IHRoZXJlLCBJJ2xsIGp1c3QgcmVseSBvbiB0aGF0IGluc3RlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTczLCJPdXRwdXRUb2tlbnMiOjI5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjE3OjMzLjM1NTUzNTU4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDY2Njk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X2Nyc3RlX3dhbGtfcmFuZ2VcIixcbiAgICBcImdtYXBfY3JlYXRlX3NoYWRvd1wiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwiY21tYV9kX2NvdW50X3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIHdoZXJlIHRoZSByZXR1cm4gY29kZSB3YXMgaWdub3JlZCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCBieSB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhZGp1c3RzIHRoZSB0aW1pbmcgb2YgYHZjcHUtXFx1MDAzZWFyY2guZ21hcGAgYXNzaWdubWVudCwgYWRkcyBsb2dpYyB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBhZGRzIGxvY2tpbmcgaW4gYGhhbmRsZV9lc3NhYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEtWTSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF0X2Nyc3RlX3dhbGtfcmFuZ2VcIixcbiAgICBcImdtYXBfY3JlYXRlX3NoYWRvd1wiLFxuICAgIFwia3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb25cIixcbiAgICBcImt2bV9zMzkwX3NldF9jbW1hX2JpdHNcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwiY21tYV9kX2NvdW50X3B0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCBmaXhlcyBhIGJ1ZyBpbiBgZGF0X2Nyc3RlX3dhbGtfcmFuZ2VgIHdoZXJlIHRoZSByZXR1cm4gY29kZSB3YXMgaWdub3JlZCwgcmVzb2x2ZXMgYSBkZWFkbG9jayBpbiBgZ21hcF9jcmVhdGVfc2hhZG93YCBieSB1c2luZyBgd3JpdGVfdHJ5bG9ja2AsIGZpeGVzIGEgZGF0YSByYWNlIGluIGBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcGAsIGNvcnJlY3RzIG1pZ3JhdGlvbiBzdG9wIGxvZ2ljIGluIGBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbmAsIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV9zMzkwX3NldF9jbW1hX2JpdHNgLCBhZGp1c3RzIHRoZSB0aW1pbmcgb2YgYHZjcHUtXFx1MDAzZWFyY2guZ21hcGAgYXNzaWdubWVudCwgYWRkcyBsb2dpYyB0byBkZWNyZW1lbnQgYGNtbWFfZGlydHlfcGFnZXNgIGluIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCBhZGRzIGxvY2tpbmcgaW4gYGhhbmRsZV9lc3NhYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEtWTSBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4d4kx[1] Phase: Succeeded StartedAt: 2026-07-02 18:18:10 +0000 UTC FinishedAt: 2026-07-02 18:18:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 18:18:10 +0000 UTC FinishedAt: 2026-07-02 18:18:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2] Phase: Succeeded StartedAt: 2026-07-02 18:18:10 +0000 UTC FinishedAt: 2026-07-02 19:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 18:18:10 +0000 UTC FinishedAt: 2026-07-02 19:48:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 18:18:10 +0000 UTC FinishedAt: 2026-07-02 18:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 18:18:10 +0000 UTC FinishedAt: 2026-07-02 18:18:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4d4kx/series-workflow4d4kx-convert-artifact-627714860/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 18:19:24 +0000 UTC FinishedAt: 2026-07-02 19:06:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 18:19:24 +0000 UTC FinishedAt: 2026-07-02 19:06:56 +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:*b2eeaa06-2708-4abf-acb3-1677cb8747e6,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-workflow4d4kx/series-workflow4d4kx-convert-artifact-627714860/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": "07c42c07-c185-4209-b4af-c4fbf56e1ca1", "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-workflow4d4kx/series-workflow4d4kx-build-action-4012716378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 18:19:24 +0000 UTC FinishedAt: 2026-07-02 19:06:33 +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:*b2eeaa06-2708-4abf-acb3-1677cb8747e6,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-workflow4d4kx/series-workflow4d4kx-convert-artifact-627714860/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": "07c42c07-c185-4209-b4af-c4fbf56e1ca1", "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-workflow4d4kx/series-workflow4d4kx-build-action-4012716378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 19:06:56 +0000 UTC FinishedAt: 2026-07-02 19:06:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 19:06:56 +0000 UTC FinishedAt: 2026-07-02 19:06:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 19:06:56 +0000 UTC FinishedAt: 2026-07-02 19:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 19:06:56 +0000 UTC FinishedAt: 2026-07-02 19:07:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4d4kx/series-workflow4d4kx-convert-artifact-3269506539/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 19:07:06 +0000 UTC FinishedAt: 2026-07-02 19:09:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 19:07:06 +0000 UTC FinishedAt: 2026-07-02 19:09:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07c42c07-c185-4209-b4af-c4fbf56e1ca1,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-workflow4d4kx/series-workflow4d4kx-build-action-4012716378/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-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 19:09:17 +0000 UTC FinishedAt: 2026-07-02 19:09:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 19:09:17 +0000 UTC FinishedAt: 2026-07-02 19:09:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 19:09:17 +0000 UTC FinishedAt: 2026-07-02 19:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 19:09:17 +0000 UTC FinishedAt: 2026-07-02 19:43:58 +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:*b2eeaa06-2708-4abf-acb3-1677cb8747e6,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-workflow4d4kx/series-workflow4d4kx-convert-artifact-3269506539/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": "7fd81647-9f2b-44c0-89e4-db98ddefee14", "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-workflow4d4kx/series-workflow4d4kx-build-action-555086607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 19:09:17 +0000 UTC FinishedAt: 2026-07-02 19:43:48 +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:*b2eeaa06-2708-4abf-acb3-1677cb8747e6,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-workflow4d4kx/series-workflow4d4kx-convert-artifact-3269506539/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": "7fd81647-9f2b-44c0-89e4-db98ddefee14", "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-workflow4d4kx/series-workflow4d4kx-build-action-555086607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 19:43:58 +0000 UTC FinishedAt: 2026-07-02 19:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 19:43:58 +0000 UTC FinishedAt: 2026-07-02 19:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 19:43:58 +0000 UTC FinishedAt: 2026-07-02 19:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 19:43:58 +0000 UTC FinishedAt: 2026-07-02 19:46:06 +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:*7fd81647-9f2b-44c0-89e4-db98ddefee14,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-workflow4d4kx/series-workflow4d4kx-build-action-555086607/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-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 19:46:16 +0000 UTC FinishedAt: 2026-07-02 19:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 19:46:16 +0000 UTC FinishedAt: 2026-07-02 19:48:34 +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":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"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:*07c42c07-c185-4209-b4af-c4fbf56e1ca1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7fd81647-9f2b-44c0-89e4-db98ddefee14,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-workflow4d4kx/series-workflow4d4kx-build-action-4012716378/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-workflow4d4kx/series-workflow4d4kx-build-action-555086607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 19:46:16 +0000 UTC FinishedAt: 2026-07-02 19:46:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 19:46:16 +0000 UTC FinishedAt: 2026-07-02 19:46:23 +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":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"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-workflow4d4kx/series-workflow4d4kx-convert-artifact-2437911044/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 19:46:16 +0000 UTC FinishedAt: 2026-07-02 19:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 19:46:16 +0000 UTC FinishedAt: 2026-07-02 19:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 19:46:16 +0000 UTC FinishedAt: 2026-07-02 19:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 19:46:26 +0000 UTC FinishedAt: 2026-07-02 19:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d4kx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["dat_crste_walk_range","gmap_create_shadow","kvm_s390_vm_stop_migration","kvm_s390_set_cmma_bits","kvm_arch_commit_memory_region","handle_essa","cmma_d_count_pte"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"be170480-0198-4cbd-9193-a16cc5ec04d4","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 19:46:26 +0000 UTC FinishedAt: 2026-07-02 19:48:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07c42c07-c185-4209-b4af-c4fbf56e1ca1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7fd81647-9f2b-44c0-89e4-db98ddefee14,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-workflow4d4kx/series-workflow4d4kx-build-action-4012716378/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-workflow4d4kx/series-workflow4d4kx-build-action-555086607/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-workflow4d4kx/series-workflow4d4kx-convert-artifact-2437911044/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,}