Name: series-workflowv2zdk Phase: Succeeded StartedAt: 2026-09-15 02:48:53 +0000 UTC FinishedAt: 2026-09-15 07:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[0] Phase: Succeeded StartedAt: 2026-09-15 02:48:53 +0000 UTC FinishedAt: 2026-09-15 03:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 02:48:53 +0000 UTC FinishedAt: 2026-09-15 03:27:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "NUMA" ], "series_id": "c1bedbbb-afa8-440a-aee4-7671b25091e8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmalloc_info_show", "show_busy_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "baa8de2f3448d1466a888a805c18d01c998fe052", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYWxsb2NfaW5mb19zaG93JiMzNDssCiAgICAmIzM0O3Nob3dfYnVzeV9pbmZvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgaW4gbW0vdm1hbGxvYy5jOlxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxuMy4gSW4gX19pbml0IHZtYWxsb2NfaW5pdCgpLCBpdCByZW9yZGVycyB4YV9pbml0KFx1MDAyNnZicS1cdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSAvcHJvYy92bWFsbG9jaW5mbyBkdW1wIGltcGxlbWVudGF0aW9uIGluIG1tL3ZtYWxsb2MuYyBieSBleHRyYWN0aW5nIHNob3dfYnVzeV9pbmZvKCkgZnJvbSB2bWFsbG9jX2luZm9fc2hvdygpIGFuZCBjaGFuZ2luZyB0aGUgc2NvcGUvbGlmZXRpbWUgb2YgTlVNQSBjb3VudGVyIGFsbG9jYXRpb25zLiBUaGUgY29kZSBpbiBtbS92bWFsbG9jLmMgaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcmVhZGluZyAvcHJvYy92bWFsbG9jaW5mbywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgaGFuZGxpbmcgYnVncywgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGJlZDUzNjRiNTE1ZWMwMDI4MjA0OGIxMDI4MWI1YzRlNjljZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MjM6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCA4NTllNmQyZDU3YTM4Li5lMDlkNmM4YzhiMzUzIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmNcbkBAIC01MzQ1LDcgJiM0Mzs1MzQ1LDcgQEAgc3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4mIzQzO3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuQEAgLTU0MTUsMTIgJiM0Mzs1NDE1LDE4IEBAIHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuIFx0fVxuIFxuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbiYjNDM7XHRcdGtmcmVlKGNvdW50ZXJzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4mIzQzO3tcbiYjNDM7XHRzaG93X2J1c3lfaW5mbyhtKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFwmIzM0O3VucHVyZ2VkXCYjMzQ7IGFyZWFzLlxuIFx0ICovXG4gXHRzaG93X3B1cmdlX2luZm8obSk7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG4tXHRcdGtmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NDMzLDExICYjNDM7NTQzOSwyMyBAQCBtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XG4gXG4gI2VuZGlmXG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4mIzQzO1xuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuJiM0MztcdFx0ZnJlZS1cdTAwM2V2YV9zdGFydCA9IHN0YXJ0O1xuJiM0MztcdFx0ZnJlZS1cdTAwM2V2YV9lbmQgPSBlbmQ7XG4mIzQzO1x0XHRpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnQoZnJlZSwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHZtYXBfc3RhcnQgPSAxO1xuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyB2bWFwX2VuZCA9IFVMT05HX01BWDtcbi1cdHN0cnVjdCB2bWFwX2FyZWEgKmZyZWU7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICpidXN5O1xuIFxuIFx0LypcbkBAIC01NDQ3LDMyICYjNDM7NTQ2NSwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcbiBcdCAqICB8XHUwMDNjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHUwMDNlfFxuIFx0ICovXG4gXHRmb3IgKGJ1c3kgPSB2bWxpc3Q7IGJ1c3k7IGJ1c3kgPSBidXN5LVx1MDAzZW5leHQpIHtcbi1cdFx0aWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LVx1MDAzZWFkZHIgLSB2bWFwX3N0YXJ0IFx1MDAzZSAwKSB7XG4tXHRcdFx0ZnJlZSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xuLVx0XHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuLVx0XHRcdFx0ZnJlZS1cdTAwM2V2YV9zdGFydCA9IHZtYXBfc3RhcnQ7XG4tXHRcdFx0XHRmcmVlLVx1MDAzZXZhX2VuZCA9ICh1bnNpZ25lZCBsb25nKSBidXN5LVx1MDAzZWFkZHI7XG4tXG4tXHRcdFx0XHRpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnQoZnJlZSwgTlVMTCxcbi1cdFx0XHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbi1cdFx0XHR9XG4tXHRcdH1cbiYjNDM7XHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0dm1hcF9pbnNlcnRfZnJlZV9hcmVhKHZtYXBfc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyKTtcbiBcbiBcdFx0dm1hcF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKSBidXN5LVx1MDAzZWFkZHIgJiM0MzsgYnVzeS1cdTAwM2VzaXplO1xuIFx0fVxuIFxuLVx0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4tXHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfZW5kID0gdm1hcF9lbmQ7XG4tXG4tXHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuLVx0XHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmICh2bWFwX2VuZCAtIHZtYXBfc3RhcnQgXHUwMDNlIDApXG4mIzQzO1x0XHR2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwgdm1hcF9lbmQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2bWFwX2luaXRfbm9kZXModm9pZClcbkBAIC01NTg1LDEwICYjNDM7NTU4NiwxMSBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbiBcdFx0dmJxID0gXHUwMDI2cGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBpKTtcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmJxLVx1MDAzZWxvY2spO1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2YnEtXHUwMDNlZnJlZSk7XG4mIzQzO1x0XHR4YV9pbml0KFx1MDAyNnZicS1cdTAwM2V2bWFwX2Jsb2Nrcyk7XG4mIzQzO1xuIFx0XHRwID0gXHUwMDI2cGVyX2NwdSh2ZnJlZV9kZWZlcnJlZCwgaSk7XG4gXHRcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuIFx0XHRJTklUX1dPUksoXHUwMDI2cC1cdTAwM2V3cSwgZGVsYXllZF92ZnJlZV93b3JrKTtcbi1cdFx0eGFfaW5pdChcdTAwMjZ2YnEtXHUwMDNldm1hcF9ibG9ja3MpO1xuIFx0fVxuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFsbG9jX2luZm9fc2hvdyYjMzQ7LAogICAgJiMzNDtzaG93X2J1c3lfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIC9wcm9jL3ZtYWxsb2NpbmZvIGR1bXAgaW1wbGVtZW50YXRpb24gaW4gbW0vdm1hbGxvYy5jIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBmcm9tIHZtYWxsb2NfaW5mb19zaG93KCkgYW5kIGNoYW5naW5nIHRoZSBzY29wZS9saWZldGltZSBvZiBOVU1BIGNvdW50ZXIgYWxsb2NhdGlvbnMuIFRoZSBjb2RlIGluIG1tL3ZtYWxsb2MuYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByZWFkaW5nIC9wcm9jL3ZtYWxsb2NpbmZvLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBoYW5kbGluZyBidWdzLCBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhkYmVkNTM2NGI1MTVlYzAwMjgyMDQ4YjEwMjgxYjVjNGU2OWNkMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMzoyMzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCA4NTllNmQyZDU3YTM4Li5lMDlkNmM4YzhiMzUzIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC01MzQ1LDcgJiM0Mzs1MzQ1LDcgQEAgc3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQomIzQzO3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKIAlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKQEAgLTU0MTUsMTIgJiM0Mzs1NDE1LDE4IEBAIHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogCQlzcGluX3VubG9jaygmYW1wO3ZuLSZndDtidXN5LmxvY2spOwogCX0KIAomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpCiYjNDM7CQlrZnJlZShjb3VudGVycyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQomIzQzO3sKJiM0MzsJc2hvd19idXN5X2luZm8obSk7CiYjNDM7CiAJLyoKIAkgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgJiMzNDt1bnB1cmdlZCYjMzQ7IGFyZWFzLgogCSAqLwogCXNob3dfcHVyZ2VfaW5mbyhtKTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpCi0JCWtmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTQzMywxMSAmIzQzOzU0MzksMjMgQEAgbW9kdWxlX2luaXQocHJvY192bWFsbG9jX2luaXQpOwogCiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7CiYjNDM7CiYjNDM7CWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewomIzQzOwkJZnJlZS0mZ3Q7dmFfc3RhcnQgPSBzdGFydDsKJiM0MzsJCWZyZWUtJmd0O3ZhX2VuZCA9IGVuZDsKJiM0MzsJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAomIzQzOwkJCQkJICZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKJiM0MzsJCQkJCSAmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2bWFwX3N0YXJ0ID0gMTsKIAljb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYOwotCXN0cnVjdCB2bWFwX2FyZWEgKmZyZWU7CiAJc3RydWN0IHZtX3N0cnVjdCAqYnVzeTsKIAogCS8qCkBAIC01NDQ3LDMyICYjNDM7NTQ2NSwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZCkKIAkgKiAgfCZsdDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mZ3Q7fAogCSAqLwogCWZvciAoYnVzeSA9IHZtbGlzdDsgYnVzeTsgYnVzeSA9IGJ1c3ktJmd0O25leHQpIHsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LSZndDthZGRyIC0gdm1hcF9zdGFydCAmZ3Q7IDApIHsKLQkJCWZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTsKLQkJCWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewotCQkJCWZyZWUtJmd0O3ZhX3N0YXJ0ID0gdm1hcF9zdGFydDsKLQkJCQlmcmVlLSZndDt2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS0mZ3Q7YWRkcjsKLQotCQkJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAotCQkJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX3Jvb3QsCi0JCQkJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QpOwotCQkJfQotCQl9CiYjNDM7CQlpZiAoKHVuc2lnbmVkIGxvbmcpIGJ1c3ktJmd0O2FkZHIgLSB2bWFwX3N0YXJ0ICZndDsgMCkKJiM0MzsJCQl2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwKJiM0MzsJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBidXN5LSZndDthZGRyKTsKIAogCQl2bWFwX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGJ1c3ktJmd0O2FkZHIgJiM0MzsgYnVzeS0mZ3Q7c2l6ZTsKIAl9CiAKLQlpZiAodm1hcF9lbmQgLSB2bWFwX3N0YXJ0ICZndDsgMCkgewotCQlmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7Ci0JCWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewotCQkJZnJlZS0mZ3Q7dmFfc3RhcnQgPSB2bWFwX3N0YXJ0OwotCQkJZnJlZS0mZ3Q7dmFfZW5kID0gdm1hcF9lbmQ7Ci0KLQkJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAotCQkJCSZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKLQkJCQkJJmFtcDtmcmVlX3ZtYXBfYXJlYV9saXN0KTsKLQkJfQotCX0KJiM0MzsJaWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCAmZ3Q7IDApCiYjNDM7CQl2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwgdm1hcF9lbmQpOwogfQogCiBzdGF0aWMgdm9pZCB2bWFwX2luaXRfbm9kZXModm9pZCkKQEAgLTU1ODUsMTAgJiM0Mzs1NTg2LDExIEBAIHZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKQogCQl2YnEgPSAmYW1wO3Blcl9jcHUodm1hcF9ibG9ja19xdWV1ZSwgaSk7CiAJCXNwaW5fbG9ja19pbml0KCZhbXA7dmJxLSZndDtsb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDt2YnEtJmd0O2ZyZWUpOwomIzQzOwkJeGFfaW5pdCgmYW1wO3ZicS0mZ3Q7dm1hcF9ibG9ja3MpOwomIzQzOwogCQlwID0gJmFtcDtwZXJfY3B1KHZmcmVlX2RlZmVycmVkLCBpKTsKIAkJaW5pdF9sbGlzdF9oZWFkKCZhbXA7cC0mZ3Q7bGlzdCk7CiAJCUlOSVRfV09SSygmYW1wO3AtJmd0O3dxLCBkZWxheWVkX3ZmcmVlX3dvcmspOwotCQl4YV9pbml0KCZhbXA7dmJxLSZndDt2bWFwX2Jsb2Nrcyk7CiAJfQogCiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZtYWxsb2MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgY2hhbmdlcyBhcmUgYWxsIHdpdGhpbiBgbW0vdm1hbGxvYy5jYCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdG9yLiBGaXJzdCwgSSBzZWUgYSByZWZhY3RvcmluZyBvZiBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGV5JiMzOTt2ZSBleHRyYWN0ZWQgYHNob3dfYnVzeV9pbmZvYCBpbnRvIGl0cyBvd24gZnVuY3Rpb24sIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciByZWFkYWJpbGl0eSBhbmQgcG90ZW50aWFsIHJldXNlLiBJJiMzOTttIG5vdGluZyB0aGUgcGxhY2VtZW50IG9mIGBrZnJlZShjb3VudGVycylgOyBpdCYjMzk7cyBub3cgaGFuZGxlZCB3aXRoaW4gYHNob3dfYnVzeV9pbmZvYCBiZWZvcmUgdGhlIHJldHVybi4gQ3VyaW91cy4gTm93LCBgdm1hbGxvY19pbmZvX3Nob3dgIGNhbGxzIGBzaG93X2J1c3lfaW5mb2AgYW5kIHRoZW4gYHNob3dfcHVyZ2VfaW5mb2AuIFJpZ2h0LCBhbmQgdGhlbiBpdCByZXR1cm5zLiBJIHdvbmRlciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpjYWxsZWQgZnJvbSo/IE15IGd1ZXNzIGlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGAvcHJvYy92bWFsbG9jaW5mb2AgaW50ZXJmYWNlLCBwZXJoYXBzIHRocm91Z2ggYHByb2Nfdm1hbGxvY19pbml0YC4KCk5leHQsIEkgc2VlIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAsIGludHJvZHVjZWQgd2l0aGluIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAuIEl0JiMzOTtzIGJlaW5nIHVzZWQgdHdpY2UsIGVmZmVjdGl2ZWx5IGRlZHVwbGljYXRpbmcgc29tZSBjb2RlLiBTbWFydC4gQW5kIHRoaXMgaXMgYWxsIG1hcmtlZCBhcyBgX19pbml0YCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4KCkZpbmFsbHksIGluIGB2bWFsbG9jX2luaXRgLCB0aGV5JiMzOTt2ZSBtb3ZlZCBgeGFfaW5pdCgmYW1wO3ZicS0mZ3Q7dm1hcF9ibG9ja3MpYCAqYmVmb3JlKiBgaW5pdF9sbGlzdF9oZWFkKCZhbXA7cC0mZ3Q7bGlzdClgLiBBbHNvIGBfX2luaXRgLgoKSSYjMzk7bSBzdGlsbCB0aGlua2luZyBhYm91dCBgc2hvd19idXN5X2luZm9gIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYXJvdW5kIGxpbmUgNTM0NSBpbiBgbW0vdm1hbGxvYy5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5pbmcgYXJvdW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MzQwOlx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVwSy0weCVwSyAlN2xkIHVucHVyZ2VkIHZtX2FyZWFcXG5cJiMzNDssXG41MzQxOlx0XHRcdFx0XHQodm9pZCAqKXZhLVx1MDAzZXZhX3N0YXJ0LCAodm9pZCAqKXZhLVx1MDAzZXZhX2VuZCxcbjUzNDI6XHRcdFx0XHRcdHZhX3NpemUodmEpKTtcbjUzNDM6XHRcdFx0fVxuNTM0NDpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VsYXp5LmxvY2spO1xuNTM0NTpcdFx0fVxuNTM0NjpcdH1cbjUzNDc6XHRcbjUzNDg6XHRzdGF0aWMgdm9pZCBzaG93X2J1c3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG41MzQ5Olx0e1xuNTM1MDpcdFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG41MzUxOlx0XHRzdHJ1Y3Qgdm1hcF9hcmVhICp2YTtcbjUzNTI6XHRcdHN0cnVjdCB2bV9zdHJ1Y3QgKnY7XG41MzUzOlx0XHR1bnNpZ25lZCBpbnQgKmNvdW50ZXJzO1xuNTM1NDpcdFxuNTM1NTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuNTM1NjpcdFx0XHRjb3VudGVycyA9IGttYWxsb2NfYXJyYXkobnJfbm9kZV9pZHMsIHNpemVvZih1bnNpZ25lZCBpbnQpLCBHRlBfS0VSTkVMKTtcbjUzNTc6XHRcbjUzNTg6XHRcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuNTM1OTpcdFx0XHRzcGluX2xvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbjUzNjA6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2YSwgXHUwMDI2dm4tXHUwMDNlYnVzeS5oZWFkLCBsaXN0KSB7XG41MzYxOlx0XHRcdFx0aWYgKCF2YS1cdTAwM2V2bSkge1xuNTM2MjpcdFx0XHRcdFx0aWYgKHZhLVx1MDAzZWZsYWdzIFx1MDAyNiBWTUFQX1JBTSlcbjUzNjM6XHRcdFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVwSy0weCVwSyAlN2xkIHZtX21hcF9yYW1cXG5cJiMzNDssXG41MzY0Olx0XHRcdFx0XHRcdFx0KHZvaWQgKil2YS1cdTAwM2V2YV9zdGFydCwgKHZvaWQgKil2YS1cdTAwM2V2YV9lbmQsXG41MzY1Olx0XHRcdFx0XHRcdFx0dmFfc2l6ZSh2YSkpO1xuNTM2NjpcdFxuNTM2NzpcdFx0XHRcdFx0Y29udGludWU7XG41MzY4Olx0XHRcdFx0fVxuNTM2OTpcdFxuNTM3MDpcdFx0XHRcdHYgPSB2YS1cdTAwM2V2bTtcbjUzNzE6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fVU5JTklUSUFMSVpFRClcbjUzNzI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNTM3MzpcdFxuNTM3NDpcdFx0XHRcdC8qIFBhaXIgd2l0aCBzbXBfd21iKCkgaW4gY2xlYXJfdm1fdW5pbml0aWFsaXplZF9mbGFnKCkgKi9cbjUzNzU6XHRcdFx0XHRzbXBfcm1iKCk7XG41Mzc2Olx0XG41Mzc3Olx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVwSy0weCVwSyAlN2xkXCYjMzQ7LFxuNTM3ODpcdFx0XHRcdFx0di1cdTAwM2VhZGRyLCB2LVx1MDAzZWFkZHIgJiM0Mzsgdi1cdTAwM2VzaXplLCB2LVx1MDAzZXNpemUpO1xuNTM3OTpcdFxuNTM4MDpcdFx0XHRcdGlmICh2LVx1MDAzZWNhbGxlcilcbjUzODE6XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICVwU1wmIzM0Oywgdi1cdTAwM2VjYWxsZXIpO1xuNTM4MjpcdFxuNTM4MzpcdFx0XHRcdGlmICh2LVx1MDAzZW5yX3BhZ2VzKVxuNTM4NDpcdFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgcGFnZXM9JWx1XCYjMzQ7LCB2LVx1MDAzZW5yX3BhZ2VzKTtcbjUzODU6XHRcbjUzODY6XHRcdFx0XHRpZiAodi1cdTAwM2VwaHlzX2FkZHIpXG41Mzg3Olx0XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyBwaHlzPSVwYVwmIzM0OywgXHUwMDI2di1cdTAwM2VwaHlzX2FkZHIpO1xuNTM4ODpcdFxuNTM4OTpcdFx0XHRcdGlmICh2LVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9JT1JFTUFQKVxuNTM5MDpcdFx0XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7IGlvcmVtYXBcJiMzNDspO1xuNTM5MTpcdFxuNTM5MjpcdFx0XHRcdGlmICh2LVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9TUEFSU0UpXG41MzkzOlx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgc3BhcnNlXCYjMzQ7KTtcbjUzOTQ6XHRcbjUzOTU6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fQUxMT0MpXG41Mzk2Olx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgdm1hbGxvY1wmIzM0Oyk7XG41Mzk3Olx0XG41Mzk4Olx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX01BUClcbjUzOTk6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyB2bWFwXCYjMzQ7KTtcbjU0MDA6XHRcbjU0MDE6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fVVNFUk1BUClcbjU0MDI6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyB1c2VyXCYjMzQ7KTtcbjU0MDM6XHRcbjU0MDQ6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fRE1BX0NPSEVSRU5UKVxuNTQwNTpcdFx0XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7IGRtYS1jb2hlcmVudFwmIzM0Oyk7XG41NDA2Olx0XG41NDA3Olx0XHRcdFx0aWYgKGlzX3ZtYWxsb2NfYWRkcih2LVx1MDAzZXBhZ2VzKSlcbjU0MDg6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyB2cGFnZXNcJiMzNDspO1xuNTQwOTpcdFxuNTQxMDpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbjU0MTE6XHRcdFx0XHRcdHNob3dfbnVtYV9pbmZvKG0sIHYsIGNvdW50ZXJzKTtcbjU0MTI6XHRcbjU0MTM6XHRcdFx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbjU0MTQ6XHRcdFx0fVxuNTQxNTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuNTQxNjpcdFx0fVxuNTQxNzpcdFxuNTQxODpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuNTQxOTpcdFx0XHRrZnJlZShjb3VudGVycyk7XG41NDIwOlx0fVxuNTQyMTpcdFxuNTQyMjpcdHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuNTQyMzpcdHtcbjU0MjQ6XHRcdHNob3dfYnVzeV9pbmZvKG0pO1xuNTQyNTpcdFxuNTQyNjpcdFx0LypcbjU0Mjc6XHRcdCAqIEFzIGEgZmluYWwgc3RlcCwgZHVtcCBcJiMzNDt1bnB1cmdlZFwmIzM0OyBhcmVhcy5cbjU0Mjg6XHRcdCAqL1xuNTQyOTpcdFx0c2hvd19wdXJnZV9pbmZvKG0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGF0IHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIGAvcHJvYy92bWFsbG9jaW5mb2AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgL3Byb2Mvdm1hbGxvY2luZm9gIGlzIHBvcHVsYXRlZCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB3aGVyZSB3ZSBnZXQgdGhlIGRldGFpbHMgb24gdmlydHVhbGx5IG1hcHBlZCBtZW1vcnkgYXJlYXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGJhY2sgdG8gdGhlIGB2bWFsbG9jX2luZm9fc2hvd2AgZnVuY3Rpb24sIGFzIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgY2FuZGlkYXRlIGZvciB0aGUgc291cmNlIG9mIHRoZSBkYXRhIGRpc3BsYXllZCB0aGVyZS4gTm93LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgZm9ybWF0dGluZyBhbmQgd3JpdGluZyB0aGF0IHNwZWNpZmljIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgaXQmIzM5O3MgdXNlZC4KCkxldCYjMzk7cyB1c2UgYHJlYWQtZmlsZWAgYW5kIGNoZWNrIGxpbmVzIDU0MzAtNTQ0NSB0byBjbGFyaWZ5IGhvdyBgdm1hbGxvY19pbmZvX3Nob3dgIGlzIGludGVncmF0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQyMDpcdH1cbjU0MjE6XHRcbjU0MjI6XHRzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbjU0MjM6XHR7XG41NDI0Olx0XHRzaG93X2J1c3lfaW5mbyhtKTtcbjU0MjU6XHRcbjU0MjY6XHRcdC8qXG41NDI3Olx0XHQgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgXCYjMzQ7dW5wdXJnZWRcJiMzNDsgYXJlYXMuXG41NDI4Olx0XHQgKi9cbjU0Mjk6XHRcdHNob3dfcHVyZ2VfaW5mbyhtKTtcbjU0MzA6XHRcdHJldHVybiAwO1xuNTQzMTpcdH1cbjU0MzI6XHRcbjU0MzM6XHRzdGF0aWMgaW50IF9faW5pdCBwcm9jX3ZtYWxsb2NfaW5pdCh2b2lkKVxuNTQzNDpcdHtcbjU0MzU6XHRcdHByb2NfY3JlYXRlX3NpbmdsZShcJiMzNDt2bWFsbG9jaW5mb1wmIzM0OywgMDQwMCwgTlVMTCwgdm1hbGxvY19pbmZvX3Nob3cpO1xuNTQzNjpcdFx0cmV0dXJuIDA7XG41NDM3Olx0fVxuNTQzODpcdG1vZHVsZV9pbml0KHByb2Nfdm1hbGxvY19pbml0KTtcbjU0Mzk6XHRcbjU0NDA6XHQjZW5kaWZcbjU0NDE6XHRcbjU0NDI6XHRzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbnNlcnRfZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuNTQ0MzpcdHtcbjU0NDQ6XHRcdHN0cnVjdCB2bWFwX2FyZWEgKmZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTtcbjU0NDU6XHRcbjU0NDY6XHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuNTQ0NzpcdFx0XHRmcmVlLVx1MDAzZXZhX3N0YXJ0ID0gc3RhcnQ7XG41NDQ4Olx0XHRcdGZyZWUtXHUwMDNldmFfZW5kID0gZW5kO1xuNTQ0OTpcdFx0XHRpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnQoZnJlZSwgTlVMTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzA5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBgcHJvY192bWFsbG9jX2luaXRgIFN1cnJvdW5kaW5ncyoqCgpBbHJpZ2h0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYHByb2Nfdm1hbGxvY19pbml0YC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gUmlnaHQgbm93LCBJIHNlZSBhbiBgI2VuZGlmYCBhdCBsaW5lIDU0NDAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW52b2x2ZWQuIFRoZSBmaXJzdCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGNvbnRyb2xzIHRoaXMgYmxvY2suIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIHRoZSBjb3JyZXNwb25kaW5nIGAjaWZkZWZgIG9yIGAjaWZuZGVmYCB0aGF0IGdvdmVybnMgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBjb2RlLiBMb29raW5nIGJhY2ssIEkgbmVlZCB0byBjaGVjayBsaW5lcyA1MzAwIHRocm91Z2ggNTM0NS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29uZGl0aW9uYWwgYmxvY2sgYW5kIHJldmVhbCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgZmVhdHVyZSB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyB0aWVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MzAwOlx0XG41MzAxOlx0XHRyZXR1cm4gdHJ1ZTtcbjUzMDI6XHR9XG41MzAzOlx0I2VuZGlmXG41MzA0Olx0XG41MzA1Olx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXG41MzA2Olx0XG41MzA3Olx0LypcbjUzMDg6XHQgKiBQcmludCBudW1iZXIgb2YgcGFnZXMgYWxsb2NhdGVkIG9uIGVhY2ggbWVtb3J5IG5vZGUuXG41MzA5Olx0ICpcbjUzMTA6XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBDT05GSUdfTlVNQSBpcyBlbmFibGVkXG41MzExOlx0ICogYW5kIFZNX1VOSU5JVElBTElaRUQgYml0IGluIHYtXHUwMDNlZmxhZ3MgaXMgZGlzYWJsZWQuXG41MzEyOlx0ICovXG41MzEzOlx0c3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LFxuNTMxNDpcdFx0XHRcdFx0IHVuc2lnbmVkIGludCAqY291bnRlcnMpXG41MzE1Olx0e1xuNTMxNjpcdFx0dW5zaWduZWQgaW50IHN0ZXAgPSAxVSBcdTAwM2NcdTAwM2Mgdm1fYXJlYV9wYWdlX29yZGVyKHYpO1xuNTMxNzpcdFx0dW5zaWduZWQgbG9uZyBpO1xuNTMxODpcdFx0dW5zaWduZWQgaW50IG5yO1xuNTMxOTpcdFxuNTMyMDpcdFx0aWYgKCFjb3VudGVycylcbjUzMjE6XHRcdFx0cmV0dXJuO1xuNTMyMjpcdFxuNTMyMzpcdFx0bWVtc2V0KGNvdW50ZXJzLCAwLCBucl9ub2RlX2lkcyAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTtcbjUzMjQ6XHRcbjUzMjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHYtXHUwMDNlbnJfcGFnZXM7IGkgJiM0Mzs9IHN0ZXApXG41MzI2Olx0XHRcdGNvdW50ZXJzW3BhZ2VfdG9fbmlkKHYtXHUwMDNlcGFnZXNbaV0pXSAmIzQzOz0gc3RlcDtcbjUzMjc6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobnIsIE5fSElHSF9NRU1PUlkpXG41MzI4Olx0XHRcdGlmIChjb3VudGVyc1tucl0pXG41MzI5Olx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgTiV1PSV1XCYjMzQ7LCBuciwgY291bnRlcnNbbnJdKTtcbjUzMzA6XHR9XG41MzMxOlx0XG41MzMyOlx0c3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbjUzMzM6XHR7XG41MzM0Olx0XHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbjUzMzU6XHRcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuNTMzNjpcdFxuNTMzNzpcdFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG41MzM4Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZ2bi1cdTAwM2VsYXp5LmxvY2spO1xuNTMzOTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCBcdTAwMjZ2bi1cdTAwM2VsYXp5LmhlYWQsIGxpc3QpIHtcbjUzNDA6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OzB4JXBLLTB4JXBLICU3bGQgdW5wdXJnZWQgdm1fYXJlYVxcblwmIzM0OyxcbjUzNDE6XHRcdFx0XHRcdCh2b2lkICopdmEtXHUwMDNldmFfc3RhcnQsICh2b2lkICopdmEtXHUwMDNldmFfZW5kLFxuNTM0MjpcdFx0XHRcdFx0dmFfc2l6ZSh2YSkpO1xuNTM0MzpcdFx0XHR9XG41MzQ0Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWxhenkubG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY0MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdm1hbGxvYy5jYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgcmVzdHJ1Y3R1cmVzIHBhcnRzIG9mIGBtbS92bWFsbG9jLmNgLCBhbmQgbXkgaW5pdGlhbCBpbXB1bHNlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHZ1bG5lcmFiaWxpdHkuIExldCYjMzk7cyBzZWUuLi4gSSBjb3VsZCB0cnkgdG8gY2hlY2sgdGhlIGdpdCBsb2csIGJ1dCBzaW5jZSBJIGhhdmUgdGhlIGRpZmYsIGxldCYjMzk7cyBqdXN0IHVzZSB3aGF0JiMzOTtzIGluIGZyb250IG9mIG1lLgoKVGhlIGZpcnN0IGNoYW5nZSBpbiB0aGUgZGlmZiBzZWVtcyB0byBiZSBzcGxpdHRpbmcgdGhlIGB2bWFsbG9jX2luZm9fc2hvd2AgZnVuY3Rpb24uIE9yaWdpbmFsbHksIGl0IHNob3dlZCBidXN5IGFuZCBwdXJnZWQgdm1hbGxvYyBhcmVhcyBhbmQgdGhlbiBmcmVlZCBtZW1vcnksIGJ1dCBub3cgaXQgYXBwZWFycyB0aGF0IHRoZSAmIzM0O2J1c3kmIzM0OyBpbmZvIGlzIGhhbmRsZWQgYnkgYHNob3dfYnVzeV9pbmZvYCBhbmQgZnJlZWQgd2l0aGluIHRoYXQgZnVuY3Rpb24gYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AgaXMganVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIE9rYXksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBpbiB0ZXJtcyBvZiB3aGF0JiMzOTtzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBBaCwgeWVzLCBgL3Byb2Mvdm1hbGxvY2luZm9gIC0gdGhhdCBpcyB3aGF0IGNhbGxzIGB2bWFsbG9jX2luZm9fc2hvd2AuIEkgbmVlZCB0byB0aGluayBhYm91dCBzeXprYWxsZXIgYW5kIGFjY2VzcyB0byB0aGF0IGZpbGUuIAoKVGhlIHBlcm1pc3Npb25zIGxvb2sgbGlrZSBpdCYjMzk7cyByZWFkYWJsZSBieSByb290LCB3aGljaCBtZWFucyBpdCBjYW4gYmUgYWNjZXNzZWQgYnkgc3l6a2FsbGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IHRoaXMgdGhvdWdoLCBhcyBpdCBtaWdodCB1c2UgYSB1c2VyIG5hbWVzcGFjZS4gQnV0LCBsaWtlbHkgc3l6a2FsbGVyIGNhbiByZWFkIGAvcHJvYy92bWFsbG9jaW5mb2AgYmVjYXVzZSB0aGUgcHJvY2VzcyBydW5zIGFzIHJvb3QgYW5kIGFsc28gaGFzIGBDQVBfU1lTX0FETUlOYCBpbiBuYW1lc3BhY2VzLCByaWdodD8gT2theSwgc28gaWYgc3l6a2FsbGVyIGNhbiByZWFkIHRoaXMgaW5mbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoYW5nZSBkb2VzIHRvIHRoZSBvdXRwdXQgb3IgYmVoYXZpb3Igb2YgYC9wcm9jL3ZtYWxsb2NpbmZvYC4KCk5vdywgdGhlIG90aGVyIHBhcnQgb2YgdGhlIGRpZmYgaGFzIHRvIGRvIHdpdGggZnJlZSB2bWFwIGFyZWFzLiBgdm1hcF9pbnNlcnRfZnJlZV9hcmVhYCBhbmQgYHZtYXBfaW5pdF9mcmVlX3NwYWNlYCBhcmUgYm90aCBpbiB0aGlzIHBhdGNoLiBCdXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBgX19pbml0YCwgd2hpY2ggbWVhbnMgdGhleSBhcmUgb25seSBjYWxsZWQgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbiBhbmQgYXJlIG5vdCBhY2Nlc3NpYmxlIGFmdGVyIGJvb3QuIFN5emthbGxlciBjYW5ub3QgcmVhY2ggdGhlbSwgc2luY2Ugc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHN0YXJ0IHVudGlsICphZnRlciogdGhlIGtlcm5lbCBpcyBmdWxseSB1cC4gTXkgYW5hbHlzaXMgaGVyZSBuZWVkcyB0byBjb25zaWRlciBpZiB0aGVzZSBjb3VsZCBiZSBjYWxsZWQgYXQgcnVudGltZSwgYnV0IEkmIzM5O2xsIHNlZSB0aGV5IGFyZSBgX19pbml0YCwgc28gdGhleSBhcmUgbm90IHJlYWNoYWJsZSBieSBmdXp6aW5nISBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGlmIHRoaXMgY291bGQgc3RpbGwgYmUgcmVsZXZhbnQuIFdhaXQsIHNpbmNlIGl0JiMzOTtzIGBfX2luaXRgLCB0aGlzIHNlY3Rpb24gaXMgbmV2ZXIgdG91Y2hlZCBhZ2FpbiBhZnRlciBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aG91Z2gsIGJ1dCB0aGF0IGlzIG15IGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiBgX19pbml0YC4KCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBjYW4mIzM5O3QgYmUgY2FsbGVkIGFmdGVyIGJvb3QsIGFzIHRoYXQgd291bGQgY29tcGxldGVseSBlbGltaW5hdGUgdGhpcyBhcmVhIG9mIHRoZSBwYXRjaC4gT2theSwgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIHJlYWRzIGAvcHJvYy92bWFsbG9jaW5mb2AuIFNpbmNlIGl0IGlzIDA0MDAsIEkgYmVsaWV2ZSBzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hcF9pbnNlcnRfZnJlZV9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz01NDM4PW1vZHVsZV9pbml0KHByb2Nfdm1hbGxvY19pbml0KTtcbi0tXG5tbS92bWFsbG9jLmMtNTQ0MS1cbm1tL3ZtYWxsb2MuYzo1NDQyOnN0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5tbS92bWFsbG9jLmMtNTQ0My17XG4tLVxubW0vdm1hbGxvYy5jPTU0NTU9c3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpXG4tLVxubW0vdm1hbGxvYy5jLTU0NjgtXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbm1tL3ZtYWxsb2MuYzo1NDY5Olx0XHRcdHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh2bWFwX3N0YXJ0LFxubW0vdm1hbGxvYy5jLTU0NzAtXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nKSBidXN5LVx1MDAzZWFkZHIpO1xuLS1cbm1tL3ZtYWxsb2MuYy01NDc1LVx0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbm1tL3ZtYWxsb2MuYzo1NDc2Olx0XHR2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwgdm1hcF9lbmQpO1xubW0vdm1hbGxvYy5jLTU0NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gVm1hcCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgdm1hcF9pbnNlcnRfZnJlZV9hcmVhYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gYHZtYXBfaW5pdF9mcmVlX3NwYWNlYC4gVGhhdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMgc2NvcGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgKnRoYXQqIGNhbGxlZCBmcm9tPyBTaW5jZSBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgIGlzIGFubm90YXRlZCB3aXRoIGBfX2luaXRgLCBpdCB0ZWxscyBtZSBpdCBpcyBjYWxsZWQgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gQnV0IEkgbmVlZCB0byBjb25maXJtIHdoZXJlIGV4YWN0bHkgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IGl0JiMzOTtzIHNvbWV0aGluZyB0aWVkIHRvIHZpcnR1YWwgbWVtb3J5IHNldHVwLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBwcmVjaXNlIGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFwX2luaXRfZnJlZV9zcGFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NTQ0Mj1zdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbnNlcnRfZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL3ZtYWxsb2MuYy01NDU0LVxubW0vdm1hbGxvYy5jOjU0NTU6c3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpXG5tbS92bWFsbG9jLmMtNTQ1Ni17XG4tLVxubW0vdm1hbGxvYy5jPTU1Njk9dm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXG4tLVxubW0vdm1hbGxvYy5jLTU2MTctXHQgKi9cbm1tL3ZtYWxsb2MuYzo1NjE4Olx0dm1hcF9pbml0X2ZyZWVfc3BhY2UoKTtcbm1tL3ZtYWxsb2MuYy01NjE5LVx0dm1hcF9pbml0aWFsaXplZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTk0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgUm9vdHMgb2YgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAuIFRoYXQgZnVuY3Rpb24gaXMgYXBwYXJlbnRseSBvbmx5IGNhbGxlZCBmcm9tIGB2bWFsbG9jX2luaXQoKWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHByb2JhYmx5IHNldHRpbmcgdXAgdGhlIGluaXRpYWwgZnJlZSBzcGFjZSBmb3IgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbi4gU2luY2UgYHZtYWxsb2NfaW5pdCgpYCBpcyBtYXJrZWQgYXMgYF9faW5pdGAsIHRoYXQgdGVsbHMgbWUgaXQmIzM5O3Mgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBrZXJuZWwmIzM5O3MgaW5pdGlhbGl6YXRpb24gcGhhc2UuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgKndoZXJlKiBgdm1hbGxvY19pbml0KClgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbml0aWFsaXphdGlvbiBjb250ZXh0LiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGF0IGB2bWFsbG9jX2luaXRgIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYWxsb2NfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbV9pbml0LmM9MjY5Mj12b2lkIF9faW5pdCBtbV9jb3JlX2luaXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMjczMC1cdGRlYnVnX29iamVjdHNfbWVtX2luaXQoKTtcbm1tL21tX2luaXQuYzoyNzMxOlx0dm1hbGxvY19pbml0KCk7XG5tbS9tbV9pbml0LmMtMjczMi1cdC8qIElmIG5vIGRlZmVycmVkIGluaXQgcGFnZV9leHQgbm93LCBhcyB2bWFwIGlzIGZ1bGx5IGluaXRpYWxpemVkICovXG4tLVxubW0vdm1hbGxvYy5jPTMxNTU9c3RhdGljIGlubGluZSB2b2lkIHNldF92bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS92bWFsbG9jLmMtMzE2OC0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYWRkIGZpeGVkIGtlcm5lbCB2bSBhcmVhIHRvIHZtbGlzdCBiZWZvcmVcbm1tL3ZtYWxsb2MuYzozMTY5OiAqIHZtYWxsb2NfaW5pdCgpIGlzIGNhbGxlZC4gIEB2bS1cdTAwM2VhZGRyLCBAdm0tXHUwMDNlc2l6ZSwgYW5kIEB2bS1cdTAwM2VmbGFnc1xubW0vdm1hbGxvYy5jLTMxNzAtICogc2hvdWxkIGNvbnRhaW4gcHJvcGVyIHZhbHVlcyBhbmQgdGhlIG90aGVyIGZpZWxkcyBzaG91bGQgYmUgemVyby5cbi0tXG5tbS92bWFsbG9jLmM9MzE3ND12b2lkIF9faW5pdCB2bV9hcmVhX2FkZF9lYXJseShzdHJ1Y3Qgdm1fc3RydWN0ICp2bSlcbi0tXG5tbS92bWFsbG9jLmMtMzE5NS0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVnaXN0ZXIga2VybmVsIHZtIGFyZWEgYmVmb3JlXG5tbS92bWFsbG9jLmM6MzE5NjogKiB2bWFsbG9jX2luaXQoKSBpcyBjYWxsZWQuICBAdm0tXHUwMDNlc2l6ZSBhbmQgQHZtLVx1MDAzZWZsYWdzIHNob3VsZCBjb250YWluXG5tbS92bWFsbG9jLmMtMzE5Ny0gKiBwcm9wZXIgdmFsdWVzIG9uIGVudHJ5IGFuZCBvdGhlciBmaWVsZHMgc2hvdWxkIGJlIHplcm8uICBPbiByZXR1cm4sXG4tLVxubW0vdm1hbGxvYy5jPTU0MjI9c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4tLVxubW0vdm1hbGxvYy5jLTU0MzItXG5tbS92bWFsbG9jLmM6NTQzMzpzdGF0aWMgaW50IF9faW5pdCBwcm9jX3ZtYWxsb2NfaW5pdCh2b2lkKVxubW0vdm1hbGxvYy5jLTU0MzQte1xuLS1cbm1tL3ZtYWxsb2MuYy01NDM3LX1cbm1tL3ZtYWxsb2MuYzo1NDM4Om1vZHVsZV9pbml0KHByb2Nfdm1hbGxvY19pbml0KTtcbm1tL3ZtYWxsb2MuYy01NDM5LVxuLS1cbm1tL3ZtYWxsb2MuYz01NTQ4PXZtYXBfbm9kZV9zaHJpbmtfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5tbS92bWFsbG9jLmMtNTU2OC1cbm1tL3ZtYWxsb2MuYzo1NTY5OnZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKVxubW0vdm1hbGxvYy5jLTU1NzAte1xuLS1cbm1tL3ZtYWxsb2MuYy01NjMxLVxubW0vdm1hbGxvYy5jOjU2MzI6c3RhdGljIGludCBfX2luaXQgdm1hbGxvY19pbml0X3dvcmtxdWV1ZSh2b2lkKVxubW0vdm1hbGxvYy5jLTU2MzMte1xuLS1cbm1tL3ZtYWxsb2MuYy01NjQ2LX1cbm1tL3ZtYWxsb2MuYzo1NjQ3OmVhcmx5X2luaXRjYWxsKHZtYWxsb2NfaW5pdF93b3JrcXVldWUpO1xuLS1cbm1tL3ZtYWxsb2MuaC0xMC0jaWZkZWYgQ09ORklHX01NVVxubW0vdm1hbGxvYy5oOjExOnZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKTtcbm1tL3ZtYWxsb2MuaC0xMi1pbnQgX19tdXN0X2NoZWNrIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuaD0xNT11bnNpZ25lZCBpbnQgZ2V0X3ZtX2FyZWFfcGFnZV9vcmRlcihjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICp2bSk7XG5tbS92bWFsbG9jLmgtMTYtI2Vsc2Vcbm1tL3ZtYWxsb2MuaDoxNzpzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19pbml0KHZvaWQpIHt9XG5tbS92bWFsbG9jLmgtMTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQ0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzYyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgdm1hbGxvY2luZm8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlIGRpZmYsIGl0JiMzOTtzIGNsZWFyIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gVGhlIGluaXRpYWwgYF9faW5pdGAgZnVuY3Rpb25zIGxpa2UgYHZtYWxsb2NfaW5pdGAsIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAsIGFuZCBgdm1hcF9pbnNlcnRfZnJlZV9hcmVhYCBhcmUgaXJyZWxldmFudCBmb3IgcnVudGltZSBmdXp6aW5nOyB0aG9zZSBhcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFRoZSBjcnVjaWFsIGFzcGVjdCBpcyB0aGUgY2hhbmdlIHRvIGB2bWFsbG9jX2luZm9fc2hvd2AgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNob3dfYnVzeV9pbmZvYC4KClRoZSBwYXRjaCByZWZhY3RvcnMgYC9wcm9jL3ZtYWxsb2NpbmZvYCYjMzk7cyBkaXNwbGF5IGxvZ2ljLiBTcGVjaWZpY2FsbHksIGB2bWFsbG9jX2luZm9fc2hvd2AsIGNhbGxlZCB3aGVuIHJlYWRpbmcgZnJvbSBgL3Byb2Mvdm1hbGxvY2luZm9gLCBub3cgY2FsbHMgYHNob3dfYnVzeV9pbmZvYCBhbmQgYHNob3dfcHVyZ2VfaW5mb2Agc2VwYXJhdGVseS4gVGhlIGtleSBpcyBpbiB3aGVyZSBga2ZyZWUoY291bnRlcnMpYCBpcyBjYWxsZWQuIFRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgYGNvdW50ZXJzYCBhcmUgd2l0aGluIHRoZSBgc2hvd19idXN5X2luZm9gLiBQcmV2aW91c2x5LCBgY291bnRlcnNgIGNvdWxkIGhhdmUgYmVlbiBmcmVlZCBhZnRlciBgc2hvd19wdXJnZV9pbmZvYCwgd2hpY2ggY291bGQgZXhwb3NlIGEgYnVnLgoKQ3J1Y2lhbGx5LCBgL3Byb2Mvdm1hbGxvY2luZm9gIGlzIHJlYWNoYWJsZSBhdCBydW50aW1lLiBUaGUgYHByb2NfY3JlYXRlX3NpbmdsZWAgZnVuY3Rpb24gbWFrZXMgdGhpcyBmaWxlIHJlYWRhYmxlIGJ5IHJvb3QuIFN5emthbGxlciBydW5zIGFzIHJvb3QsIHNvIGl0IGNhbiBpbnRlcmFjdCB3aXRoIHRoaXMgY29kZSBwYXRoIGJ5IG9wZW5pbmcgYW5kIHJlYWRpbmcgYC9wcm9jL3ZtYWxsb2NpbmZvYC4gVGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgZGljdGF0ZXMgZnV6emluZyBhbnkgbW9kaWZpZWQgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBsaWtlIGBtbS92bWFsbG9jLmNgLiBUaGlzIGlzICp0ZXh0Ym9vayogZm9yICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0Oy4KClRoaXMgZmFsbHMgdW5kZXI6ICYjMzQ7UmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuJiMzNDsgQWxzbywgJiMzNDtDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uJiMzNDsuIEJlY2F1c2UgdGhlIGNvZGUgaXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb24sIGBtbS92bWFsbG9jLmNgLgoKRnVydGhlcm1vcmUsIHRoaXMgY2hhbmdlIGludm9sdmVzIGFsbG9jYXRpbmcgYSBgY291bnRlcnNgIGFycmF5IHdpdGggYGttYWxsb2NfYXJyYXlgLiBUaGlzIGlzICpwcmVjaXNlbHkqIHRoZSBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB0aGF0IGNhbiB1bnZlaWwgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaWYgdHJpZ2dlcmVkIGNvbmN1cnJlbnRseSB3aXRoIG90aGVyIG1lbW9yeSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggcmVhcnJhbmdlcyBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgY2hhbmdpbmcgd2hlbiBga2ZyZWVgIGlzIGNhbGxlZCwgYW5kIGlzIHRoZXJlZm9yZSBvZiBoaWdoIGludGVyZXN0LiBJdCBoYXMgYWxzbyBpbnRyb2R1Y2VkIGEgbmV3IGBzaG93X2J1c3lfaW5mb2AgZnVuY3Rpb24uCgpOb3csIGZvciBGb2N1c1N5bWJvbHM6Cgpgdm1hbGxvY19pbmZvX3Nob3dgICptdXN0KiBiZSBpbmNsdWRlZC4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGNhbGxlZCB3aGVuIHJlYWRpbmcgYC9wcm9jL3ZtYWxsb2NpbmZvYC4gV2hpbGUgYHNob3dfYnVzeV9pbmZvYCBtaWdodCBiZSBpbmxpbmVkLCBpdCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGUgY29tcGlsZXIgd2lsbCBtb3N0IGxpa2VseSBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYW5kIGl0IHNob3VsZCBiZSBpbmNsdWRlZC4gVGhpcyBpcyBhIG5vbi11YmlxdWl0b3VzIGVudHJ5IHBvaW50LgoKV2Ugc2hvdWxkICpleGNsdWRlKiB0aGUgYF9faW5pdGAgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgbmV2ZXIgcmVhY2hhYmxlIGR1cmluZyBydW50aW1lLgpXZSAqZXhjbHVkZSogZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLgpXZSBzaG91bGQgaW5jbHVkZSBvbmx5IGB2bWFsbG9jX2luZm9fc2hvd2AgYW5kIGBzaG93X2J1c3lfaW5mb2AuCgpJbiBzaG9ydCwgZ2l2ZW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dCwgdGhlIHJlZmFjdG9yaW5nLCB0aGUgcnVudGltZSByZWFjaGFiaWxpdHkgdmlhIGAvcHJvYy92bWFsbG9jaW5mb2AsIGFuZCB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgdGhpcyAqbXVzdCogYmUgZnV6emVkLCBhbmQgYHZtYWxsb2NfaW5mb19zaG93YCBhbmQgYHNob3dfYnVzeV9pbmZvYCBzaG91bGQgYmUgdGhlIEZvY3VzU3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcbmZzL3Byb2MvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGU6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgcHJvY2ZzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGZzL3Byb2MvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIHByb2MgZmlsZXN5c3RlbSBpcyBjb25maWd1cmVkIGluIHRoaXMga2VybmVsLiBGaXJzdCwgSSYjMzk7bSBza2ltbWluZyB0aGUgaW5pdGlhbCBsaW5lcywgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCB0d2VudHksIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBvdmVyYXJjaGluZyBzdHJ1Y3R1cmUgYW5kIGFueSBpbW1lZGlhdGUgY3JpdGljYWwgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIG1haW4gYENPTkZJR19QUk9DX0ZTYCBib29sZWFuLCBwZXJoYXBzIHNvbWUgcmVsYXRlZCBmZWF0dXJlcyB0aGF0IGNhbiBiZSBzZWxlY3RpdmVseSBlbmFibGVkLCBhbmQgdGhlIHVzdWFsIGNvbmRpdGlvbmFsIGJsb2NrcyBnb3Zlcm5pbmcgaW5jbHVzaW9uIGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gTXkgaW5pdGlhbCBwYXNzIHdpbGwgYmUgdG8gaWRlbnRpZnkgYW55IHRvcC1sZXZlbCBkZXBlbmRlbmNpZXMsIGRldGVybWluZSB3aGljaCBvcHRpb25zIGFyZSBjb3JlIHRvIGVuYWJsaW5nIHByb2NmcywgYW5kIHF1aWNrbHkgYXNzZXNzIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3IgcHJlLXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55IGRpcmVjdCByZWZlcmVuY2VzIHRvIG90aGVyIHJlbGV2YW50IEtjb25maWcgZmlsZXMgb3Igc2VjdGlvbnMsIGFzIHRob3NlIHdpbGwgaW5mbHVlbmNlIHRoZSBsYXJnZXIgY29uZmlndXJhdGlvbiBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBpbml0aWFsIGNodW5rIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFBST0NfRlNcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiAgIDQ6XHRcdGRlZmF1bHQgeVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIGlzIGEgdmlydHVhbCBmaWxlIHN5c3RlbSBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1c1xuICAgNzpcdFx0ICBvZiB0aGUgc3lzdGVtLiBcJiMzNDtWaXJ0dWFsXCYjMzQ7IG1lYW5zIHRoYXQgaXQgZG9lc24mIzM5O3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cbiAgIDg6XHRcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxuICAgOTpcdFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcbiAgMTA6XHRcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0JiMzOTtzIHRvdGFsbHkgY29vbDsgZm9yIGV4YW1wbGUsIFwmIzM0O2NhdCAvcHJvYy9pbnRlcnJ1cHRzXCYjMzQ7IGdpdmVzXG4gIDEzOlx0XHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XG4gIDE0Olx0XHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXG4gIDE1Olx0XHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJiMzOTtzIGF0dGVudGlvbiAtLVxuICAxNjpcdFx0ICBvZnRlbiBhIHNvdXJjZSBvZiB0cm91YmxlIGlmIHR3byBkZXZpY2VzIGFyZSBtaXN0YWtlbmx5IGNvbmZpZ3VyZWRcbiAgMTc6XHRcdCAgdG8gdXNlIHRoZSBzYW1lIElSUSkuIFRoZSBwcm9ncmFtIHByb2NpbmZvIHRvIGRpc3BsYXkgc29tZVxuICAxODpcdFx0ICBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHN5c3RlbSBnYXRoZXJlZCBmcm9tIHRoZSAvcHJvYyBmaWxlIHN5c3RlbS5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSAvcHJvYyBmaWxlIHN5c3RlbSwgaXQgaGFzIHRvIGJlIG1vdW50ZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDc5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYENPTkZJR19OVU1BYCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNwZWNpZmljYWxseSwgdGhpcyBgc2hvd19idXN5X2luZm8oKWAgZnVuY3Rpb24uIEkgc2VlIHRoaXMgY29uZGl0aW9uYWwsIGBpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpYCwgYW5kIHRoZSBzdWJzZXF1ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgYGNvdW50ZXJzYC4gVGhlIGNydWNpYWwgY2hhbmdlIGhlcmUgaXMgdGhhdCB0aGUgc2NvcGUgYW5kIGxpZmV0aW1lIG9mIGBjb3VudGVyc2AgaGFzIGJlZW4gYWx0ZXJlZDsgaXQmIzM5O3Mgbm93IGZyZWVkIHdpdGhpbiBgc2hvd19idXN5X2luZm8oKWAgcmF0aGVyIHRoYW4gbGF0ZXIuIFRoaXMgcmVmYWN0b3JpbmcgbWFrZXMgYENPTkZJR19OVU1BYCBhYnNvbHV0ZWx5IHJlbGV2YW50IHRvIHRlc3RpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBiZWNhdXNlIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24gd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoaXMgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yIHdoZW4gYENPTkZJR19OVU1BYCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgZGlnIGludG8gS2NvbmZpZyBhbmQgc2VlIHdoYXQgYENPTkZJR19OVU1BYCBpcyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5VTUFcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOVU1BIENvbmZpZ3VyYXRpb24gaW4geDg2KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhlIE5VTUEgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSYjMzk7cyBrZXJuZWwgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjZW50cmFsIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZ292ZXJuaW5nIE5VTUEgc3VwcG9ydCwgdGhpbmdzIGxpa2UgdGhlIGJvb3QtdGltZSBwYXJhbWV0ZXJzLCBtZW1vcnkgbm9kZSBhc3NpZ25tZW50cywgYW5kIHJlbGF0ZWQgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsIGZpZ3VyZSBvdXQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIsIGFuZCBwaW5wb2ludCB0aGUgc3BlY2lmaWMga25vYnMgSSBuZWVkIHRvIGFkanVzdCBvciB1bmRlcnN0YW5kIGZvciBteSBjdXJyZW50IHRhc2suIFRoaXMgYXBwcm9hY2ggaXMgZWZmaWNpZW50OiBpdCBsZXZlcmFnZXMgbXkgdW5kZXJzdGFuZGluZyBvZiBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgcHJvY2VkdXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5VTUFcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE0ODk9Y29uZmlnIEFNRF9NRU1fRU5DUllQVFxuLS1cbmFyY2gveDg2L0tjb25maWctMTUwNS0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXG5hcmNoL3g4Ni9LY29uZmlnOjE1MDY6Y29uZmlnIE5VTUFcbmFyY2gveDg2L0tjb25maWctMTUwNy1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGB2bWFsbG9jLmNgIGRvZXNuJiMzOTt0IHJlcXVpcmUgYW55IHByZXByb2Nlc3NvciBndWFyZHMgd2l0aGluIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIGEgY29tbW9uIG92ZXJzaWdodCwgYW5kIGl0IHdvdWxkIGJlIHJlYWxseSBlbWJhcnJhc3NpbmcgdG8gbWlzcyBzb21ldGhpbmcgbGlrZSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBtbS9NYWtlZmlsZWAgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFsbG9jXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTM3PW1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4tLVxubW0vTWFrZWZpbGUtMzktXHRcdFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXG5tbS9NYWtlZmlsZTo0MDpcdFx0XHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cbm1tL01ha2VmaWxlLTQxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyOAoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiAxMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBtbS92bWFsbG9jLmNgIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29kZSBpbiBgdm1hbGxvYy5vYCBkZXBlbmRzIG9uIGBDT05GSUdfTU1VYCwgd2hpY2ggaXMgc3RhbmRhcmQgb24geDg2L2FtZDY0LCBzbyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEluc2lkZSBgbW0vdm1hbGxvYy5jYCwgSSBzZWUgdGhhdCB0aGUgcmVmYWN0b3JlZCBgc2hvd19idXN5X2luZm9gIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgIGFyZSBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1BST0NfRlNgLCBhbmQgYENPTkZJR19OVU1BYCBpcyBjaGVja2VkIHZpYSBgSVNfRU5BQkxFRChDT05GSUdfTlVNQSlgLiBTbywgdGhlIGBFbmFibGVDb25maWdzYCB3aWxsIGRlZmluaXRlbHkgaW5jbHVkZSBgUFJPQ19GU2AgYW5kIGBOVU1BYC4KCk5vdywgdGhlIGNvcmUgcXVlc3Rpb246IGlzIHRoaXMgYFdvcnRoRnV6emluZ2A/IEkgbmVlZCB0byBhcHBseSB0aGUgZnV6emluZyBndWlkZWxpbmVzLiBUaGUgY29yZSBpZGVhIGlzIHJlYWNoYWJpbGl0eTogYW55IG1vZGlmaWVkIGNvZGUgdGhhdCAqY2FuKiBleGVjdXRlIG5lZWRzIGZ1enppbmcuIEFuZCwgdGhlIGd1aWRlbGluZXMgYXJlIHZlcnkgY2xlYXIgYWJvdXQgcmVmYWN0b3JpbmdzLiBUaGlzIGlzIGluIGBtbS9gLCBhIG1lbW9yeSBtYW5hZ2VtZW50IGNvcmUgc3Vic3lzdGVtLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBib3RoIGB2bWFsbG9jX2luZm9fc2hvd2AgYW5kIGBzaG93X2J1c3lfaW5mb2AgYXJlIHJlZmFjdG9yZWQuIFRoZSBmdW5jdGlvbiB3YXMgc3BsaXQsIGFuZCB0aGVyZSYjMzk7cyBhIGxpZmV0aW1lIGNoYW5nZSBvZiB0aGUgYGNvdW50ZXJzYCBhbGxvY2F0ZWQgZm9yIE5VTUEsIG5vdyBmcmVlZCBpbiBgc2hvd19idXN5X2luZm9gLiBSZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2AgdHJpZ2dlcnMgdGhpcyBleGVjdXRpb24gcGF0aC4gVGhhdCYjMzk7cyByZWFjaGFibGUsIG1vZGlmaWVkLCBhbmQgaW4gYSBjb3JlIHN1YnN5c3RlbSwgc28gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuCgpSZWdhcmRpbmcgYEZvY3VzU3ltYm9sc2AsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgdGFyZ2V0IGZ1bmN0aW9ucyBmb3Igc3l6a2FsbGVyLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gLiBXYWl0LCB0aGVyZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zIHRvbzogYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAsIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAsIGFuZCBgdm1hbGxvY19pbml0YC4KCkxldCYjMzk7cyByZS1yZWFkIHRoZSBzZWN0aW9uLiBJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBBbmQsIHRvIGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocy4gQ2FuIHN5emthbGxlciBmb2N1cyBvbiBgX19pbml0YCBmdW5jdGlvbnM/IE5vLCBzeXprYWxsZXImIzM5O3MgY292ZXJhZ2UgZG9lc24mIzM5O3QgZXh0ZW5kIHRvIGluaXQgc2VjdGlvbnMuIEJ5IHRoZSB0aW1lIHN5emthbGxlciBydW5zLCB0aG9zZSBzZWN0aW9ucyBhcmUgZnJlZWQuIFN5emthbGxlciYjMzk7cyBjb3ZlcmFnZSB3b3VsZG4mIzM5O3QgbWF0Y2ggYW55IHRlc3QgY2FzZXMhIFNvIGBfX2luaXRgIGZ1bmN0aW9ucyBkb24mIzM5O3QgbWF0dGVyIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBIb3dldmVyLCBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSBydW50aW1lIGZ1bmN0aW9ucyB0aGF0IGFyZSBoaXQgd2hlbiBgL3Byb2Mvdm1hbGxvY2luZm9gIGlzIHJlYWQuIFRhcmdldGluZyBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGlzIHN0cmljdGx5IGNvcnJlY3QgYmVjYXVzZSB0aGV5IGFyZSB0aGUgcmVhY2hhYmxlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSBkb24mIzM5O3QgbmVlZCB0byBpbmNsdWRlIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgIGJlY2F1c2UgdGhhdCBpcyBgX19pbml0YCBtYXJrZWQsIGFuZCBtaWdodCBub3QgZXZlbiBiZSBleHBvcnRlZCB0byBrYWxsc3ltcy4KCkxldCYjMzk7cyBkbyBhIGZpbmFsIHNhbml0eSBjaGVjaywgc2Nhbm5pbmcgYG1tL3ZtYWxsb2MuY2AgZm9yIG90aGVyIGNoYW5nZXMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGB2bWFsbG9jX2luZm9fc2hvd2AgKHR3aWNlIC0gb25jZSBhcyB0aGUgb3JpZ2luYWwsIG9uY2UgYXMgYSB3cmFwcGVyKSwgYHNob3dfYnVzeV9pbmZvYCwgYW5kIHRoZSB0aHJlZSBpbml0IGZ1bmN0aW9ucy4gT25seSBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSBub24taW5pdCBmdW5jdGlvbnMgYW5kIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZS4KClRvIHJlY2FwLCB0aGUgcmVxdWlyZWQgY29uZmlncyBhcmUgYFBST0NfRlNgIGFuZCBgTlVNQWAuIEFsbCB0aGUgYW5hbHlzaXMgY29uZmlybXMgZXZlcnl0aGluZyBpcyBjbGVhciBhbmQgYWNjdXJhdGUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hbGxvY19pbmZvX3Nob3cmIzM0OywKICAgICYjMzQ7c2hvd19idXN5X2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSAvcHJvYy92bWFsbG9jaW5mbyBkdW1wIGltcGxlbWVudGF0aW9uIGluIG1tL3ZtYWxsb2MuYyBieSBleHRyYWN0aW5nIHNob3dfYnVzeV9pbmZvKCkgZnJvbSB2bWFsbG9jX2luZm9fc2hvdygpIGFuZCBjaGFuZ2luZyB0aGUgc2NvcGUvbGlmZXRpbWUgb2YgTlVNQSBjb3VudGVyIGFsbG9jYXRpb25zLiBUaGUgY29kZSBpbiBtbS92bWFsbG9jLmMgaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcmVhZGluZyAvcHJvYy92bWFsbG9jaW5mbywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgaGFuZGxpbmcgYnVncywgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYWxsb2NfaW5mb19zaG93JiMzNDssCiAgICAmIzM0O3Nob3dfYnVzeV9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgL3Byb2Mvdm1hbGxvY2luZm8gZHVtcCBpbXBsZW1lbnRhdGlvbiBpbiBtbS92bWFsbG9jLmMgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGZyb20gdm1hbGxvY19pbmZvX3Nob3coKSBhbmQgY2hhbmdpbmcgdGhlIHNjb3BlL2xpZmV0aW1lIG9mIE5VTUEgY291bnRlciBhbGxvY2F0aW9ucy4gVGhlIGNvZGUgaW4gbW0vdm1hbGxvYy5jIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJlYWRpbmcgL3Byb2Mvdm1hbGxvY2luZm8sIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IGhhbmRsaW5nIGJ1Z3MsIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgaW4gbW0vdm1hbGxvYy5jOlxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxuMy4gSW4gX19pbml0IHZtYWxsb2NfaW5pdCgpLCBpdCByZW9yZGVycyB4YV9pbml0KFx1MDAyNnZicS1cdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhkYmVkNTM2NGI1MTVlYzAwMjgyMDQ4YjEwMjgxYjVjNGU2OWNkMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMzoyMzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCA4NTllNmQyZDU3YTM4Li5lMDlkNmM4YzhiMzUzIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC01MzQ1LDcgJiM0Mzs1MzQ1LDcgQEAgc3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQomIzQzO3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKIAlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKQEAgLTU0MTUsMTIgJiM0Mzs1NDE1LDE4IEBAIHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogCQlzcGluX3VubG9jaygmYW1wO3ZuLSZndDtidXN5LmxvY2spOwogCX0KIAomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpCiYjNDM7CQlrZnJlZShjb3VudGVycyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQomIzQzO3sKJiM0MzsJc2hvd19idXN5X2luZm8obSk7CiYjNDM7CiAJLyoKIAkgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgJiMzNDt1bnB1cmdlZCYjMzQ7IGFyZWFzLgogCSAqLwogCXNob3dfcHVyZ2VfaW5mbyhtKTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpCi0JCWtmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTQzMywxMSAmIzQzOzU0MzksMjMgQEAgbW9kdWxlX2luaXQocHJvY192bWFsbG9jX2luaXQpOwogCiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7CiYjNDM7CiYjNDM7CWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewomIzQzOwkJZnJlZS0mZ3Q7dmFfc3RhcnQgPSBzdGFydDsKJiM0MzsJCWZyZWUtJmd0O3ZhX2VuZCA9IGVuZDsKJiM0MzsJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAomIzQzOwkJCQkJICZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKJiM0MzsJCQkJCSAmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2bWFwX3N0YXJ0ID0gMTsKIAljb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYOwotCXN0cnVjdCB2bWFwX2FyZWEgKmZyZWU7CiAJc3RydWN0IHZtX3N0cnVjdCAqYnVzeTsKIAogCS8qCkBAIC01NDQ3LDMyICYjNDM7NTQ2NSwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZCkKIAkgKiAgfCZsdDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mZ3Q7fAogCSAqLwogCWZvciAoYnVzeSA9IHZtbGlzdDsgYnVzeTsgYnVzeSA9IGJ1c3ktJmd0O25leHQpIHsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LSZndDthZGRyIC0gdm1hcF9zdGFydCAmZ3Q7IDApIHsKLQkJCWZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTsKLQkJCWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewotCQkJCWZyZWUtJmd0O3ZhX3N0YXJ0ID0gdm1hcF9zdGFydDsKLQkJCQlmcmVlLSZndDt2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS0mZ3Q7YWRkcjsKLQotCQkJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAotCQkJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX3Jvb3QsCi0JCQkJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QpOwotCQkJfQotCQl9CiYjNDM7CQlpZiAoKHVuc2lnbmVkIGxvbmcpIGJ1c3ktJmd0O2FkZHIgLSB2bWFwX3N0YXJ0ICZndDsgMCkKJiM0MzsJCQl2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwKJiM0MzsJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBidXN5LSZndDthZGRyKTsKIAogCQl2bWFwX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGJ1c3ktJmd0O2FkZHIgJiM0MzsgYnVzeS0mZ3Q7c2l6ZTsKIAl9CiAKLQlpZiAodm1hcF9lbmQgLSB2bWFwX3N0YXJ0ICZndDsgMCkgewotCQlmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7Ci0JCWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewotCQkJZnJlZS0mZ3Q7dmFfc3RhcnQgPSB2bWFwX3N0YXJ0OwotCQkJZnJlZS0mZ3Q7dmFfZW5kID0gdm1hcF9lbmQ7Ci0KLQkJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAotCQkJCSZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKLQkJCQkJJmFtcDtmcmVlX3ZtYXBfYXJlYV9saXN0KTsKLQkJfQotCX0KJiM0MzsJaWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCAmZ3Q7IDApCiYjNDM7CQl2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwgdm1hcF9lbmQpOwogfQogCiBzdGF0aWMgdm9pZCB2bWFwX2luaXRfbm9kZXModm9pZCkKQEAgLTU1ODUsMTAgJiM0Mzs1NTg2LDExIEBAIHZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKQogCQl2YnEgPSAmYW1wO3Blcl9jcHUodm1hcF9ibG9ja19xdWV1ZSwgaSk7CiAJCXNwaW5fbG9ja19pbml0KCZhbXA7dmJxLSZndDtsb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDt2YnEtJmd0O2ZyZWUpOwomIzQzOwkJeGFfaW5pdCgmYW1wO3ZicS0mZ3Q7dm1hcF9ibG9ja3MpOwomIzQzOwogCQlwID0gJmFtcDtwZXJfY3B1KHZmcmVlX2RlZmVycmVkLCBpKTsKIAkJaW5pdF9sbGlzdF9oZWFkKCZhbXA7cC0mZ3Q7bGlzdCk7CiAJCUlOSVRfV09SSygmYW1wO3AtJmd0O3dxLCBkZWxheWVkX3ZmcmVlX3dvcmspOwotCQl4YV9pbml0KCZhbXA7dmJxLSZndDt2bWFwX2Jsb2Nrcyk7CiAJfQogCiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2bWFsbG9jLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCYjMzk7cyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYCwgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYHZtYWxsb2NfaW5mb19zaG93YC4gVGhlIGRpZmYgbG9va3MgbGlrZSBpdCYjMzk7cyByZXN0cnVjdHVyaW5nIHRoYXQgZnVuY3Rpb24uIEhtbSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGBrZnJlZShjb3VudGVycylgIGF0IHRoZSAqZW5kKiBvZiBgdm1hbGxvY19pbmZvX3Nob3dgLCBidXQgYGNvdW50ZXJzYCB3YXMgYWxsb2NhdGVkIG11Y2ggZWFybGllciBpbnNpZGUgb2YgYHNob3dfYnVzeV9pbmZvYC4gU2VlbXMgYSBiaXQuLi51bndpZWxkeS4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSBleHRyYWN0aW5nIGBzaG93X2J1c3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pYCBhcyBpdHMgb3duIGZ1bmN0aW9uLiBBaCwgSSBzZWUsIHRoZXkmIzM5O3ZlIG1vdmVkIHRoZSBgaWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKSBrZnJlZShjb3VudGVycyk7YCBjYWxsIGludG8gYHNob3dfYnVzeV9pbmZvYCBpdHNlbGYuIFRoYXQgbWFrZXMgc2Vuc2U7IGtlZXBpbmcgdGhlIGBrZnJlZWAgY2FsbCBjbG9zZXIgdG8gd2hlcmUgYGNvdW50ZXJzYCBpcyBhY3R1YWxseSB1c2VkLiBUaGVuLCBgdm1hbGxvY19pbmZvX3Nob3dgIG5vdyBqdXN0IGNhbGxzIGBzaG93X2J1c3lfaW5mb2AgZm9sbG93ZWQgYnkgYHNob3dfcHVyZ2VfaW5mb2AuIE11Y2ggY2xlYW5lciwgbG9naWNhbGx5LgoKSSBzaG91bGQgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBhcm91bmQgbGluZSA1MzQ1LTU0MjAgb2YgYG1tL3ZtYWxsb2MuY2AgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGNoYW5nZXMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIExldCBtZSB1c2UgYHJlYWQtZmlsZWAgdG8gdGFrZSBhIGNsb3NlciBsb29rIGFuZCB2ZXJpZnkgdGhpcyBuZXcgb3JnYW5pemF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzNDU6XHRcdH1cbjUzNDY6XHR9XG41MzQ3Olx0XG41MzQ4Olx0c3RhdGljIHZvaWQgc2hvd19idXN5X2luZm8oc3RydWN0IHNlcV9maWxlICptKVxuNTM0OTpcdHtcbjUzNTA6XHRcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xuNTM1MTpcdFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XG41MzUyOlx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2O1xuNTM1MzpcdFx0dW5zaWduZWQgaW50ICpjb3VudGVycztcbjUzNTQ6XHRcbjUzNTU6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbjUzNTY6XHRcdFx0Y291bnRlcnMgPSBrbWFsbG9jX2FycmF5KG5yX25vZGVfaWRzLCBzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7XG41MzU3Olx0XG41MzU4Olx0XHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbjUzNTk6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG41MzYwOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodmEsIFx1MDAyNnZuLVx1MDAzZWJ1c3kuaGVhZCwgbGlzdCkge1xuNTM2MTpcdFx0XHRcdGlmICghdmEtXHUwMDNldm0pIHtcbjUzNjI6XHRcdFx0XHRcdGlmICh2YS1cdTAwM2VmbGFncyBcdTAwMjYgVk1BUF9SQU0pXG41MzYzOlx0XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglcEstMHglcEsgJTdsZCB2bV9tYXBfcmFtXFxuXCYjMzQ7LFxuNTM2NDpcdFx0XHRcdFx0XHRcdCh2b2lkICopdmEtXHUwMDNldmFfc3RhcnQsICh2b2lkICopdmEtXHUwMDNldmFfZW5kLFxuNTM2NTpcdFx0XHRcdFx0XHRcdHZhX3NpemUodmEpKTtcbjUzNjY6XHRcbjUzNjc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNTM2ODpcdFx0XHRcdH1cbjUzNjk6XHRcbjUzNzA6XHRcdFx0XHR2ID0gdmEtXHUwMDNldm07XG41MzcxOlx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1VOSU5JVElBTElaRUQpXG41MzcyOlx0XHRcdFx0XHRjb250aW51ZTtcbjUzNzM6XHRcbjUzNzQ6XHRcdFx0XHQvKiBQYWlyIHdpdGggc21wX3dtYigpIGluIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZygpICovXG41Mzc1Olx0XHRcdFx0c21wX3JtYigpO1xuNTM3NjpcdFxuNTM3NzpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglcEstMHglcEsgJTdsZFwmIzM0OyxcbjUzNzg6XHRcdFx0XHRcdHYtXHUwMDNlYWRkciwgdi1cdTAwM2VhZGRyICYjNDM7IHYtXHUwMDNlc2l6ZSwgdi1cdTAwM2VzaXplKTtcbjUzNzk6XHRcbjUzODA6XHRcdFx0XHRpZiAodi1cdTAwM2VjYWxsZXIpXG41MzgxOlx0XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAlcFNcJiMzNDssIHYtXHUwMDNlY2FsbGVyKTtcbjUzODI6XHRcbjUzODM6XHRcdFx0XHRpZiAodi1cdTAwM2Vucl9wYWdlcylcbjUzODQ6XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7IHBhZ2VzPSVsdVwmIzM0Oywgdi1cdTAwM2Vucl9wYWdlcyk7XG41Mzg1Olx0XG41Mzg2Olx0XHRcdFx0aWYgKHYtXHUwMDNlcGh5c19hZGRyKVxuNTM4NzpcdFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgcGh5cz0lcGFcJiMzNDssIFx1MDAyNnYtXHUwMDNlcGh5c19hZGRyKTtcbjUzODg6XHRcbjUzODk6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fSU9SRU1BUClcbjUzOTA6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyBpb3JlbWFwXCYjMzQ7KTtcbjUzOTE6XHRcbjUzOTI6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fU1BBUlNFKVxuNTM5MzpcdFx0XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7IHNwYXJzZVwmIzM0Oyk7XG41Mzk0Olx0XG41Mzk1Olx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX0FMTE9DKVxuNTM5NjpcdFx0XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7IHZtYWxsb2NcJiMzNDspO1xuNTM5NzpcdFxuNTM5ODpcdFx0XHRcdGlmICh2LVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9NQVApXG41Mzk5Olx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgdm1hcFwmIzM0Oyk7XG41NDAwOlx0XG41NDAxOlx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1VTRVJNQVApXG41NDAyOlx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgdXNlclwmIzM0Oyk7XG41NDAzOlx0XG41NDA0Olx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX0RNQV9DT0hFUkVOVClcbjU0MDU6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyBkbWEtY29oZXJlbnRcJiMzNDspO1xuNTQwNjpcdFxuNTQwNzpcdFx0XHRcdGlmIChpc192bWFsbG9jX2FkZHIodi1cdTAwM2VwYWdlcykpXG41NDA4Olx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgdnBhZ2VzXCYjMzQ7KTtcbjU0MDk6XHRcbjU0MTA6XHRcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG41NDExOlx0XHRcdFx0XHRzaG93X251bWFfaW5mbyhtLCB2LCBjb3VudGVycyk7XG41NDEyOlx0XG41NDEzOlx0XHRcdFx0c2VxX3B1dGMobSwgJiMzOTtcXG4mIzM5Oyk7XG41NDE0Olx0XHRcdH1cbjU0MTU6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbjU0MTY6XHRcdH1cbjU0MTc6XHRcbjU0MTg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbjU0MTk6XHRcdFx0a2ZyZWUoY291bnRlcnMpO1xuNTQyMDpcdH1cbjU0MjE6XHRcbjU0MjI6XHRzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbjU0MjM6XHR7XG41NDI0Olx0XHRzaG93X2J1c3lfaW5mbyhtKTtcbjU0MjU6XHRcbjU0MjY6XHRcdC8qXG41NDI3Olx0XHQgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgXCYjMzQ7dW5wdXJnZWRcJiMzNDsgYXJlYXMuXG41NDI4Olx0XHQgKi9cbjU0Mjk6XHRcdHNob3dfcHVyZ2VfaW5mbyhtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBBbmFseXNpczogdm1hbGxvYy5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgdG8gYHZtYWxsb2MuY2AuIFRoaXMgbG9va3MgbGlrZSBzb21lIHN0cmFpZ2h0Zm9yd2FyZCwgdGhvdWdoIHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgcmVmYWN0b3JpbmcuIEZpcnN0LCB0aGUgYHNob3dfYnVzeV9pbmZvYCBmdW5jdGlvbi4gVGhpcyBpcyBwdXJlIGNvZGUgb3JnYW5pemF0aW9uOyB0aGUgYHNob3dfYnVzeV9pbmZvKG0pYCBmdW5jdGlvbiBpcyBleHRyYWN0ZWQgZnJvbSBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGUga2V5IGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIGxvY2FsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBgY291bnRlcnNgIHdpdGhpbiBgc2hvd19idXN5X2luZm9gIG5vdywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBzY29wZS4gUHJldmlvdXNseSBpdCB3YXMgZnJlZWQgYXQgdGhlIGVuZCBvZiB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24sIHdoaWNoIGlzIGEgcGVyZmVjdGx5IGFjY2VwdGFibGUgcHJhY3RpY2UgYnV0IHRoaXMgaXMgYmV0dGVyLgoKVGhlIHNlY29uZCBjaGFuZ2UgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gV2UmIzM5O3JlIGludHJvZHVjaW5nIGEgaGVscGVyIGZ1bmN0aW9uLCBgdm1hcF9pbnNlcnRfZnJlZV9hcmVhYCwgdG8gZGVkdXBsaWNhdGUgY29kZSBpbiBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIG1vdmUgdG8gaW1wcm92ZSByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LiBUaGUgcmVwZWF0ZWQgYGttZW1fY2FjaGVfemFsbG9jYCBhbmQgYGluc2VydF92bWFwX2FyZWFfYXVnbWVudGAgYmxvY2sgaXMgcmVwbGFjZWQgd2l0aCBjYWxscyB0byB0aGlzIG5ldyBoZWxwZXIuIEl0IGxvb2tzIGxpa2UgdGhlIHNhbWUgemVyb2luZyBvZiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCBpcyBiZWluZyBtYWludGFpbmVkLiBUaGUgdXNlIG9mIGBfX2luaXRgIGhlcmUgdGVsbHMgbWUgdGhpcyBpcyBhbGwgaGFwcGVuaW5nIGF0IGJvb3QgdGltZSwgYW5kIHRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSXQgbWVhbnMgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGRlZHVwbGljYXRpb24gaXMgbWluaW1hbC4KCkZpbmFsbHksIGluIGB2bWFsbG9jX2luaXRgLCB3ZSBoYXZlIGEgc2ltcGxlIHJlb3JkZXJpbmcgb2YgdGhlIGB4YV9pbml0KCZhbXA7dmJxLSZndDt2bWFwX2Jsb2NrcylgIGNhbGwuIEl0JiMzOTtzIG1vdmVkIHRvIGJlIGdyb3VwZWQgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB2YnFgIHN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgbG9va3MgbGlrZSBhIHN0eWxpc3RpYyBjaGFuZ2UsIHRvIGltcHJvdmUgdGhlIGZsb3cgb2YgdGhlIGNvZGUuCgpPdmVyYWxsLCBpdCBzZWVtcyBsaWtlIGEgY2xlYW4gc2V0IG9mIGNoYW5nZXMgZGVzaWduZWQgZm9yIGJldHRlciBvcmdhbml6YXRpb24gYW5kIGNvZGUgY2xhcml0eS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gbGluZXMgNTU4MC01NjAwIG9mIGBtbS92bWFsbG9jLmNgIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGNoYW5nZXMgb3IgaGlkZGVuIGltcGxpY2F0aW9ucy4gSXQmIzM5O3MgYWx3YXlzIHdpc2UgdG8gZG91YmxlLWNoZWNrLCBidXQgdGhpcyBpbml0aWFsIGFuYWx5c2lzIHN1Z2dlc3RzIGEgd2VsbC1jb25zaWRlcmVkIHNlcmllcyBvZiBpbXByb3ZlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NTgwOlx0XHR2bWFwX2FyZWFfY2FjaGVwID0gS01FTV9DQUNIRSh2bWFwX2FyZWEsIFNMQUJfUEFOSUMpO1xuNTU4MTpcdFxuNTU4MjpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbjU1ODM6XHRcdFx0c3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicTtcbjU1ODQ6XHRcdFx0c3RydWN0IHZmcmVlX2RlZmVycmVkICpwO1xuNTU4NTpcdFxuNTU4NjpcdFx0XHR2YnEgPSBcdTAwMjZwZXJfY3B1KHZtYXBfYmxvY2tfcXVldWUsIGkpO1xuNTU4NzpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ2YnEtXHUwMDNlbG9jayk7XG41NTg4Olx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZicS1cdTAwM2VmcmVlKTtcbjU1ODk6XHRcdFx0eGFfaW5pdChcdTAwMjZ2YnEtXHUwMDNldm1hcF9ibG9ja3MpO1xuNTU5MDpcdFxuNTU5MTpcdFx0XHRwID0gXHUwMDI2cGVyX2NwdSh2ZnJlZV9kZWZlcnJlZCwgaSk7XG41NTkyOlx0XHRcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuNTU5MzpcdFx0XHRJTklUX1dPUksoXHUwMDI2cC1cdTAwM2V3cSwgZGVsYXllZF92ZnJlZV93b3JrKTtcbjU1OTQ6XHRcdH1cbjU1OTU6XHRcbjU1OTY6XHRcdC8qXG41NTk3Olx0XHQgKiBTZXR1cCBub2RlcyBiZWZvcmUgaW1wb3J0aW5nIHZtbGlzdC5cbjU1OTg6XHRcdCAqL1xuNTU5OTpcdFx0dm1hcF9pbml0X25vZGVzKCk7XG41NjAwOlx0XG41NjAxOlx0XHQvKiBJbXBvcnQgZXhpc3Rpbmcgdm1saXN0IGVudHJpZXMuICovXG41NjAyOlx0XHRmb3IgKHRtcCA9IHZtbGlzdDsgdG1wOyB0bXAgPSB0bXAtXHUwMDNlbmV4dCkge1xuNTYwMzpcdFx0XHR2YSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xuNTYwNDpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCF2YSkpXG41NjA1Olx0XHRcdFx0Y29udGludWU7XG41NjA2Olx0XG41NjA3Olx0XHRcdHZhLVx1MDAzZXZhX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdG1wLVx1MDAzZWFkZHI7XG41NjA4Olx0XHRcdHZhLVx1MDAzZXZhX2VuZCA9IHZhLVx1MDAzZXZhX3N0YXJ0ICYjNDM7IHRtcC1cdTAwM2VzaXplO1xuNTYwOTpcdFx0XHR2YS1cdTAwM2V2bSA9IHRtcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU5MQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA0ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogS01TQU4gTm90IE5lZWRlZCoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBkaWZmLCBpdCYjMzk7cyBjbGVhciB0aGF0IEtNU0FOIGlzbiYjMzk7dCB3YXJyYW50ZWQgaGVyZS4gVGhpcyBpcyBhbGwgY2xlYW4gcmVmYWN0b3Jpbmcgd29yay4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgKipgdm1hbGxvY19pbmZvX3Nob3dgKio6IEkgc2VlIHRoZXkmIzM5O3ZlIHRha2VuIHRoZSBidXN5IGluZm8gcHJpbnRpbmcgbG9naWMgYW5kIGlzb2xhdGVkIGl0IGludG8gYSBoZWxwZXIsIGBzaG93X2J1c3lfaW5mb2AuIE1ha2VzIHNlbnNlLiBUaGV5JiMzOTt2ZSBhbHNvIG1vdmVkIHRoZSBmcmVlaW5nIG9mIHRoZSBOVU1BIGNvdW50ZXJzIGJ1ZmZlciBjbG9zZXIgdG8gaXRzIHVzYWdlIGluIHRoYXQgaGVscGVyLiBBIGdvb2QsIHNtYWxsIGltcHJvdmVtZW50IGZvciByZWFkYWJpbGl0eS4KCiogICAqKmB2bWFwX2luaXRfZnJlZV9zcGFjZWAqKjogVGhleSYjMzk7dmUgY2xlYW5lZCB1cCBkdXBsaWNhdGUgY29kZSB3aXRoIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgLiBTbWFydCBtb3ZlLiBBbmQgdGhleSYjMzk7cmUgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCwgc28gd2UmIzM5O3JlIGd1YXJhbnRlZWQgemVyby1pbml0aWFsaXphdGlvbi4gTm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKKiAgICoqYHZtYWxsb2NfaW5pdGAqKjogSnVzdCBhIHJlb3JkZXJpbmcgb2YgYHhhX2luaXQoJmFtcDt2YnEtJmd0O3ZtYXBfYmxvY2tzKWAuIEtlZXBpbmcgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyIGlzIGdvb2QgcHJhY3RpY2UuIE5vIGxvZ2ljIGNoYW5nZXMsIGp1c3QgYSBiZXR0ZXIgY29kZSBzdHJ1Y3R1cmUuCgpUaGUgaW1wb3J0YW50IHRoaW5nIGlzLCBub25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGFueSBvZiB0aGUgS01TQU4tdHJpZ2dlcmluZyBpc3N1ZXM6IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBubyB1bmluaXRpYWxpemVkIGFsbG9jYXRpb25zLCBubyBhbHRlcmF0aW9ucyB0byBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzLCBhbmQgZGVmaW5pdGVseSBubyBpbmZvcm1hdGlvbiBsZWFrcy4gV2UmIzM5O3JlIG5vdCB0b3VjaGluZyBhbnkgdXNlciBjb3B5IG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZldGltZSBpc3N1ZXMgdGhhdCBtaWdodCBjcm9wIHVwLgoKU28sIHRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcsIHdpdGggbm8gbmV3IHJpc2tzLCBhbmQgS01TQU4gaXMgKmZhbHNlKi4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgaW4gbW0vdm1hbGxvYy5jOlxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxuMy4gSW4gX19pbml0IHZtYWxsb2NfaW5pdCgpLCBpdCByZW9yZGVycyB4YV9pbml0KFx1MDAyNnZicS1cdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGluIG1tL3ZtYWxsb2MuYzpcbjEuIEl0IHNwbGl0cyB2bWFsbG9jX2luZm9fc2hvdygpIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBhbmQgZnJlZWluZyB0aGUgdGVtcG9yYXJ5IE5VTUEgY291bnRlcnMgYXJyYXkgZWFybGllciB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cbjIuIEl0IGRlZHVwbGljYXRlcyBmcmVlIHZtYXAgYXJlYSBpbnNlcnRpb24gbG9naWMgaW4gX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiB2bWFwX2luc2VydF9mcmVlX2FyZWEoKSwgd2hpY2ggY29udGludWVzIHRvIGFsbG9jYXRlIHdpdGgga21lbV9jYWNoZV96YWxsb2MoKSBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC5cbjMuIEluIF9faW5pdCB2bWFsbG9jX2luaXQoKSwgaXQgcmVvcmRlcnMgeGFfaW5pdChcdTAwMjZ2YnEtXHUwMDNldm1hcF9ibG9ja3MpIHRvIGdyb3VwIHBlci1DUFUgdmJxIGluaXRpYWxpemF0aW9ucyB0b2dldGhlci5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi4gU3RhbmRhcmQgS0FTQU4vYnVpbGQgY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZWN5Y2xlIGlzc3VlczsgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjIzOjMwLjg0MDIwMzQwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODkyMTA3Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hbGxvY19pbmZvX3Nob3dcIixcbiAgICBcInNob3dfYnVzeV9pbmZvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyBpbiBtbS92bWFsbG9jLmM6XFxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxcbjIuIEl0IGRlZHVwbGljYXRlcyBmcmVlIHZtYXAgYXJlYSBpbnNlcnRpb24gbG9naWMgaW4gX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiB2bWFwX2luc2VydF9mcmVlX2FyZWEoKSwgd2hpY2ggY29udGludWVzIHRvIGFsbG9jYXRlIHdpdGgga21lbV9jYWNoZV96YWxsb2MoKSBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC5cXG4zLiBJbiBfX2luaXQgdm1hbGxvY19pbml0KCksIGl0IHJlb3JkZXJzIHhhX2luaXQoXFx1MDAyNnZicS1cXHUwMDNldm1hcF9ibG9ja3MpIHRvIGdyb3VwIHBlci1DUFUgdmJxIGluaXRpYWxpemF0aW9ucyB0b2dldGhlci5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIC9wcm9jL3ZtYWxsb2NpbmZvIGR1bXAgaW1wbGVtZW50YXRpb24gaW4gbW0vdm1hbGxvYy5jIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBmcm9tIHZtYWxsb2NfaW5mb19zaG93KCkgYW5kIGNoYW5naW5nIHRoZSBzY29wZS9saWZldGltZSBvZiBOVU1BIGNvdW50ZXIgYWxsb2NhdGlvbnMuIFRoZSBjb2RlIGluIG1tL3ZtYWxsb2MuYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByZWFkaW5nIC9wcm9jL3ZtYWxsb2NpbmZvLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBoYW5kbGluZyBidWdzLCBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjM6MzAuODQwMjA5MDM0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg0MzMwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZGJlZDUzNjRiNTE1ZWMwMDI4MjA0OGIxMDI4MWI1YzRlNjljZDEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDAzOjIzOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xcbmluZGV4IDg1OWU2ZDJkNTdhMzguLmUwOWQ2YzhjOGIzNTMgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTUzNDUsNyArNTM0NSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuK3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG4gXFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XFxuQEAgLTU0MTUsMTIgKzU0MTUsMTggQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5sb2NrKTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxcbitcXHRcXHRrZnJlZShjb3VudGVycyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxcbit7XFxuK1xcdHNob3dfYnVzeV9pbmZvKG0pO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFxcXCJ1bnB1cmdlZFxcXCIgYXJlYXMuXFxuIFxcdCAqL1xcbiBcXHRzaG93X3B1cmdlX2luZm8obSk7XFxuLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG4tXFx0XFx0a2ZyZWUoY291bnRlcnMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNTQzMywxMSArNTQzOSwyMyBAQCBtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XFxuIFxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuK3tcXG4rXFx0c3RydWN0IHZtYXBfYXJlYSAqZnJlZSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xcbitcXG4rXFx0aWYgKCFXQVJOX09OX09OQ0UoIWZyZWUpKSB7XFxuK1xcdFxcdGZyZWUtXFx1MDAzZXZhX3N0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdGZyZWUtXFx1MDAzZXZhX2VuZCA9IGVuZDtcXG4rXFx0XFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcXG4rXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHZtYXBfc3RhcnQgPSAxO1xcbiBcXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYO1xcbi1cXHRzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlO1xcbiBcXHRzdHJ1Y3Qgdm1fc3RydWN0ICpidXN5O1xcbiBcXG4gXFx0LypcXG5AQCAtNTQ0NywzMiArNTQ2NSwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcXG4gXFx0ICogIHxcXHUwMDNjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFx1MDAzZXxcXG4gXFx0ICovXFxuIFxcdGZvciAoYnVzeSA9IHZtbGlzdDsgYnVzeTsgYnVzeSA9IGJ1c3ktXFx1MDAzZW5leHQpIHtcXG4tXFx0XFx0aWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LVxcdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0ZnJlZSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xcbi1cXHRcXHRcXHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcXG4tXFx0XFx0XFx0XFx0ZnJlZS1cXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xcbi1cXHRcXHRcXHRcXHRmcmVlLVxcdTAwM2V2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cXHUwMDNlYWRkcjtcXG4tXFxuLVxcdFxcdFxcdFxcdGluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LVxcdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh2bWFwX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAodW5zaWduZWQgbG9uZykgYnVzeS1cXHUwMDNlYWRkcik7XFxuIFxcbiBcXHRcXHR2bWFwX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGJ1c3ktXFx1MDAzZWFkZHIgKyBidXN5LVxcdTAwM2VzaXplO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAodm1hcF9lbmQgLSB2bWFwX3N0YXJ0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XFxuLVxcdFxcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xcbi1cXHRcXHRcXHRmcmVlLVxcdTAwM2V2YV9zdGFydCA9IHZtYXBfc3RhcnQ7XFxuLVxcdFxcdFxcdGZyZWUtXFx1MDAzZXZhX2VuZCA9IHZtYXBfZW5kO1xcbi1cXG4tXFx0XFx0XFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRpZiAodm1hcF9lbmQgLSB2bWFwX3N0YXJ0IFxcdTAwM2UgMClcXG4rXFx0XFx0dm1hcF9pbnNlcnRfZnJlZV9hcmVhKHZtYXBfc3RhcnQsIHZtYXBfZW5kKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdm1hcF9pbml0X25vZGVzKHZvaWQpXFxuQEAgLTU1ODUsMTAgKzU1ODYsMTEgQEAgdm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXFxuIFxcdFxcdHZicSA9IFxcdTAwMjZwZXJfY3B1KHZtYXBfYmxvY2tfcXVldWUsIGkpO1xcbiBcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dmJxLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZicS1cXHUwMDNlZnJlZSk7XFxuK1xcdFxcdHhhX2luaXQoXFx1MDAyNnZicS1cXHUwMDNldm1hcF9ibG9ja3MpO1xcbitcXG4gXFx0XFx0cCA9IFxcdTAwMjZwZXJfY3B1KHZmcmVlX2RlZmVycmVkLCBpKTtcXG4gXFx0XFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZwLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwLVxcdTAwM2V3cSwgZGVsYXllZF92ZnJlZV93b3JrKTtcXG4tXFx0XFx0eGFfaW5pdChcXHUwMDI2dmJxLVxcdTAwM2V2bWFwX2Jsb2Nrcyk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjIzOjMxLjMyOTIzODc5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjAyMzA5OTAwMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFsbG9jX2luZm9fc2hvd1wiLFxuICAgIFwic2hvd19idXN5X2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIC9wcm9jL3ZtYWxsb2NpbmZvIGR1bXAgaW1wbGVtZW50YXRpb24gaW4gbW0vdm1hbGxvYy5jIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBmcm9tIHZtYWxsb2NfaW5mb19zaG93KCkgYW5kIGNoYW5naW5nIHRoZSBzY29wZS9saWZldGltZSBvZiBOVU1BIGNvdW50ZXIgYWxsb2NhdGlvbnMuIFRoZSBjb2RlIGluIG1tL3ZtYWxsb2MuYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByZWFkaW5nIC9wcm9jL3ZtYWxsb2NpbmZvLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBoYW5kbGluZyBidWdzLCBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZGJlZDUzNjRiNTE1ZWMwMDI4MjA0OGIxMDI4MWI1YzRlNjljZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MjM6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDg1OWU2ZDJkNTdhMzguLmUwOWQ2YzhjOGIzNTMgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTUzNDUsNyArNTM0NSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuK3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuQEAgLTU0MTUsMTIgKzU0MTUsMTggQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4gXHR9XG4gXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG4rXHRcdGtmcmVlKGNvdW50ZXJzKTtcbit9XG4rXG4rc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4re1xuK1x0c2hvd19idXN5X2luZm8obSk7XG4rXG4gXHQvKlxuIFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFwidW5wdXJnZWRcIiBhcmVhcy5cbiBcdCAqL1xuIFx0c2hvd19wdXJnZV9pbmZvKG0pO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuLVx0XHRrZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNTQzMywxMSArNTQzOSwyMyBAQCBtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XG4gXG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbit7XG4rXHRzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4rXG4rXHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcbitcdFx0ZnJlZS1cdTAwM2V2YV9zdGFydCA9IHN0YXJ0O1xuK1x0XHRmcmVlLVx1MDAzZXZhX2VuZCA9IGVuZDtcbitcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4rXHRcdFx0XHRcdCBcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuK1x0XHRcdFx0XHQgXHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luaXRfZnJlZV9zcGFjZSh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdm1hcF9zdGFydCA9IDE7XG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYO1xuLVx0c3RydWN0IHZtYXBfYXJlYSAqZnJlZTtcbiBcdHN0cnVjdCB2bV9zdHJ1Y3QgKmJ1c3k7XG4gXG4gXHQvKlxuQEAgLTU0NDcsMzIgKzU0NjUsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpXG4gXHQgKiAgfFx1MDAzYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx1MDAzZXxcbiBcdCAqL1xuIFx0Zm9yIChidXN5ID0gdm1saXN0OyBidXN5OyBidXN5ID0gYnVzeS1cdTAwM2VuZXh0KSB7XG4tXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRcdGZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTtcbi1cdFx0XHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcbi1cdFx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdFx0ZnJlZS1cdTAwM2V2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyO1xuLVxuLVx0XHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXG4tXHRcdFx0XHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbitcdFx0XHR2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCxcbitcdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpIGJ1c3ktXHUwMDNlYWRkcik7XG4gXG4gXHRcdHZtYXBfc3RhcnQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyICsgYnVzeS1cdTAwM2VzaXplO1xuIFx0fVxuIFxuLVx0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4tXHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfZW5kID0gdm1hcF9lbmQ7XG4tXG4tXHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuLVx0XHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbi1cdFx0fVxuLVx0fVxuK1x0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbitcdFx0dm1hcF9pbnNlcnRfZnJlZV9hcmVhKHZtYXBfc3RhcnQsIHZtYXBfZW5kKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdm1hcF9pbml0X25vZGVzKHZvaWQpXG5AQCAtNTU4NSwxMCArNTU4NiwxMSBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbiBcdFx0dmJxID0gXHUwMDI2cGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBpKTtcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmJxLVx1MDAzZWxvY2spO1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2YnEtXHUwMDNlZnJlZSk7XG4rXHRcdHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKTtcbitcbiBcdFx0cCA9IFx1MDAyNnBlcl9jcHUodmZyZWVfZGVmZXJyZWQsIGkpO1xuIFx0XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnAtXHUwMDNld3EsIGRlbGF5ZWRfdmZyZWVfd29yayk7XG4tXHRcdHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKTtcbiBcdH1cbiBcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyMzozMS4zMjkyNDA2NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MjIyMzgxNjAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZtYWxsb2MgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGNoYW5nZXMgYXJlIGFsbCB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdG9yLiBGaXJzdCwgSSBzZWUgYSByZWZhY3RvcmluZyBvZiBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGV5J3ZlIGV4dHJhY3RlZCBgc2hvd19idXN5X2luZm9gIGludG8gaXRzIG93biBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIHJlYWRhYmlsaXR5IGFuZCBwb3RlbnRpYWwgcmV1c2UuIEknbSBub3RpbmcgdGhlIHBsYWNlbWVudCBvZiBga2ZyZWUoY291bnRlcnMpYDsgaXQncyBub3cgaGFuZGxlZCB3aXRoaW4gYHNob3dfYnVzeV9pbmZvYCBiZWZvcmUgdGhlIHJldHVybi4gQ3VyaW91cy4gTm93LCBgdm1hbGxvY19pbmZvX3Nob3dgIGNhbGxzIGBzaG93X2J1c3lfaW5mb2AgYW5kIHRoZW4gYHNob3dfcHVyZ2VfaW5mb2AuIFJpZ2h0LCBhbmQgdGhlbiBpdCByZXR1cm5zLiBJIHdvbmRlciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpjYWxsZWQgZnJvbSo/IE15IGd1ZXNzIGlzIGl0J3MgcmVsYXRlZCB0byB0aGUgYC9wcm9jL3ZtYWxsb2NpbmZvYCBpbnRlcmZhY2UsIHBlcmhhcHMgdGhyb3VnaCBgcHJvY192bWFsbG9jX2luaXRgLlxuXG5OZXh0LCBJIHNlZSBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgLCBpbnRyb2R1Y2VkIHdpdGhpbiBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgLiBJdCdzIGJlaW5nIHVzZWQgdHdpY2UsIGVmZmVjdGl2ZWx5IGRlZHVwbGljYXRpbmcgc29tZSBjb2RlLiBTbWFydC4gQW5kIHRoaXMgaXMgYWxsIG1hcmtlZCBhcyBgX19pbml0YCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS5cblxuRmluYWxseSwgaW4gYHZtYWxsb2NfaW5pdGAsIHRoZXkndmUgbW92ZWQgYHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKWAgKmJlZm9yZSogYGluaXRfbGxpc3RfaGVhZChcdTAwMjZwLVx1MDAzZWxpc3QpYC4gQWxzbyBgX19pbml0YC5cblxuSSdtIHN0aWxsIHRoaW5raW5nIGFib3V0IGBzaG93X2J1c3lfaW5mb2AgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGFyb3VuZCBsaW5lIDUzNDUgaW4gYG1tL3ZtYWxsb2MuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5pbmcgYXJvdW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MDMuNTUzMDU5ODQyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzQwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MzQwOlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JXBLLTB4JXBLICU3bGQgdW5wdXJnZWQgdm1fYXJlYVxcXFxuXFxcIixcXG41MzQxOlxcdFxcdFxcdFxcdFxcdCh2b2lkICopdmEtXFx1MDAzZXZhX3N0YXJ0LCAodm9pZCAqKXZhLVxcdTAwM2V2YV9lbmQsXFxuNTM0MjpcXHRcXHRcXHRcXHRcXHR2YV9zaXplKHZhKSk7XFxuNTM0MzpcXHRcXHRcXHR9XFxuNTM0NDpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dm4tXFx1MDAzZWxhenkubG9jayk7XFxuNTM0NTpcXHRcXHR9XFxuNTM0NjpcXHR9XFxuNTM0NzpcXHRcXG41MzQ4OlxcdHN0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG41MzQ5OlxcdHtcXG41MzUwOlxcdFxcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xcbjUzNTE6XFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XFxuNTM1MjpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2O1xcbjUzNTM6XFx0XFx0dW5zaWduZWQgaW50ICpjb3VudGVycztcXG41MzU0OlxcdFxcbjUzNTU6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxcbjUzNTY6XFx0XFx0XFx0Y291bnRlcnMgPSBrbWFsbG9jX2FycmF5KG5yX25vZGVfaWRzLCBzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7XFxuNTM1NzpcXHRcXG41MzU4OlxcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbjUzNTk6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5sb2NrKTtcXG41MzYwOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmEsIFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5oZWFkLCBsaXN0KSB7XFxuNTM2MTpcXHRcXHRcXHRcXHRpZiAoIXZhLVxcdTAwM2V2bSkge1xcbjUzNjI6XFx0XFx0XFx0XFx0XFx0aWYgKHZhLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNQVBfUkFNKVxcbjUzNjM6XFx0XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiMHglcEstMHglcEsgJTdsZCB2bV9tYXBfcmFtXFxcXG5cXFwiLFxcbjUzNjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0KHZvaWQgKil2YS1cXHUwMDNldmFfc3RhcnQsICh2b2lkICopdmEtXFx1MDAzZXZhX2VuZCxcXG41MzY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHZhX3NpemUodmEpKTtcXG41MzY2OlxcdFxcbjUzNjc6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTM2ODpcXHRcXHRcXHRcXHR9XFxuNTM2OTpcXHRcXG41MzcwOlxcdFxcdFxcdFxcdHYgPSB2YS1cXHUwMDNldm07XFxuNTM3MTpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9VTklOSVRJQUxJWkVEKVxcbjUzNzI6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTM3MzpcXHRcXG41Mzc0OlxcdFxcdFxcdFxcdC8qIFBhaXIgd2l0aCBzbXBfd21iKCkgaW4gY2xlYXJfdm1fdW5pbml0aWFsaXplZF9mbGFnKCkgKi9cXG41Mzc1OlxcdFxcdFxcdFxcdHNtcF9ybWIoKTtcXG41Mzc2OlxcdFxcbjUzNzc6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiMHglcEstMHglcEsgJTdsZFxcXCIsXFxuNTM3ODpcXHRcXHRcXHRcXHRcXHR2LVxcdTAwM2VhZGRyLCB2LVxcdTAwM2VhZGRyICsgdi1cXHUwMDNlc2l6ZSwgdi1cXHUwMDNlc2l6ZSk7XFxuNTM3OTpcXHRcXG41MzgwOlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VjYWxsZXIpXFxuNTM4MTpcXHRcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgJXBTXFxcIiwgdi1cXHUwMDNlY2FsbGVyKTtcXG41MzgyOlxcdFxcbjUzODM6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZW5yX3BhZ2VzKVxcbjUzODQ6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiIHBhZ2VzPSVsdVxcXCIsIHYtXFx1MDAzZW5yX3BhZ2VzKTtcXG41Mzg1OlxcdFxcbjUzODY6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZXBoeXNfYWRkcilcXG41Mzg3OlxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiBwaHlzPSVwYVxcXCIsIFxcdTAwMjZ2LVxcdTAwM2VwaHlzX2FkZHIpO1xcbjUzODg6XFx0XFxuNTM4OTpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9JT1JFTUFQKVxcbjUzOTA6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgXFxcIiBpb3JlbWFwXFxcIik7XFxuNTM5MTpcXHRcXG41MzkyOlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX1NQQVJTRSlcXG41MzkzOlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgc3BhcnNlXFxcIik7XFxuNTM5NDpcXHRcXG41Mzk1OlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX0FMTE9DKVxcbjUzOTY6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgXFxcIiB2bWFsbG9jXFxcIik7XFxuNTM5NzpcXHRcXG41Mzk4OlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX01BUClcXG41Mzk5OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgdm1hcFxcXCIpO1xcbjU0MDA6XFx0XFxuNTQwMTpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9VU0VSTUFQKVxcbjU0MDI6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgXFxcIiB1c2VyXFxcIik7XFxuNTQwMzpcXHRcXG41NDA0OlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX0RNQV9DT0hFUkVOVClcXG41NDA1OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgZG1hLWNvaGVyZW50XFxcIik7XFxuNTQwNjpcXHRcXG41NDA3OlxcdFxcdFxcdFxcdGlmIChpc192bWFsbG9jX2FkZHIodi1cXHUwMDNlcGFnZXMpKVxcbjU0MDg6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgXFxcIiB2cGFnZXNcXFwiKTtcXG41NDA5OlxcdFxcbjU0MTA6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxcbjU0MTE6XFx0XFx0XFx0XFx0XFx0c2hvd19udW1hX2luZm8obSwgdiwgY291bnRlcnMpO1xcbjU0MTI6XFx0XFxuNTQxMzpcXHRcXHRcXHRcXHRzZXFfcHV0YyhtLCAnXFxcXG4nKTtcXG41NDE0OlxcdFxcdFxcdH1cXG41NDE1OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5sb2NrKTtcXG41NDE2OlxcdFxcdH1cXG41NDE3OlxcdFxcbjU0MTg6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxcbjU0MTk6XFx0XFx0XFx0a2ZyZWUoY291bnRlcnMpO1xcbjU0MjA6XFx0fVxcbjU0MjE6XFx0XFxuNTQyMjpcXHRzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcXG41NDIzOlxcdHtcXG41NDI0OlxcdFxcdHNob3dfYnVzeV9pbmZvKG0pO1xcbjU0MjU6XFx0XFxuNTQyNjpcXHRcXHQvKlxcbjU0Mjc6XFx0XFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFxcXCJ1bnB1cmdlZFxcXCIgYXJlYXMuXFxuNTQyODpcXHRcXHQgKi9cXG41NDI5OlxcdFxcdHNob3dfcHVyZ2VfaW5mbyhtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MDMuNTUzMjg2NzIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI0MjgzNzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoYXQgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBgL3Byb2Mvdm1hbGxvY2luZm9gIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGAvcHJvYy92bWFsbG9jaW5mb2AgaXMgcG9wdWxhdGVkLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIHdoZXJlIHdlIGdldCB0aGUgZGV0YWlscyBvbiB2aXJ0dWFsbHkgbWFwcGVkIG1lbW9yeSBhcmVhcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYmFjayB0byB0aGUgYHZtYWxsb2NfaW5mb19zaG93YCBmdW5jdGlvbiwgYXMgdGhhdCdzIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZSBmb3IgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSBkaXNwbGF5ZWQgdGhlcmUuIE5vdywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGZvcm1hdHRpbmcgYW5kIHdyaXRpbmcgdGhhdCBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IGl0J3MgdXNlZC5cblxuTGV0J3MgdXNlIGByZWFkLWZpbGVgIGFuZCBjaGVjayBsaW5lcyA1NDMwLTU0NDUgdG8gY2xhcmlmeSBob3cgYHZtYWxsb2NfaW5mb19zaG93YCBpcyBpbnRlZ3JhdGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI1OjA1Ljc5NjEyODY2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWFsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQyMDpcXHR9XFxuNTQyMTpcXHRcXG41NDIyOlxcdHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxcbjU0MjM6XFx0e1xcbjU0MjQ6XFx0XFx0c2hvd19idXN5X2luZm8obSk7XFxuNTQyNTpcXHRcXG41NDI2OlxcdFxcdC8qXFxuNTQyNzpcXHRcXHQgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgXFxcInVucHVyZ2VkXFxcIiBhcmVhcy5cXG41NDI4OlxcdFxcdCAqL1xcbjU0Mjk6XFx0XFx0c2hvd19wdXJnZV9pbmZvKG0pO1xcbjU0MzA6XFx0XFx0cmV0dXJuIDA7XFxuNTQzMTpcXHR9XFxuNTQzMjpcXHRcXG41NDMzOlxcdHN0YXRpYyBpbnQgX19pbml0IHByb2Nfdm1hbGxvY19pbml0KHZvaWQpXFxuNTQzNDpcXHR7XFxuNTQzNTpcXHRcXHRwcm9jX2NyZWF0ZV9zaW5nbGUoXFxcInZtYWxsb2NpbmZvXFxcIiwgMDQwMCwgTlVMTCwgdm1hbGxvY19pbmZvX3Nob3cpO1xcbjU0MzY6XFx0XFx0cmV0dXJuIDA7XFxuNTQzNzpcXHR9XFxuNTQzODpcXHRtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XFxuNTQzOTpcXHRcXG41NDQwOlxcdCNlbmRpZlxcbjU0NDE6XFx0XFxuNTQ0MjpcXHRzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbnNlcnRfZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbjU0NDM6XFx0e1xcbjU0NDQ6XFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqZnJlZSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xcbjU0NDU6XFx0XFxuNTQ0NjpcXHRcXHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcXG41NDQ3OlxcdFxcdFxcdGZyZWUtXFx1MDAzZXZhX3N0YXJ0ID0gc3RhcnQ7XFxuNTQ0ODpcXHRcXHRcXHRmcmVlLVxcdTAwM2V2YV9lbmQgPSBlbmQ7XFxuNTQ0OTpcXHRcXHRcXHRpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnQoZnJlZSwgTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MDUuNzk2MzUwNzQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE3MDg1NzI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgcHJvY192bWFsbG9jX2luaXRgIFN1cnJvdW5kaW5ncyoqXG5cbkFscmlnaHQsIEknbSB6ZXJvaW5nIGluIG9uIGBwcm9jX3ZtYWxsb2NfaW5pdGAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFJpZ2h0IG5vdywgSSBzZWUgYW4gYCNlbmRpZmAgYXQgbGluZSA1NDQwLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW52b2x2ZWQuIFRoZSBmaXJzdCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGNvbnRyb2xzIHRoaXMgYmxvY2suIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIHRoZSBjb3JyZXNwb25kaW5nIGAjaWZkZWZgIG9yIGAjaWZuZGVmYCB0aGF0IGdvdmVybnMgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBjb2RlLiBMb29raW5nIGJhY2ssIEkgbmVlZCB0byBjaGVjayBsaW5lcyA1MzAwIHRocm91Z2ggNTM0NS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29uZGl0aW9uYWwgYmxvY2sgYW5kIHJldmVhbCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgZmVhdHVyZSB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyB0aWVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzA5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNTowNy45NjcyMTE0NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzMDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUzMDA6XFx0XFxuNTMwMTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzAyOlxcdH1cXG41MzAzOlxcdCNlbmRpZlxcbjUzMDQ6XFx0XFxuNTMwNTpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG41MzA2OlxcdFxcbjUzMDc6XFx0LypcXG41MzA4OlxcdCAqIFByaW50IG51bWJlciBvZiBwYWdlcyBhbGxvY2F0ZWQgb24gZWFjaCBtZW1vcnkgbm9kZS5cXG41MzA5OlxcdCAqXFxuNTMxMDpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBDT05GSUdfTlVNQSBpcyBlbmFibGVkXFxuNTMxMTpcXHQgKiBhbmQgVk1fVU5JTklUSUFMSVpFRCBiaXQgaW4gdi1cXHUwMDNlZmxhZ3MgaXMgZGlzYWJsZWQuXFxuNTMxMjpcXHQgKi9cXG41MzEzOlxcdHN0YXRpYyB2b2lkIHNob3dfbnVtYV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZtX3N0cnVjdCAqdixcXG41MzE0OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgKmNvdW50ZXJzKVxcbjUzMTU6XFx0e1xcbjUzMTY6XFx0XFx0dW5zaWduZWQgaW50IHN0ZXAgPSAxVSBcXHUwMDNjXFx1MDAzYyB2bV9hcmVhX3BhZ2Vfb3JkZXIodik7XFxuNTMxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGk7XFxuNTMxODpcXHRcXHR1bnNpZ25lZCBpbnQgbnI7XFxuNTMxOTpcXHRcXG41MzIwOlxcdFxcdGlmICghY291bnRlcnMpXFxuNTMyMTpcXHRcXHRcXHRyZXR1cm47XFxuNTMyMjpcXHRcXG41MzIzOlxcdFxcdG1lbXNldChjb3VudGVycywgMCwgbnJfbm9kZV9pZHMgKiBzaXplb2YodW5zaWduZWQgaW50KSk7XFxuNTMyNDpcXHRcXG41MzI1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB2LVxcdTAwM2Vucl9wYWdlczsgaSArPSBzdGVwKVxcbjUzMjY6XFx0XFx0XFx0Y291bnRlcnNbcGFnZV90b19uaWQodi1cXHUwMDNlcGFnZXNbaV0pXSArPSBzdGVwO1xcbjUzMjc6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuciwgTl9ISUdIX01FTU9SWSlcXG41MzI4OlxcdFxcdFxcdGlmIChjb3VudGVyc1tucl0pXFxuNTMyOTpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgTiV1PSV1XFxcIiwgbnIsIGNvdW50ZXJzW25yXSk7XFxuNTMzMDpcXHR9XFxuNTMzMTpcXHRcXG41MzMyOlxcdHN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuNTMzMzpcXHR7XFxuNTMzNDpcXHRcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG41MzM1OlxcdFxcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xcbjUzMzY6XFx0XFxuNTMzNzpcXHRcXHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcXG41MzM4OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dm4tXFx1MDAzZWxhenkubG9jayk7XFxuNTMzOTpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCBcXHUwMDI2dm4tXFx1MDAzZWxhenkuaGVhZCwgbGlzdCkge1xcbjUzNDA6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiMHglcEstMHglcEsgJTdsZCB1bnB1cmdlZCB2bV9hcmVhXFxcXG5cXFwiLFxcbjUzNDE6XFx0XFx0XFx0XFx0XFx0KHZvaWQgKil2YS1cXHUwMDNldmFfc3RhcnQsICh2b2lkICopdmEtXFx1MDAzZXZhX2VuZCxcXG41MzQyOlxcdFxcdFxcdFxcdFxcdHZhX3NpemUodmEpKTtcXG41MzQzOlxcdFxcdFxcdH1cXG41MzQ0OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MDcuOTY3NDA4NzUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM5MjQ4MTA4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdm1hbGxvYy5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSByZXN0cnVjdHVyZXMgcGFydHMgb2YgYG1tL3ZtYWxsb2MuY2AsIGFuZCBteSBpbml0aWFsIGltcHVsc2UgaXMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdnVsbmVyYWJpbGl0eS4gTGV0J3Mgc2VlLi4uIEkgY291bGQgdHJ5IHRvIGNoZWNrIHRoZSBnaXQgbG9nLCBidXQgc2luY2UgSSBoYXZlIHRoZSBkaWZmLCBsZXQncyBqdXN0IHVzZSB3aGF0J3MgaW4gZnJvbnQgb2YgbWUuXG5cblRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIGRpZmYgc2VlbXMgdG8gYmUgc3BsaXR0aW5nIHRoZSBgdm1hbGxvY19pbmZvX3Nob3dgIGZ1bmN0aW9uLiBPcmlnaW5hbGx5LCBpdCBzaG93ZWQgYnVzeSBhbmQgcHVyZ2VkIHZtYWxsb2MgYXJlYXMgYW5kIHRoZW4gZnJlZWQgbWVtb3J5LCBidXQgbm93IGl0IGFwcGVhcnMgdGhhdCB0aGUgXCJidXN5XCIgaW5mbyBpcyBoYW5kbGVkIGJ5IGBzaG93X2J1c3lfaW5mb2AgYW5kIGZyZWVkIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgIGlzIGp1c3QgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBPa2F5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBpbiB0ZXJtcyBvZiB3aGF0J3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIEFoLCB5ZXMsIGAvcHJvYy92bWFsbG9jaW5mb2AgLSB0aGF0IGlzIHdoYXQgY2FsbHMgYHZtYWxsb2NfaW5mb19zaG93YC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHN5emthbGxlciBhbmQgYWNjZXNzIHRvIHRoYXQgZmlsZS4gXG5cblRoZSBwZXJtaXNzaW9ucyBsb29rIGxpa2UgaXQncyByZWFkYWJsZSBieSByb290LCB3aGljaCBtZWFucyBpdCBjYW4gYmUgYWNjZXNzZWQgYnkgc3l6a2FsbGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IHRoaXMgdGhvdWdoLCBhcyBpdCBtaWdodCB1c2UgYSB1c2VyIG5hbWVzcGFjZS4gQnV0LCBsaWtlbHkgc3l6a2FsbGVyIGNhbiByZWFkIGAvcHJvYy92bWFsbG9jaW5mb2AgYmVjYXVzZSB0aGUgcHJvY2VzcyBydW5zIGFzIHJvb3QgYW5kIGFsc28gaGFzIGBDQVBfU1lTX0FETUlOYCBpbiBuYW1lc3BhY2VzLCByaWdodD8gT2theSwgc28gaWYgc3l6a2FsbGVyIGNhbiByZWFkIHRoaXMgaW5mbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoYW5nZSBkb2VzIHRvIHRoZSBvdXRwdXQgb3IgYmVoYXZpb3Igb2YgYC9wcm9jL3ZtYWxsb2NpbmZvYC5cblxuTm93LCB0aGUgb3RoZXIgcGFydCBvZiB0aGUgZGlmZiBoYXMgdG8gZG8gd2l0aCBmcmVlIHZtYXAgYXJlYXMuIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgIGFuZCBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgIGFyZSBib3RoIGluIHRoaXMgcGF0Y2guIEJ1dCB0aGVzZSBmdW5jdGlvbnMgYXJlIGBfX2luaXRgLCB3aGljaCBtZWFucyB0aGV5IGFyZSBvbmx5IGNhbGxlZCBkdXJpbmcga2VybmVsIGluaXRpYWxpemF0aW9uIGFuZCBhcmUgbm90IGFjY2Vzc2libGUgYWZ0ZXIgYm9vdC4gU3l6a2FsbGVyIGNhbm5vdCByZWFjaCB0aGVtLCBzaW5jZSBzeXprYWxsZXIgZG9lc24ndCBzdGFydCB1bnRpbCAqYWZ0ZXIqIHRoZSBrZXJuZWwgaXMgZnVsbHkgdXAuIE15IGFuYWx5c2lzIGhlcmUgbmVlZHMgdG8gY29uc2lkZXIgaWYgdGhlc2UgY291bGQgYmUgY2FsbGVkIGF0IHJ1bnRpbWUsIGJ1dCBJJ2xsIHNlZSB0aGV5IGFyZSBgX19pbml0YCwgc28gdGhleSBhcmUgbm90IHJlYWNoYWJsZSBieSBmdXp6aW5nISBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaWYgdGhpcyBjb3VsZCBzdGlsbCBiZSByZWxldmFudC4gV2FpdCwgc2luY2UgaXQncyBgX19pbml0YCwgdGhpcyBzZWN0aW9uIGlzIG5ldmVyIHRvdWNoZWQgYWdhaW4gYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aG91Z2gsIGJ1dCB0aGF0IGlzIG15IGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiBgX19pbml0YC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgZnVuY3Rpb25zIGNhbid0IGJlIGNhbGxlZCBhZnRlciBib290LCBhcyB0aGF0IHdvdWxkIGNvbXBsZXRlbHkgZWxpbWluYXRlIHRoaXMgYXJlYSBvZiB0aGUgcGF0Y2guIE9rYXksIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHN5emthbGxlciByZWFkcyBgL3Byb2Mvdm1hbGxvY2luZm9gLiBTaW5jZSBpdCBpcyAwNDAwLCBJIGJlbGlldmUgc28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MzEuODkyMjIyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNzU4ODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFwX2luc2VydF9mcmVlX2FyZWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTU0Mzg9bW9kdWxlX2luaXQocHJvY192bWFsbG9jX2luaXQpO1xcbi0tXFxubW0vdm1hbGxvYy5jLTU0NDEtXFxubW0vdm1hbGxvYy5jOjU0NDI6c3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS92bWFsbG9jLmMtNTQ0My17XFxuLS1cXG5tbS92bWFsbG9jLmM9NTQ1NT1zdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDY4LVxcdFxcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cXHUwMDNlYWRkciAtIHZtYXBfc3RhcnQgXFx1MDAzZSAwKVxcbm1tL3ZtYWxsb2MuYzo1NDY5OlxcdFxcdFxcdHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh2bWFwX3N0YXJ0LFxcbm1tL3ZtYWxsb2MuYy01NDcwLVxcdFxcdFxcdFxcdFxcdCAgICAgICh1bnNpZ25lZCBsb25nKSBidXN5LVxcdTAwM2VhZGRyKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDc1LVxcdGlmICh2bWFwX2VuZCAtIHZtYXBfc3RhcnQgXFx1MDAzZSAwKVxcbm1tL3ZtYWxsb2MuYzo1NDc2OlxcdFxcdHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh2bWFwX3N0YXJ0LCB2bWFwX2VuZCk7XFxubW0vdm1hbGxvYy5jLTU0NzctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNTozMy45OTk4MjEzNThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgyNDkyMjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byBWbWFwIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAgaXMgb25seSBldmVyIGNhbGxlZCBmcm9tIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAuIFRoYXQncyBhIHZlcnkgc3BlY2lmaWMgc2NvcGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgKnRoYXQqIGNhbGxlZCBmcm9tPyBTaW5jZSBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgIGlzIGFubm90YXRlZCB3aXRoIGBfX2luaXRgLCBpdCB0ZWxscyBtZSBpdCBpcyBjYWxsZWQgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gQnV0IEkgbmVlZCB0byBjb25maXJtIHdoZXJlIGV4YWN0bHkgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQncyB0cmFjZSBiYWNrIHRoZSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBleHBlY3QgaXQncyBzb21ldGhpbmcgdGllZCB0byB2aXJ0dWFsIG1lbW9yeSBzZXR1cCwgYnV0IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcHJlY2lzZSBsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNTozNS44MjQ3NDY1ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTQ1MTA3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hcF9pbml0X2ZyZWVfc3BhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTU0NDI9c3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDU0LVxcbm1tL3ZtYWxsb2MuYzo1NDU1OnN0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luaXRfZnJlZV9zcGFjZSh2b2lkKVxcbm1tL3ZtYWxsb2MuYy01NDU2LXtcXG4tLVxcbm1tL3ZtYWxsb2MuYz01NTY5PXZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKVxcbi0tXFxubW0vdm1hbGxvYy5jLTU2MTctXFx0ICovXFxubW0vdm1hbGxvYy5jOjU2MTg6XFx0dm1hcF9pbml0X2ZyZWVfc3BhY2UoKTtcXG5tbS92bWFsbG9jLmMtNTYxOS1cXHR2bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MzcuNTc5MjYzNTk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4ODA3NTIwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgUm9vdHMgb2YgTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYHZtYXBfaW5pdF9mcmVlX3NwYWNlYC4gVGhhdCBmdW5jdGlvbiBpcyBhcHBhcmVudGx5IG9ubHkgY2FsbGVkIGZyb20gYHZtYWxsb2NfaW5pdCgpYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBwcm9iYWJseSBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIGZyZWUgc3BhY2UgZm9yIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24uIFNpbmNlIGB2bWFsbG9jX2luaXQoKWAgaXMgbWFya2VkIGFzIGBfX2luaXRgLCB0aGF0IHRlbGxzIG1lIGl0J3Mgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBrZXJuZWwncyBpbml0aWFsaXphdGlvbiBwaGFzZS4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGB2bWFsbG9jX2luaXQoKWAgaXRzZWxmIGlzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjayB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGluaXRpYWxpemF0aW9uIGNvbnRleHQuIExldCdzIGRpZyBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBgdm1hbGxvY19pbml0YCBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk5NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI1OjQxLjQ2MDAxODM3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4OTg0NzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFsbG9jX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTI2OTI9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjczMC1cXHRkZWJ1Z19vYmplY3RzX21lbV9pbml0KCk7XFxubW0vbW1faW5pdC5jOjI3MzE6XFx0dm1hbGxvY19pbml0KCk7XFxubW0vbW1faW5pdC5jLTI3MzItXFx0LyogSWYgbm8gZGVmZXJyZWQgaW5pdCBwYWdlX2V4dCBub3csIGFzIHZtYXAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKi9cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMzE2OC0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYWRkIGZpeGVkIGtlcm5lbCB2bSBhcmVhIHRvIHZtbGlzdCBiZWZvcmVcXG5tbS92bWFsbG9jLmM6MzE2OTogKiB2bWFsbG9jX2luaXQoKSBpcyBjYWxsZWQuICBAdm0tXFx1MDAzZWFkZHIsIEB2bS1cXHUwMDNlc2l6ZSwgYW5kIEB2bS1cXHUwMDNlZmxhZ3NcXG5tbS92bWFsbG9jLmMtMzE3MC0gKiBzaG91bGQgY29udGFpbiBwcm9wZXIgdmFsdWVzIGFuZCB0aGUgb3RoZXIgZmllbGRzIHNob3VsZCBiZSB6ZXJvLlxcbi0tXFxubW0vdm1hbGxvYy5jPTMxNzQ9dm9pZCBfX2luaXQgdm1fYXJlYV9hZGRfZWFybHkoc3RydWN0IHZtX3N0cnVjdCAqdm0pXFxuLS1cXG5tbS92bWFsbG9jLmMtMzE5NS0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVnaXN0ZXIga2VybmVsIHZtIGFyZWEgYmVmb3JlXFxubW0vdm1hbGxvYy5jOjMxOTY6ICogdm1hbGxvY19pbml0KCkgaXMgY2FsbGVkLiAgQHZtLVxcdTAwM2VzaXplIGFuZCBAdm0tXFx1MDAzZWZsYWdzIHNob3VsZCBjb250YWluXFxubW0vdm1hbGxvYy5jLTMxOTctICogcHJvcGVyIHZhbHVlcyBvbiBlbnRyeSBhbmQgb3RoZXIgZmllbGRzIHNob3VsZCBiZSB6ZXJvLiAgT24gcmV0dXJuLFxcbi0tXFxubW0vdm1hbGxvYy5jPTU0MjI9c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuLS1cXG5tbS92bWFsbG9jLmMtNTQzMi1cXG5tbS92bWFsbG9jLmM6NTQzMzpzdGF0aWMgaW50IF9faW5pdCBwcm9jX3ZtYWxsb2NfaW5pdCh2b2lkKVxcbm1tL3ZtYWxsb2MuYy01NDM0LXtcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDM3LX1cXG5tbS92bWFsbG9jLmM6NTQzODptb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XFxubW0vdm1hbGxvYy5jLTU0MzktXFxuLS1cXG5tbS92bWFsbG9jLmM9NTU0OD12bWFwX25vZGVfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bWFsbG9jLmMtNTU2OC1cXG5tbS92bWFsbG9jLmM6NTU2OTp2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcXG5tbS92bWFsbG9jLmMtNTU3MC17XFxuLS1cXG5tbS92bWFsbG9jLmMtNTYzMS1cXG5tbS92bWFsbG9jLmM6NTYzMjpzdGF0aWMgaW50IF9faW5pdCB2bWFsbG9jX2luaXRfd29ya3F1ZXVlKHZvaWQpXFxubW0vdm1hbGxvYy5jLTU2MzMte1xcbi0tXFxubW0vdm1hbGxvYy5jLTU2NDYtfVxcbm1tL3ZtYWxsb2MuYzo1NjQ3OmVhcmx5X2luaXRjYWxsKHZtYWxsb2NfaW5pdF93b3JrcXVldWUpO1xcbi0tXFxubW0vdm1hbGxvYy5oLTEwLSNpZmRlZiBDT05GSUdfTU1VXFxubW0vdm1hbGxvYy5oOjExOnZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKTtcXG5tbS92bWFsbG9jLmgtMTItaW50IF9fbXVzdF9jaGVjayB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuaD0xNT11bnNpZ25lZCBpbnQgZ2V0X3ZtX2FyZWFfcGFnZV9vcmRlcihjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICp2bSk7XFxubW0vdm1hbGxvYy5oLTE2LSNlbHNlXFxubW0vdm1hbGxvYy5oOjE3OnN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2luaXQodm9pZCkge31cXG5tbS92bWFsbG9jLmgtMTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI1OjQzLjA0OTg3MzQ3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTk3MjYyMjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgdm1hbGxvY2luZm8gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBhZnRlciByZXZpZXdpbmcgdGhlIGNvZGUgZGlmZiwgaXQncyBjbGVhciB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBpbml0aWFsIGBfX2luaXRgIGZ1bmN0aW9ucyBsaWtlIGB2bWFsbG9jX2luaXRgLCBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgLCBhbmQgYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAgYXJlIGlycmVsZXZhbnQgZm9yIHJ1bnRpbWUgZnV6emluZzsgdGhvc2UgYXJlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBUaGUgY3J1Y2lhbCBhc3BlY3QgaXMgdGhlIGNoYW5nZSB0byBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBzaG93X2J1c3lfaW5mb2AuXG5cblRoZSBwYXRjaCByZWZhY3RvcnMgYC9wcm9jL3ZtYWxsb2NpbmZvYCdzIGRpc3BsYXkgbG9naWMuIFNwZWNpZmljYWxseSwgYHZtYWxsb2NfaW5mb19zaG93YCwgY2FsbGVkIHdoZW4gcmVhZGluZyBmcm9tIGAvcHJvYy92bWFsbG9jaW5mb2AsIG5vdyBjYWxscyBgc2hvd19idXN5X2luZm9gIGFuZCBgc2hvd19wdXJnZV9pbmZvYCBzZXBhcmF0ZWx5LiBUaGUga2V5IGlzIGluIHdoZXJlIGBrZnJlZShjb3VudGVycylgIGlzIGNhbGxlZC4gVGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBgY291bnRlcnNgIGFyZSB3aXRoaW4gdGhlIGBzaG93X2J1c3lfaW5mb2AuIFByZXZpb3VzbHksIGBjb3VudGVyc2AgY291bGQgaGF2ZSBiZWVuIGZyZWVkIGFmdGVyIGBzaG93X3B1cmdlX2luZm9gLCB3aGljaCBjb3VsZCBleHBvc2UgYSBidWcuXG5cbkNydWNpYWxseSwgYC9wcm9jL3ZtYWxsb2NpbmZvYCBpcyByZWFjaGFibGUgYXQgcnVudGltZS4gVGhlIGBwcm9jX2NyZWF0ZV9zaW5nbGVgIGZ1bmN0aW9uIG1ha2VzIHRoaXMgZmlsZSByZWFkYWJsZSBieSByb290LiBTeXprYWxsZXIgcnVucyBhcyByb290LCBzbyBpdCBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzIGNvZGUgcGF0aCBieSBvcGVuaW5nIGFuZCByZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2AuIFRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGRpY3RhdGVzIGZ1enppbmcgYW55IG1vZGlmaWVkIGNvZGUgdGhhdCdzIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBsaWtlIGBtbS92bWFsbG9jLmNgLiBUaGlzIGlzICp0ZXh0Ym9vayogZm9yIFwiV29ydGhGdXp6aW5nPXRydWVcIi5cblxuVGhpcyBmYWxscyB1bmRlcjogXCJSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6IEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cIiBBbHNvLCBcIkNvcmUgU3Vic3lzdGVtczogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLykuLi5cIi4gQmVjYXVzZSB0aGUgY29kZSBpcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2VjdGlvbiwgYG1tL3ZtYWxsb2MuY2AuXG5cbkZ1cnRoZXJtb3JlLCB0aGlzIGNoYW5nZSBpbnZvbHZlcyBhbGxvY2F0aW5nIGEgYGNvdW50ZXJzYCBhcnJheSB3aXRoIGBrbWFsbG9jX2FycmF5YC4gVGhpcyBpcyAqcHJlY2lzZWx5KiB0aGUga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UgdGhhdCBjYW4gdW52ZWlsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGlmIHRyaWdnZXJlZCBjb25jdXJyZW50bHkgd2l0aCBvdGhlciBtZW1vcnkgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIHJlYXJyYW5nZXMgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGNoYW5naW5nIHdoZW4gYGtmcmVlYCBpcyBjYWxsZWQsIGFuZCBpcyB0aGVyZWZvcmUgb2YgaGlnaCBpbnRlcmVzdC4gSXQgaGFzIGFsc28gaW50cm9kdWNlZCBhIG5ldyBgc2hvd19idXN5X2luZm9gIGZ1bmN0aW9uLlxuXG5Ob3csIGZvciBGb2N1c1N5bWJvbHM6XG5cbmB2bWFsbG9jX2luZm9fc2hvd2AgKm11c3QqIGJlIGluY2x1ZGVkLiBJdCdzIHRoZSBlbnRyeSBwb2ludCBjYWxsZWQgd2hlbiByZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2AuIFdoaWxlIGBzaG93X2J1c3lfaW5mb2AgbWlnaHQgYmUgaW5saW5lZCwgaXQgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYHZtYWxsb2NfaW5mb19zaG93YC4gVGhlIGNvbXBpbGVyIHdpbGwgbW9zdCBsaWtlbHkgbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFuZCBpdCBzaG91bGQgYmUgaW5jbHVkZWQuIFRoaXMgaXMgYSBub24tdWJpcXVpdG91cyBlbnRyeSBwb2ludC5cblxuV2Ugc2hvdWxkICpleGNsdWRlKiB0aGUgYF9faW5pdGAgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgbmV2ZXIgcmVhY2hhYmxlIGR1cmluZyBydW50aW1lLlxuV2UgKmV4Y2x1ZGUqIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycy5cbldlIHNob3VsZCBpbmNsdWRlIG9ubHkgYHZtYWxsb2NfaW5mb19zaG93YCBhbmQgYHNob3dfYnVzeV9pbmZvYC5cblxuSW4gc2hvcnQsIGdpdmVuIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQsIHRoZSByZWZhY3RvcmluZywgdGhlIHJ1bnRpbWUgcmVhY2hhYmlsaXR5IHZpYSBgL3Byb2Mvdm1hbGxvY2luZm9gLCBhbmQgdGhlIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIHRoaXMgKm11c3QqIGJlIGZ1enplZCwgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AgYW5kIGBzaG93X2J1c3lfaW5mb2Agc2hvdWxkIGJlIHRoZSBGb2N1c1N5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDQ0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjozMy4wMjI0OTg1ODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjE3OTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPQ19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3Byb2MvS2NvbmZpZzoyOmNvbmZpZyBQUk9DX0ZTXFxuZnMvcHJvYy9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiL3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI2OjMzLjQ3NDY4Mzc3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzkxMTg5NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgZnMvcHJvYy9LY29uZmlnYCBmaWxlOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgcHJvY2ZzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBwcm9jIGZpbGVzeXN0ZW0gaXMgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbC4gRmlyc3QsIEknbSBza2ltbWluZyB0aGUgaW5pdGlhbCBsaW5lcywgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCB0d2VudHksIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBvdmVyYXJjaGluZyBzdHJ1Y3R1cmUgYW5kIGFueSBpbW1lZGlhdGUgY3JpdGljYWwgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSB0aGUgbWFpbiBgQ09ORklHX1BST0NfRlNgIGJvb2xlYW4sIHBlcmhhcHMgc29tZSByZWxhdGVkIGZlYXR1cmVzIHRoYXQgY2FuIGJlIHNlbGVjdGl2ZWx5IGVuYWJsZWQsIGFuZCB0aGUgdXN1YWwgY29uZGl0aW9uYWwgYmxvY2tzIGdvdmVybmluZyBpbmNsdXNpb24gYmFzZWQgb24gb3RoZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBNeSBpbml0aWFsIHBhc3Mgd2lsbCBiZSB0byBpZGVudGlmeSBhbnkgdG9wLWxldmVsIGRlcGVuZGVuY2llcywgZGV0ZXJtaW5lIHdoaWNoIG9wdGlvbnMgYXJlIGNvcmUgdG8gZW5hYmxpbmcgcHJvY2ZzLCBhbmQgcXVpY2tseSBhc3Nlc3MgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBvciBwcmUtcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkaXJlY3QgcmVmZXJlbmNlcyB0byBvdGhlciByZWxldmFudCBLY29uZmlnIGZpbGVzIG9yIHNlY3Rpb25zLCBhcyB0aG9zZSB3aWxsIGluZmx1ZW5jZSB0aGUgbGFyZ2VyIGNvbmZpZ3VyYXRpb24gcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhpcyBpbml0aWFsIGNodW5rIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjY6MzUuODY1ODc1OTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFBST0NfRlNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgaXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzXFxuICAgNzpcXHRcXHQgIG9mIHRoZSBzeXN0ZW0uIFxcXCJWaXJ0dWFsXFxcIiBtZWFucyB0aGF0IGl0IGRvZXNuJ3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cXG4gICA4OlxcdFxcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxcbiAgIDk6XFx0XFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcXG4gIDEwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSXQncyB0b3RhbGx5IGNvb2w7IGZvciBleGFtcGxlLCBcXFwiY2F0IC9wcm9jL2ludGVycnVwdHNcXFwiIGdpdmVzXFxuICAxMzpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XFxuICAxNDpcXHRcXHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXFxuICAxNTpcXHRcXHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJ3MgYXR0ZW50aW9uIC0tXFxuICAxNjpcXHRcXHQgIG9mdGVuIGEgc291cmNlIG9mIHRyb3VibGUgaWYgdHdvIGRldmljZXMgYXJlIG1pc3Rha2VubHkgY29uZmlndXJlZFxcbiAgMTc6XFx0XFx0ICB0byB1c2UgdGhlIHNhbWUgSVJRKS4gVGhlIHByb2dyYW0gcHJvY2luZm8gdG8gZGlzcGxheSBzb21lXFxuICAxODpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc3lzdGVtIGdhdGhlcmVkIGZyb20gdGhlIC9wcm9jIGZpbGUgc3lzdGVtLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0sIGl0IGhhcyB0byBiZSBtb3VudGVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjozNS44NjU5NDMyNTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1Nzc2MjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBDT05GSUdfTlVNQWAgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGlzIGBzaG93X2J1c3lfaW5mbygpYCBmdW5jdGlvbi4gSSBzZWUgdGhpcyBjb25kaXRpb25hbCwgYGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlgLCBhbmQgdGhlIHN1YnNlcXVlbnQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBgY291bnRlcnNgLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyB0aGF0IHRoZSBzY29wZSBhbmQgbGlmZXRpbWUgb2YgYGNvdW50ZXJzYCBoYXMgYmVlbiBhbHRlcmVkOyBpdCdzIG5vdyBmcmVlZCB3aXRoaW4gYHNob3dfYnVzeV9pbmZvKClgIHJhdGhlciB0aGFuIGxhdGVyLiBUaGlzIHJlZmFjdG9yaW5nIG1ha2VzIGBDT05GSUdfTlVNQWAgYWJzb2x1dGVseSByZWxldmFudCB0byB0ZXN0aW5nIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggYmVjYXVzZSB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyB3aXRoaW4gdGhlIGZ1bmN0aW9uIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGlzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoZSBiZWhhdmlvciB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZC4gTGV0J3MgZGlnIGludG8gS2NvbmZpZyBhbmQgc2VlIHdoYXQgYENPTkZJR19OVU1BYCBpcyBhbGwgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDc5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjY6MzcuOTIzNzA4MjI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc5NzY4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI2OjM3Ljk3NDUxMjM3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTg5OTIxNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTlVNQSBDb25maWd1cmF0aW9uIGluIHg4NioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhlIE5VTUEgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSdzIGtlcm5lbCBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gYGFyY2gveDg2L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY2VudHJhbCBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGdvdmVybmluZyBOVU1BIHN1cHBvcnQsIHRoaW5ncyBsaWtlIHRoZSBib290LXRpbWUgcGFyYW1ldGVycywgbWVtb3J5IG5vZGUgYXNzaWdubWVudHMsIGFuZCByZWxhdGVkIGZlYXR1cmVzLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gd29yayB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsIGZpZ3VyZSBvdXQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIsIGFuZCBwaW5wb2ludCB0aGUgc3BlY2lmaWMga25vYnMgSSBuZWVkIHRvIGFkanVzdCBvciB1bmRlcnN0YW5kIGZvciBteSBjdXJyZW50IHRhc2suIFRoaXMgYXBwcm9hY2ggaXMgZWZmaWNpZW50OiBpdCBsZXZlcmFnZXMgbXkgdW5kZXJzdGFuZGluZyBvZiBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgcHJvY2VkdXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjo0My45NjQ0Mzc2NTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTM0NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVU1BXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xNDg5PWNvbmZpZyBBTURfTUVNX0VOQ1JZUFRcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTUwNS0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXFxuYXJjaC94ODYvS2NvbmZpZzoxNTA2OmNvbmZpZyBOVU1BXFxuYXJjaC94ODYvS2NvbmZpZy0xNTA3LVxcdGJvb2wgXFxcIk5VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjo0NC4wMzA5ODAwNzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ4ODY0NzY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBoZXJlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGB2bWFsbG9jLmNgIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcHJlcHJvY2Vzc29yIGd1YXJkcyB3aXRoaW4gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyBhIGNvbW1vbiBvdmVyc2lnaHQsIGFuZCBpdCB3b3VsZCBiZSByZWFsbHkgZW1iYXJyYXNzaW5nIHRvIG1pc3Mgc29tZXRoaW5nIGxpa2UgdGhhdC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBtbS9NYWtlZmlsZWAgcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc1MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI2OjQ1LjUxOTYzMDUxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODIxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hbGxvY1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0zNz1tbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtMzktXFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG5tbS9NYWtlZmlsZTo0MDpcXHRcXHRcXHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cXG5tbS9NYWtlZmlsZS00MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjY6NDUuNTY1NTIyMDM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgwMDI4NzAxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYG1tL3ZtYWxsb2MuY2AgUGF0Y2ggZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29kZSBpbiBgdm1hbGxvYy5vYCBkZXBlbmRzIG9uIGBDT05GSUdfTU1VYCwgd2hpY2ggaXMgc3RhbmRhcmQgb24geDg2L2FtZDY0LCBzbyB0aGF0J3MgYSBnaXZlbi4gSW5zaWRlIGBtbS92bWFsbG9jLmNgLCBJIHNlZSB0aGF0IHRoZSByZWZhY3RvcmVkIGBzaG93X2J1c3lfaW5mb2AgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AgYXJlIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AsIGFuZCBgQ09ORklHX05VTUFgIGlzIGNoZWNrZWQgdmlhIGBJU19FTkFCTEVEKENPTkZJR19OVU1BKWAuIFNvLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgZGVmaW5pdGVseSBpbmNsdWRlIGBQUk9DX0ZTYCBhbmQgYE5VTUFgLlxuXG5Ob3csIHRoZSBjb3JlIHF1ZXN0aW9uOiBpcyB0aGlzIGBXb3J0aEZ1enppbmdgPyBJIG5lZWQgdG8gYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gVGhlIGNvcmUgaWRlYSBpcyByZWFjaGFiaWxpdHk6IGFueSBtb2RpZmllZCBjb2RlIHRoYXQgKmNhbiogZXhlY3V0ZSBuZWVkcyBmdXp6aW5nLiBBbmQsIHRoZSBndWlkZWxpbmVzIGFyZSB2ZXJ5IGNsZWFyIGFib3V0IHJlZmFjdG9yaW5ncy4gVGhpcyBpcyBpbiBgbW0vYCwgYSBtZW1vcnkgbWFuYWdlbWVudCBjb3JlIHN1YnN5c3RlbS4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYm90aCBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSByZWZhY3RvcmVkLiBUaGUgZnVuY3Rpb24gd2FzIHNwbGl0LCBhbmQgdGhlcmUncyBhIGxpZmV0aW1lIGNoYW5nZSBvZiB0aGUgYGNvdW50ZXJzYCBhbGxvY2F0ZWQgZm9yIE5VTUEsIG5vdyBmcmVlZCBpbiBgc2hvd19idXN5X2luZm9gLiBSZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2AgdHJpZ2dlcnMgdGhpcyBleGVjdXRpb24gcGF0aC4gVGhhdCdzIHJlYWNoYWJsZSwgbW9kaWZpZWQsIGFuZCBpbiBhIGNvcmUgc3Vic3lzdGVtLCBzbyBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC5cblxuUmVnYXJkaW5nIGBGb2N1c1N5bWJvbHNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHRhcmdldCBmdW5jdGlvbnMgZm9yIHN5emthbGxlci4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYHZtYWxsb2NfaW5mb19zaG93YCBhbmQgYHNob3dfYnVzeV9pbmZvYC4gV2FpdCwgdGhlcmUgYXJlIGBfX2luaXRgIGZ1bmN0aW9ucyB0b286IGB2bWFwX2luc2VydF9mcmVlX2FyZWFgLCBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgLCBhbmQgYHZtYWxsb2NfaW5pdGAuXG5cbkxldCdzIHJlLXJlYWQgdGhlIHNlY3Rpb24uIEkgbmVlZCB0byBmb2N1cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIEFuZCwgdG8gYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLiBDYW4gc3l6a2FsbGVyIGZvY3VzIG9uIGBfX2luaXRgIGZ1bmN0aW9ucz8gTm8sIHN5emthbGxlcidzIGNvdmVyYWdlIGRvZXNuJ3QgZXh0ZW5kIHRvIGluaXQgc2VjdGlvbnMuIEJ5IHRoZSB0aW1lIHN5emthbGxlciBydW5zLCB0aG9zZSBzZWN0aW9ucyBhcmUgZnJlZWQuIFN5emthbGxlcidzIGNvdmVyYWdlIHdvdWxkbid0IG1hdGNoIGFueSB0ZXN0IGNhc2VzISBTbyBgX19pbml0YCBmdW5jdGlvbnMgZG9uJ3QgbWF0dGVyIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBIb3dldmVyLCBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSBydW50aW1lIGZ1bmN0aW9ucyB0aGF0IGFyZSBoaXQgd2hlbiBgL3Byb2Mvdm1hbGxvY2luZm9gIGlzIHJlYWQuIFRhcmdldGluZyBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGlzIHN0cmljdGx5IGNvcnJlY3QgYmVjYXVzZSB0aGV5IGFyZSB0aGUgcmVhY2hhYmxlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAgYmVjYXVzZSB0aGF0IGlzIGBfX2luaXRgIG1hcmtlZCwgYW5kIG1pZ2h0IG5vdCBldmVuIGJlIGV4cG9ydGVkIHRvIGthbGxzeW1zLlxuXG5MZXQncyBkbyBhIGZpbmFsIHNhbml0eSBjaGVjaywgc2Nhbm5pbmcgYG1tL3ZtYWxsb2MuY2AgZm9yIG90aGVyIGNoYW5nZXMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGB2bWFsbG9jX2luZm9fc2hvd2AgKHR3aWNlIC0gb25jZSBhcyB0aGUgb3JpZ2luYWwsIG9uY2UgYXMgYSB3cmFwcGVyKSwgYHNob3dfYnVzeV9pbmZvYCwgYW5kIHRoZSB0aHJlZSBpbml0IGZ1bmN0aW9ucy4gT25seSBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSBub24taW5pdCBmdW5jdGlvbnMgYW5kIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZS5cblxuVG8gcmVjYXAsIHRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBgUFJPQ19GU2AgYW5kIGBOVU1BYC4gQWxsIHRoZSBhbmFseXNpcyBjb25maXJtcyBldmVyeXRoaW5nIGlzIGNsZWFyIGFuZCBhY2N1cmF0ZS4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMjgsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjo1My41NjgzOTQ2MDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDc0MDQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYWxsb2NfaW5mb19zaG93XCIsXG4gICAgXCJzaG93X2J1c3lfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgL3Byb2Mvdm1hbGxvY2luZm8gZHVtcCBpbXBsZW1lbnRhdGlvbiBpbiBtbS92bWFsbG9jLmMgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGZyb20gdm1hbGxvY19pbmZvX3Nob3coKSBhbmQgY2hhbmdpbmcgdGhlIHNjb3BlL2xpZmV0aW1lIG9mIE5VTUEgY291bnRlciBhbGxvY2F0aW9ucy4gVGhlIGNvZGUgaW4gbW0vdm1hbGxvYy5jIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJlYWRpbmcgL3Byb2Mvdm1hbGxvY2luZm8sIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IGhhbmRsaW5nIGJ1Z3MsIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFsbG9jX2luZm9fc2hvd1wiLFxuICAgIFwic2hvd19idXN5X2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIC9wcm9jL3ZtYWxsb2NpbmZvIGR1bXAgaW1wbGVtZW50YXRpb24gaW4gbW0vdm1hbGxvYy5jIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBmcm9tIHZtYWxsb2NfaW5mb19zaG93KCkgYW5kIGNoYW5naW5nIHRoZSBzY29wZS9saWZldGltZSBvZiBOVU1BIGNvdW50ZXIgYWxsb2NhdGlvbnMuIFRoZSBjb2RlIGluIG1tL3ZtYWxsb2MuYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByZWFkaW5nIC9wcm9jL3ZtYWxsb2NpbmZvLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBoYW5kbGluZyBidWdzLCBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjY6NTMuNjM5MTQzMTI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjEyMjExOTk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI2OjUzLjYzOTY1NTk0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2MTIxNjAwNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyBpbiBtbS92bWFsbG9jLmM6XFxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxcbjIuIEl0IGRlZHVwbGljYXRlcyBmcmVlIHZtYXAgYXJlYSBpbnNlcnRpb24gbG9naWMgaW4gX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiB2bWFwX2luc2VydF9mcmVlX2FyZWEoKSwgd2hpY2ggY29udGludWVzIHRvIGFsbG9jYXRlIHdpdGgga21lbV9jYWNoZV96YWxsb2MoKSBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC5cXG4zLiBJbiBfX2luaXQgdm1hbGxvY19pbml0KCksIGl0IHJlb3JkZXJzIHhhX2luaXQoXFx1MDAyNnZicS1cXHUwMDNldm1hcF9ibG9ja3MpIHRvIGdyb3VwIHBlci1DUFUgdmJxIGluaXRpYWxpemF0aW9ucyB0b2dldGhlci5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZGJlZDUzNjRiNTE1ZWMwMDI4MjA0OGIxMDI4MWI1YzRlNjljZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MjM6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDg1OWU2ZDJkNTdhMzguLmUwOWQ2YzhjOGIzNTMgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTUzNDUsNyArNTM0NSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuK3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuQEAgLTU0MTUsMTIgKzU0MTUsMTggQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4gXHR9XG4gXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG4rXHRcdGtmcmVlKGNvdW50ZXJzKTtcbit9XG4rXG4rc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4re1xuK1x0c2hvd19idXN5X2luZm8obSk7XG4rXG4gXHQvKlxuIFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFwidW5wdXJnZWRcIiBhcmVhcy5cbiBcdCAqL1xuIFx0c2hvd19wdXJnZV9pbmZvKG0pO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuLVx0XHRrZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNTQzMywxMSArNTQzOSwyMyBAQCBtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XG4gXG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbit7XG4rXHRzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4rXG4rXHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcbitcdFx0ZnJlZS1cdTAwM2V2YV9zdGFydCA9IHN0YXJ0O1xuK1x0XHRmcmVlLVx1MDAzZXZhX2VuZCA9IGVuZDtcbitcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4rXHRcdFx0XHRcdCBcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuK1x0XHRcdFx0XHQgXHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luaXRfZnJlZV9zcGFjZSh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdm1hcF9zdGFydCA9IDE7XG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYO1xuLVx0c3RydWN0IHZtYXBfYXJlYSAqZnJlZTtcbiBcdHN0cnVjdCB2bV9zdHJ1Y3QgKmJ1c3k7XG4gXG4gXHQvKlxuQEAgLTU0NDcsMzIgKzU0NjUsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpXG4gXHQgKiAgfFx1MDAzYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx1MDAzZXxcbiBcdCAqL1xuIFx0Zm9yIChidXN5ID0gdm1saXN0OyBidXN5OyBidXN5ID0gYnVzeS1cdTAwM2VuZXh0KSB7XG4tXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRcdGZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTtcbi1cdFx0XHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcbi1cdFx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdFx0ZnJlZS1cdTAwM2V2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyO1xuLVxuLVx0XHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXG4tXHRcdFx0XHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbitcdFx0XHR2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCxcbitcdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpIGJ1c3ktXHUwMDNlYWRkcik7XG4gXG4gXHRcdHZtYXBfc3RhcnQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyICsgYnVzeS1cdTAwM2VzaXplO1xuIFx0fVxuIFxuLVx0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4tXHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfZW5kID0gdm1hcF9lbmQ7XG4tXG4tXHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuLVx0XHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbi1cdFx0fVxuLVx0fVxuK1x0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbitcdFx0dm1hcF9pbnNlcnRfZnJlZV9hcmVhKHZtYXBfc3RhcnQsIHZtYXBfZW5kKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdm1hcF9pbml0X25vZGVzKHZvaWQpXG5AQCAtNTU4NSwxMCArNTU4NiwxMSBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbiBcdFx0dmJxID0gXHUwMDI2cGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBpKTtcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmJxLVx1MDAzZWxvY2spO1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2YnEtXHUwMDNlZnJlZSk7XG4rXHRcdHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKTtcbitcbiBcdFx0cCA9IFx1MDAyNnBlcl9jcHUodmZyZWVfZGVmZXJyZWQsIGkpO1xuIFx0XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnAtXHUwMDNld3EsIGRlbGF5ZWRfdmZyZWVfd29yayk7XG4tXHRcdHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKTtcbiBcdH1cbiBcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjo1My42Mzk2NTg2NjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMyODA4NjY1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2bWFsbG9jLmMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYCwgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBJJ20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGUgZGlmZiBsb29rcyBsaWtlIGl0J3MgcmVzdHJ1Y3R1cmluZyB0aGF0IGZ1bmN0aW9uLiBIbW0sIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBga2ZyZWUoY291bnRlcnMpYCBhdCB0aGUgKmVuZCogb2YgYHZtYWxsb2NfaW5mb19zaG93YCwgYnV0IGBjb3VudGVyc2Agd2FzIGFsbG9jYXRlZCBtdWNoIGVhcmxpZXIgaW5zaWRlIG9mIGBzaG93X2J1c3lfaW5mb2AuIFNlZW1zIGEgYml0Li4udW53aWVsZHkuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBleHRyYWN0aW5nIGBzaG93X2J1c3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pYCBhcyBpdHMgb3duIGZ1bmN0aW9uLiBBaCwgSSBzZWUsIHRoZXkndmUgbW92ZWQgdGhlIGBpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpIGtmcmVlKGNvdW50ZXJzKTtgIGNhbGwgaW50byBgc2hvd19idXN5X2luZm9gIGl0c2VsZi4gVGhhdCBtYWtlcyBzZW5zZTsga2VlcGluZyB0aGUgYGtmcmVlYCBjYWxsIGNsb3NlciB0byB3aGVyZSBgY291bnRlcnNgIGlzIGFjdHVhbGx5IHVzZWQuIFRoZW4sIGB2bWFsbG9jX2luZm9fc2hvd2Agbm93IGp1c3QgY2FsbHMgYHNob3dfYnVzeV9pbmZvYCBmb2xsb3dlZCBieSBgc2hvd19wdXJnZV9pbmZvYC4gTXVjaCBjbGVhbmVyLCBsb2dpY2FsbHkuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gYXJvdW5kIGxpbmUgNTM0NS01NDIwIG9mIGBtbS92bWFsbG9jLmNgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBjaGFuZ2VzIG9yIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBMZXQgbWUgdXNlIGByZWFkLWZpbGVgIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhbmQgdmVyaWZ5IHRoaXMgbmV3IG9yZ2FuaXphdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI3OjI2LjkyMDUyODkxM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQwODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNDUsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUzNDU6XFx0XFx0fVxcbjUzNDY6XFx0fVxcbjUzNDc6XFx0XFxuNTM0ODpcXHRzdGF0aWMgdm9pZCBzaG93X2J1c3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuNTM0OTpcXHR7XFxuNTM1MDpcXHRcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG41MzUxOlxcdFxcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xcbjUzNTI6XFx0XFx0c3RydWN0IHZtX3N0cnVjdCAqdjtcXG41MzUzOlxcdFxcdHVuc2lnbmVkIGludCAqY291bnRlcnM7XFxuNTM1NDpcXHRcXG41MzU1OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG41MzU2OlxcdFxcdFxcdGNvdW50ZXJzID0ga21hbGxvY19hcnJheShucl9ub2RlX2lkcywgc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpO1xcbjUzNTc6XFx0XFxuNTM1ODpcXHRcXHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcXG41MzU5OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dm4tXFx1MDAzZWJ1c3kubG9jayk7XFxuNTM2MDpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCBcXHUwMDI2dm4tXFx1MDAzZWJ1c3kuaGVhZCwgbGlzdCkge1xcbjUzNjE6XFx0XFx0XFx0XFx0aWYgKCF2YS1cXHUwMDNldm0pIHtcXG41MzYyOlxcdFxcdFxcdFxcdFxcdGlmICh2YS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTUFQX1JBTSlcXG41MzYzOlxcdFxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JXBLLTB4JXBLICU3bGQgdm1fbWFwX3JhbVxcXFxuXFxcIixcXG41MzY0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCh2b2lkICopdmEtXFx1MDAzZXZhX3N0YXJ0LCAodm9pZCAqKXZhLVxcdTAwM2V2YV9lbmQsXFxuNTM2NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHR2YV9zaXplKHZhKSk7XFxuNTM2NjpcXHRcXG41MzY3OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUzNjg6XFx0XFx0XFx0XFx0fVxcbjUzNjk6XFx0XFxuNTM3MDpcXHRcXHRcXHRcXHR2ID0gdmEtXFx1MDAzZXZtO1xcbjUzNzE6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fVU5JTklUSUFMSVpFRClcXG41MzcyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUzNzM6XFx0XFxuNTM3NDpcXHRcXHRcXHRcXHQvKiBQYWlyIHdpdGggc21wX3dtYigpIGluIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZygpICovXFxuNTM3NTpcXHRcXHRcXHRcXHRzbXBfcm1iKCk7XFxuNTM3NjpcXHRcXG41Mzc3OlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JXBLLTB4JXBLICU3bGRcXFwiLFxcbjUzNzg6XFx0XFx0XFx0XFx0XFx0di1cXHUwMDNlYWRkciwgdi1cXHUwMDNlYWRkciArIHYtXFx1MDAzZXNpemUsIHYtXFx1MDAzZXNpemUpO1xcbjUzNzk6XFx0XFxuNTM4MDpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlY2FsbGVyKVxcbjUzODE6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiICVwU1xcXCIsIHYtXFx1MDAzZWNhbGxlcik7XFxuNTM4MjpcXHRcXG41MzgzOlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2Vucl9wYWdlcylcXG41Mzg0OlxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiBwYWdlcz0lbHVcXFwiLCB2LVxcdTAwM2Vucl9wYWdlcyk7XFxuNTM4NTpcXHRcXG41Mzg2OlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VwaHlzX2FkZHIpXFxuNTM4NzpcXHRcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgcGh5cz0lcGFcXFwiLCBcXHUwMDI2di1cXHUwMDNlcGh5c19hZGRyKTtcXG41Mzg4OlxcdFxcbjUzODk6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fSU9SRU1BUClcXG41MzkwOlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgaW9yZW1hcFxcXCIpO1xcbjUzOTE6XFx0XFxuNTM5MjpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9TUEFSU0UpXFxuNTM5MzpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBcXFwiIHNwYXJzZVxcXCIpO1xcbjUzOTQ6XFx0XFxuNTM5NTpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9BTExPQylcXG41Mzk2OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgdm1hbGxvY1xcXCIpO1xcbjUzOTc6XFx0XFxuNTM5ODpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9NQVApXFxuNTM5OTpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBcXFwiIHZtYXBcXFwiKTtcXG41NDAwOlxcdFxcbjU0MDE6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fVVNFUk1BUClcXG41NDAyOlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgdXNlclxcXCIpO1xcbjU0MDM6XFx0XFxuNTQwNDpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9ETUFfQ09IRVJFTlQpXFxuNTQwNTpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBcXFwiIGRtYS1jb2hlcmVudFxcXCIpO1xcbjU0MDY6XFx0XFxuNTQwNzpcXHRcXHRcXHRcXHRpZiAoaXNfdm1hbGxvY19hZGRyKHYtXFx1MDAzZXBhZ2VzKSlcXG41NDA4OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgdnBhZ2VzXFxcIik7XFxuNTQwOTpcXHRcXG41NDEwOlxcdFxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG41NDExOlxcdFxcdFxcdFxcdFxcdHNob3dfbnVtYV9pbmZvKG0sIHYsIGNvdW50ZXJzKTtcXG41NDEyOlxcdFxcbjU0MTM6XFx0XFx0XFx0XFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuNTQxNDpcXHRcXHRcXHR9XFxuNTQxNTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dm4tXFx1MDAzZWJ1c3kubG9jayk7XFxuNTQxNjpcXHRcXHR9XFxuNTQxNzpcXHRcXG41NDE4OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG41NDE5OlxcdFxcdFxcdGtmcmVlKGNvdW50ZXJzKTtcXG41NDIwOlxcdH1cXG41NDIxOlxcdFxcbjU0MjI6XFx0c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuNTQyMzpcXHR7XFxuNTQyNDpcXHRcXHRzaG93X2J1c3lfaW5mbyhtKTtcXG41NDI1OlxcdFxcbjU0MjY6XFx0XFx0LypcXG41NDI3OlxcdFxcdCAqIEFzIGEgZmluYWwgc3RlcCwgZHVtcCBcXFwidW5wdXJnZWRcXFwiIGFyZWFzLlxcbjU0Mjg6XFx0XFx0ICovXFxuNTQyOTpcXHRcXHRzaG93X3B1cmdlX2luZm8obSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI3OjI2LjkyMDg1NTA2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTUxMzIxNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIEFuYWx5c2lzOiB2bWFsbG9jLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgdG8gYHZtYWxsb2MuY2AuIFRoaXMgbG9va3MgbGlrZSBzb21lIHN0cmFpZ2h0Zm9yd2FyZCwgdGhvdWdoIHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgcmVmYWN0b3JpbmcuIEZpcnN0LCB0aGUgYHNob3dfYnVzeV9pbmZvYCBmdW5jdGlvbi4gVGhpcyBpcyBwdXJlIGNvZGUgb3JnYW5pemF0aW9uOyB0aGUgYHNob3dfYnVzeV9pbmZvKG0pYCBmdW5jdGlvbiBpcyBleHRyYWN0ZWQgZnJvbSBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGUga2V5IGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIGxvY2FsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBgY291bnRlcnNgIHdpdGhpbiBgc2hvd19idXN5X2luZm9gIG5vdywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBzY29wZS4gUHJldmlvdXNseSBpdCB3YXMgZnJlZWQgYXQgdGhlIGVuZCBvZiB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24sIHdoaWNoIGlzIGEgcGVyZmVjdGx5IGFjY2VwdGFibGUgcHJhY3RpY2UgYnV0IHRoaXMgaXMgYmV0dGVyLlxuXG5UaGUgc2Vjb25kIGNoYW5nZSBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBXZSdyZSBpbnRyb2R1Y2luZyBhIGhlbHBlciBmdW5jdGlvbiwgYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAsIHRvIGRlZHVwbGljYXRlIGNvZGUgaW4gYHZtYXBfaW5pdF9mcmVlX3NwYWNlYC4gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBtb3ZlIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS4gVGhlIHJlcGVhdGVkIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGBpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnRgIGJsb2NrIGlzIHJlcGxhY2VkIHdpdGggY2FsbHMgdG8gdGhpcyBuZXcgaGVscGVyLiBJdCBsb29rcyBsaWtlIHRoZSBzYW1lIHplcm9pbmcgb2YgdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AgaXMgYmVpbmcgbWFpbnRhaW5lZC4gVGhlIHVzZSBvZiBgX19pbml0YCBoZXJlIHRlbGxzIG1lIHRoaXMgaXMgYWxsIGhhcHBlbmluZyBhdCBib290IHRpbWUsIGFuZCB0aGF0J3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSXQgbWVhbnMgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGRlZHVwbGljYXRpb24gaXMgbWluaW1hbC5cblxuRmluYWxseSwgaW4gYHZtYWxsb2NfaW5pdGAsIHdlIGhhdmUgYSBzaW1wbGUgcmVvcmRlcmluZyBvZiB0aGUgYHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKWAgY2FsbC4gSXQncyBtb3ZlZCB0byBiZSBncm91cGVkIHdpdGggdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgdmJxYCBzdHJ1Y3R1cmUgaXRzZWxmLiBUaGlzIGxvb2tzIGxpa2UgYSBzdHlsaXN0aWMgY2hhbmdlLCB0byBpbXByb3ZlIHRoZSBmbG93IG9mIHRoZSBjb2RlLlxuXG5PdmVyYWxsLCBpdCBzZWVtcyBsaWtlIGEgY2xlYW4gc2V0IG9mIGNoYW5nZXMgZGVzaWduZWQgZm9yIGJldHRlciBvcmdhbml6YXRpb24gYW5kIGNvZGUgY2xhcml0eS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBsaW5lcyA1NTgwLTU2MDAgb2YgYG1tL3ZtYWxsb2MuY2AganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY2hhbmdlcyBvciBoaWRkZW4gaW1wbGljYXRpb25zLiBJdCdzIGFsd2F5cyB3aXNlIHRvIGRvdWJsZS1jaGVjaywgYnV0IHRoaXMgaW5pdGlhbCBhbmFseXNpcyBzdWdnZXN0cyBhIHdlbGwtY29uc2lkZXJlZCBzZXJpZXMgb2YgaW1wcm92ZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6Mjc6MzMuMDcyMTc5MDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NTgwOlxcdFxcdHZtYXBfYXJlYV9jYWNoZXAgPSBLTUVNX0NBQ0hFKHZtYXBfYXJlYSwgU0xBQl9QQU5JQyk7XFxuNTU4MTpcXHRcXG41NTgyOlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuNTU4MzpcXHRcXHRcXHRzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSAqdmJxO1xcbjU1ODQ6XFx0XFx0XFx0c3RydWN0IHZmcmVlX2RlZmVycmVkICpwO1xcbjU1ODU6XFx0XFxuNTU4NjpcXHRcXHRcXHR2YnEgPSBcXHUwMDI2cGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBpKTtcXG41NTg3OlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ2YnEtXFx1MDAzZWxvY2spO1xcbjU1ODg6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZicS1cXHUwMDNlZnJlZSk7XFxuNTU4OTpcXHRcXHRcXHR4YV9pbml0KFxcdTAwMjZ2YnEtXFx1MDAzZXZtYXBfYmxvY2tzKTtcXG41NTkwOlxcdFxcbjU1OTE6XFx0XFx0XFx0cCA9IFxcdTAwMjZwZXJfY3B1KHZmcmVlX2RlZmVycmVkLCBpKTtcXG41NTkyOlxcdFxcdFxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2cC1cXHUwMDNlbGlzdCk7XFxuNTU5MzpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnAtXFx1MDAzZXdxLCBkZWxheWVkX3ZmcmVlX3dvcmspO1xcbjU1OTQ6XFx0XFx0fVxcbjU1OTU6XFx0XFxuNTU5NjpcXHRcXHQvKlxcbjU1OTc6XFx0XFx0ICogU2V0dXAgbm9kZXMgYmVmb3JlIGltcG9ydGluZyB2bWxpc3QuXFxuNTU5ODpcXHRcXHQgKi9cXG41NTk5OlxcdFxcdHZtYXBfaW5pdF9ub2RlcygpO1xcbjU2MDA6XFx0XFxuNTYwMTpcXHRcXHQvKiBJbXBvcnQgZXhpc3Rpbmcgdm1saXN0IGVudHJpZXMuICovXFxuNTYwMjpcXHRcXHRmb3IgKHRtcCA9IHZtbGlzdDsgdG1wOyB0bXAgPSB0bXAtXFx1MDAzZW5leHQpIHtcXG41NjAzOlxcdFxcdFxcdHZhID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XFxuNTYwNDpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCF2YSkpXFxuNTYwNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41NjA2OlxcdFxcbjU2MDc6XFx0XFx0XFx0dmEtXFx1MDAzZXZhX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdG1wLVxcdTAwM2VhZGRyO1xcbjU2MDg6XFx0XFx0XFx0dmEtXFx1MDAzZXZhX2VuZCA9IHZhLVxcdTAwM2V2YV9zdGFydCArIHRtcC1cXHUwMDNlc2l6ZTtcXG41NjA5OlxcdFxcdFxcdHZhLVxcdTAwM2V2bSA9IHRtcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6Mjc6MzMuMDcyNTAwMDYxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY2ODg3MDE2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogS01TQU4gTm90IE5lZWRlZCoqXG5cbk9rYXksIGFmdGVyIHJldmlld2luZyB0aGlzIGRpZmYsIGl0J3MgY2xlYXIgdGhhdCBLTVNBTiBpc24ndCB3YXJyYW50ZWQgaGVyZS4gVGhpcyBpcyBhbGwgY2xlYW4gcmVmYWN0b3Jpbmcgd29yay4gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqYHZtYWxsb2NfaW5mb19zaG93YCoqOiBJIHNlZSB0aGV5J3ZlIHRha2VuIHRoZSBidXN5IGluZm8gcHJpbnRpbmcgbG9naWMgYW5kIGlzb2xhdGVkIGl0IGludG8gYSBoZWxwZXIsIGBzaG93X2J1c3lfaW5mb2AuIE1ha2VzIHNlbnNlLiBUaGV5J3ZlIGFsc28gbW92ZWQgdGhlIGZyZWVpbmcgb2YgdGhlIE5VTUEgY291bnRlcnMgYnVmZmVyIGNsb3NlciB0byBpdHMgdXNhZ2UgaW4gdGhhdCBoZWxwZXIuIEEgZ29vZCwgc21hbGwgaW1wcm92ZW1lbnQgZm9yIHJlYWRhYmlsaXR5LlxuXG4qICAgKipgdm1hcF9pbml0X2ZyZWVfc3BhY2VgKio6IFRoZXkndmUgY2xlYW5lZCB1cCBkdXBsaWNhdGUgY29kZSB3aXRoIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgLiBTbWFydCBtb3ZlLiBBbmQgdGhleSdyZSB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBzbyB3ZSdyZSBndWFyYW50ZWVkIHplcm8taW5pdGlhbGl6YXRpb24uIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS5cblxuKiAgICoqYHZtYWxsb2NfaW5pdGAqKjogSnVzdCBhIHJlb3JkZXJpbmcgb2YgYHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKWAuIEtlZXBpbmcgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyIGlzIGdvb2QgcHJhY3RpY2UuIE5vIGxvZ2ljIGNoYW5nZXMsIGp1c3QgYSBiZXR0ZXIgY29kZSBzdHJ1Y3R1cmUuXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgaXMsIG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG9mIHRoZSBLTVNBTi10cmlnZ2VyaW5nIGlzc3Vlczogbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIG5vIHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMsIG5vIGFsdGVyYXRpb25zIHRvIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCBkZWZpbml0ZWx5IG5vIGluZm9ybWF0aW9uIGxlYWtzLiBXZSdyZSBub3QgdG91Y2hpbmcgYW55IHVzZXIgY29weSBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgbW9yZSB0aGFuIGFkZXF1YXRlIGZvciBjYXRjaGluZyBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZXRpbWUgaXNzdWVzIHRoYXQgbWlnaHQgY3JvcCB1cC5cblxuU28sIHRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcsIHdpdGggbm8gbmV3IHJpc2tzLCBhbmQgS01TQU4gaXMgKmZhbHNlKi4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU5MSwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNzozOS43NjEyMDY0MzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGluIG1tL3ZtYWxsb2MuYzpcXG4xLiBJdCBzcGxpdHMgdm1hbGxvY19pbmZvX3Nob3coKSBieSBleHRyYWN0aW5nIHNob3dfYnVzeV9pbmZvKCkgYW5kIGZyZWVpbmcgdGhlIHRlbXBvcmFyeSBOVU1BIGNvdW50ZXJzIGFycmF5IGVhcmxpZXIgd2l0aGluIHRoYXQgZnVuY3Rpb24uXFxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxcbjMuIEluIF9faW5pdCB2bWFsbG9jX2luaXQoKSwgaXQgcmVvcmRlcnMgeGFfaW5pdChcXHUwMDI2dmJxLVxcdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIFN0YW5kYXJkIEtBU0FOL2J1aWxkIGNoZWNrcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXM7IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGluIG1tL3ZtYWxsb2MuYzpcXG4xLiBJdCBzcGxpdHMgdm1hbGxvY19pbmZvX3Nob3coKSBieSBleHRyYWN0aW5nIHNob3dfYnVzeV9pbmZvKCkgYW5kIGZyZWVpbmcgdGhlIHRlbXBvcmFyeSBOVU1BIGNvdW50ZXJzIGFycmF5IGVhcmxpZXIgd2l0aGluIHRoYXQgZnVuY3Rpb24uXFxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxcbjMuIEluIF9faW5pdCB2bWFsbG9jX2luaXQoKSwgaXQgcmVvcmRlcnMgeGFfaW5pdChcXHUwMDI2dmJxLVxcdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIFN0YW5kYXJkIEtBU0FOL2J1aWxkIGNoZWNrcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXM7IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowv2zdk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 02:48:53 +0000 UTC FinishedAt: 2026-09-15 03:27:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "baa8de2f3448d1466a888a805c18d01c998fe052", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "NUMA" ], "series_id": "c1bedbbb-afa8-440a-aee4-7671b25091e8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmalloc_info_show", "show_busy_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "baa8de2f3448d1466a888a805c18d01c998fe052", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYWxsb2NfaW5mb19zaG93JiMzNDssCiAgICAmIzM0O3Nob3dfYnVzeV9pbmZvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgaW4gbW0vdm1hbGxvYy5jOlxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxuMy4gSW4gX19pbml0IHZtYWxsb2NfaW5pdCgpLCBpdCByZW9yZGVycyB4YV9pbml0KFx1MDAyNnZicS1cdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSAvcHJvYy92bWFsbG9jaW5mbyBkdW1wIGltcGxlbWVudGF0aW9uIGluIG1tL3ZtYWxsb2MuYyBieSBleHRyYWN0aW5nIHNob3dfYnVzeV9pbmZvKCkgZnJvbSB2bWFsbG9jX2luZm9fc2hvdygpIGFuZCBjaGFuZ2luZyB0aGUgc2NvcGUvbGlmZXRpbWUgb2YgTlVNQSBjb3VudGVyIGFsbG9jYXRpb25zLiBUaGUgY29kZSBpbiBtbS92bWFsbG9jLmMgaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcmVhZGluZyAvcHJvYy92bWFsbG9jaW5mbywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgaGFuZGxpbmcgYnVncywgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGJlZDUzNjRiNTE1ZWMwMDI4MjA0OGIxMDI4MWI1YzRlNjljZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MjM6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCA4NTllNmQyZDU3YTM4Li5lMDlkNmM4YzhiMzUzIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmNcbkBAIC01MzQ1LDcgJiM0Mzs1MzQ1LDcgQEAgc3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4mIzQzO3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuQEAgLTU0MTUsMTIgJiM0Mzs1NDE1LDE4IEBAIHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuIFx0fVxuIFxuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbiYjNDM7XHRcdGtmcmVlKGNvdW50ZXJzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4mIzQzO3tcbiYjNDM7XHRzaG93X2J1c3lfaW5mbyhtKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFwmIzM0O3VucHVyZ2VkXCYjMzQ7IGFyZWFzLlxuIFx0ICovXG4gXHRzaG93X3B1cmdlX2luZm8obSk7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG4tXHRcdGtmcmVlKGNvdW50ZXJzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NDMzLDExICYjNDM7NTQzOSwyMyBAQCBtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XG4gXG4gI2VuZGlmXG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4mIzQzO1xuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuJiM0MztcdFx0ZnJlZS1cdTAwM2V2YV9zdGFydCA9IHN0YXJ0O1xuJiM0MztcdFx0ZnJlZS1cdTAwM2V2YV9lbmQgPSBlbmQ7XG4mIzQzO1x0XHRpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnQoZnJlZSwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHZtYXBfc3RhcnQgPSAxO1xuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyB2bWFwX2VuZCA9IFVMT05HX01BWDtcbi1cdHN0cnVjdCB2bWFwX2FyZWEgKmZyZWU7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICpidXN5O1xuIFxuIFx0LypcbkBAIC01NDQ3LDMyICYjNDM7NTQ2NSwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcbiBcdCAqICB8XHUwMDNjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHUwMDNlfFxuIFx0ICovXG4gXHRmb3IgKGJ1c3kgPSB2bWxpc3Q7IGJ1c3k7IGJ1c3kgPSBidXN5LVx1MDAzZW5leHQpIHtcbi1cdFx0aWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LVx1MDAzZWFkZHIgLSB2bWFwX3N0YXJ0IFx1MDAzZSAwKSB7XG4tXHRcdFx0ZnJlZSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xuLVx0XHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuLVx0XHRcdFx0ZnJlZS1cdTAwM2V2YV9zdGFydCA9IHZtYXBfc3RhcnQ7XG4tXHRcdFx0XHRmcmVlLVx1MDAzZXZhX2VuZCA9ICh1bnNpZ25lZCBsb25nKSBidXN5LVx1MDAzZWFkZHI7XG4tXG4tXHRcdFx0XHRpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnQoZnJlZSwgTlVMTCxcbi1cdFx0XHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbi1cdFx0XHR9XG4tXHRcdH1cbiYjNDM7XHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0dm1hcF9pbnNlcnRfZnJlZV9hcmVhKHZtYXBfc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyKTtcbiBcbiBcdFx0dm1hcF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKSBidXN5LVx1MDAzZWFkZHIgJiM0MzsgYnVzeS1cdTAwM2VzaXplO1xuIFx0fVxuIFxuLVx0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4tXHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfZW5kID0gdm1hcF9lbmQ7XG4tXG4tXHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuLVx0XHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmICh2bWFwX2VuZCAtIHZtYXBfc3RhcnQgXHUwMDNlIDApXG4mIzQzO1x0XHR2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwgdm1hcF9lbmQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2bWFwX2luaXRfbm9kZXModm9pZClcbkBAIC01NTg1LDEwICYjNDM7NTU4NiwxMSBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbiBcdFx0dmJxID0gXHUwMDI2cGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBpKTtcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmJxLVx1MDAzZWxvY2spO1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2YnEtXHUwMDNlZnJlZSk7XG4mIzQzO1x0XHR4YV9pbml0KFx1MDAyNnZicS1cdTAwM2V2bWFwX2Jsb2Nrcyk7XG4mIzQzO1xuIFx0XHRwID0gXHUwMDI2cGVyX2NwdSh2ZnJlZV9kZWZlcnJlZCwgaSk7XG4gXHRcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuIFx0XHRJTklUX1dPUksoXHUwMDI2cC1cdTAwM2V3cSwgZGVsYXllZF92ZnJlZV93b3JrKTtcbi1cdFx0eGFfaW5pdChcdTAwMjZ2YnEtXHUwMDNldm1hcF9ibG9ja3MpO1xuIFx0fVxuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFsbG9jX2luZm9fc2hvdyYjMzQ7LAogICAgJiMzNDtzaG93X2J1c3lfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIC9wcm9jL3ZtYWxsb2NpbmZvIGR1bXAgaW1wbGVtZW50YXRpb24gaW4gbW0vdm1hbGxvYy5jIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBmcm9tIHZtYWxsb2NfaW5mb19zaG93KCkgYW5kIGNoYW5naW5nIHRoZSBzY29wZS9saWZldGltZSBvZiBOVU1BIGNvdW50ZXIgYWxsb2NhdGlvbnMuIFRoZSBjb2RlIGluIG1tL3ZtYWxsb2MuYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByZWFkaW5nIC9wcm9jL3ZtYWxsb2NpbmZvLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBoYW5kbGluZyBidWdzLCBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhkYmVkNTM2NGI1MTVlYzAwMjgyMDQ4YjEwMjgxYjVjNGU2OWNkMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMzoyMzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCA4NTllNmQyZDU3YTM4Li5lMDlkNmM4YzhiMzUzIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC01MzQ1LDcgJiM0Mzs1MzQ1LDcgQEAgc3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQomIzQzO3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKIAlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKQEAgLTU0MTUsMTIgJiM0Mzs1NDE1LDE4IEBAIHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogCQlzcGluX3VubG9jaygmYW1wO3ZuLSZndDtidXN5LmxvY2spOwogCX0KIAomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpCiYjNDM7CQlrZnJlZShjb3VudGVycyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQomIzQzO3sKJiM0MzsJc2hvd19idXN5X2luZm8obSk7CiYjNDM7CiAJLyoKIAkgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgJiMzNDt1bnB1cmdlZCYjMzQ7IGFyZWFzLgogCSAqLwogCXNob3dfcHVyZ2VfaW5mbyhtKTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpCi0JCWtmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTQzMywxMSAmIzQzOzU0MzksMjMgQEAgbW9kdWxlX2luaXQocHJvY192bWFsbG9jX2luaXQpOwogCiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7CiYjNDM7CiYjNDM7CWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewomIzQzOwkJZnJlZS0mZ3Q7dmFfc3RhcnQgPSBzdGFydDsKJiM0MzsJCWZyZWUtJmd0O3ZhX2VuZCA9IGVuZDsKJiM0MzsJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAomIzQzOwkJCQkJICZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKJiM0MzsJCQkJCSAmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2bWFwX3N0YXJ0ID0gMTsKIAljb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYOwotCXN0cnVjdCB2bWFwX2FyZWEgKmZyZWU7CiAJc3RydWN0IHZtX3N0cnVjdCAqYnVzeTsKIAogCS8qCkBAIC01NDQ3LDMyICYjNDM7NTQ2NSwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZCkKIAkgKiAgfCZsdDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mZ3Q7fAogCSAqLwogCWZvciAoYnVzeSA9IHZtbGlzdDsgYnVzeTsgYnVzeSA9IGJ1c3ktJmd0O25leHQpIHsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LSZndDthZGRyIC0gdm1hcF9zdGFydCAmZ3Q7IDApIHsKLQkJCWZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTsKLQkJCWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewotCQkJCWZyZWUtJmd0O3ZhX3N0YXJ0ID0gdm1hcF9zdGFydDsKLQkJCQlmcmVlLSZndDt2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS0mZ3Q7YWRkcjsKLQotCQkJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAotCQkJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX3Jvb3QsCi0JCQkJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QpOwotCQkJfQotCQl9CiYjNDM7CQlpZiAoKHVuc2lnbmVkIGxvbmcpIGJ1c3ktJmd0O2FkZHIgLSB2bWFwX3N0YXJ0ICZndDsgMCkKJiM0MzsJCQl2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwKJiM0MzsJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBidXN5LSZndDthZGRyKTsKIAogCQl2bWFwX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGJ1c3ktJmd0O2FkZHIgJiM0MzsgYnVzeS0mZ3Q7c2l6ZTsKIAl9CiAKLQlpZiAodm1hcF9lbmQgLSB2bWFwX3N0YXJ0ICZndDsgMCkgewotCQlmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7Ci0JCWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewotCQkJZnJlZS0mZ3Q7dmFfc3RhcnQgPSB2bWFwX3N0YXJ0OwotCQkJZnJlZS0mZ3Q7dmFfZW5kID0gdm1hcF9lbmQ7Ci0KLQkJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAotCQkJCSZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKLQkJCQkJJmFtcDtmcmVlX3ZtYXBfYXJlYV9saXN0KTsKLQkJfQotCX0KJiM0MzsJaWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCAmZ3Q7IDApCiYjNDM7CQl2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwgdm1hcF9lbmQpOwogfQogCiBzdGF0aWMgdm9pZCB2bWFwX2luaXRfbm9kZXModm9pZCkKQEAgLTU1ODUsMTAgJiM0Mzs1NTg2LDExIEBAIHZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKQogCQl2YnEgPSAmYW1wO3Blcl9jcHUodm1hcF9ibG9ja19xdWV1ZSwgaSk7CiAJCXNwaW5fbG9ja19pbml0KCZhbXA7dmJxLSZndDtsb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDt2YnEtJmd0O2ZyZWUpOwomIzQzOwkJeGFfaW5pdCgmYW1wO3ZicS0mZ3Q7dm1hcF9ibG9ja3MpOwomIzQzOwogCQlwID0gJmFtcDtwZXJfY3B1KHZmcmVlX2RlZmVycmVkLCBpKTsKIAkJaW5pdF9sbGlzdF9oZWFkKCZhbXA7cC0mZ3Q7bGlzdCk7CiAJCUlOSVRfV09SSygmYW1wO3AtJmd0O3dxLCBkZWxheWVkX3ZmcmVlX3dvcmspOwotCQl4YV9pbml0KCZhbXA7dmJxLSZndDt2bWFwX2Jsb2Nrcyk7CiAJfQogCiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZtYWxsb2MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgY2hhbmdlcyBhcmUgYWxsIHdpdGhpbiBgbW0vdm1hbGxvYy5jYCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdG9yLiBGaXJzdCwgSSBzZWUgYSByZWZhY3RvcmluZyBvZiBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGV5JiMzOTt2ZSBleHRyYWN0ZWQgYHNob3dfYnVzeV9pbmZvYCBpbnRvIGl0cyBvd24gZnVuY3Rpb24sIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIGZvciByZWFkYWJpbGl0eSBhbmQgcG90ZW50aWFsIHJldXNlLiBJJiMzOTttIG5vdGluZyB0aGUgcGxhY2VtZW50IG9mIGBrZnJlZShjb3VudGVycylgOyBpdCYjMzk7cyBub3cgaGFuZGxlZCB3aXRoaW4gYHNob3dfYnVzeV9pbmZvYCBiZWZvcmUgdGhlIHJldHVybi4gQ3VyaW91cy4gTm93LCBgdm1hbGxvY19pbmZvX3Nob3dgIGNhbGxzIGBzaG93X2J1c3lfaW5mb2AgYW5kIHRoZW4gYHNob3dfcHVyZ2VfaW5mb2AuIFJpZ2h0LCBhbmQgdGhlbiBpdCByZXR1cm5zLiBJIHdvbmRlciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpjYWxsZWQgZnJvbSo/IE15IGd1ZXNzIGlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGAvcHJvYy92bWFsbG9jaW5mb2AgaW50ZXJmYWNlLCBwZXJoYXBzIHRocm91Z2ggYHByb2Nfdm1hbGxvY19pbml0YC4KCk5leHQsIEkgc2VlIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAsIGludHJvZHVjZWQgd2l0aGluIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAuIEl0JiMzOTtzIGJlaW5nIHVzZWQgdHdpY2UsIGVmZmVjdGl2ZWx5IGRlZHVwbGljYXRpbmcgc29tZSBjb2RlLiBTbWFydC4gQW5kIHRoaXMgaXMgYWxsIG1hcmtlZCBhcyBgX19pbml0YCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4KCkZpbmFsbHksIGluIGB2bWFsbG9jX2luaXRgLCB0aGV5JiMzOTt2ZSBtb3ZlZCBgeGFfaW5pdCgmYW1wO3ZicS0mZ3Q7dm1hcF9ibG9ja3MpYCAqYmVmb3JlKiBgaW5pdF9sbGlzdF9oZWFkKCZhbXA7cC0mZ3Q7bGlzdClgLiBBbHNvIGBfX2luaXRgLgoKSSYjMzk7bSBzdGlsbCB0aGlua2luZyBhYm91dCBgc2hvd19idXN5X2luZm9gIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYXJvdW5kIGxpbmUgNTM0NSBpbiBgbW0vdm1hbGxvYy5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5pbmcgYXJvdW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MzQwOlx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVwSy0weCVwSyAlN2xkIHVucHVyZ2VkIHZtX2FyZWFcXG5cJiMzNDssXG41MzQxOlx0XHRcdFx0XHQodm9pZCAqKXZhLVx1MDAzZXZhX3N0YXJ0LCAodm9pZCAqKXZhLVx1MDAzZXZhX2VuZCxcbjUzNDI6XHRcdFx0XHRcdHZhX3NpemUodmEpKTtcbjUzNDM6XHRcdFx0fVxuNTM0NDpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VsYXp5LmxvY2spO1xuNTM0NTpcdFx0fVxuNTM0NjpcdH1cbjUzNDc6XHRcbjUzNDg6XHRzdGF0aWMgdm9pZCBzaG93X2J1c3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG41MzQ5Olx0e1xuNTM1MDpcdFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG41MzUxOlx0XHRzdHJ1Y3Qgdm1hcF9hcmVhICp2YTtcbjUzNTI6XHRcdHN0cnVjdCB2bV9zdHJ1Y3QgKnY7XG41MzUzOlx0XHR1bnNpZ25lZCBpbnQgKmNvdW50ZXJzO1xuNTM1NDpcdFxuNTM1NTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuNTM1NjpcdFx0XHRjb3VudGVycyA9IGttYWxsb2NfYXJyYXkobnJfbm9kZV9pZHMsIHNpemVvZih1bnNpZ25lZCBpbnQpLCBHRlBfS0VSTkVMKTtcbjUzNTc6XHRcbjUzNTg6XHRcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuNTM1OTpcdFx0XHRzcGluX2xvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbjUzNjA6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2YSwgXHUwMDI2dm4tXHUwMDNlYnVzeS5oZWFkLCBsaXN0KSB7XG41MzYxOlx0XHRcdFx0aWYgKCF2YS1cdTAwM2V2bSkge1xuNTM2MjpcdFx0XHRcdFx0aWYgKHZhLVx1MDAzZWZsYWdzIFx1MDAyNiBWTUFQX1JBTSlcbjUzNjM6XHRcdFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVwSy0weCVwSyAlN2xkIHZtX21hcF9yYW1cXG5cJiMzNDssXG41MzY0Olx0XHRcdFx0XHRcdFx0KHZvaWQgKil2YS1cdTAwM2V2YV9zdGFydCwgKHZvaWQgKil2YS1cdTAwM2V2YV9lbmQsXG41MzY1Olx0XHRcdFx0XHRcdFx0dmFfc2l6ZSh2YSkpO1xuNTM2NjpcdFxuNTM2NzpcdFx0XHRcdFx0Y29udGludWU7XG41MzY4Olx0XHRcdFx0fVxuNTM2OTpcdFxuNTM3MDpcdFx0XHRcdHYgPSB2YS1cdTAwM2V2bTtcbjUzNzE6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fVU5JTklUSUFMSVpFRClcbjUzNzI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNTM3MzpcdFxuNTM3NDpcdFx0XHRcdC8qIFBhaXIgd2l0aCBzbXBfd21iKCkgaW4gY2xlYXJfdm1fdW5pbml0aWFsaXplZF9mbGFnKCkgKi9cbjUzNzU6XHRcdFx0XHRzbXBfcm1iKCk7XG41Mzc2Olx0XG41Mzc3Olx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVwSy0weCVwSyAlN2xkXCYjMzQ7LFxuNTM3ODpcdFx0XHRcdFx0di1cdTAwM2VhZGRyLCB2LVx1MDAzZWFkZHIgJiM0Mzsgdi1cdTAwM2VzaXplLCB2LVx1MDAzZXNpemUpO1xuNTM3OTpcdFxuNTM4MDpcdFx0XHRcdGlmICh2LVx1MDAzZWNhbGxlcilcbjUzODE6XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICVwU1wmIzM0Oywgdi1cdTAwM2VjYWxsZXIpO1xuNTM4MjpcdFxuNTM4MzpcdFx0XHRcdGlmICh2LVx1MDAzZW5yX3BhZ2VzKVxuNTM4NDpcdFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgcGFnZXM9JWx1XCYjMzQ7LCB2LVx1MDAzZW5yX3BhZ2VzKTtcbjUzODU6XHRcbjUzODY6XHRcdFx0XHRpZiAodi1cdTAwM2VwaHlzX2FkZHIpXG41Mzg3Olx0XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyBwaHlzPSVwYVwmIzM0OywgXHUwMDI2di1cdTAwM2VwaHlzX2FkZHIpO1xuNTM4ODpcdFxuNTM4OTpcdFx0XHRcdGlmICh2LVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9JT1JFTUFQKVxuNTM5MDpcdFx0XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7IGlvcmVtYXBcJiMzNDspO1xuNTM5MTpcdFxuNTM5MjpcdFx0XHRcdGlmICh2LVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9TUEFSU0UpXG41MzkzOlx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgc3BhcnNlXCYjMzQ7KTtcbjUzOTQ6XHRcbjUzOTU6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fQUxMT0MpXG41Mzk2Olx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgdm1hbGxvY1wmIzM0Oyk7XG41Mzk3Olx0XG41Mzk4Olx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX01BUClcbjUzOTk6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyB2bWFwXCYjMzQ7KTtcbjU0MDA6XHRcbjU0MDE6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fVVNFUk1BUClcbjU0MDI6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyB1c2VyXCYjMzQ7KTtcbjU0MDM6XHRcbjU0MDQ6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fRE1BX0NPSEVSRU5UKVxuNTQwNTpcdFx0XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7IGRtYS1jb2hlcmVudFwmIzM0Oyk7XG41NDA2Olx0XG41NDA3Olx0XHRcdFx0aWYgKGlzX3ZtYWxsb2NfYWRkcih2LVx1MDAzZXBhZ2VzKSlcbjU0MDg6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyB2cGFnZXNcJiMzNDspO1xuNTQwOTpcdFxuNTQxMDpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbjU0MTE6XHRcdFx0XHRcdHNob3dfbnVtYV9pbmZvKG0sIHYsIGNvdW50ZXJzKTtcbjU0MTI6XHRcbjU0MTM6XHRcdFx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbjU0MTQ6XHRcdFx0fVxuNTQxNTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuNTQxNjpcdFx0fVxuNTQxNzpcdFxuNTQxODpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuNTQxOTpcdFx0XHRrZnJlZShjb3VudGVycyk7XG41NDIwOlx0fVxuNTQyMTpcdFxuNTQyMjpcdHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuNTQyMzpcdHtcbjU0MjQ6XHRcdHNob3dfYnVzeV9pbmZvKG0pO1xuNTQyNTpcdFxuNTQyNjpcdFx0LypcbjU0Mjc6XHRcdCAqIEFzIGEgZmluYWwgc3RlcCwgZHVtcCBcJiMzNDt1bnB1cmdlZFwmIzM0OyBhcmVhcy5cbjU0Mjg6XHRcdCAqL1xuNTQyOTpcdFx0c2hvd19wdXJnZV9pbmZvKG0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGF0IHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIGAvcHJvYy92bWFsbG9jaW5mb2AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgL3Byb2Mvdm1hbGxvY2luZm9gIGlzIHBvcHVsYXRlZCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB3aGVyZSB3ZSBnZXQgdGhlIGRldGFpbHMgb24gdmlydHVhbGx5IG1hcHBlZCBtZW1vcnkgYXJlYXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGJhY2sgdG8gdGhlIGB2bWFsbG9jX2luZm9fc2hvd2AgZnVuY3Rpb24sIGFzIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgY2FuZGlkYXRlIGZvciB0aGUgc291cmNlIG9mIHRoZSBkYXRhIGRpc3BsYXllZCB0aGVyZS4gTm93LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGF0IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgZm9ybWF0dGluZyBhbmQgd3JpdGluZyB0aGF0IHNwZWNpZmljIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgaXQmIzM5O3MgdXNlZC4KCkxldCYjMzk7cyB1c2UgYHJlYWQtZmlsZWAgYW5kIGNoZWNrIGxpbmVzIDU0MzAtNTQ0NSB0byBjbGFyaWZ5IGhvdyBgdm1hbGxvY19pbmZvX3Nob3dgIGlzIGludGVncmF0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQyMDpcdH1cbjU0MjE6XHRcbjU0MjI6XHRzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbjU0MjM6XHR7XG41NDI0Olx0XHRzaG93X2J1c3lfaW5mbyhtKTtcbjU0MjU6XHRcbjU0MjY6XHRcdC8qXG41NDI3Olx0XHQgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgXCYjMzQ7dW5wdXJnZWRcJiMzNDsgYXJlYXMuXG41NDI4Olx0XHQgKi9cbjU0Mjk6XHRcdHNob3dfcHVyZ2VfaW5mbyhtKTtcbjU0MzA6XHRcdHJldHVybiAwO1xuNTQzMTpcdH1cbjU0MzI6XHRcbjU0MzM6XHRzdGF0aWMgaW50IF9faW5pdCBwcm9jX3ZtYWxsb2NfaW5pdCh2b2lkKVxuNTQzNDpcdHtcbjU0MzU6XHRcdHByb2NfY3JlYXRlX3NpbmdsZShcJiMzNDt2bWFsbG9jaW5mb1wmIzM0OywgMDQwMCwgTlVMTCwgdm1hbGxvY19pbmZvX3Nob3cpO1xuNTQzNjpcdFx0cmV0dXJuIDA7XG41NDM3Olx0fVxuNTQzODpcdG1vZHVsZV9pbml0KHByb2Nfdm1hbGxvY19pbml0KTtcbjU0Mzk6XHRcbjU0NDA6XHQjZW5kaWZcbjU0NDE6XHRcbjU0NDI6XHRzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbnNlcnRfZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuNTQ0MzpcdHtcbjU0NDQ6XHRcdHN0cnVjdCB2bWFwX2FyZWEgKmZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTtcbjU0NDU6XHRcbjU0NDY6XHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuNTQ0NzpcdFx0XHRmcmVlLVx1MDAzZXZhX3N0YXJ0ID0gc3RhcnQ7XG41NDQ4Olx0XHRcdGZyZWUtXHUwMDNldmFfZW5kID0gZW5kO1xuNTQ0OTpcdFx0XHRpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnQoZnJlZSwgTlVMTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzA5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBgcHJvY192bWFsbG9jX2luaXRgIFN1cnJvdW5kaW5ncyoqCgpBbHJpZ2h0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYHByb2Nfdm1hbGxvY19pbml0YC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gUmlnaHQgbm93LCBJIHNlZSBhbiBgI2VuZGlmYCBhdCBsaW5lIDU0NDAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW52b2x2ZWQuIFRoZSBmaXJzdCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGNvbnRyb2xzIHRoaXMgYmxvY2suIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIHRoZSBjb3JyZXNwb25kaW5nIGAjaWZkZWZgIG9yIGAjaWZuZGVmYCB0aGF0IGdvdmVybnMgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBjb2RlLiBMb29raW5nIGJhY2ssIEkgbmVlZCB0byBjaGVjayBsaW5lcyA1MzAwIHRocm91Z2ggNTM0NS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29uZGl0aW9uYWwgYmxvY2sgYW5kIHJldmVhbCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgZmVhdHVyZSB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyB0aWVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MzAwOlx0XG41MzAxOlx0XHRyZXR1cm4gdHJ1ZTtcbjUzMDI6XHR9XG41MzAzOlx0I2VuZGlmXG41MzA0Olx0XG41MzA1Olx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXG41MzA2Olx0XG41MzA3Olx0LypcbjUzMDg6XHQgKiBQcmludCBudW1iZXIgb2YgcGFnZXMgYWxsb2NhdGVkIG9uIGVhY2ggbWVtb3J5IG5vZGUuXG41MzA5Olx0ICpcbjUzMTA6XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBDT05GSUdfTlVNQSBpcyBlbmFibGVkXG41MzExOlx0ICogYW5kIFZNX1VOSU5JVElBTElaRUQgYml0IGluIHYtXHUwMDNlZmxhZ3MgaXMgZGlzYWJsZWQuXG41MzEyOlx0ICovXG41MzEzOlx0c3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LFxuNTMxNDpcdFx0XHRcdFx0IHVuc2lnbmVkIGludCAqY291bnRlcnMpXG41MzE1Olx0e1xuNTMxNjpcdFx0dW5zaWduZWQgaW50IHN0ZXAgPSAxVSBcdTAwM2NcdTAwM2Mgdm1fYXJlYV9wYWdlX29yZGVyKHYpO1xuNTMxNzpcdFx0dW5zaWduZWQgbG9uZyBpO1xuNTMxODpcdFx0dW5zaWduZWQgaW50IG5yO1xuNTMxOTpcdFxuNTMyMDpcdFx0aWYgKCFjb3VudGVycylcbjUzMjE6XHRcdFx0cmV0dXJuO1xuNTMyMjpcdFxuNTMyMzpcdFx0bWVtc2V0KGNvdW50ZXJzLCAwLCBucl9ub2RlX2lkcyAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTtcbjUzMjQ6XHRcbjUzMjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHYtXHUwMDNlbnJfcGFnZXM7IGkgJiM0Mzs9IHN0ZXApXG41MzI2Olx0XHRcdGNvdW50ZXJzW3BhZ2VfdG9fbmlkKHYtXHUwMDNlcGFnZXNbaV0pXSAmIzQzOz0gc3RlcDtcbjUzMjc6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobnIsIE5fSElHSF9NRU1PUlkpXG41MzI4Olx0XHRcdGlmIChjb3VudGVyc1tucl0pXG41MzI5Olx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgTiV1PSV1XCYjMzQ7LCBuciwgY291bnRlcnNbbnJdKTtcbjUzMzA6XHR9XG41MzMxOlx0XG41MzMyOlx0c3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbjUzMzM6XHR7XG41MzM0Olx0XHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbjUzMzU6XHRcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuNTMzNjpcdFxuNTMzNzpcdFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG41MzM4Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZ2bi1cdTAwM2VsYXp5LmxvY2spO1xuNTMzOTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCBcdTAwMjZ2bi1cdTAwM2VsYXp5LmhlYWQsIGxpc3QpIHtcbjUzNDA6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OzB4JXBLLTB4JXBLICU3bGQgdW5wdXJnZWQgdm1fYXJlYVxcblwmIzM0OyxcbjUzNDE6XHRcdFx0XHRcdCh2b2lkICopdmEtXHUwMDNldmFfc3RhcnQsICh2b2lkICopdmEtXHUwMDNldmFfZW5kLFxuNTM0MjpcdFx0XHRcdFx0dmFfc2l6ZSh2YSkpO1xuNTM0MzpcdFx0XHR9XG41MzQ0Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWxhenkubG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY0MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdm1hbGxvYy5jYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgcmVzdHJ1Y3R1cmVzIHBhcnRzIG9mIGBtbS92bWFsbG9jLmNgLCBhbmQgbXkgaW5pdGlhbCBpbXB1bHNlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHZ1bG5lcmFiaWxpdHkuIExldCYjMzk7cyBzZWUuLi4gSSBjb3VsZCB0cnkgdG8gY2hlY2sgdGhlIGdpdCBsb2csIGJ1dCBzaW5jZSBJIGhhdmUgdGhlIGRpZmYsIGxldCYjMzk7cyBqdXN0IHVzZSB3aGF0JiMzOTtzIGluIGZyb250IG9mIG1lLgoKVGhlIGZpcnN0IGNoYW5nZSBpbiB0aGUgZGlmZiBzZWVtcyB0byBiZSBzcGxpdHRpbmcgdGhlIGB2bWFsbG9jX2luZm9fc2hvd2AgZnVuY3Rpb24uIE9yaWdpbmFsbHksIGl0IHNob3dlZCBidXN5IGFuZCBwdXJnZWQgdm1hbGxvYyBhcmVhcyBhbmQgdGhlbiBmcmVlZCBtZW1vcnksIGJ1dCBub3cgaXQgYXBwZWFycyB0aGF0IHRoZSAmIzM0O2J1c3kmIzM0OyBpbmZvIGlzIGhhbmRsZWQgYnkgYHNob3dfYnVzeV9pbmZvYCBhbmQgZnJlZWQgd2l0aGluIHRoYXQgZnVuY3Rpb24gYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AgaXMganVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIE9rYXksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBpbiB0ZXJtcyBvZiB3aGF0JiMzOTtzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBBaCwgeWVzLCBgL3Byb2Mvdm1hbGxvY2luZm9gIC0gdGhhdCBpcyB3aGF0IGNhbGxzIGB2bWFsbG9jX2luZm9fc2hvd2AuIEkgbmVlZCB0byB0aGluayBhYm91dCBzeXprYWxsZXIgYW5kIGFjY2VzcyB0byB0aGF0IGZpbGUuIAoKVGhlIHBlcm1pc3Npb25zIGxvb2sgbGlrZSBpdCYjMzk7cyByZWFkYWJsZSBieSByb290LCB3aGljaCBtZWFucyBpdCBjYW4gYmUgYWNjZXNzZWQgYnkgc3l6a2FsbGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IHRoaXMgdGhvdWdoLCBhcyBpdCBtaWdodCB1c2UgYSB1c2VyIG5hbWVzcGFjZS4gQnV0LCBsaWtlbHkgc3l6a2FsbGVyIGNhbiByZWFkIGAvcHJvYy92bWFsbG9jaW5mb2AgYmVjYXVzZSB0aGUgcHJvY2VzcyBydW5zIGFzIHJvb3QgYW5kIGFsc28gaGFzIGBDQVBfU1lTX0FETUlOYCBpbiBuYW1lc3BhY2VzLCByaWdodD8gT2theSwgc28gaWYgc3l6a2FsbGVyIGNhbiByZWFkIHRoaXMgaW5mbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoYW5nZSBkb2VzIHRvIHRoZSBvdXRwdXQgb3IgYmVoYXZpb3Igb2YgYC9wcm9jL3ZtYWxsb2NpbmZvYC4KCk5vdywgdGhlIG90aGVyIHBhcnQgb2YgdGhlIGRpZmYgaGFzIHRvIGRvIHdpdGggZnJlZSB2bWFwIGFyZWFzLiBgdm1hcF9pbnNlcnRfZnJlZV9hcmVhYCBhbmQgYHZtYXBfaW5pdF9mcmVlX3NwYWNlYCBhcmUgYm90aCBpbiB0aGlzIHBhdGNoLiBCdXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBgX19pbml0YCwgd2hpY2ggbWVhbnMgdGhleSBhcmUgb25seSBjYWxsZWQgZHVyaW5nIGtlcm5lbCBpbml0aWFsaXphdGlvbiBhbmQgYXJlIG5vdCBhY2Nlc3NpYmxlIGFmdGVyIGJvb3QuIFN5emthbGxlciBjYW5ub3QgcmVhY2ggdGhlbSwgc2luY2Ugc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHN0YXJ0IHVudGlsICphZnRlciogdGhlIGtlcm5lbCBpcyBmdWxseSB1cC4gTXkgYW5hbHlzaXMgaGVyZSBuZWVkcyB0byBjb25zaWRlciBpZiB0aGVzZSBjb3VsZCBiZSBjYWxsZWQgYXQgcnVudGltZSwgYnV0IEkmIzM5O2xsIHNlZSB0aGV5IGFyZSBgX19pbml0YCwgc28gdGhleSBhcmUgbm90IHJlYWNoYWJsZSBieSBmdXp6aW5nISBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGlmIHRoaXMgY291bGQgc3RpbGwgYmUgcmVsZXZhbnQuIFdhaXQsIHNpbmNlIGl0JiMzOTtzIGBfX2luaXRgLCB0aGlzIHNlY3Rpb24gaXMgbmV2ZXIgdG91Y2hlZCBhZ2FpbiBhZnRlciBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aG91Z2gsIGJ1dCB0aGF0IGlzIG15IGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiBgX19pbml0YC4KCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBjYW4mIzM5O3QgYmUgY2FsbGVkIGFmdGVyIGJvb3QsIGFzIHRoYXQgd291bGQgY29tcGxldGVseSBlbGltaW5hdGUgdGhpcyBhcmVhIG9mIHRoZSBwYXRjaC4gT2theSwgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIHJlYWRzIGAvcHJvYy92bWFsbG9jaW5mb2AuIFNpbmNlIGl0IGlzIDA0MDAsIEkgYmVsaWV2ZSBzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hcF9pbnNlcnRfZnJlZV9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz01NDM4PW1vZHVsZV9pbml0KHByb2Nfdm1hbGxvY19pbml0KTtcbi0tXG5tbS92bWFsbG9jLmMtNTQ0MS1cbm1tL3ZtYWxsb2MuYzo1NDQyOnN0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5tbS92bWFsbG9jLmMtNTQ0My17XG4tLVxubW0vdm1hbGxvYy5jPTU0NTU9c3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpXG4tLVxubW0vdm1hbGxvYy5jLTU0NjgtXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbm1tL3ZtYWxsb2MuYzo1NDY5Olx0XHRcdHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh2bWFwX3N0YXJ0LFxubW0vdm1hbGxvYy5jLTU0NzAtXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nKSBidXN5LVx1MDAzZWFkZHIpO1xuLS1cbm1tL3ZtYWxsb2MuYy01NDc1LVx0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbm1tL3ZtYWxsb2MuYzo1NDc2Olx0XHR2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwgdm1hcF9lbmQpO1xubW0vdm1hbGxvYy5jLTU0NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gVm1hcCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgdm1hcF9pbnNlcnRfZnJlZV9hcmVhYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGZyb20gYHZtYXBfaW5pdF9mcmVlX3NwYWNlYC4gVGhhdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMgc2NvcGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgKnRoYXQqIGNhbGxlZCBmcm9tPyBTaW5jZSBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgIGlzIGFubm90YXRlZCB3aXRoIGBfX2luaXRgLCBpdCB0ZWxscyBtZSBpdCBpcyBjYWxsZWQgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gQnV0IEkgbmVlZCB0byBjb25maXJtIHdoZXJlIGV4YWN0bHkgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0aGUgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IGl0JiMzOTtzIHNvbWV0aGluZyB0aWVkIHRvIHZpcnR1YWwgbWVtb3J5IHNldHVwLCBidXQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBwcmVjaXNlIGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFwX2luaXRfZnJlZV9zcGFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NTQ0Mj1zdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbnNlcnRfZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL3ZtYWxsb2MuYy01NDU0LVxubW0vdm1hbGxvYy5jOjU0NTU6c3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpXG5tbS92bWFsbG9jLmMtNTQ1Ni17XG4tLVxubW0vdm1hbGxvYy5jPTU1Njk9dm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXG4tLVxubW0vdm1hbGxvYy5jLTU2MTctXHQgKi9cbm1tL3ZtYWxsb2MuYzo1NjE4Olx0dm1hcF9pbml0X2ZyZWVfc3BhY2UoKTtcbm1tL3ZtYWxsb2MuYy01NjE5LVx0dm1hcF9pbml0aWFsaXplZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTk0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgUm9vdHMgb2YgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAuIFRoYXQgZnVuY3Rpb24gaXMgYXBwYXJlbnRseSBvbmx5IGNhbGxlZCBmcm9tIGB2bWFsbG9jX2luaXQoKWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHByb2JhYmx5IHNldHRpbmcgdXAgdGhlIGluaXRpYWwgZnJlZSBzcGFjZSBmb3IgdmlydHVhbCBtZW1vcnkgYWxsb2NhdGlvbi4gU2luY2UgYHZtYWxsb2NfaW5pdCgpYCBpcyBtYXJrZWQgYXMgYF9faW5pdGAsIHRoYXQgdGVsbHMgbWUgaXQmIzM5O3Mgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBrZXJuZWwmIzM5O3MgaW5pdGlhbGl6YXRpb24gcGhhc2UuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgKndoZXJlKiBgdm1hbGxvY19pbml0KClgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbml0aWFsaXphdGlvbiBjb250ZXh0LiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGF0IGB2bWFsbG9jX2luaXRgIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYWxsb2NfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbV9pbml0LmM9MjY5Mj12b2lkIF9faW5pdCBtbV9jb3JlX2luaXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMjczMC1cdGRlYnVnX29iamVjdHNfbWVtX2luaXQoKTtcbm1tL21tX2luaXQuYzoyNzMxOlx0dm1hbGxvY19pbml0KCk7XG5tbS9tbV9pbml0LmMtMjczMi1cdC8qIElmIG5vIGRlZmVycmVkIGluaXQgcGFnZV9leHQgbm93LCBhcyB2bWFwIGlzIGZ1bGx5IGluaXRpYWxpemVkICovXG4tLVxubW0vdm1hbGxvYy5jPTMxNTU9c3RhdGljIGlubGluZSB2b2lkIHNldF92bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS92bWFsbG9jLmMtMzE2OC0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYWRkIGZpeGVkIGtlcm5lbCB2bSBhcmVhIHRvIHZtbGlzdCBiZWZvcmVcbm1tL3ZtYWxsb2MuYzozMTY5OiAqIHZtYWxsb2NfaW5pdCgpIGlzIGNhbGxlZC4gIEB2bS1cdTAwM2VhZGRyLCBAdm0tXHUwMDNlc2l6ZSwgYW5kIEB2bS1cdTAwM2VmbGFnc1xubW0vdm1hbGxvYy5jLTMxNzAtICogc2hvdWxkIGNvbnRhaW4gcHJvcGVyIHZhbHVlcyBhbmQgdGhlIG90aGVyIGZpZWxkcyBzaG91bGQgYmUgemVyby5cbi0tXG5tbS92bWFsbG9jLmM9MzE3ND12b2lkIF9faW5pdCB2bV9hcmVhX2FkZF9lYXJseShzdHJ1Y3Qgdm1fc3RydWN0ICp2bSlcbi0tXG5tbS92bWFsbG9jLmMtMzE5NS0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVnaXN0ZXIga2VybmVsIHZtIGFyZWEgYmVmb3JlXG5tbS92bWFsbG9jLmM6MzE5NjogKiB2bWFsbG9jX2luaXQoKSBpcyBjYWxsZWQuICBAdm0tXHUwMDNlc2l6ZSBhbmQgQHZtLVx1MDAzZWZsYWdzIHNob3VsZCBjb250YWluXG5tbS92bWFsbG9jLmMtMzE5Ny0gKiBwcm9wZXIgdmFsdWVzIG9uIGVudHJ5IGFuZCBvdGhlciBmaWVsZHMgc2hvdWxkIGJlIHplcm8uICBPbiByZXR1cm4sXG4tLVxubW0vdm1hbGxvYy5jPTU0MjI9c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4tLVxubW0vdm1hbGxvYy5jLTU0MzItXG5tbS92bWFsbG9jLmM6NTQzMzpzdGF0aWMgaW50IF9faW5pdCBwcm9jX3ZtYWxsb2NfaW5pdCh2b2lkKVxubW0vdm1hbGxvYy5jLTU0MzQte1xuLS1cbm1tL3ZtYWxsb2MuYy01NDM3LX1cbm1tL3ZtYWxsb2MuYzo1NDM4Om1vZHVsZV9pbml0KHByb2Nfdm1hbGxvY19pbml0KTtcbm1tL3ZtYWxsb2MuYy01NDM5LVxuLS1cbm1tL3ZtYWxsb2MuYz01NTQ4PXZtYXBfbm9kZV9zaHJpbmtfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5tbS92bWFsbG9jLmMtNTU2OC1cbm1tL3ZtYWxsb2MuYzo1NTY5OnZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKVxubW0vdm1hbGxvYy5jLTU1NzAte1xuLS1cbm1tL3ZtYWxsb2MuYy01NjMxLVxubW0vdm1hbGxvYy5jOjU2MzI6c3RhdGljIGludCBfX2luaXQgdm1hbGxvY19pbml0X3dvcmtxdWV1ZSh2b2lkKVxubW0vdm1hbGxvYy5jLTU2MzMte1xuLS1cbm1tL3ZtYWxsb2MuYy01NjQ2LX1cbm1tL3ZtYWxsb2MuYzo1NjQ3OmVhcmx5X2luaXRjYWxsKHZtYWxsb2NfaW5pdF93b3JrcXVldWUpO1xuLS1cbm1tL3ZtYWxsb2MuaC0xMC0jaWZkZWYgQ09ORklHX01NVVxubW0vdm1hbGxvYy5oOjExOnZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKTtcbm1tL3ZtYWxsb2MuaC0xMi1pbnQgX19tdXN0X2NoZWNrIHZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuaD0xNT11bnNpZ25lZCBpbnQgZ2V0X3ZtX2FyZWFfcGFnZV9vcmRlcihjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICp2bSk7XG5tbS92bWFsbG9jLmgtMTYtI2Vsc2Vcbm1tL3ZtYWxsb2MuaDoxNzpzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19pbml0KHZvaWQpIHt9XG5tbS92bWFsbG9jLmgtMTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQ0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzYyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgdm1hbGxvY2luZm8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlIGRpZmYsIGl0JiMzOTtzIGNsZWFyIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gVGhlIGluaXRpYWwgYF9faW5pdGAgZnVuY3Rpb25zIGxpa2UgYHZtYWxsb2NfaW5pdGAsIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAsIGFuZCBgdm1hcF9pbnNlcnRfZnJlZV9hcmVhYCBhcmUgaXJyZWxldmFudCBmb3IgcnVudGltZSBmdXp6aW5nOyB0aG9zZSBhcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFRoZSBjcnVjaWFsIGFzcGVjdCBpcyB0aGUgY2hhbmdlIHRvIGB2bWFsbG9jX2luZm9fc2hvd2AgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNob3dfYnVzeV9pbmZvYC4KClRoZSBwYXRjaCByZWZhY3RvcnMgYC9wcm9jL3ZtYWxsb2NpbmZvYCYjMzk7cyBkaXNwbGF5IGxvZ2ljLiBTcGVjaWZpY2FsbHksIGB2bWFsbG9jX2luZm9fc2hvd2AsIGNhbGxlZCB3aGVuIHJlYWRpbmcgZnJvbSBgL3Byb2Mvdm1hbGxvY2luZm9gLCBub3cgY2FsbHMgYHNob3dfYnVzeV9pbmZvYCBhbmQgYHNob3dfcHVyZ2VfaW5mb2Agc2VwYXJhdGVseS4gVGhlIGtleSBpcyBpbiB3aGVyZSBga2ZyZWUoY291bnRlcnMpYCBpcyBjYWxsZWQuIFRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgYGNvdW50ZXJzYCBhcmUgd2l0aGluIHRoZSBgc2hvd19idXN5X2luZm9gLiBQcmV2aW91c2x5LCBgY291bnRlcnNgIGNvdWxkIGhhdmUgYmVlbiBmcmVlZCBhZnRlciBgc2hvd19wdXJnZV9pbmZvYCwgd2hpY2ggY291bGQgZXhwb3NlIGEgYnVnLgoKQ3J1Y2lhbGx5LCBgL3Byb2Mvdm1hbGxvY2luZm9gIGlzIHJlYWNoYWJsZSBhdCBydW50aW1lLiBUaGUgYHByb2NfY3JlYXRlX3NpbmdsZWAgZnVuY3Rpb24gbWFrZXMgdGhpcyBmaWxlIHJlYWRhYmxlIGJ5IHJvb3QuIFN5emthbGxlciBydW5zIGFzIHJvb3QsIHNvIGl0IGNhbiBpbnRlcmFjdCB3aXRoIHRoaXMgY29kZSBwYXRoIGJ5IG9wZW5pbmcgYW5kIHJlYWRpbmcgYC9wcm9jL3ZtYWxsb2NpbmZvYC4gVGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgZGljdGF0ZXMgZnV6emluZyBhbnkgbW9kaWZpZWQgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBsaWtlIGBtbS92bWFsbG9jLmNgLiBUaGlzIGlzICp0ZXh0Ym9vayogZm9yICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0Oy4KClRoaXMgZmFsbHMgdW5kZXI6ICYjMzQ7UmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuJiMzNDsgQWxzbywgJiMzNDtDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uJiMzNDsuIEJlY2F1c2UgdGhlIGNvZGUgaXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb24sIGBtbS92bWFsbG9jLmNgLgoKRnVydGhlcm1vcmUsIHRoaXMgY2hhbmdlIGludm9sdmVzIGFsbG9jYXRpbmcgYSBgY291bnRlcnNgIGFycmF5IHdpdGggYGttYWxsb2NfYXJyYXlgLiBUaGlzIGlzICpwcmVjaXNlbHkqIHRoZSBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB0aGF0IGNhbiB1bnZlaWwgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaWYgdHJpZ2dlcmVkIGNvbmN1cnJlbnRseSB3aXRoIG90aGVyIG1lbW9yeSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggcmVhcnJhbmdlcyBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgY2hhbmdpbmcgd2hlbiBga2ZyZWVgIGlzIGNhbGxlZCwgYW5kIGlzIHRoZXJlZm9yZSBvZiBoaWdoIGludGVyZXN0LiBJdCBoYXMgYWxzbyBpbnRyb2R1Y2VkIGEgbmV3IGBzaG93X2J1c3lfaW5mb2AgZnVuY3Rpb24uCgpOb3csIGZvciBGb2N1c1N5bWJvbHM6Cgpgdm1hbGxvY19pbmZvX3Nob3dgICptdXN0KiBiZSBpbmNsdWRlZC4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGNhbGxlZCB3aGVuIHJlYWRpbmcgYC9wcm9jL3ZtYWxsb2NpbmZvYC4gV2hpbGUgYHNob3dfYnVzeV9pbmZvYCBtaWdodCBiZSBpbmxpbmVkLCBpdCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGUgY29tcGlsZXIgd2lsbCBtb3N0IGxpa2VseSBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYW5kIGl0IHNob3VsZCBiZSBpbmNsdWRlZC4gVGhpcyBpcyBhIG5vbi11YmlxdWl0b3VzIGVudHJ5IHBvaW50LgoKV2Ugc2hvdWxkICpleGNsdWRlKiB0aGUgYF9faW5pdGAgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgbmV2ZXIgcmVhY2hhYmxlIGR1cmluZyBydW50aW1lLgpXZSAqZXhjbHVkZSogZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLgpXZSBzaG91bGQgaW5jbHVkZSBvbmx5IGB2bWFsbG9jX2luZm9fc2hvd2AgYW5kIGBzaG93X2J1c3lfaW5mb2AuCgpJbiBzaG9ydCwgZ2l2ZW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dCwgdGhlIHJlZmFjdG9yaW5nLCB0aGUgcnVudGltZSByZWFjaGFiaWxpdHkgdmlhIGAvcHJvYy92bWFsbG9jaW5mb2AsIGFuZCB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgdGhpcyAqbXVzdCogYmUgZnV6emVkLCBhbmQgYHZtYWxsb2NfaW5mb19zaG93YCBhbmQgYHNob3dfYnVzeV9pbmZvYCBzaG91bGQgYmUgdGhlIEZvY3VzU3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcbmZzL3Byb2MvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGU6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgcHJvY2ZzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGZzL3Byb2MvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIHByb2MgZmlsZXN5c3RlbSBpcyBjb25maWd1cmVkIGluIHRoaXMga2VybmVsLiBGaXJzdCwgSSYjMzk7bSBza2ltbWluZyB0aGUgaW5pdGlhbCBsaW5lcywgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCB0d2VudHksIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBvdmVyYXJjaGluZyBzdHJ1Y3R1cmUgYW5kIGFueSBpbW1lZGlhdGUgY3JpdGljYWwgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIG1haW4gYENPTkZJR19QUk9DX0ZTYCBib29sZWFuLCBwZXJoYXBzIHNvbWUgcmVsYXRlZCBmZWF0dXJlcyB0aGF0IGNhbiBiZSBzZWxlY3RpdmVseSBlbmFibGVkLCBhbmQgdGhlIHVzdWFsIGNvbmRpdGlvbmFsIGJsb2NrcyBnb3Zlcm5pbmcgaW5jbHVzaW9uIGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gTXkgaW5pdGlhbCBwYXNzIHdpbGwgYmUgdG8gaWRlbnRpZnkgYW55IHRvcC1sZXZlbCBkZXBlbmRlbmNpZXMsIGRldGVybWluZSB3aGljaCBvcHRpb25zIGFyZSBjb3JlIHRvIGVuYWJsaW5nIHByb2NmcywgYW5kIHF1aWNrbHkgYXNzZXNzIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3IgcHJlLXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55IGRpcmVjdCByZWZlcmVuY2VzIHRvIG90aGVyIHJlbGV2YW50IEtjb25maWcgZmlsZXMgb3Igc2VjdGlvbnMsIGFzIHRob3NlIHdpbGwgaW5mbHVlbmNlIHRoZSBsYXJnZXIgY29uZmlndXJhdGlvbiBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBpbml0aWFsIGNodW5rIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFBST0NfRlNcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiAgIDQ6XHRcdGRlZmF1bHQgeVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIGlzIGEgdmlydHVhbCBmaWxlIHN5c3RlbSBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1c1xuICAgNzpcdFx0ICBvZiB0aGUgc3lzdGVtLiBcJiMzNDtWaXJ0dWFsXCYjMzQ7IG1lYW5zIHRoYXQgaXQgZG9lc24mIzM5O3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cbiAgIDg6XHRcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxuICAgOTpcdFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcbiAgMTA6XHRcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0JiMzOTtzIHRvdGFsbHkgY29vbDsgZm9yIGV4YW1wbGUsIFwmIzM0O2NhdCAvcHJvYy9pbnRlcnJ1cHRzXCYjMzQ7IGdpdmVzXG4gIDEzOlx0XHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XG4gIDE0Olx0XHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXG4gIDE1Olx0XHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJiMzOTtzIGF0dGVudGlvbiAtLVxuICAxNjpcdFx0ICBvZnRlbiBhIHNvdXJjZSBvZiB0cm91YmxlIGlmIHR3byBkZXZpY2VzIGFyZSBtaXN0YWtlbmx5IGNvbmZpZ3VyZWRcbiAgMTc6XHRcdCAgdG8gdXNlIHRoZSBzYW1lIElSUSkuIFRoZSBwcm9ncmFtIHByb2NpbmZvIHRvIGRpc3BsYXkgc29tZVxuICAxODpcdFx0ICBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHN5c3RlbSBnYXRoZXJlZCBmcm9tIHRoZSAvcHJvYyBmaWxlIHN5c3RlbS5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSAvcHJvYyBmaWxlIHN5c3RlbSwgaXQgaGFzIHRvIGJlIG1vdW50ZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDc5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYENPTkZJR19OVU1BYCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNwZWNpZmljYWxseSwgdGhpcyBgc2hvd19idXN5X2luZm8oKWAgZnVuY3Rpb24uIEkgc2VlIHRoaXMgY29uZGl0aW9uYWwsIGBpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpYCwgYW5kIHRoZSBzdWJzZXF1ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgYGNvdW50ZXJzYC4gVGhlIGNydWNpYWwgY2hhbmdlIGhlcmUgaXMgdGhhdCB0aGUgc2NvcGUgYW5kIGxpZmV0aW1lIG9mIGBjb3VudGVyc2AgaGFzIGJlZW4gYWx0ZXJlZDsgaXQmIzM5O3Mgbm93IGZyZWVkIHdpdGhpbiBgc2hvd19idXN5X2luZm8oKWAgcmF0aGVyIHRoYW4gbGF0ZXIuIFRoaXMgcmVmYWN0b3JpbmcgbWFrZXMgYENPTkZJR19OVU1BYCBhYnNvbHV0ZWx5IHJlbGV2YW50IHRvIHRlc3RpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBiZWNhdXNlIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHdpdGhpbiB0aGUgZnVuY3Rpb24gd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoaXMgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yIHdoZW4gYENPTkZJR19OVU1BYCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgZGlnIGludG8gS2NvbmZpZyBhbmQgc2VlIHdoYXQgYENPTkZJR19OVU1BYCBpcyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5VTUFcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOVU1BIENvbmZpZ3VyYXRpb24gaW4geDg2KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhlIE5VTUEgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSYjMzk7cyBrZXJuZWwgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjZW50cmFsIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZ292ZXJuaW5nIE5VTUEgc3VwcG9ydCwgdGhpbmdzIGxpa2UgdGhlIGJvb3QtdGltZSBwYXJhbWV0ZXJzLCBtZW1vcnkgbm9kZSBhc3NpZ25tZW50cywgYW5kIHJlbGF0ZWQgZmVhdHVyZXMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsIGZpZ3VyZSBvdXQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIsIGFuZCBwaW5wb2ludCB0aGUgc3BlY2lmaWMga25vYnMgSSBuZWVkIHRvIGFkanVzdCBvciB1bmRlcnN0YW5kIGZvciBteSBjdXJyZW50IHRhc2suIFRoaXMgYXBwcm9hY2ggaXMgZWZmaWNpZW50OiBpdCBsZXZlcmFnZXMgbXkgdW5kZXJzdGFuZGluZyBvZiBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgcHJvY2VkdXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5VTUFcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE0ODk9Y29uZmlnIEFNRF9NRU1fRU5DUllQVFxuLS1cbmFyY2gveDg2L0tjb25maWctMTUwNS0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXG5hcmNoL3g4Ni9LY29uZmlnOjE1MDY6Y29uZmlnIE5VTUFcbmFyY2gveDg2L0tjb25maWctMTUwNy1cdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGB2bWFsbG9jLmNgIGRvZXNuJiMzOTt0IHJlcXVpcmUgYW55IHByZXByb2Nlc3NvciBndWFyZHMgd2l0aGluIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIGEgY29tbW9uIG92ZXJzaWdodCwgYW5kIGl0IHdvdWxkIGJlIHJlYWxseSBlbWJhcnJhc3NpbmcgdG8gbWlzcyBzb21ldGhpbmcgbGlrZSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBtbS9NYWtlZmlsZWAgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFsbG9jXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTM3PW1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4tLVxubW0vTWFrZWZpbGUtMzktXHRcdFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXG5tbS9NYWtlZmlsZTo0MDpcdFx0XHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cbm1tL01ha2VmaWxlLTQxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyOAoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiAxMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGBtbS92bWFsbG9jLmNgIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29kZSBpbiBgdm1hbGxvYy5vYCBkZXBlbmRzIG9uIGBDT05GSUdfTU1VYCwgd2hpY2ggaXMgc3RhbmRhcmQgb24geDg2L2FtZDY0LCBzbyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIEluc2lkZSBgbW0vdm1hbGxvYy5jYCwgSSBzZWUgdGhhdCB0aGUgcmVmYWN0b3JlZCBgc2hvd19idXN5X2luZm9gIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgIGFyZSBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1BST0NfRlNgLCBhbmQgYENPTkZJR19OVU1BYCBpcyBjaGVja2VkIHZpYSBgSVNfRU5BQkxFRChDT05GSUdfTlVNQSlgLiBTbywgdGhlIGBFbmFibGVDb25maWdzYCB3aWxsIGRlZmluaXRlbHkgaW5jbHVkZSBgUFJPQ19GU2AgYW5kIGBOVU1BYC4KCk5vdywgdGhlIGNvcmUgcXVlc3Rpb246IGlzIHRoaXMgYFdvcnRoRnV6emluZ2A/IEkgbmVlZCB0byBhcHBseSB0aGUgZnV6emluZyBndWlkZWxpbmVzLiBUaGUgY29yZSBpZGVhIGlzIHJlYWNoYWJpbGl0eTogYW55IG1vZGlmaWVkIGNvZGUgdGhhdCAqY2FuKiBleGVjdXRlIG5lZWRzIGZ1enppbmcuIEFuZCwgdGhlIGd1aWRlbGluZXMgYXJlIHZlcnkgY2xlYXIgYWJvdXQgcmVmYWN0b3JpbmdzLiBUaGlzIGlzIGluIGBtbS9gLCBhIG1lbW9yeSBtYW5hZ2VtZW50IGNvcmUgc3Vic3lzdGVtLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBib3RoIGB2bWFsbG9jX2luZm9fc2hvd2AgYW5kIGBzaG93X2J1c3lfaW5mb2AgYXJlIHJlZmFjdG9yZWQuIFRoZSBmdW5jdGlvbiB3YXMgc3BsaXQsIGFuZCB0aGVyZSYjMzk7cyBhIGxpZmV0aW1lIGNoYW5nZSBvZiB0aGUgYGNvdW50ZXJzYCBhbGxvY2F0ZWQgZm9yIE5VTUEsIG5vdyBmcmVlZCBpbiBgc2hvd19idXN5X2luZm9gLiBSZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2AgdHJpZ2dlcnMgdGhpcyBleGVjdXRpb24gcGF0aC4gVGhhdCYjMzk7cyByZWFjaGFibGUsIG1vZGlmaWVkLCBhbmQgaW4gYSBjb3JlIHN1YnN5c3RlbSwgc28gYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuCgpSZWdhcmRpbmcgYEZvY3VzU3ltYm9sc2AsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgdGFyZ2V0IGZ1bmN0aW9ucyBmb3Igc3l6a2FsbGVyLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gLiBXYWl0LCB0aGVyZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zIHRvbzogYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAsIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAsIGFuZCBgdm1hbGxvY19pbml0YC4KCkxldCYjMzk7cyByZS1yZWFkIHRoZSBzZWN0aW9uLiBJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBBbmQsIHRvIGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocy4gQ2FuIHN5emthbGxlciBmb2N1cyBvbiBgX19pbml0YCBmdW5jdGlvbnM/IE5vLCBzeXprYWxsZXImIzM5O3MgY292ZXJhZ2UgZG9lc24mIzM5O3QgZXh0ZW5kIHRvIGluaXQgc2VjdGlvbnMuIEJ5IHRoZSB0aW1lIHN5emthbGxlciBydW5zLCB0aG9zZSBzZWN0aW9ucyBhcmUgZnJlZWQuIFN5emthbGxlciYjMzk7cyBjb3ZlcmFnZSB3b3VsZG4mIzM5O3QgbWF0Y2ggYW55IHRlc3QgY2FzZXMhIFNvIGBfX2luaXRgIGZ1bmN0aW9ucyBkb24mIzM5O3QgbWF0dGVyIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBIb3dldmVyLCBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSBydW50aW1lIGZ1bmN0aW9ucyB0aGF0IGFyZSBoaXQgd2hlbiBgL3Byb2Mvdm1hbGxvY2luZm9gIGlzIHJlYWQuIFRhcmdldGluZyBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGlzIHN0cmljdGx5IGNvcnJlY3QgYmVjYXVzZSB0aGV5IGFyZSB0aGUgcmVhY2hhYmxlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSBkb24mIzM5O3QgbmVlZCB0byBpbmNsdWRlIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgIGJlY2F1c2UgdGhhdCBpcyBgX19pbml0YCBtYXJrZWQsIGFuZCBtaWdodCBub3QgZXZlbiBiZSBleHBvcnRlZCB0byBrYWxsc3ltcy4KCkxldCYjMzk7cyBkbyBhIGZpbmFsIHNhbml0eSBjaGVjaywgc2Nhbm5pbmcgYG1tL3ZtYWxsb2MuY2AgZm9yIG90aGVyIGNoYW5nZXMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGB2bWFsbG9jX2luZm9fc2hvd2AgKHR3aWNlIC0gb25jZSBhcyB0aGUgb3JpZ2luYWwsIG9uY2UgYXMgYSB3cmFwcGVyKSwgYHNob3dfYnVzeV9pbmZvYCwgYW5kIHRoZSB0aHJlZSBpbml0IGZ1bmN0aW9ucy4gT25seSBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSBub24taW5pdCBmdW5jdGlvbnMgYW5kIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZS4KClRvIHJlY2FwLCB0aGUgcmVxdWlyZWQgY29uZmlncyBhcmUgYFBST0NfRlNgIGFuZCBgTlVNQWAuIEFsbCB0aGUgYW5hbHlzaXMgY29uZmlybXMgZXZlcnl0aGluZyBpcyBjbGVhciBhbmQgYWNjdXJhdGUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hbGxvY19pbmZvX3Nob3cmIzM0OywKICAgICYjMzQ7c2hvd19idXN5X2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSAvcHJvYy92bWFsbG9jaW5mbyBkdW1wIGltcGxlbWVudGF0aW9uIGluIG1tL3ZtYWxsb2MuYyBieSBleHRyYWN0aW5nIHNob3dfYnVzeV9pbmZvKCkgZnJvbSB2bWFsbG9jX2luZm9fc2hvdygpIGFuZCBjaGFuZ2luZyB0aGUgc2NvcGUvbGlmZXRpbWUgb2YgTlVNQSBjb3VudGVyIGFsbG9jYXRpb25zLiBUaGUgY29kZSBpbiBtbS92bWFsbG9jLmMgaXMgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcmVhZGluZyAvcHJvYy92bWFsbG9jaW5mbywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBtZW1vcnkgaGFuZGxpbmcgYnVncywgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYWxsb2NfaW5mb19zaG93JiMzNDssCiAgICAmIzM0O3Nob3dfYnVzeV9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgL3Byb2Mvdm1hbGxvY2luZm8gZHVtcCBpbXBsZW1lbnRhdGlvbiBpbiBtbS92bWFsbG9jLmMgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGZyb20gdm1hbGxvY19pbmZvX3Nob3coKSBhbmQgY2hhbmdpbmcgdGhlIHNjb3BlL2xpZmV0aW1lIG9mIE5VTUEgY291bnRlciBhbGxvY2F0aW9ucy4gVGhlIGNvZGUgaW4gbW0vdm1hbGxvYy5jIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJlYWRpbmcgL3Byb2Mvdm1hbGxvY2luZm8sIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IGhhbmRsaW5nIGJ1Z3MsIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgaW4gbW0vdm1hbGxvYy5jOlxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxuMy4gSW4gX19pbml0IHZtYWxsb2NfaW5pdCgpLCBpdCByZW9yZGVycyB4YV9pbml0KFx1MDAyNnZicS1cdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhkYmVkNTM2NGI1MTVlYzAwMjgyMDQ4YjEwMjgxYjVjNGU2OWNkMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMzoyMzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCA4NTllNmQyZDU3YTM4Li5lMDlkNmM4YzhiMzUzIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC01MzQ1LDcgJiM0Mzs1MzQ1LDcgQEAgc3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQomIzQzO3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKIAlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKQEAgLTU0MTUsMTIgJiM0Mzs1NDE1LDE4IEBAIHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogCQlzcGluX3VubG9jaygmYW1wO3ZuLSZndDtidXN5LmxvY2spOwogCX0KIAomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpCiYjNDM7CQlrZnJlZShjb3VudGVycyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQomIzQzO3sKJiM0MzsJc2hvd19idXN5X2luZm8obSk7CiYjNDM7CiAJLyoKIAkgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgJiMzNDt1bnB1cmdlZCYjMzQ7IGFyZWFzLgogCSAqLwogCXNob3dfcHVyZ2VfaW5mbyhtKTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpCi0JCWtmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTQzMywxMSAmIzQzOzU0MzksMjMgQEAgbW9kdWxlX2luaXQocHJvY192bWFsbG9jX2luaXQpOwogCiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7CiYjNDM7CiYjNDM7CWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewomIzQzOwkJZnJlZS0mZ3Q7dmFfc3RhcnQgPSBzdGFydDsKJiM0MzsJCWZyZWUtJmd0O3ZhX2VuZCA9IGVuZDsKJiM0MzsJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAomIzQzOwkJCQkJICZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKJiM0MzsJCQkJCSAmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2bWFwX3N0YXJ0ID0gMTsKIAljb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYOwotCXN0cnVjdCB2bWFwX2FyZWEgKmZyZWU7CiAJc3RydWN0IHZtX3N0cnVjdCAqYnVzeTsKIAogCS8qCkBAIC01NDQ3LDMyICYjNDM7NTQ2NSwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZCkKIAkgKiAgfCZsdDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mZ3Q7fAogCSAqLwogCWZvciAoYnVzeSA9IHZtbGlzdDsgYnVzeTsgYnVzeSA9IGJ1c3ktJmd0O25leHQpIHsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LSZndDthZGRyIC0gdm1hcF9zdGFydCAmZ3Q7IDApIHsKLQkJCWZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTsKLQkJCWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewotCQkJCWZyZWUtJmd0O3ZhX3N0YXJ0ID0gdm1hcF9zdGFydDsKLQkJCQlmcmVlLSZndDt2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS0mZ3Q7YWRkcjsKLQotCQkJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAotCQkJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX3Jvb3QsCi0JCQkJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QpOwotCQkJfQotCQl9CiYjNDM7CQlpZiAoKHVuc2lnbmVkIGxvbmcpIGJ1c3ktJmd0O2FkZHIgLSB2bWFwX3N0YXJ0ICZndDsgMCkKJiM0MzsJCQl2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwKJiM0MzsJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBidXN5LSZndDthZGRyKTsKIAogCQl2bWFwX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGJ1c3ktJmd0O2FkZHIgJiM0MzsgYnVzeS0mZ3Q7c2l6ZTsKIAl9CiAKLQlpZiAodm1hcF9lbmQgLSB2bWFwX3N0YXJ0ICZndDsgMCkgewotCQlmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7Ci0JCWlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkgewotCQkJZnJlZS0mZ3Q7dmFfc3RhcnQgPSB2bWFwX3N0YXJ0OwotCQkJZnJlZS0mZ3Q7dmFfZW5kID0gdm1hcF9lbmQ7Ci0KLQkJCWluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLAotCQkJCSZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKLQkJCQkJJmFtcDtmcmVlX3ZtYXBfYXJlYV9saXN0KTsKLQkJfQotCX0KJiM0MzsJaWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCAmZ3Q7IDApCiYjNDM7CQl2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCwgdm1hcF9lbmQpOwogfQogCiBzdGF0aWMgdm9pZCB2bWFwX2luaXRfbm9kZXModm9pZCkKQEAgLTU1ODUsMTAgJiM0Mzs1NTg2LDExIEBAIHZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKQogCQl2YnEgPSAmYW1wO3Blcl9jcHUodm1hcF9ibG9ja19xdWV1ZSwgaSk7CiAJCXNwaW5fbG9ja19pbml0KCZhbXA7dmJxLSZndDtsb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDt2YnEtJmd0O2ZyZWUpOwomIzQzOwkJeGFfaW5pdCgmYW1wO3ZicS0mZ3Q7dm1hcF9ibG9ja3MpOwomIzQzOwogCQlwID0gJmFtcDtwZXJfY3B1KHZmcmVlX2RlZmVycmVkLCBpKTsKIAkJaW5pdF9sbGlzdF9oZWFkKCZhbXA7cC0mZ3Q7bGlzdCk7CiAJCUlOSVRfV09SSygmYW1wO3AtJmd0O3dxLCBkZWxheWVkX3ZmcmVlX3dvcmspOwotCQl4YV9pbml0KCZhbXA7dmJxLSZndDt2bWFwX2Jsb2Nrcyk7CiAJfQogCiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2bWFsbG9jLmMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCYjMzk7cyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYCwgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYHZtYWxsb2NfaW5mb19zaG93YC4gVGhlIGRpZmYgbG9va3MgbGlrZSBpdCYjMzk7cyByZXN0cnVjdHVyaW5nIHRoYXQgZnVuY3Rpb24uIEhtbSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGBrZnJlZShjb3VudGVycylgIGF0IHRoZSAqZW5kKiBvZiBgdm1hbGxvY19pbmZvX3Nob3dgLCBidXQgYGNvdW50ZXJzYCB3YXMgYWxsb2NhdGVkIG11Y2ggZWFybGllciBpbnNpZGUgb2YgYHNob3dfYnVzeV9pbmZvYC4gU2VlbXMgYSBiaXQuLi51bndpZWxkeS4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSBleHRyYWN0aW5nIGBzaG93X2J1c3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pYCBhcyBpdHMgb3duIGZ1bmN0aW9uLiBBaCwgSSBzZWUsIHRoZXkmIzM5O3ZlIG1vdmVkIHRoZSBgaWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKSBrZnJlZShjb3VudGVycyk7YCBjYWxsIGludG8gYHNob3dfYnVzeV9pbmZvYCBpdHNlbGYuIFRoYXQgbWFrZXMgc2Vuc2U7IGtlZXBpbmcgdGhlIGBrZnJlZWAgY2FsbCBjbG9zZXIgdG8gd2hlcmUgYGNvdW50ZXJzYCBpcyBhY3R1YWxseSB1c2VkLiBUaGVuLCBgdm1hbGxvY19pbmZvX3Nob3dgIG5vdyBqdXN0IGNhbGxzIGBzaG93X2J1c3lfaW5mb2AgZm9sbG93ZWQgYnkgYHNob3dfcHVyZ2VfaW5mb2AuIE11Y2ggY2xlYW5lciwgbG9naWNhbGx5LgoKSSBzaG91bGQgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBhcm91bmQgbGluZSA1MzQ1LTU0MjAgb2YgYG1tL3ZtYWxsb2MuY2AgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGNoYW5nZXMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIExldCBtZSB1c2UgYHJlYWQtZmlsZWAgdG8gdGFrZSBhIGNsb3NlciBsb29rIGFuZCB2ZXJpZnkgdGhpcyBuZXcgb3JnYW5pemF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzNDU6XHRcdH1cbjUzNDY6XHR9XG41MzQ3Olx0XG41MzQ4Olx0c3RhdGljIHZvaWQgc2hvd19idXN5X2luZm8oc3RydWN0IHNlcV9maWxlICptKVxuNTM0OTpcdHtcbjUzNTA6XHRcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xuNTM1MTpcdFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XG41MzUyOlx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2O1xuNTM1MzpcdFx0dW5zaWduZWQgaW50ICpjb3VudGVycztcbjUzNTQ6XHRcbjUzNTU6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbjUzNTY6XHRcdFx0Y291bnRlcnMgPSBrbWFsbG9jX2FycmF5KG5yX25vZGVfaWRzLCBzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7XG41MzU3Olx0XG41MzU4Olx0XHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbjUzNTk6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG41MzYwOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodmEsIFx1MDAyNnZuLVx1MDAzZWJ1c3kuaGVhZCwgbGlzdCkge1xuNTM2MTpcdFx0XHRcdGlmICghdmEtXHUwMDNldm0pIHtcbjUzNjI6XHRcdFx0XHRcdGlmICh2YS1cdTAwM2VmbGFncyBcdTAwMjYgVk1BUF9SQU0pXG41MzYzOlx0XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglcEstMHglcEsgJTdsZCB2bV9tYXBfcmFtXFxuXCYjMzQ7LFxuNTM2NDpcdFx0XHRcdFx0XHRcdCh2b2lkICopdmEtXHUwMDNldmFfc3RhcnQsICh2b2lkICopdmEtXHUwMDNldmFfZW5kLFxuNTM2NTpcdFx0XHRcdFx0XHRcdHZhX3NpemUodmEpKTtcbjUzNjY6XHRcbjUzNjc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNTM2ODpcdFx0XHRcdH1cbjUzNjk6XHRcbjUzNzA6XHRcdFx0XHR2ID0gdmEtXHUwMDNldm07XG41MzcxOlx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1VOSU5JVElBTElaRUQpXG41MzcyOlx0XHRcdFx0XHRjb250aW51ZTtcbjUzNzM6XHRcbjUzNzQ6XHRcdFx0XHQvKiBQYWlyIHdpdGggc21wX3dtYigpIGluIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZygpICovXG41Mzc1Olx0XHRcdFx0c21wX3JtYigpO1xuNTM3NjpcdFxuNTM3NzpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglcEstMHglcEsgJTdsZFwmIzM0OyxcbjUzNzg6XHRcdFx0XHRcdHYtXHUwMDNlYWRkciwgdi1cdTAwM2VhZGRyICYjNDM7IHYtXHUwMDNlc2l6ZSwgdi1cdTAwM2VzaXplKTtcbjUzNzk6XHRcbjUzODA6XHRcdFx0XHRpZiAodi1cdTAwM2VjYWxsZXIpXG41MzgxOlx0XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyAlcFNcJiMzNDssIHYtXHUwMDNlY2FsbGVyKTtcbjUzODI6XHRcbjUzODM6XHRcdFx0XHRpZiAodi1cdTAwM2Vucl9wYWdlcylcbjUzODQ6XHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7IHBhZ2VzPSVsdVwmIzM0Oywgdi1cdTAwM2Vucl9wYWdlcyk7XG41Mzg1Olx0XG41Mzg2Olx0XHRcdFx0aWYgKHYtXHUwMDNlcGh5c19hZGRyKVxuNTM4NzpcdFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgcGh5cz0lcGFcJiMzNDssIFx1MDAyNnYtXHUwMDNlcGh5c19hZGRyKTtcbjUzODg6XHRcbjUzODk6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fSU9SRU1BUClcbjUzOTA6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyBpb3JlbWFwXCYjMzQ7KTtcbjUzOTE6XHRcbjUzOTI6XHRcdFx0XHRpZiAodi1cdTAwM2VmbGFncyBcdTAwMjYgVk1fU1BBUlNFKVxuNTM5MzpcdFx0XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7IHNwYXJzZVwmIzM0Oyk7XG41Mzk0Olx0XG41Mzk1Olx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX0FMTE9DKVxuNTM5NjpcdFx0XHRcdFx0c2VxX3B1dHMobSwgXCYjMzQ7IHZtYWxsb2NcJiMzNDspO1xuNTM5NzpcdFxuNTM5ODpcdFx0XHRcdGlmICh2LVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9NQVApXG41Mzk5Olx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgdm1hcFwmIzM0Oyk7XG41NDAwOlx0XG41NDAxOlx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1VTRVJNQVApXG41NDAyOlx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgdXNlclwmIzM0Oyk7XG41NDAzOlx0XG41NDA0Olx0XHRcdFx0aWYgKHYtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX0RNQV9DT0hFUkVOVClcbjU0MDU6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0OyBkbWEtY29oZXJlbnRcJiMzNDspO1xuNTQwNjpcdFxuNTQwNzpcdFx0XHRcdGlmIChpc192bWFsbG9jX2FkZHIodi1cdTAwM2VwYWdlcykpXG41NDA4Olx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDsgdnBhZ2VzXCYjMzQ7KTtcbjU0MDk6XHRcbjU0MTA6XHRcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG41NDExOlx0XHRcdFx0XHRzaG93X251bWFfaW5mbyhtLCB2LCBjb3VudGVycyk7XG41NDEyOlx0XG41NDEzOlx0XHRcdFx0c2VxX3B1dGMobSwgJiMzOTtcXG4mIzM5Oyk7XG41NDE0Olx0XHRcdH1cbjU0MTU6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbjU0MTY6XHRcdH1cbjU0MTc6XHRcbjU0MTg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcbjU0MTk6XHRcdFx0a2ZyZWUoY291bnRlcnMpO1xuNTQyMDpcdH1cbjU0MjE6XHRcbjU0MjI6XHRzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbjU0MjM6XHR7XG41NDI0Olx0XHRzaG93X2J1c3lfaW5mbyhtKTtcbjU0MjU6XHRcbjU0MjY6XHRcdC8qXG41NDI3Olx0XHQgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgXCYjMzQ7dW5wdXJnZWRcJiMzNDsgYXJlYXMuXG41NDI4Olx0XHQgKi9cbjU0Mjk6XHRcdHNob3dfcHVyZ2VfaW5mbyhtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBBbmFseXNpczogdm1hbGxvYy5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgdG8gYHZtYWxsb2MuY2AuIFRoaXMgbG9va3MgbGlrZSBzb21lIHN0cmFpZ2h0Zm9yd2FyZCwgdGhvdWdoIHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgcmVmYWN0b3JpbmcuIEZpcnN0LCB0aGUgYHNob3dfYnVzeV9pbmZvYCBmdW5jdGlvbi4gVGhpcyBpcyBwdXJlIGNvZGUgb3JnYW5pemF0aW9uOyB0aGUgYHNob3dfYnVzeV9pbmZvKG0pYCBmdW5jdGlvbiBpcyBleHRyYWN0ZWQgZnJvbSBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGUga2V5IGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIGxvY2FsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBgY291bnRlcnNgIHdpdGhpbiBgc2hvd19idXN5X2luZm9gIG5vdywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBzY29wZS4gUHJldmlvdXNseSBpdCB3YXMgZnJlZWQgYXQgdGhlIGVuZCBvZiB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24sIHdoaWNoIGlzIGEgcGVyZmVjdGx5IGFjY2VwdGFibGUgcHJhY3RpY2UgYnV0IHRoaXMgaXMgYmV0dGVyLgoKVGhlIHNlY29uZCBjaGFuZ2UgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gV2UmIzM5O3JlIGludHJvZHVjaW5nIGEgaGVscGVyIGZ1bmN0aW9uLCBgdm1hcF9pbnNlcnRfZnJlZV9hcmVhYCwgdG8gZGVkdXBsaWNhdGUgY29kZSBpbiBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIG1vdmUgdG8gaW1wcm92ZSByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LiBUaGUgcmVwZWF0ZWQgYGttZW1fY2FjaGVfemFsbG9jYCBhbmQgYGluc2VydF92bWFwX2FyZWFfYXVnbWVudGAgYmxvY2sgaXMgcmVwbGFjZWQgd2l0aCBjYWxscyB0byB0aGlzIG5ldyBoZWxwZXIuIEl0IGxvb2tzIGxpa2UgdGhlIHNhbWUgemVyb2luZyBvZiB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCBpcyBiZWluZyBtYWludGFpbmVkLiBUaGUgdXNlIG9mIGBfX2luaXRgIGhlcmUgdGVsbHMgbWUgdGhpcyBpcyBhbGwgaGFwcGVuaW5nIGF0IGJvb3QgdGltZSwgYW5kIHRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSXQgbWVhbnMgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGRlZHVwbGljYXRpb24gaXMgbWluaW1hbC4KCkZpbmFsbHksIGluIGB2bWFsbG9jX2luaXRgLCB3ZSBoYXZlIGEgc2ltcGxlIHJlb3JkZXJpbmcgb2YgdGhlIGB4YV9pbml0KCZhbXA7dmJxLSZndDt2bWFwX2Jsb2NrcylgIGNhbGwuIEl0JiMzOTtzIG1vdmVkIHRvIGJlIGdyb3VwZWQgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB2YnFgIHN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgbG9va3MgbGlrZSBhIHN0eWxpc3RpYyBjaGFuZ2UsIHRvIGltcHJvdmUgdGhlIGZsb3cgb2YgdGhlIGNvZGUuCgpPdmVyYWxsLCBpdCBzZWVtcyBsaWtlIGEgY2xlYW4gc2V0IG9mIGNoYW5nZXMgZGVzaWduZWQgZm9yIGJldHRlciBvcmdhbml6YXRpb24gYW5kIGNvZGUgY2xhcml0eS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gbGluZXMgNTU4MC01NjAwIG9mIGBtbS92bWFsbG9jLmNgIGp1c3QgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGNoYW5nZXMgb3IgaGlkZGVuIGltcGxpY2F0aW9ucy4gSXQmIzM5O3MgYWx3YXlzIHdpc2UgdG8gZG91YmxlLWNoZWNrLCBidXQgdGhpcyBpbml0aWFsIGFuYWx5c2lzIHN1Z2dlc3RzIGEgd2VsbC1jb25zaWRlcmVkIHNlcmllcyBvZiBpbXByb3ZlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NTgwOlx0XHR2bWFwX2FyZWFfY2FjaGVwID0gS01FTV9DQUNIRSh2bWFwX2FyZWEsIFNMQUJfUEFOSUMpO1xuNTU4MTpcdFxuNTU4MjpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbjU1ODM6XHRcdFx0c3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicTtcbjU1ODQ6XHRcdFx0c3RydWN0IHZmcmVlX2RlZmVycmVkICpwO1xuNTU4NTpcdFxuNTU4NjpcdFx0XHR2YnEgPSBcdTAwMjZwZXJfY3B1KHZtYXBfYmxvY2tfcXVldWUsIGkpO1xuNTU4NzpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ2YnEtXHUwMDNlbG9jayk7XG41NTg4Olx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZicS1cdTAwM2VmcmVlKTtcbjU1ODk6XHRcdFx0eGFfaW5pdChcdTAwMjZ2YnEtXHUwMDNldm1hcF9ibG9ja3MpO1xuNTU5MDpcdFxuNTU5MTpcdFx0XHRwID0gXHUwMDI2cGVyX2NwdSh2ZnJlZV9kZWZlcnJlZCwgaSk7XG41NTkyOlx0XHRcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuNTU5MzpcdFx0XHRJTklUX1dPUksoXHUwMDI2cC1cdTAwM2V3cSwgZGVsYXllZF92ZnJlZV93b3JrKTtcbjU1OTQ6XHRcdH1cbjU1OTU6XHRcbjU1OTY6XHRcdC8qXG41NTk3Olx0XHQgKiBTZXR1cCBub2RlcyBiZWZvcmUgaW1wb3J0aW5nIHZtbGlzdC5cbjU1OTg6XHRcdCAqL1xuNTU5OTpcdFx0dm1hcF9pbml0X25vZGVzKCk7XG41NjAwOlx0XG41NjAxOlx0XHQvKiBJbXBvcnQgZXhpc3Rpbmcgdm1saXN0IGVudHJpZXMuICovXG41NjAyOlx0XHRmb3IgKHRtcCA9IHZtbGlzdDsgdG1wOyB0bXAgPSB0bXAtXHUwMDNlbmV4dCkge1xuNTYwMzpcdFx0XHR2YSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xuNTYwNDpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCF2YSkpXG41NjA1Olx0XHRcdFx0Y29udGludWU7XG41NjA2Olx0XG41NjA3Olx0XHRcdHZhLVx1MDAzZXZhX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdG1wLVx1MDAzZWFkZHI7XG41NjA4Olx0XHRcdHZhLVx1MDAzZXZhX2VuZCA9IHZhLVx1MDAzZXZhX3N0YXJ0ICYjNDM7IHRtcC1cdTAwM2VzaXplO1xuNTYwOTpcdFx0XHR2YS1cdTAwM2V2bSA9IHRtcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU5MQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA0ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogS01TQU4gTm90IE5lZWRlZCoqCgpPa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBkaWZmLCBpdCYjMzk7cyBjbGVhciB0aGF0IEtNU0FOIGlzbiYjMzk7dCB3YXJyYW50ZWQgaGVyZS4gVGhpcyBpcyBhbGwgY2xlYW4gcmVmYWN0b3Jpbmcgd29yay4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgKipgdm1hbGxvY19pbmZvX3Nob3dgKio6IEkgc2VlIHRoZXkmIzM5O3ZlIHRha2VuIHRoZSBidXN5IGluZm8gcHJpbnRpbmcgbG9naWMgYW5kIGlzb2xhdGVkIGl0IGludG8gYSBoZWxwZXIsIGBzaG93X2J1c3lfaW5mb2AuIE1ha2VzIHNlbnNlLiBUaGV5JiMzOTt2ZSBhbHNvIG1vdmVkIHRoZSBmcmVlaW5nIG9mIHRoZSBOVU1BIGNvdW50ZXJzIGJ1ZmZlciBjbG9zZXIgdG8gaXRzIHVzYWdlIGluIHRoYXQgaGVscGVyLiBBIGdvb2QsIHNtYWxsIGltcHJvdmVtZW50IGZvciByZWFkYWJpbGl0eS4KCiogICAqKmB2bWFwX2luaXRfZnJlZV9zcGFjZWAqKjogVGhleSYjMzk7dmUgY2xlYW5lZCB1cCBkdXBsaWNhdGUgY29kZSB3aXRoIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgLiBTbWFydCBtb3ZlLiBBbmQgdGhleSYjMzk7cmUgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCwgc28gd2UmIzM5O3JlIGd1YXJhbnRlZWQgemVyby1pbml0aWFsaXphdGlvbi4gTm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKKiAgICoqYHZtYWxsb2NfaW5pdGAqKjogSnVzdCBhIHJlb3JkZXJpbmcgb2YgYHhhX2luaXQoJmFtcDt2YnEtJmd0O3ZtYXBfYmxvY2tzKWAuIEtlZXBpbmcgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyIGlzIGdvb2QgcHJhY3RpY2UuIE5vIGxvZ2ljIGNoYW5nZXMsIGp1c3QgYSBiZXR0ZXIgY29kZSBzdHJ1Y3R1cmUuCgpUaGUgaW1wb3J0YW50IHRoaW5nIGlzLCBub25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGFueSBvZiB0aGUgS01TQU4tdHJpZ2dlcmluZyBpc3N1ZXM6IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBubyB1bmluaXRpYWxpemVkIGFsbG9jYXRpb25zLCBubyBhbHRlcmF0aW9ucyB0byBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHJlYWRzLCBhbmQgZGVmaW5pdGVseSBubyBpbmZvcm1hdGlvbiBsZWFrcy4gV2UmIzM5O3JlIG5vdCB0b3VjaGluZyBhbnkgdXNlciBjb3B5IG9wZXJhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZldGltZSBpc3N1ZXMgdGhhdCBtaWdodCBjcm9wIHVwLgoKU28sIHRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcsIHdpdGggbm8gbmV3IHJpc2tzLCBhbmQgS01TQU4gaXMgKmZhbHNlKi4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgaW4gbW0vdm1hbGxvYy5jOlxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxuMy4gSW4gX19pbml0IHZtYWxsb2NfaW5pdCgpLCBpdCByZW9yZGVycyB4YV9pbml0KFx1MDAyNnZicS1cdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGluIG1tL3ZtYWxsb2MuYzpcbjEuIEl0IHNwbGl0cyB2bWFsbG9jX2luZm9fc2hvdygpIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBhbmQgZnJlZWluZyB0aGUgdGVtcG9yYXJ5IE5VTUEgY291bnRlcnMgYXJyYXkgZWFybGllciB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cbjIuIEl0IGRlZHVwbGljYXRlcyBmcmVlIHZtYXAgYXJlYSBpbnNlcnRpb24gbG9naWMgaW4gX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiB2bWFwX2luc2VydF9mcmVlX2FyZWEoKSwgd2hpY2ggY29udGludWVzIHRvIGFsbG9jYXRlIHdpdGgga21lbV9jYWNoZV96YWxsb2MoKSBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC5cbjMuIEluIF9faW5pdCB2bWFsbG9jX2luaXQoKSwgaXQgcmVvcmRlcnMgeGFfaW5pdChcdTAwMjZ2YnEtXHUwMDNldm1hcF9ibG9ja3MpIHRvIGdyb3VwIHBlci1DUFUgdmJxIGluaXRpYWxpemF0aW9ucyB0b2dldGhlci5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi4gU3RhbmRhcmQgS0FTQU4vYnVpbGQgY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZWN5Y2xlIGlzc3VlczsgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjIzOjMwLjg0MDIwMzQwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODkyMTA3Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hbGxvY19pbmZvX3Nob3dcIixcbiAgICBcInNob3dfYnVzeV9pbmZvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyBpbiBtbS92bWFsbG9jLmM6XFxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxcbjIuIEl0IGRlZHVwbGljYXRlcyBmcmVlIHZtYXAgYXJlYSBpbnNlcnRpb24gbG9naWMgaW4gX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiB2bWFwX2luc2VydF9mcmVlX2FyZWEoKSwgd2hpY2ggY29udGludWVzIHRvIGFsbG9jYXRlIHdpdGgga21lbV9jYWNoZV96YWxsb2MoKSBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC5cXG4zLiBJbiBfX2luaXQgdm1hbGxvY19pbml0KCksIGl0IHJlb3JkZXJzIHhhX2luaXQoXFx1MDAyNnZicS1cXHUwMDNldm1hcF9ibG9ja3MpIHRvIGdyb3VwIHBlci1DUFUgdmJxIGluaXRpYWxpemF0aW9ucyB0b2dldGhlci5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIC9wcm9jL3ZtYWxsb2NpbmZvIGR1bXAgaW1wbGVtZW50YXRpb24gaW4gbW0vdm1hbGxvYy5jIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBmcm9tIHZtYWxsb2NfaW5mb19zaG93KCkgYW5kIGNoYW5naW5nIHRoZSBzY29wZS9saWZldGltZSBvZiBOVU1BIGNvdW50ZXIgYWxsb2NhdGlvbnMuIFRoZSBjb2RlIGluIG1tL3ZtYWxsb2MuYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByZWFkaW5nIC9wcm9jL3ZtYWxsb2NpbmZvLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBoYW5kbGluZyBidWdzLCBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjM6MzAuODQwMjA5MDM0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg0MzMwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZGJlZDUzNjRiNTE1ZWMwMDI4MjA0OGIxMDI4MWI1YzRlNjljZDEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDAzOjIzOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xcbmluZGV4IDg1OWU2ZDJkNTdhMzguLmUwOWQ2YzhjOGIzNTMgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTUzNDUsNyArNTM0NSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuK3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG4gXFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XFxuQEAgLTU0MTUsMTIgKzU0MTUsMTggQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5sb2NrKTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxcbitcXHRcXHRrZnJlZShjb3VudGVycyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxcbit7XFxuK1xcdHNob3dfYnVzeV9pbmZvKG0pO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFxcXCJ1bnB1cmdlZFxcXCIgYXJlYXMuXFxuIFxcdCAqL1xcbiBcXHRzaG93X3B1cmdlX2luZm8obSk7XFxuLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG4tXFx0XFx0a2ZyZWUoY291bnRlcnMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNTQzMywxMSArNTQzOSwyMyBAQCBtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XFxuIFxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luc2VydF9mcmVlX2FyZWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuK3tcXG4rXFx0c3RydWN0IHZtYXBfYXJlYSAqZnJlZSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xcbitcXG4rXFx0aWYgKCFXQVJOX09OX09OQ0UoIWZyZWUpKSB7XFxuK1xcdFxcdGZyZWUtXFx1MDAzZXZhX3N0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdGZyZWUtXFx1MDAzZXZhX2VuZCA9IGVuZDtcXG4rXFx0XFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcXG4rXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHZtYXBfc3RhcnQgPSAxO1xcbiBcXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYO1xcbi1cXHRzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlO1xcbiBcXHRzdHJ1Y3Qgdm1fc3RydWN0ICpidXN5O1xcbiBcXG4gXFx0LypcXG5AQCAtNTQ0NywzMiArNTQ2NSwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcXG4gXFx0ICogIHxcXHUwMDNjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFx1MDAzZXxcXG4gXFx0ICovXFxuIFxcdGZvciAoYnVzeSA9IHZtbGlzdDsgYnVzeTsgYnVzeSA9IGJ1c3ktXFx1MDAzZW5leHQpIHtcXG4tXFx0XFx0aWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LVxcdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0ZnJlZSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xcbi1cXHRcXHRcXHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcXG4tXFx0XFx0XFx0XFx0ZnJlZS1cXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xcbi1cXHRcXHRcXHRcXHRmcmVlLVxcdTAwM2V2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cXHUwMDNlYWRkcjtcXG4tXFxuLVxcdFxcdFxcdFxcdGluc2VydF92bWFwX2FyZWFfYXVnbWVudChmcmVlLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKCh1bnNpZ25lZCBsb25nKSBidXN5LVxcdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh2bWFwX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAodW5zaWduZWQgbG9uZykgYnVzeS1cXHUwMDNlYWRkcik7XFxuIFxcbiBcXHRcXHR2bWFwX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGJ1c3ktXFx1MDAzZWFkZHIgKyBidXN5LVxcdTAwM2VzaXplO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAodm1hcF9lbmQgLSB2bWFwX3N0YXJ0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XFxuLVxcdFxcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xcbi1cXHRcXHRcXHRmcmVlLVxcdTAwM2V2YV9zdGFydCA9IHZtYXBfc3RhcnQ7XFxuLVxcdFxcdFxcdGZyZWUtXFx1MDAzZXZhX2VuZCA9IHZtYXBfZW5kO1xcbi1cXG4tXFx0XFx0XFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRpZiAodm1hcF9lbmQgLSB2bWFwX3N0YXJ0IFxcdTAwM2UgMClcXG4rXFx0XFx0dm1hcF9pbnNlcnRfZnJlZV9hcmVhKHZtYXBfc3RhcnQsIHZtYXBfZW5kKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdm1hcF9pbml0X25vZGVzKHZvaWQpXFxuQEAgLTU1ODUsMTAgKzU1ODYsMTEgQEAgdm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXFxuIFxcdFxcdHZicSA9IFxcdTAwMjZwZXJfY3B1KHZtYXBfYmxvY2tfcXVldWUsIGkpO1xcbiBcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dmJxLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZicS1cXHUwMDNlZnJlZSk7XFxuK1xcdFxcdHhhX2luaXQoXFx1MDAyNnZicS1cXHUwMDNldm1hcF9ibG9ja3MpO1xcbitcXG4gXFx0XFx0cCA9IFxcdTAwMjZwZXJfY3B1KHZmcmVlX2RlZmVycmVkLCBpKTtcXG4gXFx0XFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZwLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwLVxcdTAwM2V3cSwgZGVsYXllZF92ZnJlZV93b3JrKTtcXG4tXFx0XFx0eGFfaW5pdChcXHUwMDI2dmJxLVxcdTAwM2V2bWFwX2Jsb2Nrcyk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjIzOjMxLjMyOTIzODc5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjAyMzA5OTAwMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFsbG9jX2luZm9fc2hvd1wiLFxuICAgIFwic2hvd19idXN5X2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIC9wcm9jL3ZtYWxsb2NpbmZvIGR1bXAgaW1wbGVtZW50YXRpb24gaW4gbW0vdm1hbGxvYy5jIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBmcm9tIHZtYWxsb2NfaW5mb19zaG93KCkgYW5kIGNoYW5naW5nIHRoZSBzY29wZS9saWZldGltZSBvZiBOVU1BIGNvdW50ZXIgYWxsb2NhdGlvbnMuIFRoZSBjb2RlIGluIG1tL3ZtYWxsb2MuYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByZWFkaW5nIC9wcm9jL3ZtYWxsb2NpbmZvLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBoYW5kbGluZyBidWdzLCBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZGJlZDUzNjRiNTE1ZWMwMDI4MjA0OGIxMDI4MWI1YzRlNjljZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MjM6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDg1OWU2ZDJkNTdhMzguLmUwOWQ2YzhjOGIzNTMgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTUzNDUsNyArNTM0NSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuK3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuQEAgLTU0MTUsMTIgKzU0MTUsMTggQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4gXHR9XG4gXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG4rXHRcdGtmcmVlKGNvdW50ZXJzKTtcbit9XG4rXG4rc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4re1xuK1x0c2hvd19idXN5X2luZm8obSk7XG4rXG4gXHQvKlxuIFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFwidW5wdXJnZWRcIiBhcmVhcy5cbiBcdCAqL1xuIFx0c2hvd19wdXJnZV9pbmZvKG0pO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuLVx0XHRrZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNTQzMywxMSArNTQzOSwyMyBAQCBtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XG4gXG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbit7XG4rXHRzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4rXG4rXHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcbitcdFx0ZnJlZS1cdTAwM2V2YV9zdGFydCA9IHN0YXJ0O1xuK1x0XHRmcmVlLVx1MDAzZXZhX2VuZCA9IGVuZDtcbitcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4rXHRcdFx0XHRcdCBcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuK1x0XHRcdFx0XHQgXHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luaXRfZnJlZV9zcGFjZSh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdm1hcF9zdGFydCA9IDE7XG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYO1xuLVx0c3RydWN0IHZtYXBfYXJlYSAqZnJlZTtcbiBcdHN0cnVjdCB2bV9zdHJ1Y3QgKmJ1c3k7XG4gXG4gXHQvKlxuQEAgLTU0NDcsMzIgKzU0NjUsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpXG4gXHQgKiAgfFx1MDAzYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx1MDAzZXxcbiBcdCAqL1xuIFx0Zm9yIChidXN5ID0gdm1saXN0OyBidXN5OyBidXN5ID0gYnVzeS1cdTAwM2VuZXh0KSB7XG4tXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRcdGZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTtcbi1cdFx0XHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcbi1cdFx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdFx0ZnJlZS1cdTAwM2V2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyO1xuLVxuLVx0XHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXG4tXHRcdFx0XHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbitcdFx0XHR2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCxcbitcdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpIGJ1c3ktXHUwMDNlYWRkcik7XG4gXG4gXHRcdHZtYXBfc3RhcnQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyICsgYnVzeS1cdTAwM2VzaXplO1xuIFx0fVxuIFxuLVx0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4tXHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfZW5kID0gdm1hcF9lbmQ7XG4tXG4tXHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuLVx0XHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbi1cdFx0fVxuLVx0fVxuK1x0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbitcdFx0dm1hcF9pbnNlcnRfZnJlZV9hcmVhKHZtYXBfc3RhcnQsIHZtYXBfZW5kKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdm1hcF9pbml0X25vZGVzKHZvaWQpXG5AQCAtNTU4NSwxMCArNTU4NiwxMSBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbiBcdFx0dmJxID0gXHUwMDI2cGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBpKTtcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmJxLVx1MDAzZWxvY2spO1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2YnEtXHUwMDNlZnJlZSk7XG4rXHRcdHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKTtcbitcbiBcdFx0cCA9IFx1MDAyNnBlcl9jcHUodmZyZWVfZGVmZXJyZWQsIGkpO1xuIFx0XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnAtXHUwMDNld3EsIGRlbGF5ZWRfdmZyZWVfd29yayk7XG4tXHRcdHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKTtcbiBcdH1cbiBcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyMzozMS4zMjkyNDA2NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MjIyMzgxNjAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZtYWxsb2MgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGNoYW5nZXMgYXJlIGFsbCB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdG9yLiBGaXJzdCwgSSBzZWUgYSByZWZhY3RvcmluZyBvZiBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGV5J3ZlIGV4dHJhY3RlZCBgc2hvd19idXN5X2luZm9gIGludG8gaXRzIG93biBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIHJlYWRhYmlsaXR5IGFuZCBwb3RlbnRpYWwgcmV1c2UuIEknbSBub3RpbmcgdGhlIHBsYWNlbWVudCBvZiBga2ZyZWUoY291bnRlcnMpYDsgaXQncyBub3cgaGFuZGxlZCB3aXRoaW4gYHNob3dfYnVzeV9pbmZvYCBiZWZvcmUgdGhlIHJldHVybi4gQ3VyaW91cy4gTm93LCBgdm1hbGxvY19pbmZvX3Nob3dgIGNhbGxzIGBzaG93X2J1c3lfaW5mb2AgYW5kIHRoZW4gYHNob3dfcHVyZ2VfaW5mb2AuIFJpZ2h0LCBhbmQgdGhlbiBpdCByZXR1cm5zLiBJIHdvbmRlciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpjYWxsZWQgZnJvbSo/IE15IGd1ZXNzIGlzIGl0J3MgcmVsYXRlZCB0byB0aGUgYC9wcm9jL3ZtYWxsb2NpbmZvYCBpbnRlcmZhY2UsIHBlcmhhcHMgdGhyb3VnaCBgcHJvY192bWFsbG9jX2luaXRgLlxuXG5OZXh0LCBJIHNlZSBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgLCBpbnRyb2R1Y2VkIHdpdGhpbiBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgLiBJdCdzIGJlaW5nIHVzZWQgdHdpY2UsIGVmZmVjdGl2ZWx5IGRlZHVwbGljYXRpbmcgc29tZSBjb2RlLiBTbWFydC4gQW5kIHRoaXMgaXMgYWxsIG1hcmtlZCBhcyBgX19pbml0YCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS5cblxuRmluYWxseSwgaW4gYHZtYWxsb2NfaW5pdGAsIHRoZXkndmUgbW92ZWQgYHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKWAgKmJlZm9yZSogYGluaXRfbGxpc3RfaGVhZChcdTAwMjZwLVx1MDAzZWxpc3QpYC4gQWxzbyBgX19pbml0YC5cblxuSSdtIHN0aWxsIHRoaW5raW5nIGFib3V0IGBzaG93X2J1c3lfaW5mb2AgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGFyb3VuZCBsaW5lIDUzNDUgaW4gYG1tL3ZtYWxsb2MuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5pbmcgYXJvdW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MDMuNTUzMDU5ODQyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzQwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MzQwOlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JXBLLTB4JXBLICU3bGQgdW5wdXJnZWQgdm1fYXJlYVxcXFxuXFxcIixcXG41MzQxOlxcdFxcdFxcdFxcdFxcdCh2b2lkICopdmEtXFx1MDAzZXZhX3N0YXJ0LCAodm9pZCAqKXZhLVxcdTAwM2V2YV9lbmQsXFxuNTM0MjpcXHRcXHRcXHRcXHRcXHR2YV9zaXplKHZhKSk7XFxuNTM0MzpcXHRcXHRcXHR9XFxuNTM0NDpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dm4tXFx1MDAzZWxhenkubG9jayk7XFxuNTM0NTpcXHRcXHR9XFxuNTM0NjpcXHR9XFxuNTM0NzpcXHRcXG41MzQ4OlxcdHN0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG41MzQ5OlxcdHtcXG41MzUwOlxcdFxcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xcbjUzNTE6XFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XFxuNTM1MjpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2O1xcbjUzNTM6XFx0XFx0dW5zaWduZWQgaW50ICpjb3VudGVycztcXG41MzU0OlxcdFxcbjUzNTU6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxcbjUzNTY6XFx0XFx0XFx0Y291bnRlcnMgPSBrbWFsbG9jX2FycmF5KG5yX25vZGVfaWRzLCBzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7XFxuNTM1NzpcXHRcXG41MzU4OlxcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbjUzNTk6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5sb2NrKTtcXG41MzYwOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmEsIFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5oZWFkLCBsaXN0KSB7XFxuNTM2MTpcXHRcXHRcXHRcXHRpZiAoIXZhLVxcdTAwM2V2bSkge1xcbjUzNjI6XFx0XFx0XFx0XFx0XFx0aWYgKHZhLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNQVBfUkFNKVxcbjUzNjM6XFx0XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiMHglcEstMHglcEsgJTdsZCB2bV9tYXBfcmFtXFxcXG5cXFwiLFxcbjUzNjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0KHZvaWQgKil2YS1cXHUwMDNldmFfc3RhcnQsICh2b2lkICopdmEtXFx1MDAzZXZhX2VuZCxcXG41MzY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHZhX3NpemUodmEpKTtcXG41MzY2OlxcdFxcbjUzNjc6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTM2ODpcXHRcXHRcXHRcXHR9XFxuNTM2OTpcXHRcXG41MzcwOlxcdFxcdFxcdFxcdHYgPSB2YS1cXHUwMDNldm07XFxuNTM3MTpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9VTklOSVRJQUxJWkVEKVxcbjUzNzI6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTM3MzpcXHRcXG41Mzc0OlxcdFxcdFxcdFxcdC8qIFBhaXIgd2l0aCBzbXBfd21iKCkgaW4gY2xlYXJfdm1fdW5pbml0aWFsaXplZF9mbGFnKCkgKi9cXG41Mzc1OlxcdFxcdFxcdFxcdHNtcF9ybWIoKTtcXG41Mzc2OlxcdFxcbjUzNzc6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiMHglcEstMHglcEsgJTdsZFxcXCIsXFxuNTM3ODpcXHRcXHRcXHRcXHRcXHR2LVxcdTAwM2VhZGRyLCB2LVxcdTAwM2VhZGRyICsgdi1cXHUwMDNlc2l6ZSwgdi1cXHUwMDNlc2l6ZSk7XFxuNTM3OTpcXHRcXG41MzgwOlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VjYWxsZXIpXFxuNTM4MTpcXHRcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgJXBTXFxcIiwgdi1cXHUwMDNlY2FsbGVyKTtcXG41MzgyOlxcdFxcbjUzODM6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZW5yX3BhZ2VzKVxcbjUzODQ6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiIHBhZ2VzPSVsdVxcXCIsIHYtXFx1MDAzZW5yX3BhZ2VzKTtcXG41Mzg1OlxcdFxcbjUzODY6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZXBoeXNfYWRkcilcXG41Mzg3OlxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiBwaHlzPSVwYVxcXCIsIFxcdTAwMjZ2LVxcdTAwM2VwaHlzX2FkZHIpO1xcbjUzODg6XFx0XFxuNTM4OTpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9JT1JFTUFQKVxcbjUzOTA6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgXFxcIiBpb3JlbWFwXFxcIik7XFxuNTM5MTpcXHRcXG41MzkyOlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX1NQQVJTRSlcXG41MzkzOlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgc3BhcnNlXFxcIik7XFxuNTM5NDpcXHRcXG41Mzk1OlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX0FMTE9DKVxcbjUzOTY6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgXFxcIiB2bWFsbG9jXFxcIik7XFxuNTM5NzpcXHRcXG41Mzk4OlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX01BUClcXG41Mzk5OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgdm1hcFxcXCIpO1xcbjU0MDA6XFx0XFxuNTQwMTpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9VU0VSTUFQKVxcbjU0MDI6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgXFxcIiB1c2VyXFxcIik7XFxuNTQwMzpcXHRcXG41NDA0OlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX0RNQV9DT0hFUkVOVClcXG41NDA1OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgZG1hLWNvaGVyZW50XFxcIik7XFxuNTQwNjpcXHRcXG41NDA3OlxcdFxcdFxcdFxcdGlmIChpc192bWFsbG9jX2FkZHIodi1cXHUwMDNlcGFnZXMpKVxcbjU0MDg6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgXFxcIiB2cGFnZXNcXFwiKTtcXG41NDA5OlxcdFxcbjU0MTA6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxcbjU0MTE6XFx0XFx0XFx0XFx0XFx0c2hvd19udW1hX2luZm8obSwgdiwgY291bnRlcnMpO1xcbjU0MTI6XFx0XFxuNTQxMzpcXHRcXHRcXHRcXHRzZXFfcHV0YyhtLCAnXFxcXG4nKTtcXG41NDE0OlxcdFxcdFxcdH1cXG41NDE1OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5sb2NrKTtcXG41NDE2OlxcdFxcdH1cXG41NDE3OlxcdFxcbjU0MTg6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxcbjU0MTk6XFx0XFx0XFx0a2ZyZWUoY291bnRlcnMpO1xcbjU0MjA6XFx0fVxcbjU0MjE6XFx0XFxuNTQyMjpcXHRzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcXG41NDIzOlxcdHtcXG41NDI0OlxcdFxcdHNob3dfYnVzeV9pbmZvKG0pO1xcbjU0MjU6XFx0XFxuNTQyNjpcXHRcXHQvKlxcbjU0Mjc6XFx0XFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFxcXCJ1bnB1cmdlZFxcXCIgYXJlYXMuXFxuNTQyODpcXHRcXHQgKi9cXG41NDI5OlxcdFxcdHNob3dfcHVyZ2VfaW5mbyhtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MDMuNTUzMjg2NzIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI0MjgzNzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoYXQgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBgL3Byb2Mvdm1hbGxvY2luZm9gIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGAvcHJvYy92bWFsbG9jaW5mb2AgaXMgcG9wdWxhdGVkLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIHdoZXJlIHdlIGdldCB0aGUgZGV0YWlscyBvbiB2aXJ0dWFsbHkgbWFwcGVkIG1lbW9yeSBhcmVhcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYmFjayB0byB0aGUgYHZtYWxsb2NfaW5mb19zaG93YCBmdW5jdGlvbiwgYXMgdGhhdCdzIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZSBmb3IgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSBkaXNwbGF5ZWQgdGhlcmUuIE5vdywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhhdCBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGZvcm1hdHRpbmcgYW5kIHdyaXRpbmcgdGhhdCBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IGl0J3MgdXNlZC5cblxuTGV0J3MgdXNlIGByZWFkLWZpbGVgIGFuZCBjaGVjayBsaW5lcyA1NDMwLTU0NDUgdG8gY2xhcmlmeSBob3cgYHZtYWxsb2NfaW5mb19zaG93YCBpcyBpbnRlZ3JhdGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI1OjA1Ljc5NjEyODY2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWFsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQyMDpcXHR9XFxuNTQyMTpcXHRcXG41NDIyOlxcdHN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxcbjU0MjM6XFx0e1xcbjU0MjQ6XFx0XFx0c2hvd19idXN5X2luZm8obSk7XFxuNTQyNTpcXHRcXG41NDI2OlxcdFxcdC8qXFxuNTQyNzpcXHRcXHQgKiBBcyBhIGZpbmFsIHN0ZXAsIGR1bXAgXFxcInVucHVyZ2VkXFxcIiBhcmVhcy5cXG41NDI4OlxcdFxcdCAqL1xcbjU0Mjk6XFx0XFx0c2hvd19wdXJnZV9pbmZvKG0pO1xcbjU0MzA6XFx0XFx0cmV0dXJuIDA7XFxuNTQzMTpcXHR9XFxuNTQzMjpcXHRcXG41NDMzOlxcdHN0YXRpYyBpbnQgX19pbml0IHByb2Nfdm1hbGxvY19pbml0KHZvaWQpXFxuNTQzNDpcXHR7XFxuNTQzNTpcXHRcXHRwcm9jX2NyZWF0ZV9zaW5nbGUoXFxcInZtYWxsb2NpbmZvXFxcIiwgMDQwMCwgTlVMTCwgdm1hbGxvY19pbmZvX3Nob3cpO1xcbjU0MzY6XFx0XFx0cmV0dXJuIDA7XFxuNTQzNzpcXHR9XFxuNTQzODpcXHRtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XFxuNTQzOTpcXHRcXG41NDQwOlxcdCNlbmRpZlxcbjU0NDE6XFx0XFxuNTQ0MjpcXHRzdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbnNlcnRfZnJlZV9hcmVhKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbjU0NDM6XFx0e1xcbjU0NDQ6XFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqZnJlZSA9IGttZW1fY2FjaGVfemFsbG9jKHZtYXBfYXJlYV9jYWNoZXAsIEdGUF9OT1dBSVQpO1xcbjU0NDU6XFx0XFxuNTQ0NjpcXHRcXHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcXG41NDQ3OlxcdFxcdFxcdGZyZWUtXFx1MDAzZXZhX3N0YXJ0ID0gc3RhcnQ7XFxuNTQ0ODpcXHRcXHRcXHRmcmVlLVxcdTAwM2V2YV9lbmQgPSBlbmQ7XFxuNTQ0OTpcXHRcXHRcXHRpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnQoZnJlZSwgTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MDUuNzk2MzUwNzQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE3MDg1NzI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgcHJvY192bWFsbG9jX2luaXRgIFN1cnJvdW5kaW5ncyoqXG5cbkFscmlnaHQsIEknbSB6ZXJvaW5nIGluIG9uIGBwcm9jX3ZtYWxsb2NfaW5pdGAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFJpZ2h0IG5vdywgSSBzZWUgYW4gYCNlbmRpZmAgYXQgbGluZSA1NDQwLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW52b2x2ZWQuIFRoZSBmaXJzdCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGNvbnRyb2xzIHRoaXMgYmxvY2suIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIHRoZSBjb3JyZXNwb25kaW5nIGAjaWZkZWZgIG9yIGAjaWZuZGVmYCB0aGF0IGdvdmVybnMgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgdGhpcyBjb2RlLiBMb29raW5nIGJhY2ssIEkgbmVlZCB0byBjaGVjayBsaW5lcyA1MzAwIHRocm91Z2ggNTM0NS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgY29uZGl0aW9uYWwgYmxvY2sgYW5kIHJldmVhbCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgZmVhdHVyZSB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyB0aWVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzA5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNTowNy45NjcyMTE0NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzMDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUzMDA6XFx0XFxuNTMwMTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzAyOlxcdH1cXG41MzAzOlxcdCNlbmRpZlxcbjUzMDQ6XFx0XFxuNTMwNTpcXHQjaWZkZWYgQ09ORklHX1BST0NfRlNcXG41MzA2OlxcdFxcbjUzMDc6XFx0LypcXG41MzA4OlxcdCAqIFByaW50IG51bWJlciBvZiBwYWdlcyBhbGxvY2F0ZWQgb24gZWFjaCBtZW1vcnkgbm9kZS5cXG41MzA5OlxcdCAqXFxuNTMxMDpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCBpZiBDT05GSUdfTlVNQSBpcyBlbmFibGVkXFxuNTMxMTpcXHQgKiBhbmQgVk1fVU5JTklUSUFMSVpFRCBiaXQgaW4gdi1cXHUwMDNlZmxhZ3MgaXMgZGlzYWJsZWQuXFxuNTMxMjpcXHQgKi9cXG41MzEzOlxcdHN0YXRpYyB2b2lkIHNob3dfbnVtYV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZtX3N0cnVjdCAqdixcXG41MzE0OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgKmNvdW50ZXJzKVxcbjUzMTU6XFx0e1xcbjUzMTY6XFx0XFx0dW5zaWduZWQgaW50IHN0ZXAgPSAxVSBcXHUwMDNjXFx1MDAzYyB2bV9hcmVhX3BhZ2Vfb3JkZXIodik7XFxuNTMxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGk7XFxuNTMxODpcXHRcXHR1bnNpZ25lZCBpbnQgbnI7XFxuNTMxOTpcXHRcXG41MzIwOlxcdFxcdGlmICghY291bnRlcnMpXFxuNTMyMTpcXHRcXHRcXHRyZXR1cm47XFxuNTMyMjpcXHRcXG41MzIzOlxcdFxcdG1lbXNldChjb3VudGVycywgMCwgbnJfbm9kZV9pZHMgKiBzaXplb2YodW5zaWduZWQgaW50KSk7XFxuNTMyNDpcXHRcXG41MzI1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB2LVxcdTAwM2Vucl9wYWdlczsgaSArPSBzdGVwKVxcbjUzMjY6XFx0XFx0XFx0Y291bnRlcnNbcGFnZV90b19uaWQodi1cXHUwMDNlcGFnZXNbaV0pXSArPSBzdGVwO1xcbjUzMjc6XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuciwgTl9ISUdIX01FTU9SWSlcXG41MzI4OlxcdFxcdFxcdGlmIChjb3VudGVyc1tucl0pXFxuNTMyOTpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgTiV1PSV1XFxcIiwgbnIsIGNvdW50ZXJzW25yXSk7XFxuNTMzMDpcXHR9XFxuNTMzMTpcXHRcXG41MzMyOlxcdHN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuNTMzMzpcXHR7XFxuNTMzNDpcXHRcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG41MzM1OlxcdFxcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xcbjUzMzY6XFx0XFxuNTMzNzpcXHRcXHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcXG41MzM4OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dm4tXFx1MDAzZWxhenkubG9jayk7XFxuNTMzOTpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCBcXHUwMDI2dm4tXFx1MDAzZWxhenkuaGVhZCwgbGlzdCkge1xcbjUzNDA6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiMHglcEstMHglcEsgJTdsZCB1bnB1cmdlZCB2bV9hcmVhXFxcXG5cXFwiLFxcbjUzNDE6XFx0XFx0XFx0XFx0XFx0KHZvaWQgKil2YS1cXHUwMDNldmFfc3RhcnQsICh2b2lkICopdmEtXFx1MDAzZXZhX2VuZCxcXG41MzQyOlxcdFxcdFxcdFxcdFxcdHZhX3NpemUodmEpKTtcXG41MzQzOlxcdFxcdFxcdH1cXG41MzQ0OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MDcuOTY3NDA4NzUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM5MjQ4MTA4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdm1hbGxvYy5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSByZXN0cnVjdHVyZXMgcGFydHMgb2YgYG1tL3ZtYWxsb2MuY2AsIGFuZCBteSBpbml0aWFsIGltcHVsc2UgaXMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdnVsbmVyYWJpbGl0eS4gTGV0J3Mgc2VlLi4uIEkgY291bGQgdHJ5IHRvIGNoZWNrIHRoZSBnaXQgbG9nLCBidXQgc2luY2UgSSBoYXZlIHRoZSBkaWZmLCBsZXQncyBqdXN0IHVzZSB3aGF0J3MgaW4gZnJvbnQgb2YgbWUuXG5cblRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIGRpZmYgc2VlbXMgdG8gYmUgc3BsaXR0aW5nIHRoZSBgdm1hbGxvY19pbmZvX3Nob3dgIGZ1bmN0aW9uLiBPcmlnaW5hbGx5LCBpdCBzaG93ZWQgYnVzeSBhbmQgcHVyZ2VkIHZtYWxsb2MgYXJlYXMgYW5kIHRoZW4gZnJlZWQgbWVtb3J5LCBidXQgbm93IGl0IGFwcGVhcnMgdGhhdCB0aGUgXCJidXN5XCIgaW5mbyBpcyBoYW5kbGVkIGJ5IGBzaG93X2J1c3lfaW5mb2AgYW5kIGZyZWVkIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgIGlzIGp1c3QgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBPa2F5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBpbiB0ZXJtcyBvZiB3aGF0J3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIEFoLCB5ZXMsIGAvcHJvYy92bWFsbG9jaW5mb2AgLSB0aGF0IGlzIHdoYXQgY2FsbHMgYHZtYWxsb2NfaW5mb19zaG93YC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHN5emthbGxlciBhbmQgYWNjZXNzIHRvIHRoYXQgZmlsZS4gXG5cblRoZSBwZXJtaXNzaW9ucyBsb29rIGxpa2UgaXQncyByZWFkYWJsZSBieSByb290LCB3aGljaCBtZWFucyBpdCBjYW4gYmUgYWNjZXNzZWQgYnkgc3l6a2FsbGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGFib3V0IHRoaXMgdGhvdWdoLCBhcyBpdCBtaWdodCB1c2UgYSB1c2VyIG5hbWVzcGFjZS4gQnV0LCBsaWtlbHkgc3l6a2FsbGVyIGNhbiByZWFkIGAvcHJvYy92bWFsbG9jaW5mb2AgYmVjYXVzZSB0aGUgcHJvY2VzcyBydW5zIGFzIHJvb3QgYW5kIGFsc28gaGFzIGBDQVBfU1lTX0FETUlOYCBpbiBuYW1lc3BhY2VzLCByaWdodD8gT2theSwgc28gaWYgc3l6a2FsbGVyIGNhbiByZWFkIHRoaXMgaW5mbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNoYW5nZSBkb2VzIHRvIHRoZSBvdXRwdXQgb3IgYmVoYXZpb3Igb2YgYC9wcm9jL3ZtYWxsb2NpbmZvYC5cblxuTm93LCB0aGUgb3RoZXIgcGFydCBvZiB0aGUgZGlmZiBoYXMgdG8gZG8gd2l0aCBmcmVlIHZtYXAgYXJlYXMuIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgIGFuZCBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgIGFyZSBib3RoIGluIHRoaXMgcGF0Y2guIEJ1dCB0aGVzZSBmdW5jdGlvbnMgYXJlIGBfX2luaXRgLCB3aGljaCBtZWFucyB0aGV5IGFyZSBvbmx5IGNhbGxlZCBkdXJpbmcga2VybmVsIGluaXRpYWxpemF0aW9uIGFuZCBhcmUgbm90IGFjY2Vzc2libGUgYWZ0ZXIgYm9vdC4gU3l6a2FsbGVyIGNhbm5vdCByZWFjaCB0aGVtLCBzaW5jZSBzeXprYWxsZXIgZG9lc24ndCBzdGFydCB1bnRpbCAqYWZ0ZXIqIHRoZSBrZXJuZWwgaXMgZnVsbHkgdXAuIE15IGFuYWx5c2lzIGhlcmUgbmVlZHMgdG8gY29uc2lkZXIgaWYgdGhlc2UgY291bGQgYmUgY2FsbGVkIGF0IHJ1bnRpbWUsIGJ1dCBJJ2xsIHNlZSB0aGV5IGFyZSBgX19pbml0YCwgc28gdGhleSBhcmUgbm90IHJlYWNoYWJsZSBieSBmdXp6aW5nISBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaWYgdGhpcyBjb3VsZCBzdGlsbCBiZSByZWxldmFudC4gV2FpdCwgc2luY2UgaXQncyBgX19pbml0YCwgdGhpcyBzZWN0aW9uIGlzIG5ldmVyIHRvdWNoZWQgYWdhaW4gYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aG91Z2gsIGJ1dCB0aGF0IGlzIG15IGdlbmVyYWwgdW5kZXJzdGFuZGluZyBvZiBgX19pbml0YC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgZnVuY3Rpb25zIGNhbid0IGJlIGNhbGxlZCBhZnRlciBib290LCBhcyB0aGF0IHdvdWxkIGNvbXBsZXRlbHkgZWxpbWluYXRlIHRoaXMgYXJlYSBvZiB0aGUgcGF0Y2guIE9rYXksIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHN5emthbGxlciByZWFkcyBgL3Byb2Mvdm1hbGxvY2luZm9gLiBTaW5jZSBpdCBpcyAwNDAwLCBJIGJlbGlldmUgc28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MzEuODkyMjIyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNzU4ODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFwX2luc2VydF9mcmVlX2FyZWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTU0Mzg9bW9kdWxlX2luaXQocHJvY192bWFsbG9jX2luaXQpO1xcbi0tXFxubW0vdm1hbGxvYy5jLTU0NDEtXFxubW0vdm1hbGxvYy5jOjU0NDI6c3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5tbS92bWFsbG9jLmMtNTQ0My17XFxuLS1cXG5tbS92bWFsbG9jLmM9NTQ1NT1zdGF0aWMgdm9pZCBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2Uodm9pZClcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDY4LVxcdFxcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cXHUwMDNlYWRkciAtIHZtYXBfc3RhcnQgXFx1MDAzZSAwKVxcbm1tL3ZtYWxsb2MuYzo1NDY5OlxcdFxcdFxcdHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh2bWFwX3N0YXJ0LFxcbm1tL3ZtYWxsb2MuYy01NDcwLVxcdFxcdFxcdFxcdFxcdCAgICAgICh1bnNpZ25lZCBsb25nKSBidXN5LVxcdTAwM2VhZGRyKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDc1LVxcdGlmICh2bWFwX2VuZCAtIHZtYXBfc3RhcnQgXFx1MDAzZSAwKVxcbm1tL3ZtYWxsb2MuYzo1NDc2OlxcdFxcdHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh2bWFwX3N0YXJ0LCB2bWFwX2VuZCk7XFxubW0vdm1hbGxvYy5jLTU0NzctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNTozMy45OTk4MjEzNThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgyNDkyMjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byBWbWFwIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAgaXMgb25seSBldmVyIGNhbGxlZCBmcm9tIGB2bWFwX2luaXRfZnJlZV9zcGFjZWAuIFRoYXQncyBhIHZlcnkgc3BlY2lmaWMgc2NvcGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgd2hlcmUgaXMgKnRoYXQqIGNhbGxlZCBmcm9tPyBTaW5jZSBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgIGlzIGFubm90YXRlZCB3aXRoIGBfX2luaXRgLCBpdCB0ZWxscyBtZSBpdCBpcyBjYWxsZWQgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gQnV0IEkgbmVlZCB0byBjb25maXJtIHdoZXJlIGV4YWN0bHkgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBMZXQncyB0cmFjZSBiYWNrIHRoZSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBleHBlY3QgaXQncyBzb21ldGhpbmcgdGllZCB0byB2aXJ0dWFsIG1lbW9yeSBzZXR1cCwgYnV0IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcHJlY2lzZSBsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNTozNS44MjQ3NDY1ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTQ1MTA3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hcF9pbml0X2ZyZWVfc3BhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTU0NDI9c3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDU0LVxcbm1tL3ZtYWxsb2MuYzo1NDU1OnN0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luaXRfZnJlZV9zcGFjZSh2b2lkKVxcbm1tL3ZtYWxsb2MuYy01NDU2LXtcXG4tLVxcbm1tL3ZtYWxsb2MuYz01NTY5PXZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKVxcbi0tXFxubW0vdm1hbGxvYy5jLTU2MTctXFx0ICovXFxubW0vdm1hbGxvYy5jOjU2MTg6XFx0dm1hcF9pbml0X2ZyZWVfc3BhY2UoKTtcXG5tbS92bWFsbG9jLmMtNTYxOS1cXHR2bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjU6MzcuNTc5MjYzNTk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4ODA3NTIwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgUm9vdHMgb2YgTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gYHZtYXBfaW5pdF9mcmVlX3NwYWNlYC4gVGhhdCBmdW5jdGlvbiBpcyBhcHBhcmVudGx5IG9ubHkgY2FsbGVkIGZyb20gYHZtYWxsb2NfaW5pdCgpYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBwcm9iYWJseSBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIGZyZWUgc3BhY2UgZm9yIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24uIFNpbmNlIGB2bWFsbG9jX2luaXQoKWAgaXMgbWFya2VkIGFzIGBfX2luaXRgLCB0aGF0IHRlbGxzIG1lIGl0J3Mgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBrZXJuZWwncyBpbml0aWFsaXphdGlvbiBwaGFzZS4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2hlcmUqIGB2bWFsbG9jX2luaXQoKWAgaXRzZWxmIGlzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjayB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGluaXRpYWxpemF0aW9uIGNvbnRleHQuIExldCdzIGRpZyBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBgdm1hbGxvY19pbml0YCBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk5NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI1OjQxLjQ2MDAxODM3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4OTg0NzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFsbG9jX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTI2OTI9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjczMC1cXHRkZWJ1Z19vYmplY3RzX21lbV9pbml0KCk7XFxubW0vbW1faW5pdC5jOjI3MzE6XFx0dm1hbGxvY19pbml0KCk7XFxubW0vbW1faW5pdC5jLTI3MzItXFx0LyogSWYgbm8gZGVmZXJyZWQgaW5pdCBwYWdlX2V4dCBub3csIGFzIHZtYXAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgKi9cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMzE2OC0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYWRkIGZpeGVkIGtlcm5lbCB2bSBhcmVhIHRvIHZtbGlzdCBiZWZvcmVcXG5tbS92bWFsbG9jLmM6MzE2OTogKiB2bWFsbG9jX2luaXQoKSBpcyBjYWxsZWQuICBAdm0tXFx1MDAzZWFkZHIsIEB2bS1cXHUwMDNlc2l6ZSwgYW5kIEB2bS1cXHUwMDNlZmxhZ3NcXG5tbS92bWFsbG9jLmMtMzE3MC0gKiBzaG91bGQgY29udGFpbiBwcm9wZXIgdmFsdWVzIGFuZCB0aGUgb3RoZXIgZmllbGRzIHNob3VsZCBiZSB6ZXJvLlxcbi0tXFxubW0vdm1hbGxvYy5jPTMxNzQ9dm9pZCBfX2luaXQgdm1fYXJlYV9hZGRfZWFybHkoc3RydWN0IHZtX3N0cnVjdCAqdm0pXFxuLS1cXG5tbS92bWFsbG9jLmMtMzE5NS0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVnaXN0ZXIga2VybmVsIHZtIGFyZWEgYmVmb3JlXFxubW0vdm1hbGxvYy5jOjMxOTY6ICogdm1hbGxvY19pbml0KCkgaXMgY2FsbGVkLiAgQHZtLVxcdTAwM2VzaXplIGFuZCBAdm0tXFx1MDAzZWZsYWdzIHNob3VsZCBjb250YWluXFxubW0vdm1hbGxvYy5jLTMxOTctICogcHJvcGVyIHZhbHVlcyBvbiBlbnRyeSBhbmQgb3RoZXIgZmllbGRzIHNob3VsZCBiZSB6ZXJvLiAgT24gcmV0dXJuLFxcbi0tXFxubW0vdm1hbGxvYy5jPTU0MjI9c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuLS1cXG5tbS92bWFsbG9jLmMtNTQzMi1cXG5tbS92bWFsbG9jLmM6NTQzMzpzdGF0aWMgaW50IF9faW5pdCBwcm9jX3ZtYWxsb2NfaW5pdCh2b2lkKVxcbm1tL3ZtYWxsb2MuYy01NDM0LXtcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDM3LX1cXG5tbS92bWFsbG9jLmM6NTQzODptb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XFxubW0vdm1hbGxvYy5jLTU0MzktXFxuLS1cXG5tbS92bWFsbG9jLmM9NTU0OD12bWFwX25vZGVfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bWFsbG9jLmMtNTU2OC1cXG5tbS92bWFsbG9jLmM6NTU2OTp2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcXG5tbS92bWFsbG9jLmMtNTU3MC17XFxuLS1cXG5tbS92bWFsbG9jLmMtNTYzMS1cXG5tbS92bWFsbG9jLmM6NTYzMjpzdGF0aWMgaW50IF9faW5pdCB2bWFsbG9jX2luaXRfd29ya3F1ZXVlKHZvaWQpXFxubW0vdm1hbGxvYy5jLTU2MzMte1xcbi0tXFxubW0vdm1hbGxvYy5jLTU2NDYtfVxcbm1tL3ZtYWxsb2MuYzo1NjQ3OmVhcmx5X2luaXRjYWxsKHZtYWxsb2NfaW5pdF93b3JrcXVldWUpO1xcbi0tXFxubW0vdm1hbGxvYy5oLTEwLSNpZmRlZiBDT05GSUdfTU1VXFxubW0vdm1hbGxvYy5oOjExOnZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKTtcXG5tbS92bWFsbG9jLmgtMTItaW50IF9fbXVzdF9jaGVjayB2bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuaD0xNT11bnNpZ25lZCBpbnQgZ2V0X3ZtX2FyZWFfcGFnZV9vcmRlcihjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICp2bSk7XFxubW0vdm1hbGxvYy5oLTE2LSNlbHNlXFxubW0vdm1hbGxvYy5oOjE3OnN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2luaXQodm9pZCkge31cXG5tbS92bWFsbG9jLmgtMTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI1OjQzLjA0OTg3MzQ3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTk3MjYyMjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgdm1hbGxvY2luZm8gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBhZnRlciByZXZpZXdpbmcgdGhlIGNvZGUgZGlmZiwgaXQncyBjbGVhciB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBpbml0aWFsIGBfX2luaXRgIGZ1bmN0aW9ucyBsaWtlIGB2bWFsbG9jX2luaXRgLCBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgLCBhbmQgYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAgYXJlIGlycmVsZXZhbnQgZm9yIHJ1bnRpbWUgZnV6emluZzsgdGhvc2UgYXJlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBUaGUgY3J1Y2lhbCBhc3BlY3QgaXMgdGhlIGNoYW5nZSB0byBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGBzaG93X2J1c3lfaW5mb2AuXG5cblRoZSBwYXRjaCByZWZhY3RvcnMgYC9wcm9jL3ZtYWxsb2NpbmZvYCdzIGRpc3BsYXkgbG9naWMuIFNwZWNpZmljYWxseSwgYHZtYWxsb2NfaW5mb19zaG93YCwgY2FsbGVkIHdoZW4gcmVhZGluZyBmcm9tIGAvcHJvYy92bWFsbG9jaW5mb2AsIG5vdyBjYWxscyBgc2hvd19idXN5X2luZm9gIGFuZCBgc2hvd19wdXJnZV9pbmZvYCBzZXBhcmF0ZWx5LiBUaGUga2V5IGlzIGluIHdoZXJlIGBrZnJlZShjb3VudGVycylgIGlzIGNhbGxlZC4gVGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBgY291bnRlcnNgIGFyZSB3aXRoaW4gdGhlIGBzaG93X2J1c3lfaW5mb2AuIFByZXZpb3VzbHksIGBjb3VudGVyc2AgY291bGQgaGF2ZSBiZWVuIGZyZWVkIGFmdGVyIGBzaG93X3B1cmdlX2luZm9gLCB3aGljaCBjb3VsZCBleHBvc2UgYSBidWcuXG5cbkNydWNpYWxseSwgYC9wcm9jL3ZtYWxsb2NpbmZvYCBpcyByZWFjaGFibGUgYXQgcnVudGltZS4gVGhlIGBwcm9jX2NyZWF0ZV9zaW5nbGVgIGZ1bmN0aW9uIG1ha2VzIHRoaXMgZmlsZSByZWFkYWJsZSBieSByb290LiBTeXprYWxsZXIgcnVucyBhcyByb290LCBzbyBpdCBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzIGNvZGUgcGF0aCBieSBvcGVuaW5nIGFuZCByZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2AuIFRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGRpY3RhdGVzIGZ1enppbmcgYW55IG1vZGlmaWVkIGNvZGUgdGhhdCdzIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBsaWtlIGBtbS92bWFsbG9jLmNgLiBUaGlzIGlzICp0ZXh0Ym9vayogZm9yIFwiV29ydGhGdXp6aW5nPXRydWVcIi5cblxuVGhpcyBmYWxscyB1bmRlcjogXCJSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6IEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cIiBBbHNvLCBcIkNvcmUgU3Vic3lzdGVtczogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLykuLi5cIi4gQmVjYXVzZSB0aGUgY29kZSBpcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2VjdGlvbiwgYG1tL3ZtYWxsb2MuY2AuXG5cbkZ1cnRoZXJtb3JlLCB0aGlzIGNoYW5nZSBpbnZvbHZlcyBhbGxvY2F0aW5nIGEgYGNvdW50ZXJzYCBhcnJheSB3aXRoIGBrbWFsbG9jX2FycmF5YC4gVGhpcyBpcyAqcHJlY2lzZWx5KiB0aGUga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UgdGhhdCBjYW4gdW52ZWlsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGlmIHRyaWdnZXJlZCBjb25jdXJyZW50bHkgd2l0aCBvdGhlciBtZW1vcnkgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIHJlYXJyYW5nZXMgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGNoYW5naW5nIHdoZW4gYGtmcmVlYCBpcyBjYWxsZWQsIGFuZCBpcyB0aGVyZWZvcmUgb2YgaGlnaCBpbnRlcmVzdC4gSXQgaGFzIGFsc28gaW50cm9kdWNlZCBhIG5ldyBgc2hvd19idXN5X2luZm9gIGZ1bmN0aW9uLlxuXG5Ob3csIGZvciBGb2N1c1N5bWJvbHM6XG5cbmB2bWFsbG9jX2luZm9fc2hvd2AgKm11c3QqIGJlIGluY2x1ZGVkLiBJdCdzIHRoZSBlbnRyeSBwb2ludCBjYWxsZWQgd2hlbiByZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2AuIFdoaWxlIGBzaG93X2J1c3lfaW5mb2AgbWlnaHQgYmUgaW5saW5lZCwgaXQgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYHZtYWxsb2NfaW5mb19zaG93YC4gVGhlIGNvbXBpbGVyIHdpbGwgbW9zdCBsaWtlbHkgbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFuZCBpdCBzaG91bGQgYmUgaW5jbHVkZWQuIFRoaXMgaXMgYSBub24tdWJpcXVpdG91cyBlbnRyeSBwb2ludC5cblxuV2Ugc2hvdWxkICpleGNsdWRlKiB0aGUgYF9faW5pdGAgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgbmV2ZXIgcmVhY2hhYmxlIGR1cmluZyBydW50aW1lLlxuV2UgKmV4Y2x1ZGUqIGdlbmVyaWMgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycy5cbldlIHNob3VsZCBpbmNsdWRlIG9ubHkgYHZtYWxsb2NfaW5mb19zaG93YCBhbmQgYHNob3dfYnVzeV9pbmZvYC5cblxuSW4gc2hvcnQsIGdpdmVuIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQsIHRoZSByZWZhY3RvcmluZywgdGhlIHJ1bnRpbWUgcmVhY2hhYmlsaXR5IHZpYSBgL3Byb2Mvdm1hbGxvY2luZm9gLCBhbmQgdGhlIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIHRoaXMgKm11c3QqIGJlIGZ1enplZCwgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AgYW5kIGBzaG93X2J1c3lfaW5mb2Agc2hvdWxkIGJlIHRoZSBGb2N1c1N5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDQ0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjozMy4wMjI0OTg1ODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjE3OTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPQ19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3Byb2MvS2NvbmZpZzoyOmNvbmZpZyBQUk9DX0ZTXFxuZnMvcHJvYy9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiL3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI2OjMzLjQ3NDY4Mzc3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzkxMTg5NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgZnMvcHJvYy9LY29uZmlnYCBmaWxlOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgcHJvY2ZzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBwcm9jIGZpbGVzeXN0ZW0gaXMgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbC4gRmlyc3QsIEknbSBza2ltbWluZyB0aGUgaW5pdGlhbCBsaW5lcywgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCB0d2VudHksIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBvdmVyYXJjaGluZyBzdHJ1Y3R1cmUgYW5kIGFueSBpbW1lZGlhdGUgY3JpdGljYWwgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSB0aGUgbWFpbiBgQ09ORklHX1BST0NfRlNgIGJvb2xlYW4sIHBlcmhhcHMgc29tZSByZWxhdGVkIGZlYXR1cmVzIHRoYXQgY2FuIGJlIHNlbGVjdGl2ZWx5IGVuYWJsZWQsIGFuZCB0aGUgdXN1YWwgY29uZGl0aW9uYWwgYmxvY2tzIGdvdmVybmluZyBpbmNsdXNpb24gYmFzZWQgb24gb3RoZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBNeSBpbml0aWFsIHBhc3Mgd2lsbCBiZSB0byBpZGVudGlmeSBhbnkgdG9wLWxldmVsIGRlcGVuZGVuY2llcywgZGV0ZXJtaW5lIHdoaWNoIG9wdGlvbnMgYXJlIGNvcmUgdG8gZW5hYmxpbmcgcHJvY2ZzLCBhbmQgcXVpY2tseSBhc3Nlc3MgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBvciBwcmUtcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkaXJlY3QgcmVmZXJlbmNlcyB0byBvdGhlciByZWxldmFudCBLY29uZmlnIGZpbGVzIG9yIHNlY3Rpb25zLCBhcyB0aG9zZSB3aWxsIGluZmx1ZW5jZSB0aGUgbGFyZ2VyIGNvbmZpZ3VyYXRpb24gcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhpcyBpbml0aWFsIGNodW5rIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjY6MzUuODY1ODc1OTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFBST0NfRlNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgaXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzXFxuICAgNzpcXHRcXHQgIG9mIHRoZSBzeXN0ZW0uIFxcXCJWaXJ0dWFsXFxcIiBtZWFucyB0aGF0IGl0IGRvZXNuJ3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cXG4gICA4OlxcdFxcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxcbiAgIDk6XFx0XFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcXG4gIDEwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSXQncyB0b3RhbGx5IGNvb2w7IGZvciBleGFtcGxlLCBcXFwiY2F0IC9wcm9jL2ludGVycnVwdHNcXFwiIGdpdmVzXFxuICAxMzpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XFxuICAxNDpcXHRcXHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXFxuICAxNTpcXHRcXHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJ3MgYXR0ZW50aW9uIC0tXFxuICAxNjpcXHRcXHQgIG9mdGVuIGEgc291cmNlIG9mIHRyb3VibGUgaWYgdHdvIGRldmljZXMgYXJlIG1pc3Rha2VubHkgY29uZmlndXJlZFxcbiAgMTc6XFx0XFx0ICB0byB1c2UgdGhlIHNhbWUgSVJRKS4gVGhlIHByb2dyYW0gcHJvY2luZm8gdG8gZGlzcGxheSBzb21lXFxuICAxODpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc3lzdGVtIGdhdGhlcmVkIGZyb20gdGhlIC9wcm9jIGZpbGUgc3lzdGVtLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0sIGl0IGhhcyB0byBiZSBtb3VudGVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjozNS44NjU5NDMyNTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1Nzc2MjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBDT05GSUdfTlVNQWAgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGlzIGBzaG93X2J1c3lfaW5mbygpYCBmdW5jdGlvbi4gSSBzZWUgdGhpcyBjb25kaXRpb25hbCwgYGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlgLCBhbmQgdGhlIHN1YnNlcXVlbnQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBgY291bnRlcnNgLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyB0aGF0IHRoZSBzY29wZSBhbmQgbGlmZXRpbWUgb2YgYGNvdW50ZXJzYCBoYXMgYmVlbiBhbHRlcmVkOyBpdCdzIG5vdyBmcmVlZCB3aXRoaW4gYHNob3dfYnVzeV9pbmZvKClgIHJhdGhlciB0aGFuIGxhdGVyLiBUaGlzIHJlZmFjdG9yaW5nIG1ha2VzIGBDT05GSUdfTlVNQWAgYWJzb2x1dGVseSByZWxldmFudCB0byB0ZXN0aW5nIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggYmVjYXVzZSB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyB3aXRoaW4gdGhlIGZ1bmN0aW9uIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGlzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoZSBiZWhhdmlvciB3aGVuIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZC4gTGV0J3MgZGlnIGludG8gS2NvbmZpZyBhbmQgc2VlIHdoYXQgYENPTkZJR19OVU1BYCBpcyBhbGwgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDc5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjY6MzcuOTIzNzA4MjI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc5NzY4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI2OjM3Ljk3NDUxMjM3OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTg5OTIxNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTlVNQSBDb25maWd1cmF0aW9uIGluIHg4NioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3Mgb24gdGhlIE5VTUEgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSdzIGtlcm5lbCBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gYGFyY2gveDg2L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY2VudHJhbCBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGdvdmVybmluZyBOVU1BIHN1cHBvcnQsIHRoaW5ncyBsaWtlIHRoZSBib290LXRpbWUgcGFyYW1ldGVycywgbWVtb3J5IG5vZGUgYXNzaWdubWVudHMsIGFuZCByZWxhdGVkIGZlYXR1cmVzLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gd29yayB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsIGZpZ3VyZSBvdXQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIsIGFuZCBwaW5wb2ludCB0aGUgc3BlY2lmaWMga25vYnMgSSBuZWVkIHRvIGFkanVzdCBvciB1bmRlcnN0YW5kIGZvciBteSBjdXJyZW50IHRhc2suIFRoaXMgYXBwcm9hY2ggaXMgZWZmaWNpZW50OiBpdCBsZXZlcmFnZXMgbXkgdW5kZXJzdGFuZGluZyBvZiBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgcHJvY2VkdXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjo0My45NjQ0Mzc2NTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTM0NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVU1BXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xNDg5PWNvbmZpZyBBTURfTUVNX0VOQ1JZUFRcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTUwNS0jIENvbW1vbiBOVU1BIEZlYXR1cmVzXFxuYXJjaC94ODYvS2NvbmZpZzoxNTA2OmNvbmZpZyBOVU1BXFxuYXJjaC94ODYvS2NvbmZpZy0xNTA3LVxcdGJvb2wgXFxcIk5VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjo0NC4wMzA5ODAwNzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ4ODY0NzY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBoZXJlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGB2bWFsbG9jLmNgIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcHJlcHJvY2Vzc29yIGd1YXJkcyB3aXRoaW4gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyBhIGNvbW1vbiBvdmVyc2lnaHQsIGFuZCBpdCB3b3VsZCBiZSByZWFsbHkgZW1iYXJyYXNzaW5nIHRvIG1pc3Mgc29tZXRoaW5nIGxpa2UgdGhhdC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBtbS9NYWtlZmlsZWAgcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc1MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI2OjQ1LjUxOTYzMDUxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODIxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hbGxvY1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0zNz1tbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtMzktXFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG5tbS9NYWtlZmlsZTo0MDpcXHRcXHRcXHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cXG5tbS9NYWtlZmlsZS00MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjY6NDUuNTY1NTIyMDM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgwMDI4NzAxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYG1tL3ZtYWxsb2MuY2AgUGF0Y2ggZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29kZSBpbiBgdm1hbGxvYy5vYCBkZXBlbmRzIG9uIGBDT05GSUdfTU1VYCwgd2hpY2ggaXMgc3RhbmRhcmQgb24geDg2L2FtZDY0LCBzbyB0aGF0J3MgYSBnaXZlbi4gSW5zaWRlIGBtbS92bWFsbG9jLmNgLCBJIHNlZSB0aGF0IHRoZSByZWZhY3RvcmVkIGBzaG93X2J1c3lfaW5mb2AgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AgYXJlIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AsIGFuZCBgQ09ORklHX05VTUFgIGlzIGNoZWNrZWQgdmlhIGBJU19FTkFCTEVEKENPTkZJR19OVU1BKWAuIFNvLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgZGVmaW5pdGVseSBpbmNsdWRlIGBQUk9DX0ZTYCBhbmQgYE5VTUFgLlxuXG5Ob3csIHRoZSBjb3JlIHF1ZXN0aW9uOiBpcyB0aGlzIGBXb3J0aEZ1enppbmdgPyBJIG5lZWQgdG8gYXBwbHkgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gVGhlIGNvcmUgaWRlYSBpcyByZWFjaGFiaWxpdHk6IGFueSBtb2RpZmllZCBjb2RlIHRoYXQgKmNhbiogZXhlY3V0ZSBuZWVkcyBmdXp6aW5nLiBBbmQsIHRoZSBndWlkZWxpbmVzIGFyZSB2ZXJ5IGNsZWFyIGFib3V0IHJlZmFjdG9yaW5ncy4gVGhpcyBpcyBpbiBgbW0vYCwgYSBtZW1vcnkgbWFuYWdlbWVudCBjb3JlIHN1YnN5c3RlbS4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYm90aCBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSByZWZhY3RvcmVkLiBUaGUgZnVuY3Rpb24gd2FzIHNwbGl0LCBhbmQgdGhlcmUncyBhIGxpZmV0aW1lIGNoYW5nZSBvZiB0aGUgYGNvdW50ZXJzYCBhbGxvY2F0ZWQgZm9yIE5VTUEsIG5vdyBmcmVlZCBpbiBgc2hvd19idXN5X2luZm9gLiBSZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2AgdHJpZ2dlcnMgdGhpcyBleGVjdXRpb24gcGF0aC4gVGhhdCdzIHJlYWNoYWJsZSwgbW9kaWZpZWQsIGFuZCBpbiBhIGNvcmUgc3Vic3lzdGVtLCBzbyBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC5cblxuUmVnYXJkaW5nIGBGb2N1c1N5bWJvbHNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHRhcmdldCBmdW5jdGlvbnMgZm9yIHN5emthbGxlci4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYHZtYWxsb2NfaW5mb19zaG93YCBhbmQgYHNob3dfYnVzeV9pbmZvYC4gV2FpdCwgdGhlcmUgYXJlIGBfX2luaXRgIGZ1bmN0aW9ucyB0b286IGB2bWFwX2luc2VydF9mcmVlX2FyZWFgLCBgdm1hcF9pbml0X2ZyZWVfc3BhY2VgLCBhbmQgYHZtYWxsb2NfaW5pdGAuXG5cbkxldCdzIHJlLXJlYWQgdGhlIHNlY3Rpb24uIEkgbmVlZCB0byBmb2N1cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIEFuZCwgdG8gYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLiBDYW4gc3l6a2FsbGVyIGZvY3VzIG9uIGBfX2luaXRgIGZ1bmN0aW9ucz8gTm8sIHN5emthbGxlcidzIGNvdmVyYWdlIGRvZXNuJ3QgZXh0ZW5kIHRvIGluaXQgc2VjdGlvbnMuIEJ5IHRoZSB0aW1lIHN5emthbGxlciBydW5zLCB0aG9zZSBzZWN0aW9ucyBhcmUgZnJlZWQuIFN5emthbGxlcidzIGNvdmVyYWdlIHdvdWxkbid0IG1hdGNoIGFueSB0ZXN0IGNhc2VzISBTbyBgX19pbml0YCBmdW5jdGlvbnMgZG9uJ3QgbWF0dGVyIGluIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBIb3dldmVyLCBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSBydW50aW1lIGZ1bmN0aW9ucyB0aGF0IGFyZSBoaXQgd2hlbiBgL3Byb2Mvdm1hbGxvY2luZm9gIGlzIHJlYWQuIFRhcmdldGluZyBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGlzIHN0cmljdGx5IGNvcnJlY3QgYmVjYXVzZSB0aGV5IGFyZSB0aGUgcmVhY2hhYmxlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAgYmVjYXVzZSB0aGF0IGlzIGBfX2luaXRgIG1hcmtlZCwgYW5kIG1pZ2h0IG5vdCBldmVuIGJlIGV4cG9ydGVkIHRvIGthbGxzeW1zLlxuXG5MZXQncyBkbyBhIGZpbmFsIHNhbml0eSBjaGVjaywgc2Nhbm5pbmcgYG1tL3ZtYWxsb2MuY2AgZm9yIG90aGVyIGNoYW5nZXMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGB2bWFsbG9jX2luZm9fc2hvd2AgKHR3aWNlIC0gb25jZSBhcyB0aGUgb3JpZ2luYWwsIG9uY2UgYXMgYSB3cmFwcGVyKSwgYHNob3dfYnVzeV9pbmZvYCwgYW5kIHRoZSB0aHJlZSBpbml0IGZ1bmN0aW9ucy4gT25seSBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19idXN5X2luZm9gIGFyZSBub24taW5pdCBmdW5jdGlvbnMgYW5kIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZS5cblxuVG8gcmVjYXAsIHRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBgUFJPQ19GU2AgYW5kIGBOVU1BYC4gQWxsIHRoZSBhbmFseXNpcyBjb25maXJtcyBldmVyeXRoaW5nIGlzIGNsZWFyIGFuZCBhY2N1cmF0ZS4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMjgsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjo1My41NjgzOTQ2MDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDc0MDQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYWxsb2NfaW5mb19zaG93XCIsXG4gICAgXCJzaG93X2J1c3lfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgL3Byb2Mvdm1hbGxvY2luZm8gZHVtcCBpbXBsZW1lbnRhdGlvbiBpbiBtbS92bWFsbG9jLmMgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGZyb20gdm1hbGxvY19pbmZvX3Nob3coKSBhbmQgY2hhbmdpbmcgdGhlIHNjb3BlL2xpZmV0aW1lIG9mIE5VTUEgY291bnRlciBhbGxvY2F0aW9ucy4gVGhlIGNvZGUgaW4gbW0vdm1hbGxvYy5jIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJlYWRpbmcgL3Byb2Mvdm1hbGxvY2luZm8sIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgbWVtb3J5IGhhbmRsaW5nIGJ1Z3MsIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFsbG9jX2luZm9fc2hvd1wiLFxuICAgIFwic2hvd19idXN5X2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIC9wcm9jL3ZtYWxsb2NpbmZvIGR1bXAgaW1wbGVtZW50YXRpb24gaW4gbW0vdm1hbGxvYy5jIGJ5IGV4dHJhY3Rpbmcgc2hvd19idXN5X2luZm8oKSBmcm9tIHZtYWxsb2NfaW5mb19zaG93KCkgYW5kIGNoYW5naW5nIHRoZSBzY29wZS9saWZldGltZSBvZiBOVU1BIGNvdW50ZXIgYWxsb2NhdGlvbnMuIFRoZSBjb2RlIGluIG1tL3ZtYWxsb2MuYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSByZWFkaW5nIC9wcm9jL3ZtYWxsb2NpbmZvLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIG1lbW9yeSBoYW5kbGluZyBidWdzLCBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6MjY6NTMuNjM5MTQzMTI0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjEyMjExOTk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI2OjUzLjYzOTY1NTk0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2MTIxNjAwNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyBpbiBtbS92bWFsbG9jLmM6XFxuMS4gSXQgc3BsaXRzIHZtYWxsb2NfaW5mb19zaG93KCkgYnkgZXh0cmFjdGluZyBzaG93X2J1c3lfaW5mbygpIGFuZCBmcmVlaW5nIHRoZSB0ZW1wb3JhcnkgTlVNQSBjb3VudGVycyBhcnJheSBlYXJsaWVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxcbjIuIEl0IGRlZHVwbGljYXRlcyBmcmVlIHZtYXAgYXJlYSBpbnNlcnRpb24gbG9naWMgaW4gX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiB2bWFwX2luc2VydF9mcmVlX2FyZWEoKSwgd2hpY2ggY29udGludWVzIHRvIGFsbG9jYXRlIHdpdGgga21lbV9jYWNoZV96YWxsb2MoKSBlbnN1cmluZyBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC5cXG4zLiBJbiBfX2luaXQgdm1hbGxvY19pbml0KCksIGl0IHJlb3JkZXJzIHhhX2luaXQoXFx1MDAyNnZicS1cXHUwMDNldm1hcF9ibG9ja3MpIHRvIGdyb3VwIHBlci1DUFUgdmJxIGluaXRpYWxpemF0aW9ucyB0b2dldGhlci5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLiBTdGFuZGFyZCBLQVNBTi9idWlsZCBjaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzOyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZGJlZDUzNjRiNTE1ZWMwMDI4MjA0OGIxMDI4MWI1YzRlNjljZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDM6MjM6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDg1OWU2ZDJkNTdhMzguLmUwOWQ2YzhjOGIzNTMgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTUzNDUsNyArNTM0NSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxuK3N0YXRpYyB2b2lkIHNob3dfYnVzeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuQEAgLTU0MTUsMTIgKzU0MTUsMTggQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4gXHR9XG4gXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG4rXHRcdGtmcmVlKGNvdW50ZXJzKTtcbit9XG4rXG4rc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXG4re1xuK1x0c2hvd19idXN5X2luZm8obSk7XG4rXG4gXHQvKlxuIFx0ICogQXMgYSBmaW5hbCBzdGVwLCBkdW1wIFwidW5wdXJnZWRcIiBhcmVhcy5cbiBcdCAqL1xuIFx0c2hvd19wdXJnZV9pbmZvKG0pO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxuLVx0XHRrZnJlZShjb3VudGVycyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNTQzMywxMSArNTQzOSwyMyBAQCBtb2R1bGVfaW5pdChwcm9jX3ZtYWxsb2NfaW5pdCk7XG4gXG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbit7XG4rXHRzdHJ1Y3Qgdm1hcF9hcmVhICpmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4rXG4rXHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcbitcdFx0ZnJlZS1cdTAwM2V2YV9zdGFydCA9IHN0YXJ0O1xuK1x0XHRmcmVlLVx1MDAzZXZhX2VuZCA9IGVuZDtcbitcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4rXHRcdFx0XHRcdCBcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuK1x0XHRcdFx0XHQgXHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9faW5pdCB2bWFwX2luaXRfZnJlZV9zcGFjZSh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdm1hcF9zdGFydCA9IDE7XG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYXBfZW5kID0gVUxPTkdfTUFYO1xuLVx0c3RydWN0IHZtYXBfYXJlYSAqZnJlZTtcbiBcdHN0cnVjdCB2bV9zdHJ1Y3QgKmJ1c3k7XG4gXG4gXHQvKlxuQEAgLTU0NDcsMzIgKzU0NjUsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtYXBfaW5pdF9mcmVlX3NwYWNlKHZvaWQpXG4gXHQgKiAgfFx1MDAzYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx1MDAzZXxcbiBcdCAqL1xuIFx0Zm9yIChidXN5ID0gdm1saXN0OyBidXN5OyBidXN5ID0gYnVzeS1cdTAwM2VuZXh0KSB7XG4tXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRcdGZyZWUgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfTk9XQUlUKTtcbi1cdFx0XHRpZiAoIVdBUk5fT05fT05DRSghZnJlZSkpIHtcbi1cdFx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdFx0ZnJlZS1cdTAwM2V2YV9lbmQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyO1xuLVxuLVx0XHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXG4tXHRcdFx0XHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRcdGlmICgodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbitcdFx0XHR2bWFwX2luc2VydF9mcmVlX2FyZWEodm1hcF9zdGFydCxcbitcdFx0XHRcdFx0ICAgICAgKHVuc2lnbmVkIGxvbmcpIGJ1c3ktXHUwMDNlYWRkcik7XG4gXG4gXHRcdHZtYXBfc3RhcnQgPSAodW5zaWduZWQgbG9uZykgYnVzeS1cdTAwM2VhZGRyICsgYnVzeS1cdTAwM2VzaXplO1xuIFx0fVxuIFxuLVx0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMCkge1xuLVx0XHRmcmVlID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XG4tXHRcdGlmICghV0FSTl9PTl9PTkNFKCFmcmVlKSkge1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfc3RhcnQgPSB2bWFwX3N0YXJ0O1xuLVx0XHRcdGZyZWUtXHUwMDNldmFfZW5kID0gdm1hcF9lbmQ7XG4tXG4tXHRcdFx0aW5zZXJ0X3ZtYXBfYXJlYV9hdWdtZW50KGZyZWUsIE5VTEwsXG4tXHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuLVx0XHRcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbi1cdFx0fVxuLVx0fVxuK1x0aWYgKHZtYXBfZW5kIC0gdm1hcF9zdGFydCBcdTAwM2UgMClcbitcdFx0dm1hcF9pbnNlcnRfZnJlZV9hcmVhKHZtYXBfc3RhcnQsIHZtYXBfZW5kKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdm1hcF9pbml0X25vZGVzKHZvaWQpXG5AQCAtNTU4NSwxMCArNTU4NiwxMSBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbiBcdFx0dmJxID0gXHUwMDI2cGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBpKTtcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmJxLVx1MDAzZWxvY2spO1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2YnEtXHUwMDNlZnJlZSk7XG4rXHRcdHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKTtcbitcbiBcdFx0cCA9IFx1MDAyNnBlcl9jcHUodmZyZWVfZGVmZXJyZWQsIGkpO1xuIFx0XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnAtXHUwMDNld3EsIGRlbGF5ZWRfdmZyZWVfd29yayk7XG4tXHRcdHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKTtcbiBcdH1cbiBcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNjo1My42Mzk2NTg2NjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMyODA4NjY1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2bWFsbG9jLmMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYCwgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsLiBJJ20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGUgZGlmZiBsb29rcyBsaWtlIGl0J3MgcmVzdHJ1Y3R1cmluZyB0aGF0IGZ1bmN0aW9uLiBIbW0sIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBga2ZyZWUoY291bnRlcnMpYCBhdCB0aGUgKmVuZCogb2YgYHZtYWxsb2NfaW5mb19zaG93YCwgYnV0IGBjb3VudGVyc2Agd2FzIGFsbG9jYXRlZCBtdWNoIGVhcmxpZXIgaW5zaWRlIG9mIGBzaG93X2J1c3lfaW5mb2AuIFNlZW1zIGEgYml0Li4udW53aWVsZHkuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBleHRyYWN0aW5nIGBzaG93X2J1c3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pYCBhcyBpdHMgb3duIGZ1bmN0aW9uLiBBaCwgSSBzZWUsIHRoZXkndmUgbW92ZWQgdGhlIGBpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpIGtmcmVlKGNvdW50ZXJzKTtgIGNhbGwgaW50byBgc2hvd19idXN5X2luZm9gIGl0c2VsZi4gVGhhdCBtYWtlcyBzZW5zZTsga2VlcGluZyB0aGUgYGtmcmVlYCBjYWxsIGNsb3NlciB0byB3aGVyZSBgY291bnRlcnNgIGlzIGFjdHVhbGx5IHVzZWQuIFRoZW4sIGB2bWFsbG9jX2luZm9fc2hvd2Agbm93IGp1c3QgY2FsbHMgYHNob3dfYnVzeV9pbmZvYCBmb2xsb3dlZCBieSBgc2hvd19wdXJnZV9pbmZvYC4gTXVjaCBjbGVhbmVyLCBsb2dpY2FsbHkuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gYXJvdW5kIGxpbmUgNTM0NS01NDIwIG9mIGBtbS92bWFsbG9jLmNgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBjaGFuZ2VzIG9yIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBMZXQgbWUgdXNlIGByZWFkLWZpbGVgIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhbmQgdmVyaWZ5IHRoaXMgbmV3IG9yZ2FuaXphdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI3OjI2LjkyMDUyODkxM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQwODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNDUsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUzNDU6XFx0XFx0fVxcbjUzNDY6XFx0fVxcbjUzNDc6XFx0XFxuNTM0ODpcXHRzdGF0aWMgdm9pZCBzaG93X2J1c3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuNTM0OTpcXHR7XFxuNTM1MDpcXHRcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG41MzUxOlxcdFxcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xcbjUzNTI6XFx0XFx0c3RydWN0IHZtX3N0cnVjdCAqdjtcXG41MzUzOlxcdFxcdHVuc2lnbmVkIGludCAqY291bnRlcnM7XFxuNTM1NDpcXHRcXG41MzU1OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG41MzU2OlxcdFxcdFxcdGNvdW50ZXJzID0ga21hbGxvY19hcnJheShucl9ub2RlX2lkcywgc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpO1xcbjUzNTc6XFx0XFxuNTM1ODpcXHRcXHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcXG41MzU5OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dm4tXFx1MDAzZWJ1c3kubG9jayk7XFxuNTM2MDpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCBcXHUwMDI2dm4tXFx1MDAzZWJ1c3kuaGVhZCwgbGlzdCkge1xcbjUzNjE6XFx0XFx0XFx0XFx0aWYgKCF2YS1cXHUwMDNldm0pIHtcXG41MzYyOlxcdFxcdFxcdFxcdFxcdGlmICh2YS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTUFQX1JBTSlcXG41MzYzOlxcdFxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JXBLLTB4JXBLICU3bGQgdm1fbWFwX3JhbVxcXFxuXFxcIixcXG41MzY0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCh2b2lkICopdmEtXFx1MDAzZXZhX3N0YXJ0LCAodm9pZCAqKXZhLVxcdTAwM2V2YV9lbmQsXFxuNTM2NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHR2YV9zaXplKHZhKSk7XFxuNTM2NjpcXHRcXG41MzY3OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUzNjg6XFx0XFx0XFx0XFx0fVxcbjUzNjk6XFx0XFxuNTM3MDpcXHRcXHRcXHRcXHR2ID0gdmEtXFx1MDAzZXZtO1xcbjUzNzE6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fVU5JTklUSUFMSVpFRClcXG41MzcyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUzNzM6XFx0XFxuNTM3NDpcXHRcXHRcXHRcXHQvKiBQYWlyIHdpdGggc21wX3dtYigpIGluIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZygpICovXFxuNTM3NTpcXHRcXHRcXHRcXHRzbXBfcm1iKCk7XFxuNTM3NjpcXHRcXG41Mzc3OlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JXBLLTB4JXBLICU3bGRcXFwiLFxcbjUzNzg6XFx0XFx0XFx0XFx0XFx0di1cXHUwMDNlYWRkciwgdi1cXHUwMDNlYWRkciArIHYtXFx1MDAzZXNpemUsIHYtXFx1MDAzZXNpemUpO1xcbjUzNzk6XFx0XFxuNTM4MDpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlY2FsbGVyKVxcbjUzODE6XFx0XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiICVwU1xcXCIsIHYtXFx1MDAzZWNhbGxlcik7XFxuNTM4MjpcXHRcXG41MzgzOlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2Vucl9wYWdlcylcXG41Mzg0OlxcdFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiBwYWdlcz0lbHVcXFwiLCB2LVxcdTAwM2Vucl9wYWdlcyk7XFxuNTM4NTpcXHRcXG41Mzg2OlxcdFxcdFxcdFxcdGlmICh2LVxcdTAwM2VwaHlzX2FkZHIpXFxuNTM4NzpcXHRcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgcGh5cz0lcGFcXFwiLCBcXHUwMDI2di1cXHUwMDNlcGh5c19hZGRyKTtcXG41Mzg4OlxcdFxcbjUzODk6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fSU9SRU1BUClcXG41MzkwOlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgaW9yZW1hcFxcXCIpO1xcbjUzOTE6XFx0XFxuNTM5MjpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9TUEFSU0UpXFxuNTM5MzpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBcXFwiIHNwYXJzZVxcXCIpO1xcbjUzOTQ6XFx0XFxuNTM5NTpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9BTExPQylcXG41Mzk2OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgdm1hbGxvY1xcXCIpO1xcbjUzOTc6XFx0XFxuNTM5ODpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9NQVApXFxuNTM5OTpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBcXFwiIHZtYXBcXFwiKTtcXG41NDAwOlxcdFxcbjU0MDE6XFx0XFx0XFx0XFx0aWYgKHYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fVVNFUk1BUClcXG41NDAyOlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgdXNlclxcXCIpO1xcbjU0MDM6XFx0XFxuNTQwNDpcXHRcXHRcXHRcXHRpZiAodi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTV9ETUFfQ09IRVJFTlQpXFxuNTQwNTpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBcXFwiIGRtYS1jb2hlcmVudFxcXCIpO1xcbjU0MDY6XFx0XFxuNTQwNzpcXHRcXHRcXHRcXHRpZiAoaXNfdm1hbGxvY19hZGRyKHYtXFx1MDAzZXBhZ2VzKSlcXG41NDA4OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCIgdnBhZ2VzXFxcIik7XFxuNTQwOTpcXHRcXG41NDEwOlxcdFxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG41NDExOlxcdFxcdFxcdFxcdFxcdHNob3dfbnVtYV9pbmZvKG0sIHYsIGNvdW50ZXJzKTtcXG41NDEyOlxcdFxcbjU0MTM6XFx0XFx0XFx0XFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuNTQxNDpcXHRcXHRcXHR9XFxuNTQxNTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dm4tXFx1MDAzZWJ1c3kubG9jayk7XFxuNTQxNjpcXHRcXHR9XFxuNTQxNzpcXHRcXG41NDE4OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG41NDE5OlxcdFxcdFxcdGtmcmVlKGNvdW50ZXJzKTtcXG41NDIwOlxcdH1cXG41NDIxOlxcdFxcbjU0MjI6XFx0c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuNTQyMzpcXHR7XFxuNTQyNDpcXHRcXHRzaG93X2J1c3lfaW5mbyhtKTtcXG41NDI1OlxcdFxcbjU0MjY6XFx0XFx0LypcXG41NDI3OlxcdFxcdCAqIEFzIGEgZmluYWwgc3RlcCwgZHVtcCBcXFwidW5wdXJnZWRcXFwiIGFyZWFzLlxcbjU0Mjg6XFx0XFx0ICovXFxuNTQyOTpcXHRcXHRzaG93X3B1cmdlX2luZm8obSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAzOjI3OjI2LjkyMDg1NTA2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTUxMzIxNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIEFuYWx5c2lzOiB2bWFsbG9jLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgdG8gYHZtYWxsb2MuY2AuIFRoaXMgbG9va3MgbGlrZSBzb21lIHN0cmFpZ2h0Zm9yd2FyZCwgdGhvdWdoIHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgcmVmYWN0b3JpbmcuIEZpcnN0LCB0aGUgYHNob3dfYnVzeV9pbmZvYCBmdW5jdGlvbi4gVGhpcyBpcyBwdXJlIGNvZGUgb3JnYW5pemF0aW9uOyB0aGUgYHNob3dfYnVzeV9pbmZvKG0pYCBmdW5jdGlvbiBpcyBleHRyYWN0ZWQgZnJvbSBgdm1hbGxvY19pbmZvX3Nob3dgLiBUaGUga2V5IGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIGxvY2FsIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBgY291bnRlcnNgIHdpdGhpbiBgc2hvd19idXN5X2luZm9gIG5vdywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBzY29wZS4gUHJldmlvdXNseSBpdCB3YXMgZnJlZWQgYXQgdGhlIGVuZCBvZiB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24sIHdoaWNoIGlzIGEgcGVyZmVjdGx5IGFjY2VwdGFibGUgcHJhY3RpY2UgYnV0IHRoaXMgaXMgYmV0dGVyLlxuXG5UaGUgc2Vjb25kIGNoYW5nZSBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBXZSdyZSBpbnRyb2R1Y2luZyBhIGhlbHBlciBmdW5jdGlvbiwgYHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYWAsIHRvIGRlZHVwbGljYXRlIGNvZGUgaW4gYHZtYXBfaW5pdF9mcmVlX3NwYWNlYC4gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBtb3ZlIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS4gVGhlIHJlcGVhdGVkIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGBpbnNlcnRfdm1hcF9hcmVhX2F1Z21lbnRgIGJsb2NrIGlzIHJlcGxhY2VkIHdpdGggY2FsbHMgdG8gdGhpcyBuZXcgaGVscGVyLiBJdCBsb29rcyBsaWtlIHRoZSBzYW1lIHplcm9pbmcgb2YgdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AgaXMgYmVpbmcgbWFpbnRhaW5lZC4gVGhlIHVzZSBvZiBgX19pbml0YCBoZXJlIHRlbGxzIG1lIHRoaXMgaXMgYWxsIGhhcHBlbmluZyBhdCBib290IHRpbWUsIGFuZCB0aGF0J3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSXQgbWVhbnMgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGRlZHVwbGljYXRpb24gaXMgbWluaW1hbC5cblxuRmluYWxseSwgaW4gYHZtYWxsb2NfaW5pdGAsIHdlIGhhdmUgYSBzaW1wbGUgcmVvcmRlcmluZyBvZiB0aGUgYHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKWAgY2FsbC4gSXQncyBtb3ZlZCB0byBiZSBncm91cGVkIHdpdGggdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgdmJxYCBzdHJ1Y3R1cmUgaXRzZWxmLiBUaGlzIGxvb2tzIGxpa2UgYSBzdHlsaXN0aWMgY2hhbmdlLCB0byBpbXByb3ZlIHRoZSBmbG93IG9mIHRoZSBjb2RlLlxuXG5PdmVyYWxsLCBpdCBzZWVtcyBsaWtlIGEgY2xlYW4gc2V0IG9mIGNoYW5nZXMgZGVzaWduZWQgZm9yIGJldHRlciBvcmdhbml6YXRpb24gYW5kIGNvZGUgY2xhcml0eS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBsaW5lcyA1NTgwLTU2MDAgb2YgYG1tL3ZtYWxsb2MuY2AganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY2hhbmdlcyBvciBoaWRkZW4gaW1wbGljYXRpb25zLiBJdCdzIGFsd2F5cyB3aXNlIHRvIGRvdWJsZS1jaGVjaywgYnV0IHRoaXMgaW5pdGlhbCBhbmFseXNpcyBzdWdnZXN0cyBhIHdlbGwtY29uc2lkZXJlZCBzZXJpZXMgb2YgaW1wcm92ZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6Mjc6MzMuMDcyMTc5MDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NTgwOlxcdFxcdHZtYXBfYXJlYV9jYWNoZXAgPSBLTUVNX0NBQ0hFKHZtYXBfYXJlYSwgU0xBQl9QQU5JQyk7XFxuNTU4MTpcXHRcXG41NTgyOlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuNTU4MzpcXHRcXHRcXHRzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSAqdmJxO1xcbjU1ODQ6XFx0XFx0XFx0c3RydWN0IHZmcmVlX2RlZmVycmVkICpwO1xcbjU1ODU6XFx0XFxuNTU4NjpcXHRcXHRcXHR2YnEgPSBcXHUwMDI2cGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBpKTtcXG41NTg3OlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ2YnEtXFx1MDAzZWxvY2spO1xcbjU1ODg6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZicS1cXHUwMDNlZnJlZSk7XFxuNTU4OTpcXHRcXHRcXHR4YV9pbml0KFxcdTAwMjZ2YnEtXFx1MDAzZXZtYXBfYmxvY2tzKTtcXG41NTkwOlxcdFxcbjU1OTE6XFx0XFx0XFx0cCA9IFxcdTAwMjZwZXJfY3B1KHZmcmVlX2RlZmVycmVkLCBpKTtcXG41NTkyOlxcdFxcdFxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2cC1cXHUwMDNlbGlzdCk7XFxuNTU5MzpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnAtXFx1MDAzZXdxLCBkZWxheWVkX3ZmcmVlX3dvcmspO1xcbjU1OTQ6XFx0XFx0fVxcbjU1OTU6XFx0XFxuNTU5NjpcXHRcXHQvKlxcbjU1OTc6XFx0XFx0ICogU2V0dXAgbm9kZXMgYmVmb3JlIGltcG9ydGluZyB2bWxpc3QuXFxuNTU5ODpcXHRcXHQgKi9cXG41NTk5OlxcdFxcdHZtYXBfaW5pdF9ub2RlcygpO1xcbjU2MDA6XFx0XFxuNTYwMTpcXHRcXHQvKiBJbXBvcnQgZXhpc3Rpbmcgdm1saXN0IGVudHJpZXMuICovXFxuNTYwMjpcXHRcXHRmb3IgKHRtcCA9IHZtbGlzdDsgdG1wOyB0bXAgPSB0bXAtXFx1MDAzZW5leHQpIHtcXG41NjAzOlxcdFxcdFxcdHZhID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX05PV0FJVCk7XFxuNTYwNDpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCF2YSkpXFxuNTYwNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41NjA2OlxcdFxcbjU2MDc6XFx0XFx0XFx0dmEtXFx1MDAzZXZhX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdG1wLVxcdTAwM2VhZGRyO1xcbjU2MDg6XFx0XFx0XFx0dmEtXFx1MDAzZXZhX2VuZCA9IHZhLVxcdTAwM2V2YV9zdGFydCArIHRtcC1cXHUwMDNlc2l6ZTtcXG41NjA5OlxcdFxcdFxcdHZhLVxcdTAwM2V2bSA9IHRtcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDM6Mjc6MzMuMDcyNTAwMDYxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY2ODg3MDE2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogS01TQU4gTm90IE5lZWRlZCoqXG5cbk9rYXksIGFmdGVyIHJldmlld2luZyB0aGlzIGRpZmYsIGl0J3MgY2xlYXIgdGhhdCBLTVNBTiBpc24ndCB3YXJyYW50ZWQgaGVyZS4gVGhpcyBpcyBhbGwgY2xlYW4gcmVmYWN0b3Jpbmcgd29yay4gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqYHZtYWxsb2NfaW5mb19zaG93YCoqOiBJIHNlZSB0aGV5J3ZlIHRha2VuIHRoZSBidXN5IGluZm8gcHJpbnRpbmcgbG9naWMgYW5kIGlzb2xhdGVkIGl0IGludG8gYSBoZWxwZXIsIGBzaG93X2J1c3lfaW5mb2AuIE1ha2VzIHNlbnNlLiBUaGV5J3ZlIGFsc28gbW92ZWQgdGhlIGZyZWVpbmcgb2YgdGhlIE5VTUEgY291bnRlcnMgYnVmZmVyIGNsb3NlciB0byBpdHMgdXNhZ2UgaW4gdGhhdCBoZWxwZXIuIEEgZ29vZCwgc21hbGwgaW1wcm92ZW1lbnQgZm9yIHJlYWRhYmlsaXR5LlxuXG4qICAgKipgdm1hcF9pbml0X2ZyZWVfc3BhY2VgKio6IFRoZXkndmUgY2xlYW5lZCB1cCBkdXBsaWNhdGUgY29kZSB3aXRoIGB2bWFwX2luc2VydF9mcmVlX2FyZWFgLiBTbWFydCBtb3ZlLiBBbmQgdGhleSdyZSB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBzbyB3ZSdyZSBndWFyYW50ZWVkIHplcm8taW5pdGlhbGl6YXRpb24uIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS5cblxuKiAgICoqYHZtYWxsb2NfaW5pdGAqKjogSnVzdCBhIHJlb3JkZXJpbmcgb2YgYHhhX2luaXQoXHUwMDI2dmJxLVx1MDAzZXZtYXBfYmxvY2tzKWAuIEtlZXBpbmcgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyIGlzIGdvb2QgcHJhY3RpY2UuIE5vIGxvZ2ljIGNoYW5nZXMsIGp1c3QgYSBiZXR0ZXIgY29kZSBzdHJ1Y3R1cmUuXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgaXMsIG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG9mIHRoZSBLTVNBTi10cmlnZ2VyaW5nIGlzc3Vlczogbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIG5vIHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMsIG5vIGFsdGVyYXRpb25zIHRvIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCBkZWZpbml0ZWx5IG5vIGluZm9ybWF0aW9uIGxlYWtzLiBXZSdyZSBub3QgdG91Y2hpbmcgYW55IHVzZXIgY29weSBvcGVyYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgbW9yZSB0aGFuIGFkZXF1YXRlIGZvciBjYXRjaGluZyBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGlmZXRpbWUgaXNzdWVzIHRoYXQgbWlnaHQgY3JvcCB1cC5cblxuU28sIHRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcsIHdpdGggbm8gbmV3IHJpc2tzLCBhbmQgS01TQU4gaXMgKmZhbHNlKi4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU5MSwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMzoyNzozOS43NjEyMDY0MzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGluIG1tL3ZtYWxsb2MuYzpcXG4xLiBJdCBzcGxpdHMgdm1hbGxvY19pbmZvX3Nob3coKSBieSBleHRyYWN0aW5nIHNob3dfYnVzeV9pbmZvKCkgYW5kIGZyZWVpbmcgdGhlIHRlbXBvcmFyeSBOVU1BIGNvdW50ZXJzIGFycmF5IGVhcmxpZXIgd2l0aGluIHRoYXQgZnVuY3Rpb24uXFxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxcbjMuIEluIF9faW5pdCB2bWFsbG9jX2luaXQoKSwgaXQgcmVvcmRlcnMgeGFfaW5pdChcXHUwMDI2dmJxLVxcdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIFN0YW5kYXJkIEtBU0FOL2J1aWxkIGNoZWNrcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXM7IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNsZWFudXAgYW5kIHJlZmFjdG9yaW5nIGluIG1tL3ZtYWxsb2MuYzpcXG4xLiBJdCBzcGxpdHMgdm1hbGxvY19pbmZvX3Nob3coKSBieSBleHRyYWN0aW5nIHNob3dfYnVzeV9pbmZvKCkgYW5kIGZyZWVpbmcgdGhlIHRlbXBvcmFyeSBOVU1BIGNvdW50ZXJzIGFycmF5IGVhcmxpZXIgd2l0aGluIHRoYXQgZnVuY3Rpb24uXFxuMi4gSXQgZGVkdXBsaWNhdGVzIGZyZWUgdm1hcCBhcmVhIGluc2VydGlvbiBsb2dpYyBpbiBfX2luaXQgdm1hcF9pbml0X2ZyZWVfc3BhY2UoKSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIHZtYXBfaW5zZXJ0X2ZyZWVfYXJlYSgpLCB3aGljaCBjb250aW51ZXMgdG8gYWxsb2NhdGUgd2l0aCBrbWVtX2NhY2hlX3phbGxvYygpIGVuc3VyaW5nIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkLlxcbjMuIEluIF9faW5pdCB2bWFsbG9jX2luaXQoKSwgaXQgcmVvcmRlcnMgeGFfaW5pdChcXHUwMDI2dmJxLVxcdTAwM2V2bWFwX2Jsb2NrcykgdG8gZ3JvdXAgcGVyLUNQVSB2YnEgaW5pdGlhbGl6YXRpb25zIHRvZ2V0aGVyLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uIFN0YW5kYXJkIEtBU0FOL2J1aWxkIGNoZWNrcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXM7IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowv2zdk[1] Phase: Succeeded StartedAt: 2026-09-15 03:27:51 +0000 UTC FinishedAt: 2026-09-15 03:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 03:27:51 +0000 UTC FinishedAt: 2026-09-15 03:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2] Phase: Succeeded StartedAt: 2026-09-15 03:27:51 +0000 UTC FinishedAt: 2026-09-15 07:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 03:27:51 +0000 UTC FinishedAt: 2026-09-15 07:08:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 03:27:51 +0000 UTC FinishedAt: 2026-09-15 03:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 03:27:51 +0000 UTC FinishedAt: 2026-09-15 03:27:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv2zdk/series-workflowv2zdk-convert-artifact-2593465541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 03:28:01 +0000 UTC FinishedAt: 2026-09-15 03:43:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 03:28:01 +0000 UTC FinishedAt: 2026-09-15 03:43: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:*bf344828-bbfb-4298-b59e-61a7e2f97f7c,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-workflowv2zdk/series-workflowv2zdk-convert-artifact-2593465541/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": "3e665de4-d272-4674-bde4-e79096b0461e", "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-workflowv2zdk/series-workflowv2zdk-build-action-1100335979/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 03:28:01 +0000 UTC FinishedAt: 2026-09-15 03:43:46 +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:*bf344828-bbfb-4298-b59e-61a7e2f97f7c,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-workflowv2zdk/series-workflowv2zdk-convert-artifact-2593465541/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": "3e665de4-d272-4674-bde4-e79096b0461e", "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-workflowv2zdk/series-workflowv2zdk-build-action-1100335979/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 03:43:56 +0000 UTC FinishedAt: 2026-09-15 03:43:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 03:43:56 +0000 UTC FinishedAt: 2026-09-15 03:43:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 03:43:56 +0000 UTC FinishedAt: 2026-09-15 03:44:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 03:43:56 +0000 UTC FinishedAt: 2026-09-15 03:44:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowv2zdk/series-workflowv2zdk-convert-artifact-2473232800/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 03:44:06 +0000 UTC FinishedAt: 2026-09-15 03:46:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 03:44:06 +0000 UTC FinishedAt: 2026-09-15 03:45:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e665de4-d272-4674-bde4-e79096b0461e,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-workflowv2zdk/series-workflowv2zdk-build-action-1100335979/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-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 03:46:01 +0000 UTC FinishedAt: 2026-09-15 03:46:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 03:46:01 +0000 UTC FinishedAt: 2026-09-15 03:46:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 03:46:01 +0000 UTC FinishedAt: 2026-09-15 04:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 03:46:01 +0000 UTC FinishedAt: 2026-09-15 04:01:55 +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:*bf344828-bbfb-4298-b59e-61a7e2f97f7c,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-workflowv2zdk/series-workflowv2zdk-convert-artifact-2473232800/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": "fc8e0f4e-d9ae-4fd1-9684-d7898f5ea64b", "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-workflowv2zdk/series-workflowv2zdk-build-action-3146481500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 03:46:01 +0000 UTC FinishedAt: 2026-09-15 04:01:45 +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:*bf344828-bbfb-4298-b59e-61a7e2f97f7c,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-workflowv2zdk/series-workflowv2zdk-convert-artifact-2473232800/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": "fc8e0f4e-d9ae-4fd1-9684-d7898f5ea64b", "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-workflowv2zdk/series-workflowv2zdk-build-action-3146481500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 04:01:55 +0000 UTC FinishedAt: 2026-09-15 04:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 04:01:55 +0000 UTC FinishedAt: 2026-09-15 04:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 04:01:55 +0000 UTC FinishedAt: 2026-09-15 04:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 04:01:55 +0000 UTC FinishedAt: 2026-09-15 04:03:42 +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:*fc8e0f4e-d9ae-4fd1-9684-d7898f5ea64b,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-workflowv2zdk/series-workflowv2zdk-build-action-3146481500/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-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 04:03:52 +0000 UTC FinishedAt: 2026-09-15 07:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 04:03:52 +0000 UTC FinishedAt: 2026-09-15 07:08:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},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:*3e665de4-d272-4674-bde4-e79096b0461e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc8e0f4e-d9ae-4fd1-9684-d7898f5ea64b,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-workflowv2zdk/series-workflowv2zdk-build-action-1100335979/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-workflowv2zdk/series-workflowv2zdk-build-action-3146481500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 04:03:52 +0000 UTC FinishedAt: 2026-09-15 04:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 04:03:52 +0000 UTC FinishedAt: 2026-09-15 04:03:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},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-workflowv2zdk/series-workflowv2zdk-convert-artifact-797612793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 04:03:52 +0000 UTC FinishedAt: 2026-09-15 04:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 04:03:52 +0000 UTC FinishedAt: 2026-09-15 04:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 04:03:52 +0000 UTC FinishedAt: 2026-09-15 04:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 04:04:02 +0000 UTC FinishedAt: 2026-09-15 07:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv2zdk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"baa8de2f3448d1466a888a805c18d01c998fe052","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmalloc_info_show","show_busy_info"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"baa8de2f3448d1466a888a805c18d01c998fe052","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","NUMA"],"series_id":"c1bedbbb-afa8-440a-aee4-7671b25091e8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 04:04:02 +0000 UTC FinishedAt: 2026-09-15 07:08:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e665de4-d272-4674-bde4-e79096b0461e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc8e0f4e-d9ae-4fd1-9684-d7898f5ea64b,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-workflowv2zdk/series-workflowv2zdk-build-action-1100335979/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-workflowv2zdk/series-workflowv2zdk-build-action-3146481500/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-workflowv2zdk/series-workflowv2zdk-convert-artifact-797612793/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,}