Name: series-workflowzhjhd Phase: Succeeded StartedAt: 2026-08-10 18:49:40 +0000 UTC FinishedAt: 2026-08-10 23:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[0] Phase: Succeeded StartedAt: 2026-08-10 18:49:40 +0000 UTC FinishedAt: 2026-08-10 19:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 18:49:40 +0000 UTC FinishedAt: 2026-08-10 19:33:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "395e9edd-926e-40bb-b32d-c338da216567" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gpc_refresh", "kvm_gpc_activate", "kvm_gpc_activate_hva", "kvm_mmu_notifier_invalidate_range_end" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGVfaHZhJiMzNDssCiAgICAmIzM0O2t2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBLVk0gTU1VIG5vdGlmaWVycyBieSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgbW5faW52YWxpZGF0ZV9zZXFgKSBmb3IgcGZuY2FjaGUgaW52YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIG9yIHN0YW5kYXJkIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbm90aWZpZXIgbG9naWMgYW5kIHBmbmNhY2hlIHJlZnJlc2ggbWVjaGFuaXNtcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBgbW5faW52YWxpZGF0ZV9zZXFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMzRlYzM5MmY3OTk2ZmE4YWEwNzU1YmQwYjRlMjBkYjNlY2MzMjFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCBhYjhjZmFlYzgyZDMxLi4wYWMzODJjZDllNmFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC04MDAsNiAmIzQzOzgwMCw3IEBAIHN0cnVjdCBrdm0ge1xuIFx0LyogVXNlZCB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIE1NVSBub3RpZmllcnMuICAqL1xuIFx0c3BpbmxvY2tfdCBtbl9pbnZhbGlkYXRlX2xvY2s7XG4gXHR1bnNpZ25lZCBsb25nIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbW5faW52YWxpZGF0ZV9zZXE7XG4gXHRzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDtcbiBcbiBcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLjVlNDNkZDYzYzhiZGQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDggJiM0Mzs4MTIsMTUgQEAgc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcbiBcbiBcdC8qIFBhaXJzIHdpdGggdGhlIGluY3JlbWVudCBpbiByYW5nZV9zdGFydCgpLiAqL1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xuLVx0aWYgKCFXQVJOX09OX09OQ0UoIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpXG4mIzQzO1x0aWYgKCFXQVJOX09OX09OQ0UoIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpIHtcbiYjNDM7XHRcdGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHVibGlzaCB0aGUgc2VxdWVuY2UgdXBkYXRlIGJlZm9yZSBkcm9wcGluZyB0aGUgYWN0aXZlIGNvdW50XG4mIzQzO1x0XHQgKiBzbyB0aGF0IHBmbmNhY2hlIHJlZnJlc2hlcyBvYnNlcnZlIG9uZSBvciB0aGUgb3RoZXIuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNtcF93bWIoKTtcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4mIzQzO1x0fVxuIFx0d2FrZSA9ICFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHRzcGluX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcbiBcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uZDM2MGYxZWRhODk3OSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbl9zZXEpXG4ge1xuIFx0LypcbiBcdCAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlc1xuQEAgLTEzNiwyMCAmIzQzOzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnRcbiBcdCAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLVx1MDAzZWxvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvXG4gXHQgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtXHUwMDNlbG9jaywgYW5kXG4tXHQgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiYjNDM7XHQgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbl9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLlxuIFx0ICovXG4tXHRpZiAoa3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KVxuJiM0MztcdGlmIChSRUFEX09OQ0Uoa3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuJiM0MztcdCAqIG1uX2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbiBcdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4gXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcbi1cdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiYjNDM7XHQgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbl9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtbl9zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4mIzQzO1x0XHRtbl9zZXEgPSBSRUFEX09OQ0UoZ3BjLVx1MDAzZWt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSk7XG4gXHRcdHNtcF9ybWIoKTtcbiBcbiBcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG5AQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxuIFx0XHQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKGdwYy1cdTAwM2V2YWxpZCk7XG4tXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgbW11X3NlcSkpO1xuJiM0MztcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBtbl9zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZV9odmEmIzM0OywKICAgICYjMzQ7a3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbm90aWZpZXIgbG9naWMgYW5kIHBmbmNhY2hlIHJlZnJlc2ggbWVjaGFuaXNtcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBgbW5faW52YWxpZGF0ZV9zZXFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMzRlYzM5MmY3OTk2ZmE4YWEwNzU1YmQwYjRlMjBkYjNlY2MzMjFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uMGFjMzgyY2Q5ZTZhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODAwLDYgJiM0Mzs4MDAsNyBAQCBzdHJ1Y3Qga3ZtIHsKIAkvKiBVc2VkIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgTU1VIG5vdGlmaWVycy4gICovCiAJc3BpbmxvY2tfdCBtbl9pbnZhbGlkYXRlX2xvY2s7CiAJdW5zaWduZWQgbG9uZyBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBtbl9pbnZhbGlkYXRlX3NlcTsKIAlzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDsKIAogCS8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA0NWU3ODQ0NjJlYzZlLi41ZTQzZGQ2M2M4YmRkIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTgxMiw4ICYjNDM7ODEyLDE1IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAKIAkvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi8KIAlzcGluX2xvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7Ci0JaWYgKCFXQVJOX09OX09OQ0UoIWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKQomIzQzOwlpZiAoIVdBUk5fT05fT05DRSgha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpIHsKJiM0MzsJCWt2bS0mZ3Q7bW5faW52YWxpZGF0ZV9zZXEmIzQzOyYjNDM7OwomIzQzOwkJLyoKJiM0MzsJCSAqIFB1Ymxpc2ggdGhlIHNlcXVlbmNlIHVwZGF0ZSBiZWZvcmUgZHJvcHBpbmcgdGhlIGFjdGl2ZSBjb3VudAomIzQzOwkJICogc28gdGhhdCBwZm5jYWNoZSByZWZyZXNoZXMgb2JzZXJ2ZSBvbmUgb3IgdGhlIG90aGVyLgomIzQzOwkJICovCiYjNDM7CQlzbXBfd21iKCk7CiAJCS0ta3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKJiM0MzsJfQogCXdha2UgPSAha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKIAlzcGluX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW5faW52YWxpZGF0ZV9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vcGZuY2FjaGUuYyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmMKaW5kZXggNzI4ZDJjMWI0ODhhOC4uZDM2MGYxZWRhODk3OSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW5fc2VxKQogewogCS8qCiAJICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzCkBAIC0xMzYsMjAgJiM0MzsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3MKIAkgKiBOb3RlLCBpdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudAogCSAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLSZndDtsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0bwogCSAqIGJlIGVsZXZhdGVkIGJlZm9yZSB0aGUgbW11X25vdGlmaWVyIGFjcXVpcmVzIGdwYy0mZ3Q7bG9jaywgYW5kCi0JICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiYjNDM7CSAqIGlzbiYjMzk7dCBkcm9wcGVkIHVudGlsIGFmdGVyIG1uX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiAJICovCi0JaWYgKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpCiYjNDM7CWlmIChSRUFEX09OQ0Uoa3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmUKLQkgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgomIzQzOwkgKiBtbl9pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluCiAJICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGUKIAkgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGUKLQkgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuCiYjNDM7CSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1uX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgogCSAqLwogCXNtcF9ybWIoKTsKLQlyZXR1cm4ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTsKJiM0MzsJcmV0dXJuIFJFQURfT05DRShrdm0tJmd0O21uX2ludmFsaWRhdGVfc2VxKSAhPSBtbl9zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU4LDcgJiM0MzsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAl2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLSZndDtraHZhKTsKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbW5fc2VxOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJc3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHsKQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpCiAJZ3BjLSZndDt2YWxpZCA9IGZhbHNlOwogCiAJZG8gewotCQltbXVfc2VxID0gZ3BjLSZndDtrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJCW1uX3NlcSA9IFJFQURfT05DRShncGMtJmd0O2t2bS0mZ3Q7bW5faW52YWxpZGF0ZV9zZXEpOwogCQlzbXBfcm1iKCk7CiAKIAkJd3JpdGVfdW5sb2NrX2lycSgmYW1wO2dwYy0mZ3Q7bG9jayk7CkBAIC0yMzIsNyAmIzQzOzIzMiw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCQkgKiBhdHRlbXB0aW5nIHRvIHJlZnJlc2guCiAJCSAqLwogCQlXQVJOX09OX09OQ0UoZ3BjLSZndDt2YWxpZCk7Ci0JfSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy0mZ3Q7a3ZtLCBtbXVfc2VxKSk7CiYjNDM7CX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW5fc2VxKSk7CiAKIAlncGMtJmd0O3ZhbGlkID0gdHJ1ZTsKIAlncGMtJmd0O3BmbiA9IG5ld19wZm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gTU1VIE5vdGlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgS1ZNIE1NVSBub3RpZmllciBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGlzIGBtbl9pbnZhbGlkYXRlX3NlcWAgZmllbGQgdG8gdGhlIGBzdHJ1Y3Qga3ZtYCBhbmQgdGhlbiB1cGRhdGluZyBmdW5jdGlvbnMgbGlrZSBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAsIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgLCBhbmQgYGh2YV90b19wZm5fcmV0cnlgIHRvIHVzZSB0aGlzIG5ldyBzZXF1ZW5jZSBjb3VudGVyLiBGcm9tIHRoZSBmaWxlIGxvY2F0aW9ucywgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AsIEkgY2FuIHRlbGwgdGhpcyBpcyByZWFsbHkgdG91Y2hpbmcgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSDigJMgcHJvYmFibHkgcmVsYXRlZCB0byBpbnZhbGlkYXRpbmcgY2FjaGVkIE1NVSBlbnRyaWVzLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGlzIHNlcXVlbmNlIG51bWJlciBpcyBjcnVjaWFsIGZvciBzb21lIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIG9yIG9yZGVyaW5nLgoKU2luY2UgdGhpcyBpcyBLVk0sIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBLY29uZmlnIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGlzIEtWTSBkZWZpbmVkPyBgQ09ORklHX0tWTWAgaXMgdHlwaWNhbGx5IHdoYXQgZW5hYmxlcyBpdCwgc28gbGV0JiMzOTtzIGNoZWNrIGB2aXJ0L2t2bS9LY29uZmlnYC4gTm8sIHdhaXQuIEdpdmVuIHRoZSBwYXRoIG9mIHRoZSBmaWxlcywgSSBrbm93IHRoaXMgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLgoKUmlnaHQsIGB2aXJ0L2t2bS9NYWtlZmlsZWAuIEkgd2lsbCBjaGVjayB3aGF0IEtWTSBidWlsZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX21haW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTY9S1ZNID89IC4uLy4uLy4uL3ZpcnQva3ZtXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tNy1cbnZpcnQva3ZtL01ha2VmaWxlLmt2bTo4Omt2bS15IDo9ICQoS1ZNKS9rdm1fbWFpbi5vICQoS1ZNKS9ldmVudGZkLm8gJChLVk0pL2JpbmFyeV9zdGF0cy5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tOS1rdm0tJChDT05GSUdfS1ZNX1ZGSU8pICYjNDM7PSAkKEtWTSkvdmZpby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA2NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4gaG9uZXMgaW4gb24gYENPTkZJR19LVk1gIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoaXMgd2hvbGUgdmlydHVhbGl6YXRpb24gc2V0dXAsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIGtleSBmZWF0dXJlcyBpdCBlbmFibGVzPyBJdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHN3aXRjaCwgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKQnV0IEkmIzM5O20gZ2V0dGluZyBhaGVhZCBvZiBteXNlbGYsIGl0JiMzOTtzIG5vdCB0aGUgY29uZmlndXJhdGlvbiBpdHNlbGYgSSB3YW50IHRvIGRlbHZlIGludG8ganVzdCB5ZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhpcyB0byB0aGUgS1ZNIGltcGxlbWVudGF0aW9uLCBhbmQgdGhhdCBpbW1lZGlhdGVseSB0YWtlcyBtZSB0byBgcGZuY2FjaGUuY2AuIFNlZW1zIGxpa2UgYW4gaW50ZXJlc3RpbmcgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBvdmVyYWxsIHZpcnR1YWwgbWFjaGluZSBtZW1vcnkgbWFuYWdlbWVudC4gSSBzdXNwZWN0IGl0JiMzOTtsbCBpbGx1bWluYXRlIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGFuZCB0aGUgY2FjaGluZyBtZWNoYW5pc21zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZm5jYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9NYWtlZmlsZS5rdm09MTM9a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX0RJUlRZX1JJTkcpICYjNDM7PSAkKEtWTSkvZGlydHlfcmluZy5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTQ6a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKSAmIzQzOz0gJChLVk0pL3BmbmNhY2hlLm9cbnZpcnQva3ZtL01ha2VmaWxlLmt2bS0xNS1rdm0tJChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSAmIzQzOz0gJChLVk0pL2d1ZXN0X21lbWZkLm9cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTc5Nz1zdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtODE4LVx0XHQgKiBQdWJsaXNoIHRoZSBzZXF1ZW5jZSB1cGRhdGUgYmVmb3JlIGRyb3BwaW5nIHRoZSBhY3RpdmUgY291bnRcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODE5Olx0XHQgKiBzbyB0aGF0IHBmbmNhY2hlIHJlZnJlc2hlcyBvYnNlcnZlIG9uZSBvciB0aGUgb3RoZXIuXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTgyMC1cdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU4MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFYCBhcmUgZXNzZW50aWFsLCBhcyBleHBlY3RlZC4gQnV0IHRoZW4gbXkgbWluZCBraWNrcyBpbiDigJMgaGFuZyBvbiBhIHNlY29uZCwgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBpcyAqdHlwaWNhbGx5KiBjaG9zZW4gYXV0b21hdGljYWxseSBieSBhcmNoaXRlY3R1cmVzIHRoYXQgYWN0dWFsbHkgcmVxdWlyZSBpdHMgZnVuY3Rpb25hbGl0eS4gU28gaXQgc2hvdWxkbiYjMzk7dCBqdXN0IGJlIGVuYWJsZWQgYXJiaXRyYXJpbHkuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGNoYWluLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUsIHByb2JhYmx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIChvciBzb21ldGhpbmcgc2ltaWxhciBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB3aGV0aGVyIHRoZSBgS1ZNYCBjb25maWd1cmF0aW9uIG9wdGlvbiBkaXJlY3RseSBzZWxlY3RzIGBIQVZFX0tWTV9QRk5DQUNIRWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciB0byBob3cgdGhlIHR3byByZWxhdGUgbGllcy4gSSBleHBlY3QgdGhlcmUgdG8gYmUgc29tZSBsb2dpYyB0aGVyZSB3aGljaCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbCB0byBmaW5kIG91dCBleGFjdGx5IHdoeSBhIHBhcnRpY3VsYXIgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBVkVfS1ZNX1BGTkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNS1cdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyNjpcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxuYXJjaC94ODYva3ZtL0tjb25maWctMjctXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19UU09cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKktWTSBQRk4gQ2FjaGUgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBLVk0gY29kZSBvbiB4ODYsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBwcmVzZW5jZSBvZiB0aGUgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBmZWF0dXJlIGlzIGJlaW5nIHNlbGVjdGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBpdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBQRk4gY2FjaGUsIGFuZCBob3cgdGhhdCYjMzk7cyBiZWluZyBtYW5hZ2VkLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgdG91Y2hlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gYXJlOiBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAsIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgICh3aGljaCBpcyBpbmxpbmUsIG9mIGNvdXJzZSksIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAuCgpIb2xkIG9uLi4uIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBkZWNsYXJlZCBgc3RhdGljYD8gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHdyaW5rbGUuIElmIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoZSBjdXJyZW50IGZpbGUsIHNvIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIEkgaGF2ZSB0byBmaW5kIHRoZSBjYWxsaW5nIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSBiZWNvbWVzOiB3aGF0IGZ1bmN0aW9ucyAqY2FsbCogYGh2YV90b19wZm5fcmV0cnlgIHdpdGhpbiB0aGUgY3VycmVudCBmaWxlPyBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h2YV90b19wZm5fcmV0cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW5fc2VxKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTU0LVxudmlydC9rdm0vcGZuY2FjaGUuYzoxNTU6c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1Ni17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0yNTY9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzIyOlx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMy1cdGdwYy1cdTAwM2V1aHZhICYjNDM7PSBwYWdlX29mZnNldDtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyOS1cdGlmICghZ3BjLVx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMwOlx0XHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMS1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgQ2FsbCBDaGFpbiBvZiBgX19rdm1fZ3BjX3JlZnJlc2hgKioKCk9rYXksIHNvIGBfX2t2bV9ncGNfcmVmcmVzaGAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogd2hhdCYjMzk7cyB0aGUgY2FsbCBjaGFpbiB0aGF0IGxlYWRzIHRvIHRoaXMgZnVuY3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aCB0byB0cnVseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGtlcm5lbCBjb2RlIGlzIGNhbGxpbmcgYF9fa3ZtX2dwY19yZWZyZXNoYC4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgc3BlY2lmaWMgZXZlbnQsIGEgdGltZXIsIG9yIGEgcGFydGljdWxhciBzeXN0ZW0gY2FsbD8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbi4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscyBhbmQgc2VlIHdoZXJlIGl0IHNob3dzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jPTE1NT1zdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI1NS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MjU2OnN0YXRpYyBpbnQgX19rdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEpXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI1Ny17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0zNjY9aW50IGt2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIGxlbilcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4MS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzgyOlx0cmV0dXJuIF9fa3ZtX2dwY19yZWZyZXNoKGdwYywgZ3BjLVx1MDAzZWdwYSwgdWh2YSk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4My19XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0zOTc9c3RhdGljIGludCBfX2t2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEsXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MjMtXHR9XG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQyNDpcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYSwgdWh2YSk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIEd1ZXN0IFBhZ2UgQ2FjaGUgKEdQQykgUmVmcmVzaCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrdm1fZ3BjX3JlZnJlc2hgIGFuZCBgX19rdm1fZ3BjX2FjdGl2YXRlYC4gSSBzZWUgdGhleSYjMzk7cmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIEkmIzM5O3ZlIGdvdCB0byBhbnN3ZXI6ICp3aGF0KiBpcyBjYWxsaW5nIGBrdm1fZ3BjX3JlZnJlc2hgPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBnZXR0aW5nIGludm9rZWQgZnJvbSBzb21ld2hlcmU7IHVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zIGFuZCB0aGUgb3ZlcmFsbCBmbG93IHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IgcmVsYXRlZCB0byB0aGUgR3Vlc3QgUGFnZSBDYWNoZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gSXMgaXQgdHJpZ2dlcmVkIG9uIGV2ZXJ5IGNvbnRleHQgc3dpdGNoLCBvciBvbmx5IGluIGNlcnRhaW4gc2NlbmFyaW9zPyBJZGVudGlmeWluZyB0aGUgY2FsbGVycyBpcyB0aGUgZmlyc3QgY3JpdGljYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIEdQQyByZWZyZXNoIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9MzI0Mj1zdGF0aWMgdm9pZCBrdm1fc2V0dXBfZ3Vlc3RfcHZjbG9jayhzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqcmVmX2h2X2Nsb2NrLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zMjU2LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjMyNTc6XHRcdGlmIChrdm1fZ3BjX3JlZnJlc2goZ3BjLCBvZmZzZXQgJiM0Mzsgc2l6ZW9mKCpndWVzdF9odl9jbG9jaykpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTMyNTgtXHRcdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0zOD1zdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTUxLVxuYXJjaC94ODYva3ZtL3hlbi5jOjUyOlx0XHRyZXQgPSBrdm1fZ3BjX3JlZnJlc2goZ3BjLCBQQUdFX1NJWkUpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTUzLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xNTM9c3RhdGljIGludCB4ZW5fZ2V0X2d1ZXN0X3B2Y2xvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNjQtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTY1Olx0XHRyID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICYjNDM7IHNpemVvZigqaHZfY2xvY2spKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjYtXHRcdGlmIChyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0zMjE9c3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYylcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDM4LVxuYXJjaC94ODYva3ZtL3hlbi5jOjQzOTpcdFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMxLCB1c2VyX2xlbjEpKVxuYXJjaC94ODYva3ZtL3hlbi5jLTQ0MC1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTYzOT12b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjU2LVxuYXJjaC94ODYva3ZtL3hlbi5jOjY1NzpcdFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjU4LVx0XHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9Njk3PWludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTczMC1cbmFyY2gveDg2L2t2bS94ZW4uYzo3MzE6XHRcdGlmIChrdm1fZ3BjX3JlZnJlc2goZ3BjLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpKSB7XG5hcmNoL3g4Ni9rdm0veGVuLmMtNzMyLVx0XHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTE5MDE9c3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTQ0LVx0XHRpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk0NTpcdFx0cmMgPSBrdm1fZ3BjX3JlZnJlc2goZ3BjLCBQQUdFX1NJWkUpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE5NDYtXHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBHdWVzdCBDbG9jayBTeW5jaHJvbml6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBvZiB0aGUgZ3Vlc3QgY2xvY2sgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgaW4gS1ZNLiBJIHNlZSB0aGF0IGBrdm1fZ3BjX3JlZnJlc2hgIGdldHMgY2FsbGVkIGZyb20gYGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IGluaXRpYWxpemluZyB0aGUgcGFyYXZpcnR1YWxpemVkIGNsb2NrIHdvdWxkIGludm9sdmUgcmVmcmVzaGluZyB0aGUgZ2xvYmFsIHBhZ2UgZm9yIGl0LiBJJiMzOTttIGFsc28gc2VlaW5nIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHZhcmlvdXMgWGVuLXJlbGF0ZWQgZnVuY3Rpb25zLCB3aGljaCBzdWdnZXN0cyBzb21lIGRlZ3JlZSBvZiBpbnRlcm9wZXJhYmlsaXR5IG9yIGNyb3NzLWNvbXBhdGliaWxpdHkgdGhlcmUsIGxpa2VseSBmb3IgdXNlIGNhc2VzIGludm9sdmluZyBYZW4gZ3Vlc3RzIHJ1bm5pbmcgdW5kZXIgS1ZNLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0LCBteSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBrdm1fZ3BjX2FjdGl2YXRlYD8gSXMgaXQganVzdCBjYWxsZWQgZnJvbSBga3ZtX2dwY19yZWZyZXNoYD8gV2hhdCYjMzk7cyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGFjdGl2YXRpb24gcHJvY2VzcyBhbmQgdGhlIHJlZnJlc2ggcHJvY2Vzcz8gRG9lcyB0aGUgJiMzNDtyZWZyZXNoJiMzNDsgaW1wbHkgYSByZS1hY3RpdmF0aW9uPyBXaGVyZSBhcmUgdGhlIGFjdGl2YXRpb24gY2FsbHM/IElzIHRoZSBhY3RpdmF0aW9uIG9ubHkgdGllZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgb3IgaXMgaXQgdHJpZ2dlcmVkIGJ5IG90aGVyIGV2ZW50cz8gVGhlIGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGxpZmUgY3ljbGUgb2YgdGhpcyBtZWNoYW5pc20gbmVlZHMgbW9yZSBzY3J1dGlueSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ3BjX2FjdGl2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9MjQyOD1zdGF0aWMgdm9pZCBrdm1fd3JpdGVfc3lzdGVtX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzeXN0ZW1fdGltZSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQ0NC1cdGlmIChzeXN0ZW1fdGltZSBcdTAwMjYgMSlcbmFyY2gveDg2L2t2bS94ODYuYzoyNDQ1Olx0XHRrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdl90aW1lLCBzeXN0ZW1fdGltZSBcdTAwMjYgfjFVTEwsXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQ0Ni1cdFx0XHRcdCBzaXplb2Yoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8pKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MzIxPXN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTQ4NS1cdFx0XHQvKlxuYXJjaC94ODYva3ZtL3hlbi5jOjQ4NjpcdFx0XHQgKiBVc2Uga3ZtX2dwY19hY3RpdmF0ZSgpIGhlcmUgYmVjYXVzZSBpZiB0aGUgcnVuc3RhdGVcbmFyY2gveDg2L2t2bS94ZW4uYy00ODctXHRcdFx0ICogYXJlYSB3YXMgY29uZmlndXJlZCBpbiAzMi1iaXQgbW9kZSBhbmQgb25seSBleHRlbmRzXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTQ5MC1cdFx0XHQgKi9cbmFyY2gveDg2L2t2bS94ZW4uYzo0OTE6XHRcdFx0aWYgKGt2bV9ncGNfYWN0aXZhdGUoZ3BjMiwgZ3BjMS1cdTAwM2VncGEgJiM0MzsgdXNlcl9sZW4xLFxuYXJjaC94ODYva3ZtL3hlbi5jLTQ5Mi1cdFx0XHRcdFx0ICAgICB1c2VyX2xlbjIpKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz03NDY9aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTc4NS1cdFx0XHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3hlbi5jOjc4NjpcdFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzg3LVx0XHRcdFx0XHRcdCAgICAgZ2ZuX3RvX2dwYShnZm4pLCBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy03OTctXHRcdFx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS94ZW4uYzo3OTg6XHRcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy03OTktXHRcdFx0XHRcdFx0XHQgKHVuc2lnbmVkIGxvbmcpaHZhLCBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz05MDY9aW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTI4LVxuYXJjaC94ODYva3ZtL3hlbi5jOjkyOTpcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy05MzAtXHRcdFx0XHRcdCAgICAgZGF0YS1cdTAwM2V1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTM3LVxuYXJjaC94ODYva3ZtL3hlbi5jOjkzODpcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTM5LVx0XHRcdFx0XHRcdCBkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy05NTMtXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTU0Olx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfdGltZV9pbmZvX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTk1NS1cdFx0XHRcdCAgICAgZGF0YS1cdTAwM2V1LmdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTg3LVx0XHRzejEgPSBQQUdFX1NJWkUgLSAoZGF0YS1cdTAwM2V1LmdwYSBcdTAwMjYgflBBR0VfTUFTSyk7XG5hcmNoL3g4Ni9rdm0veGVuLmM6OTg4Olx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnJ1bnN0YXRlX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTk4OS1cdFx0XHRcdCAgICAgZGF0YS1cdTAwM2V1LmdwYSwgc3oxKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTk4LVx0XHRcdEJVR19PTigoZGF0YS1cdTAwM2V1LmdwYSAmIzQzOyBzejEpIFx1MDAyNiB+UEFHRV9NQVNLKTtcbmFyY2gveDg2L2t2bS94ZW4uYzo5OTk6XHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5ydW5zdGF0ZTJfY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTAwMC1cdFx0XHRcdFx0ICAgICBkYXRhLVx1MDAzZXUuZ3BhICYjNDM7IHN6MSwgc3oyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEwMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFJhY2UgQ29uZGl0aW9uIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nLiBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgdHJpZ2dlcmVkIGZyb20gYGt2bV93cml0ZV9zeXN0ZW1fdGltZWAsIHdoaWNoIGhhbmRsZXMgd3JpdGVzIHRvIHRoZSBgTVNSX0tWTV9TWVNURU1fVElNRWAgYW5kIGBNU1JfS1ZNX1NZU1RFTV9USU1FX05FV2AgTVNScy4gVGhpcyBwYXRoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdpdGhpbiBRRU1VLCBwYXJ0aWN1bGFybHkgaW4gYSBHQ0UgZW52aXJvbm1lbnQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCB0YXJnZXQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhIHJhY2UgY29uZGl0aW9uIGx1cmtpbmcgd2l0aGluIGBwZm5jYWNoZS5jYCwgbGlrZWx5IGludm9sdmluZyBNTVUgbm90aWZpZXJzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBtbl9pbnZhbGlkYXRlX3NlcWAgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgIHBvaW50IHRvd2FyZHMgc3luY2hyb25pemF0aW9uIGVmZm9ydHMgd2l0aGluIHRoZSBNTVUgbm90aWZpY2F0aW9uIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBLVk0gY29yZSwgd2hpY2ggbWVhbnMgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBmb2N1c2VkIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIHRvIGVuYWJsZSBhbmQgaGl0IHRoaXMgY29kZT8gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBqdXN0IGBLVk1gIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgS1ZNYCBpcyBhIHRyaXN0YXRlLCBzbyBqdXN0IGxpc3RpbmcgYEtWTWAgaXMgY29ycmVjdC4gSSBjaGVja2VkIHdoZXJlIHRoZSBjb2RlIHJlc2lkZXMsIGl0JiMzOTtzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBUaGUgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBjb25maWcgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGBLVk1gIG9uIHg4Niwgd2hpY2ggY29uZmlybXMgdGhhdCBgS1ZNYCBhbG9uZSBpcyB0aGUgdHJpZ2dlci4KCk5vdyBmb3Igc3ltYm9sIGFuYWx5c2lzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCAod2hpY2ggaXMgaW5saW5lKSwgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCAod2hpY2ggaXMgc3RhdGljKS4gSeKAmW0gZ29pbmcgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aG9zZS4gU2luY2UgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAgaXMgaW5saW5lIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAgaXMgc3RhdGljLCBJJiMzOTtsbCBiZSB0YXJnZXRpbmcgdGhlIHB1YmxpYyBmYWNpbmcgZnVuY3Rpb25zLiBTbywgdGhhdCBtZWFuczogYGt2bV9ncGNfcmVmcmVzaGAsIGBrdm1fZ3BjX2FjdGl2YXRlYCwgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCwgYW5kIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBga3ZtX2dwY19yZWZyZXNoYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBUaG9zZSB3aWxsIGJlIG15IHByaW1hcnkgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL3BmbmNhY2hlLmM9MTU1PXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjU1LVxudmlydC9rdm0vcGZuY2FjaGUuYzoyNTY6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjU3LXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM2NS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzY2OmludCBrdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM2Ny17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy0zODEtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM4MjpcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYy1cdTAwM2VncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy0zODMtfVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk3PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDIzLVx0fVxudmlydC9rdm0vcGZuY2FjaGUuYzo0MjQ6XHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy00MjUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUwMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLVk0gQ29kZWJhc2UqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCBga3ZtX2dwY19yZWZyZXNoYCBpcyAqbm9uLXN0YXRpYyouIE9rYXksIHNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGV4cG9zZWQuIEl0JiMzOTtzIG5vdCBsaW1pdGVkIGluIHNjb3BlIHdpdGhpbiBhIHNpbmdsZSBzb3VyY2UgZmlsZSwgd2hpY2ggaW1tZWRpYXRlbHkgYnJvYWRlbnMgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJdCBpbXBsaWVzIGl0IGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgcG90ZW50aWFsbHkgYWNyb3NzIGRpZmZlcmVudCBtb2R1bGVzIG9yIGV2ZW4sIGhlYXZlbiBmb3JiaWQsIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIHNvbWUgaW9jdGwuIEkgbmVlZCB0byBub3cgY29uc2lkZXIgaXRzIGNhbGxpbmcgY29udGV4dDsgd2hhdCBvdGhlciBmdW5jdGlvbnMgY2FsbCB0aGlzLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSB3aGF0IGl0cyBmdW5jdGlvbiBhY3R1YWxseSBpcywgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSBhcyBhIHdob2xlLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBnZXR0aW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL3BmbmNhY2hlLmM9Mzg1PXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM5Ni1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6Mzk3OnN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTgtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MjYtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQyNzppbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKVxudmlydC9rdm0vcGZuY2FjaGUuYy00Mjgte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDM1LVxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzY6XHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgZ3BhLCBLVk1fSFZBX0VSUl9CQUQsIGxlbik7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzNy19XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzOC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDM5OmludCBrdm1fZ3BjX2FjdGl2YXRlX2h2YShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIHVodmEsIHVuc2lnbmVkIGxvbmcgbGVuKVxudmlydC9rdm0vcGZuY2FjaGUuYy00NDAte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQzLVxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDQ6XHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgSU5WQUxJRF9HUEEsIHVodmEsIGxlbik7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgS1ZNIE1NVSBJbnZhbGlkYXRpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBLVk0gTU1VIGZ1bmN0aW9ucy4gSSYjMzk7dmUgZ290IGBrdm1fZ3BjX2FjdGl2YXRlYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCBpbiBmb2N1cyByaWdodCBub3csIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGV5JiMzOTtyZSAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmcg4oCTIGl0IG1lYW5zIHRoZXkmIzM5O3JlIGxpa2VseSBleHBvcnRlZCBhbmQgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIEtWTSBjb2RlLCBvciBwb3RlbnRpYWxseSBldmVuIGZyb20gb3V0c2lkZSB0aGUgS1ZNIG1vZHVsZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGFjdGl2YXRpb24vbWFuYWdlbWVudC4KClRoZW4gSSBzZWUgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCB3aGljaCAqaXMqIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBkaXN0aW5jdGlvbi4gTm93LCB0aGUgb2J2aW91cyBxdWVzdGlvbiBpbW1lZGlhdGVseSBiZWNvbWVzOiBJZiB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYywgd2hhdCYjMzk7cyBjYWxsaW5nIGl0PyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIHNjb3BlIHdpdGhpbiB0aGUgTU1VIGludmFsaWRhdGlvbiBwcm9jZXNzLiBHaXZlbiBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHByb2JhYmx5IG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIGZpbGUgb3IgYSBsb2NhbCBoZWxwZXIgZnVuY3Rpb24uIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgYW5kIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBndWVzcyBpcyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBvZiBpbnZhbGlkYXRpbmcgVExCIGVudHJpZXMgcmVsYXRlZCB0byBhIHJhbmdlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucyBpdCBoYXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIE1NVSBpbmZyYXN0cnVjdHVyZS4gR290dGEgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NzcxPXZvaWQga3ZtX21tdV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy03OTYtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjc5NzpzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxudmlydC9rdm0va3ZtX21haW4uYy03OTgtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9ODg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBrdm1fbW11X25vdGlmaWVyX29wcyA9IHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg2LVx0LmludmFsaWRhdGVfcmFuZ2Vfc3RhcnRcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0LFxudmlydC9rdm0va3ZtX21haW4uYzo4ODc6XHQuaW52YWxpZGF0ZV9yYW5nZV9lbmRcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg4LVx0LmNsZWFyX2ZsdXNoX3lvdW5nXHQ9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODkxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIE1NVSBOb3RpZmllciBDYWxsYmFja3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgY2FsbGJhY2sgd2l0aGluIGBrdm1fbW11X25vdGlmaWVyX29wc2AuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgR2xvYmFsIFBhZ2UgQ2FjaGUgKEdQQykuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgZXhhbWluaW5nIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLiBMZXQgbWUgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMuCgpIbW0sIGlzIGBrdm1fbW11X2ludmFsaWRhdGVfZW5kYCByZWxldmFudD8gTm8sIHRoZSBwYXRjaCBJJiMzOTttIHJldmlld2luZyBtb2RpZmllZCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAgaW5zdGVhZC4gV2FpdCwgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB1c3VhbGx5IGlubGluZWQuIEJ1dCwgaXQmIzM5O3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgTU1VIG5vdGlmaWVycy4gQ2FuIEkgZXZlbiBjb25zaWRlciBpdD8gVGhlIHByb21wdCBpcyB0ZWxsaW5nIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEJ1dCwgc2luY2UgaXQmIzM5O3MgYSBjYWxsYmFjaywgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoZXJlZm9yZSwgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIEkgY2FuIGxpc3QgaXQhCgpOb3csIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAuIEkgbmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz03NzE9dm9pZCBrdm1fbW11X2ludmFsaWRhdGVfZW5kKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTc5Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Nzk3OnN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTc5OC1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz04ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGt2bV9tbXVfbm90aWZpZXJfb3BzID0ge1xudmlydC9rdm0va3ZtX21haW4uYy04ODYtXHQuaW52YWxpZGF0ZV9yYW5nZV9zdGFydFx0PSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQsXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjg4NzpcdC5pbnZhbGlkYXRlX3JhbmdlX2VuZFx0PSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLFxudmlydC9rdm0va3ZtX21haW4uYy04ODgtXHQuY2xlYXJfZmx1c2hfeW91bmdcdD0ga3ZtX21tdV9ub3RpZmllcl9jbGVhcl9mbHVzaF95b3VuZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3OTEKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FsbGJhY2sgYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgdGhpcyBsb29rcyBsaWtlIGEgY2FsbGJhY2suIFJpZ2h0LCBsZXQgbWUgcGlucG9pbnQgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMgaGVyZS4gSSBzZWUgYGt2bV9ncGNfcmVmcmVzaGAsIGBrdm1fZ3BjX2FjdGl2YXRlYCwgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCwgYW5kIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSG9sZCBvbiwgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQsIGlzIGl0PyBCdXQgaXQgKmRvZXMqIGNhbGwgYF9fa3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCB0aGF0IG9uZSBjYWxscyBgX19rdm1fZ3BjX3JlZnJlc2hgLiBBaCwgYW5kIGBfX2t2bV9ncGNfcmVmcmVzaGAgdGhlbiBjYWxscyBgaHZhX3RvX3Bmbl9yZXRyeWAsIHdoaWNoICppcyogdGhlIG9uZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiBiZWluZyBtb2RpZmllZC4gVGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYWxsIGNvbm5lY3RlZCBhcyBJIGV4cGVjdC4gU28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGBLVk1gIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaGVyZS4gWWVwLCBjb25maXJtZWQsIGBLVk1gIGlzIHRoZSBtYWluIGNvbmZpZy4gQWxsIHNldCB0aGVuLiBOb3csIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlX2h2YSYjMzQ7LAogICAgJiMzNDtrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBub3RpZmllciBsb2dpYyBhbmQgcGZuY2FjaGUgcmVmcmVzaCBtZWNoYW5pc21zIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIGBtbl9pbnZhbGlkYXRlX3NlcWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZV9odmEmIzM0OywKICAgICYjMzQ7a3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbm90aWZpZXIgbG9naWMgYW5kIHBmbmNhY2hlIHJlZnJlc2ggbWVjaGFuaXNtcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBgbW5faW52YWxpZGF0ZV9zZXFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTM0ZWMzOTJmNzk5NmZhOGFhMDc1NWJkMGI0ZTIwZGIzZWNjMzIxYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE5OjMxOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IGFiOGNmYWVjODJkMzEuLjBhYzM4MmNkOWU2YWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTgwMCw2ICYjNDM7ODAwLDcgQEAgc3RydWN0IGt2bSB7CiAJLyogVXNlZCB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIE1NVSBub3RpZmllcnMuICAqLwogCXNwaW5sb2NrX3QgbW5faW52YWxpZGF0ZV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbW5faW52YWxpZGF0ZV9zZXE7CiAJc3RydWN0IHJjdXdhaXQgbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQ7CiAKIAkvKiBGb3IgbWFuYWdlbWVudCAvIGludmFsaWRhdGlvbiBvZiBnZm5fdG9fcGZuX2NhY2hlcyAqLwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNDVlNzg0NDYyZWM2ZS4uNWU0M2RkNjNjOGJkZCAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC04MTIsOCAmIzQzOzgxMiwxNSBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAogCiAJLyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovCiAJc3Bpbl9sb2NrKCZhbXA7a3ZtLSZndDttbl9pbnZhbGlkYXRlX2xvY2spOwotCWlmICghV0FSTl9PTl9PTkNFKCFrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSkKJiM0MzsJaWYgKCFXQVJOX09OX09OQ0UoIWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKSB7CiYjNDM7CQlrdm0tJmd0O21uX2ludmFsaWRhdGVfc2VxJiM0MzsmIzQzOzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQdWJsaXNoIHRoZSBzZXF1ZW5jZSB1cGRhdGUgYmVmb3JlIGRyb3BwaW5nIHRoZSBhY3RpdmUgY291bnQKJiM0MzsJCSAqIHNvIHRoYXQgcGZuY2FjaGUgcmVmcmVzaGVzIG9ic2VydmUgb25lIG9yIHRoZSBvdGhlci4KJiM0MzsJCSAqLwomIzQzOwkJc21wX3dtYigpOwogCQktLWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7CiYjNDM7CX0KIAl3YWtlID0gIWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7CiAJc3Bpbl91bmxvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7CiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCmluZGV4IDcyOGQyYzFiNDg4YTguLmQzNjBmMWVkYTg5NzkgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuYwpAQCAtMTI0LDcgJiM0MzsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSkKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1uX3NlcSkKIHsKIAkvKgogCSAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcwpAQCAtMTM2LDIwICYjNDM7MTM2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zCiAJICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQKIAkgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy0mZ3Q7bG9jay4gIEl0IGlzIGd1YXJhbnRlZWQgdG8KIAkgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtJmd0O2xvY2ssIGFuZAotCSAqIGlzbiYjMzk7dCBkcm9wcGVkIHVudGlsIGFmdGVyIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLgomIzQzOwkgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbl9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLgogCSAqLwotCWlmIChrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KQomIzQzOwlpZiAoUkVBRF9PTkNFKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCiAJICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlCi0JICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4KJiM0MzsJICogbW5faW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgogCSAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlCiAJICogb2xkIChub24temVybykgdmFsdWUgb2YgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgb3IgdGhlCi0JICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgomIzQzOwkgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbl9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KIAkgKi8KIAlzbXBfcm1iKCk7Ci0JcmV0dXJuIGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoa3ZtLSZndDttbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxOwogfQogCiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKQEAgLTE1OCw3ICYjNDM7MTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpCiAJdm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy0mZ3Q7a2h2YSk7CiAJa3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDsKIAl2b2lkICpuZXdfa2h2YSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBtbXVfc2VxOwomIzQzOwl1bnNpZ25lZCBsb25nIG1uX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCWdwYy0mZ3Q7dmFsaWQgPSBmYWxzZTsKIAogCWRvIHsKLQkJbW11X3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQltbl9zZXEgPSBSRUFEX09OQ0UoZ3BjLSZndDtrdm0tJmd0O21uX2ludmFsaWRhdGVfc2VxKTsKIAkJc21wX3JtYigpOwogCiAJCXdyaXRlX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwpAQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAkJICogYXR0ZW1wdGluZyB0byByZWZyZXNoLgogCQkgKi8KIAkJV0FSTl9PTl9PTkNFKGdwYy0mZ3Q7dmFsaWQpOwotCX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSkpOwomIzQzOwl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIG1uX3NlcSkpOwogCiAJZ3BjLSZndDt2YWxpZCA9IHRydWU7CiAJZ3BjLSZndDtwZm4gPSBuZXdfcGZuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3MAoJCQkJCQkJb3V0cHV0OiAxMjIKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIE1NVSBOb3RpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCBpbiBga3ZtX21haW4uY2AgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCBpbiBgcGZuY2FjaGUuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggS1ZNJiMzOTtzIE1NVSBub3RpZmllciBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBoeXBlcnZpc29yLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSByZXBsYWNpbmcgdGhlIGdlbmVyaWMgYG1tdV9pbnZhbGlkYXRlX3NlcWAgd2l0aCBhIEtWTS1zcGVjaWZpYyBgbW5faW52YWxpZGF0ZV9zZXFgIGZpZWxkIGFkZGVkIHRvIHRoZSBgc3RydWN0IGt2bWAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IHNpZ25hbHMgYSBkZXNpcmUgZm9yIG1vcmUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBpbnZhbGlkYXRpb24gc2VxdWVuY2luZy4KCkl0JiMzOTtzIHVzaW5nIHRoaXMgbmV3IGBtbl9pbnZhbGlkYXRlX3NlcWAgaW4gdGhlIGBwZm5jYWNoZWAgaGFuZGxpbmcsIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIGFpbWVkIGF0IHJlc29sdmluZyBzb21lIHJhY2UgY29uZGl0aW9uIG9yIHNlcXVlbmNlIGNvdW50ZXIgaXNzdWUgcmVsYXRlZCB0byBob3cgUEZOIGNhY2hlIGVudHJpZXMgYXJlIGludmFsaWRhdGVkIHdoZW4gTU1VIG5vdGlmaWNhdGlvbnMgY29tZSBpbi4gR29vZC4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgcmFjZSBpdCYjMzk7cyB0cnlpbmcgdG8gZWxpbWluYXRlLCBidXQgdGhpcyBhcHByb2FjaCBvZiB1c2luZyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIGlzIGEgY29tbW9uIGFuZCB1c3VhbGx5IGVmZmVjdGl2ZSB3YXkgdG8gaGFuZGxlIHN1Y2ggcHJvYmxlbXMuCgpJIHNlZSBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIGxpa2UgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gVGhhdCYjMzk7cyBhIHJlbGllZi4gSXQmIzM5O3MgYSBwcmV0dHkgdGFyZ2V0ZWQgY2hhbmdlLiBUaGUgY29tbWl0IG1lc3NhZ2UgcmlnaHRseSBwb2ludHMgb3V0IHRoYXQgaXNzdWVzIGFyaXNpbmcgZnJvbSAqdGhpcyogcGFydGljdWxhciBwYXRjaCBhcmUgbGlrZWx5IGNvbmN1cnJlbmN5LXJlbGF0ZWQgYnVncyDigJMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLiBLQVNBTiwgTE9DS0RFUCwgYW5kIEtDU0FOIChvciBzaW1wbHkgcm9idXN0IHRlc3RpbmcpIGFyZSB0aGUgdG9vbHMgZm9yIGRldGVjdGluZyB0aG9zZSwgYW5kIEtNU0FOIGlzbiYjMzk7dCBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBleHBvc2UgaXQgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB0aGF0IEtNU0FOIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUgYXQgY2F0Y2hpbmcuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gbXkgYXNzdW1wdGlvbnM6IFllcCwgYG1uX2ludmFsaWRhdGVfc2VxYCBpcyBiZWluZyBhZGRlZCB0byBgc3RydWN0IGt2bWAgYW5kIGluY3JlbWVudGVkIGluIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gVGhlIHN3aXRjaCB0byB1c2luZyB0aGF0IHNlcXVlbmNlIGNvdW50ZXIgaW5zdGVhZCBvZiB0aGUgc2hhcmVkIG9uZSBmb3IgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAgaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuIFRoaXMgbG9va3MgbGlrZSBhIGNvbmN1cnJlbmN5IGZpeCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBLVk0gUEZOIGNhY2hlIGludmFsaWRhdGlvbi4gTm8gY29uY2VybnMgYWJvdXQgTmVlZHNLTVNBTiA9IGZhbHNlLCBJIGFncmVlIGNvbXBsZXRlbHkgd2l0aCB0aGF0IGFzc2Vzc21lbnQuIEkmIzM5O20gc2F0aXNmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBLVk0gTU1VIG5vdGlmaWVycyBieSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgbW5faW52YWxpZGF0ZV9zZXFgKSBmb3IgcGZuY2FjaGUgaW52YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIG9yIHN0YW5kYXJkIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzE6NTMuNDMyNjM3MjAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4NDk1MDUzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlX2h2YVwiLFxuICAgIFwia3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbm90aWZpZXIgbG9naWMgYW5kIHBmbmNhY2hlIHJlZnJlc2ggbWVjaGFuaXNtcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBgbW5faW52YWxpZGF0ZV9zZXFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMxOjUzLjQzMjY0NDc2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDEwNDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEzNGVjMzkyZjc5OTZmYThhYTA3NTViZDBiNGUyMGRiM2VjYzMyMWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggYWI4Y2ZhZWM4MmQzMS4uMGFjMzgyY2Q5ZTZhZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtODAwLDYgKzgwMCw3IEBAIHN0cnVjdCBrdm0ge1xcbiBcXHQvKiBVc2VkIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgTU1VIG5vdGlmaWVycy4gICovXFxuIFxcdHNwaW5sb2NrX3QgbW5faW52YWxpZGF0ZV9sb2NrO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xcbitcXHR1bnNpZ25lZCBsb25nIG1uX2ludmFsaWRhdGVfc2VxO1xcbiBcXHRzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDtcXG4gXFxuIFxcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggNDVlNzg0NDYyZWM2ZS4uNWU0M2RkNjNjOGJkZCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC04MTIsOCArODEyLDE1IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXFxuIFxcbiBcXHQvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi9cXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XFxuLVxcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcXG4rXFx0aWYgKCFXQVJOX09OX09OQ0UoIWt2bS1cXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKSB7XFxuK1xcdFxcdGt2bS1cXHUwMDNlbW5faW52YWxpZGF0ZV9zZXErKztcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUHVibGlzaCB0aGUgc2VxdWVuY2UgdXBkYXRlIGJlZm9yZSBkcm9wcGluZyB0aGUgYWN0aXZlIGNvdW50XFxuK1xcdFxcdCAqIHNvIHRoYXQgcGZuY2FjaGUgcmVmcmVzaGVzIG9ic2VydmUgb25lIG9yIHRoZSBvdGhlci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNtcF93bWIoKTtcXG4gXFx0XFx0LS1rdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xcbitcXHR9XFxuIFxcdHdha2UgPSAha3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXFxuaW5kZXggNzI4ZDJjMWI0ODhhOC4uZDM2MGYxZWRhODk3OSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jXFxuKysrIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xcbkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbl9zZXEpXFxuIHtcXG4gXFx0LypcXG4gXFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXFxuQEAgLTEzNiwyMCArMTM2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zXFxuIFxcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XFxuIFxcdCAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLVxcdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xcbiBcXHQgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtXFx1MDAzZWxvY2ssIGFuZFxcbi1cXHQgKiBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLlxcbitcXHQgKiBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIG1uX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcXG4rXFx0aWYgKFJFQURfT05DRShrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmVcXG4tXFx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cXG4rXFx0ICogbW5faW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxcbiBcXHQgKiBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZVxcbiBcXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcXG4tXFx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxcbitcXHQgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbl9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cXG4gXFx0ICovXFxuIFxcdHNtcF9ybWIoKTtcXG4tXFx0cmV0dXJuIGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XFxuK1xcdHJldHVybiBSRUFEX09OQ0Uoa3ZtLVxcdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxO1xcbiB9XFxuIFxcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG5AQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbiBcXHR2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLVxcdTAwM2VraHZhKTtcXG4gXFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcXG4gXFx0dm9pZCAqbmV3X2todmEgPSBOVUxMO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbW5fc2VxO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFxuIFxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0Z3BjLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRtbXVfc2VxID0gZ3BjLVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0XFx0bW5fc2VxID0gUkVBRF9PTkNFKGdwYy1cXHUwMDNla3ZtLVxcdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSk7XFxuIFxcdFxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0XFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGdwYy1cXHUwMDNldmFsaWQpO1xcbi1cXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVxcdTAwM2Vrdm0sIG1tdV9zZXEpKTtcXG4rXFx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cXHUwMDNla3ZtLCBtbl9zZXEpKTtcXG4gXFxuIFxcdGdwYy1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbiBcXHRncGMtXFx1MDAzZXBmbiA9IG5ld19wZm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMxOjU1LjAwMzQ2MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MTMyMTIxNzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCIsXG4gICAgXCJrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIG5vdGlmaWVyIGxvZ2ljIGFuZCBwZm5jYWNoZSByZWZyZXNoIG1lY2hhbmlzbXMgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYG1uX2ludmFsaWRhdGVfc2VxYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMzRlYzM5MmY3OTk2ZmE4YWEwNzU1YmQwYjRlMjBkYjNlY2MzMjFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjBhYzM4MmNkOWU2YWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTgwMCw2ICs4MDAsNyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdC8qIFVzZWQgdG8gd2FpdCBmb3IgY29tcGxldGlvbiBvZiBNTVUgbm90aWZpZXJzLiAgKi9cbiBcdHNwaW5sb2NrX3QgbW5faW52YWxpZGF0ZV9sb2NrO1xuIFx0dW5zaWduZWQgbG9uZyBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbitcdHVuc2lnbmVkIGxvbmcgbW5faW52YWxpZGF0ZV9zZXE7XG4gXHRzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDtcbiBcbiBcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLjVlNDNkZDYzYzhiZGQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDggKzgxMiwxNSBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4tXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbitcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKSB7XG4rXHRcdGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSsrO1xuK1x0XHQvKlxuK1x0XHQgKiBQdWJsaXNoIHRoZSBzZXF1ZW5jZSB1cGRhdGUgYmVmb3JlIGRyb3BwaW5nIHRoZSBhY3RpdmUgY291bnRcbitcdFx0ICogc28gdGhhdCBwZm5jYWNoZSByZWZyZXNoZXMgb2JzZXJ2ZSBvbmUgb3IgdGhlIG90aGVyLlxuK1x0XHQgKi9cbitcdFx0c21wX3dtYigpO1xuIFx0XHQtLWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbitcdH1cbiBcdHdha2UgPSAha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vcGZuY2FjaGUuYyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbmluZGV4IDcyOGQyYzFiNDg4YTguLmQzNjBmMWVkYTg5NzkgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jXG4rKysgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5AQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1uX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbitcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW5faW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiBcdCAqL1xuLVx0aWYgKGt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcbitcdGlmIChSRUFEX09OQ0Uoa3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuK1x0ICogbW5faW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuIFx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuK1x0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW5faW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuXG4gXHQgKi9cbiBcdHNtcF9ybWIoKTtcbi1cdHJldHVybiBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHR2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLVx1MDAzZWtodmEpO1xuIFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiBcdHZvaWQgKm5ld19raHZhID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbitcdHVuc2lnbmVkIGxvbmcgbW5fc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdG1uX3NlcSA9IFJFQURfT05DRShncGMtXHUwMDNla3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfc2VxKTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBtbl9zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMxOjU1LjAwMzQ2MzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4MTM5OTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBNTVUgTm90aWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBLVk0gTU1VIG5vdGlmaWVyIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0J3MgaW50cm9kdWNpbmcgdGhpcyBgbW5faW52YWxpZGF0ZV9zZXFgIGZpZWxkIHRvIHRoZSBgc3RydWN0IGt2bWAgYW5kIHRoZW4gdXBkYXRpbmcgZnVuY3Rpb25zIGxpa2UgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCwgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCB0byB1c2UgdGhpcyBuZXcgc2VxdWVuY2UgY291bnRlci4gRnJvbSB0aGUgZmlsZSBsb2NhdGlvbnMsIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLCBJIGNhbiB0ZWxsIHRoaXMgaXMgcmVhbGx5IHRvdWNoaW5nIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkg4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gaW52YWxpZGF0aW5nIGNhY2hlZCBNTVUgZW50cmllcywgYW5kIEknbSBndWVzc2luZyB0aGlzIHNlcXVlbmNlIG51bWJlciBpcyBjcnVjaWFsIGZvciBzb21lIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIG9yIG9yZGVyaW5nLlxuXG5TaW5jZSB0aGlzIGlzIEtWTSwgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBjaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0aGUgS2NvbmZpZyBmaWxlLiBJJ20gdGhpbmtpbmcsIHdoZXJlIGlzIEtWTSBkZWZpbmVkPyBgQ09ORklHX0tWTWAgaXMgdHlwaWNhbGx5IHdoYXQgZW5hYmxlcyBpdCwgc28gbGV0J3MgY2hlY2sgYHZpcnQva3ZtL0tjb25maWdgLiBObywgd2FpdC4gR2l2ZW4gdGhlIHBhdGggb2YgdGhlIGZpbGVzLCBJIGtub3cgdGhpcyBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuXG5cblJpZ2h0LCBgdmlydC9rdm0vTWFrZWZpbGVgLiBJIHdpbGwgY2hlY2sgd2hhdCBLVk0gYnVpbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzczLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MDAuNzg0ODY0OTM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTQ1MTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9tYWluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZS5rdm09Nj1LVk0gPz0gLi4vLi4vLi4vdmlydC9rdm1cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tNy1cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06ODprdm0teSA6PSAkKEtWTSkva3ZtX21haW4ubyAkKEtWTSkvZXZlbnRmZC5vICQoS1ZNKS9iaW5hcnlfc3RhdHMub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bS05LWt2bS0kKENPTkZJR19LVk1fVkZJTykgKz0gJChLVk0pL3ZmaW8ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjowMC44NzE0MTUyMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgwNzY1MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBob25lcyBpbiBvbiBgQ09ORklHX0tWTWAg4oCTIHRoYXQncyB0aGUgY29yZSBvZiB0aGlzIHdob2xlIHZpcnR1YWxpemF0aW9uIHNldHVwLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgY29uZmlndXJlZC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIGtleSBmZWF0dXJlcyBpdCBlbmFibGVzPyBJdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gc3dpdGNoLCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuQnV0IEknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZiwgaXQncyBub3QgdGhlIGNvbmZpZ3VyYXRpb24gaXRzZWxmIEkgd2FudCB0byBkZWx2ZSBpbnRvIGp1c3QgeWV0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgdG8gdGhlIEtWTSBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdGFrZXMgbWUgdG8gYHBmbmNhY2hlLmNgLiBTZWVtcyBsaWtlIGFuIGludGVyZXN0aW5nIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCB2aXJ0dWFsIG1hY2hpbmUgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCdsbCBpbGx1bWluYXRlIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGFuZCB0aGUgY2FjaGluZyBtZWNoYW5pc21zLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjowNC40NTIxODI4OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4Nzc0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBmbmNhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZS5rdm09MTM9a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX0RJUlRZX1JJTkcpICs9ICQoS1ZNKS9kaXJ0eV9yaW5nLm9cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTQ6a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKSArPSAkKEtWTSkvcGZuY2FjaGUub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bS0xNS1rdm0tJChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSArPSAkKEtWTSkvZ3Vlc3RfbWVtZmQub1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz03OTc9c3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODE4LVxcdFxcdCAqIFB1Ymxpc2ggdGhlIHNlcXVlbmNlIHVwZGF0ZSBiZWZvcmUgZHJvcHBpbmcgdGhlIGFjdGl2ZSBjb3VudFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODE5OlxcdFxcdCAqIHNvIHRoYXQgcGZuY2FjaGUgcmVmcmVzaGVzIG9ic2VydmUgb25lIG9yIHRoZSBvdGhlci5cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTgyMC1cXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MDUuMjQwOTY2MDQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyOTQxNTcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfSEFWRV9LVk1fUEZOQ0FDSEVgIGFyZSBlc3NlbnRpYWwsIGFzIGV4cGVjdGVkLiBCdXQgdGhlbiBteSBtaW5kIGtpY2tzIGluIOKAkyBoYW5nIG9uIGEgc2Vjb25kLCBgSEFWRV9LVk1fUEZOQ0FDSEVgIGlzICp0eXBpY2FsbHkqIGNob3NlbiBhdXRvbWF0aWNhbGx5IGJ5IGFyY2hpdGVjdHVyZXMgdGhhdCBhY3R1YWxseSByZXF1aXJlIGl0cyBmdW5jdGlvbmFsaXR5LiBTbyBpdCBzaG91bGRuJ3QganVzdCBiZSBlbmFibGVkIGFyYml0cmFyaWx5LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBjaGFpbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUsIHByb2JhYmx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIChvciBzb21ldGhpbmcgc2ltaWxhciBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCkuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIHdoZXRoZXIgdGhlIGBLVk1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRpcmVjdGx5IHNlbGVjdHMgYEhBVkVfS1ZNX1BGTkNBQ0hFYC4gVGhhdCdzIHdoZXJlIHRoZSBhbnN3ZXIgdG8gaG93IHRoZSB0d28gcmVsYXRlIGxpZXMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgbG9naWMgdGhlcmUgd2hpY2ggSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbCB0byBmaW5kIG91dCBleGFjdGx5IHdoeSBhIHBhcnRpY3VsYXIgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTgwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MDguOTcwMzg0NDQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTk0ODg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0tWTV9QRk5DQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjUtXFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyNjpcXHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNy1cXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19UU09cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MDkuNDYyMzM4NjIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2NjA2ODEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipLVk0gUEZOIENhY2hlIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIEtWTSBjb2RlIG9uIHg4NiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHByZXNlbmNlIG9mIHRoZSBgSEFWRV9LVk1fUEZOQ0FDSEVgIGZlYXR1cmUgaXMgYmVpbmcgc2VsZWN0ZWQuIFRoYXQncyBpbnRlcmVzdGluZywgaXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBQRk4gY2FjaGUsIGFuZCBob3cgdGhhdCdzIGJlaW5nIG1hbmFnZWQuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHRvdWNoZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uIGFyZTogYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCAod2hpY2ggaXMgaW5saW5lLCBvZiBjb3Vyc2UpLCBhbmQgYGh2YV90b19wZm5fcmV0cnlgLlxuXG5Ib2xkIG9uLi4uIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBkZWNsYXJlZCBgc3RhdGljYD8gVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZS4gSWYgaXQncyBzdGF0aWMsIGl0J3Mgc2NvcGVkIHRvIHRoZSBjdXJyZW50IGZpbGUsIHNvIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIEkgaGF2ZSB0byBmaW5kIHRoZSBjYWxsaW5nIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSBiZWNvbWVzOiB3aGF0IGZ1bmN0aW9ucyAqY2FsbCogYGh2YV90b19wZm5fcmV0cnlgIHdpdGhpbiB0aGUgY3VycmVudCBmaWxlPyBJJ2xsIG5lZWQgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBkZXRlcm1pbmUgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjEzLjQyODQxMDU5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5OTc4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHZhX3RvX3Bmbl9yZXRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW5fc2VxKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTQtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoxNTU6c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTYte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYz0yNTY9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzIxLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzIyOlxcdC8qIE5vdGU6IHRoZSBvZmZzZXQgbXVzdCBiZSBjb3JyZWN0IGJlZm9yZSBjYWxsaW5nIGh2YV90b19wZm5fcmV0cnkoKSAqL1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzIzLVxcdGdwYy1cXHUwMDNldWh2YSArPSBwYWdlX29mZnNldDtcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzI5LVxcdGlmICghZ3BjLVxcdTAwM2V2YWxpZCB8fCBodmFfY2hhbmdlKSB7XFxudmlydC9rdm0vcGZuY2FjaGUuYzozMzA6XFx0XFx0cmV0ID0gaHZhX3RvX3Bmbl9yZXRyeShncGMpO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzMxLVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjEzLjQ5ODQxMzcwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE4NzMwNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgQ2FsbCBDaGFpbiBvZiBgX19rdm1fZ3BjX3JlZnJlc2hgKipcblxuT2theSwgc28gYF9fa3ZtX2dwY19yZWZyZXNoYCBpcyB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gYnVybmluZyBpbiBteSBtaW5kIGlzOiB3aGF0J3MgdGhlIGNhbGwgY2hhaW4gdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggdG8gdHJ1bHkgZ3Jhc3AgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBrZXJuZWwgY29kZSBpcyBjYWxsaW5nIGBfX2t2bV9ncGNfcmVmcmVzaGAuIElzIGl0IHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50LCBhIHRpbWVyLCBvciBhIHBhcnRpY3VsYXIgc3lzdGVtIGNhbGw/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24uIExldCBtZSB0cmFjZSB0aGUgY2FsbHMgYW5kIHNlZSB3aGVyZSBpdCBzaG93cyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjE3LjExNzE0NjYyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NzQ1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rdm1fZ3BjX3JlZnJlc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MTU1PXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yNTUtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoyNTY6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI1Ny17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM2Nj1pbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zODEtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozODI6XFx0cmV0dXJuIF9fa3ZtX2dwY19yZWZyZXNoKGdwYywgZ3BjLVxcdTAwM2VncGEsIHVodmEpO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzgzLX1cXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk3PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MjMtXFx0fVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDI0OlxcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYSwgdWh2YSk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy00MjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjoxNy4xOTc2MjU2MDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNjgzOTk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEtWTSBHdWVzdCBQYWdlIENhY2hlIChHUEMpIFJlZnJlc2gqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGt2bV9ncGNfcmVmcmVzaGAgYW5kIGBfX2t2bV9ncGNfYWN0aXZhdGVgLiBJIHNlZSB0aGV5J3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBJJ3ZlIGdvdCB0byBhbnN3ZXI6ICp3aGF0KiBpcyBjYWxsaW5nIGBrdm1fZ3BjX3JlZnJlc2hgPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2Ygd2hhdCdzIGdvaW5nIG9uLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgZ2V0dGluZyBpbnZva2VkIGZyb20gc29tZXdoZXJlOyB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIHRyaWdnZXJpbmcgY29uZGl0aW9ucyBhbmQgdGhlIG92ZXJhbGwgZmxvdyB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yIHJlbGF0ZWQgdG8gdGhlIEd1ZXN0IFBhZ2UgQ2FjaGUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIElzIGl0IHRyaWdnZXJlZCBvbiBldmVyeSBjb250ZXh0IHN3aXRjaCwgb3Igb25seSBpbiBjZXJ0YWluIHNjZW5hcmlvcz8gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgaXMgdGhlIGZpcnN0IGNyaXRpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBHUEMgcmVmcmVzaCBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjoyMC45MDQ0NjczMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNDc0OTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfcmVmcmVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0zMjQyPXN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzI1Ni1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzI1NzpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICsgc2l6ZW9mKCpndWVzdF9odl9jbG9jaykpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMjU4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0zOD1zdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNTEtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjUyOlxcdFxcdHJldCA9IGt2bV9ncGNfcmVmcmVzaChncGMsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTUzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTUzPXN0YXRpYyBpbnQgeGVuX2dldF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjQtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE2NTpcXHRcXHRyID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICsgc2l6ZW9mKCpodl9jbG9jaykpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjYtXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MzIxPXN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDM4LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo0Mzk6XFx0XFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMxLCB1c2VyX2xlbjEpKVxcbmFyY2gveDg2L2t2bS94ZW4uYy00NDAtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTYzOT12b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy02NTYtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjY1NzpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjU4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz02OTc9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03MzAtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjczMTpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbmFyY2gveDg2L2t2bS94ZW4uYy03MzItXFx0XFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xOTAxPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTQ0LVxcdFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTQ1OlxcdFxcdHJjID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgUEFHRV9TSVpFKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk0Ni1cXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjIwLjk5Njk0NTk3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg3Njg0MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBHdWVzdCBDbG9jayBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhlIGd1ZXN0IGNsb2NrIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGluIEtWTS4gSSBzZWUgdGhhdCBga3ZtX2dwY19yZWZyZXNoYCBnZXRzIGNhbGxlZCBmcm9tIGBrdm1fc2V0dXBfZ3Vlc3RfcHZjbG9ja2AsIHdoaWNoIG1ha2VzIHNlbnNlOyBpbml0aWFsaXppbmcgdGhlIHBhcmF2aXJ0dWFsaXplZCBjbG9jayB3b3VsZCBpbnZvbHZlIHJlZnJlc2hpbmcgdGhlIGdsb2JhbCBwYWdlIGZvciBpdC4gSSdtIGFsc28gc2VlaW5nIGl0J3MgY2FsbGVkIGZyb20gdmFyaW91cyBYZW4tcmVsYXRlZCBmdW5jdGlvbnMsIHdoaWNoIHN1Z2dlc3RzIHNvbWUgZGVncmVlIG9mIGludGVyb3BlcmFiaWxpdHkgb3IgY3Jvc3MtY29tcGF0aWJpbGl0eSB0aGVyZSwgbGlrZWx5IGZvciB1c2UgY2FzZXMgaW52b2x2aW5nIFhlbiBndWVzdHMgcnVubmluZyB1bmRlciBLVk0uIFRoYXQncyBnb29kIHRvIGtub3cuIEJ1dCwgbXkgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBga3ZtX2dwY19hY3RpdmF0ZWA/IElzIGl0IGp1c3QgY2FsbGVkIGZyb20gYGt2bV9ncGNfcmVmcmVzaGA/IFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGFjdGl2YXRpb24gcHJvY2VzcyBhbmQgdGhlIHJlZnJlc2ggcHJvY2Vzcz8gRG9lcyB0aGUgXCJyZWZyZXNoXCIgaW1wbHkgYSByZS1hY3RpdmF0aW9uPyBXaGVyZSBhcmUgdGhlIGFjdGl2YXRpb24gY2FsbHM/IElzIHRoZSBhY3RpdmF0aW9uIG9ubHkgdGllZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgb3IgaXMgaXQgdHJpZ2dlcmVkIGJ5IG90aGVyIGV2ZW50cz8gVGhlIGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGxpZmUgY3ljbGUgb2YgdGhpcyBtZWNoYW5pc20gbmVlZHMgbW9yZSBzY3J1dGlueSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MjUuMjg0NjMyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDU1NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9MjQyOD1zdGF0aWMgdm9pZCBrdm1fd3JpdGVfc3lzdGVtX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzeXN0ZW1fdGltZSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0yNDQ0LVxcdGlmIChzeXN0ZW1fdGltZSBcXHUwMDI2IDEpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI0NDU6XFx0XFx0a3ZtX2dwY19hY3RpdmF0ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdl90aW1lLCBzeXN0ZW1fdGltZSBcXHUwMDI2IH4xVUxMLFxcbmFyY2gveDg2L2t2bS94ODYuYy0yNDQ2LVxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8pKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0zMjE9c3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYylcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy00ODUtXFx0XFx0XFx0LypcXG5hcmNoL3g4Ni9rdm0veGVuLmM6NDg2OlxcdFxcdFxcdCAqIFVzZSBrdm1fZ3BjX2FjdGl2YXRlKCkgaGVyZSBiZWNhdXNlIGlmIHRoZSBydW5zdGF0ZVxcbmFyY2gveDg2L2t2bS94ZW4uYy00ODctXFx0XFx0XFx0ICogYXJlYSB3YXMgY29uZmlndXJlZCBpbiAzMi1iaXQgbW9kZSBhbmQgb25seSBleHRlbmRzXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDkwLVxcdFxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS94ZW4uYzo0OTE6XFx0XFx0XFx0aWYgKGt2bV9ncGNfYWN0aXZhdGUoZ3BjMiwgZ3BjMS1cXHUwMDNlZ3BhICsgdXNlcl9sZW4xLFxcbmFyY2gveDg2L2t2bS94ZW4uYy00OTItXFx0XFx0XFx0XFx0XFx0ICAgICB1c2VyX2xlbjIpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTc0Nj1pbnQga3ZtX3hlbl9odm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03ODUtXFx0XFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0veGVuLmM6Nzg2OlxcdFxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzg3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZ2ZuX3RvX2dwYShnZm4pLCBQQUdFX1NJWkUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTc5Ny1cXHRcXHRcXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS94ZW4uYzo3OTg6XFx0XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzk5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAodW5zaWduZWQgbG9uZylodmEsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9OTA2PWludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTI4LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo5Mjk6XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTMwLVxcdFxcdFxcdFxcdFxcdCAgICAgZGF0YS1cXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTM3LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo5Mzg6XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzOS1cXHRcXHRcXHRcXHRcXHRcXHQgZGF0YS1cXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTUzLVxcbmFyY2gveDg2L2t2bS94ZW4uYzo5NTQ6XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfdGltZV9pbmZvX2NhY2hlLFxcbmFyY2gveDg2L2t2bS94ZW4uYy05NTUtXFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy05ODctXFx0XFx0c3oxID0gUEFHRV9TSVpFIC0gKGRhdGEtXFx1MDAzZXUuZ3BhIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuYXJjaC94ODYva3ZtL3hlbi5jOjk4ODpcXHRcXHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC54ZW4ucnVuc3RhdGVfY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTk4OS1cXHRcXHRcXHRcXHQgICAgIGRhdGEtXFx1MDAzZXUuZ3BhLCBzejEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTk5OC1cXHRcXHRcXHRCVUdfT04oKGRhdGEtXFx1MDAzZXUuZ3BhICsgc3oxKSBcXHUwMDI2IH5QQUdFX01BU0spO1xcbmFyY2gveDg2L2t2bS94ZW4uYzo5OTk6XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnJ1bnN0YXRlMl9jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTAwMC1cXHRcXHRcXHRcXHRcXHQgICAgIGRhdGEtXFx1MDAzZXUuZ3BhICsgc3oxLCBzejIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjoyNS4zOTU2OTI4OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUwODE5NjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFJhY2UgQ29uZGl0aW9uIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgaW50ZXJlc3RpbmcuIGBrdm1fZ3BjX2FjdGl2YXRlYCBpcyB0cmlnZ2VyZWQgZnJvbSBga3ZtX3dyaXRlX3N5c3RlbV90aW1lYCwgd2hpY2ggaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGBNU1JfS1ZNX1NZU1RFTV9USU1FYCBhbmQgYE1TUl9LVk1fU1lTVEVNX1RJTUVfTkVXYCBNU1JzLiBUaGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgd2l0aGluIFFFTVUsIHBhcnRpY3VsYXJseSBpbiBhIEdDRSBlbnZpcm9ubWVudCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHRhcmdldC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24gbHVya2luZyB3aXRoaW4gYHBmbmNhY2hlLmNgLCBsaWtlbHkgaW52b2x2aW5nIE1NVSBub3RpZmllcnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1uX2ludmFsaWRhdGVfc2VxYCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAgcG9pbnQgdG93YXJkcyBzeW5jaHJvbml6YXRpb24gZWZmb3J0cyB3aXRoaW4gdGhlIE1NVSBub3RpZmljYXRpb24gZnJhbWV3b3JrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIEtWTSBjb3JlLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZvY3VzZWQgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBlbmFibGUgYW5kIGhpdCB0aGlzIGNvZGU/IEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDoganVzdCBgS1ZNYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYEtWTWAgaXMgYSB0cmlzdGF0ZSwgc28ganVzdCBsaXN0aW5nIGBLVk1gIGlzIGNvcnJlY3QuIEkgY2hlY2tlZCB3aGVyZSB0aGUgY29kZSByZXNpZGVzLCBpdCdzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBUaGUgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBjb25maWcgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGBLVk1gIG9uIHg4Niwgd2hpY2ggY29uZmlybXMgdGhhdCBgS1ZNYCBhbG9uZSBpcyB0aGUgdHJpZ2dlci5cblxuTm93IGZvciBzeW1ib2wgYW5hbHlzaXMuIFRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAsIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgICh3aGljaCBpcyBpbmxpbmUpLCBhbmQgYGh2YV90b19wZm5fcmV0cnlgICh3aGljaCBpcyBzdGF0aWMpLiBJ4oCZbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRob3NlLiBTaW5jZSBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCBpcyBpbmxpbmUgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBzdGF0aWMsIEknbGwgYmUgdGFyZ2V0aW5nIHRoZSBwdWJsaWMgZmFjaW5nIGZ1bmN0aW9ucy4gU28sIHRoYXQgbWVhbnM6IGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAsIGFuZCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGt2bV9ncGNfcmVmcmVzaGAgYW5kIGBrdm1fZ3BjX2FjdGl2YXRlYCBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYy4gVGhvc2Ugd2lsbCBiZSBteSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjozMy45MDM4OTE5NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTQ4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfcmVmcmVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MTU1PXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yNTUtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoyNTY6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI1Ny17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM2NS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM2NjppbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzY3LXtcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzgxLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzgyOlxcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYy1cXHUwMDNlZ3BhLCB1aHZhKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4My19XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM5Nz1zdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDIzLVxcdH1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQyNDpcXHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGEsIHVodmEpO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDI1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MzMuOTk3NDQ3OTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzExOTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtWTSBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIHRoYXQgYGt2bV9ncGNfcmVmcmVzaGAgaXMgKm5vbi1zdGF0aWMqLiBPa2F5LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBleHBvc2VkLiBJdCdzIG5vdCBsaW1pdGVkIGluIHNjb3BlIHdpdGhpbiBhIHNpbmdsZSBzb3VyY2UgZmlsZSwgd2hpY2ggaW1tZWRpYXRlbHkgYnJvYWRlbnMgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEl0IGltcGxpZXMgaXQgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzLCBwb3RlbnRpYWxseSBhY3Jvc3MgZGlmZmVyZW50IG1vZHVsZXMgb3IgZXZlbiwgaGVhdmVuIGZvcmJpZCwgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggc29tZSBpb2N0bC4gSSBuZWVkIHRvIG5vdyBjb25zaWRlciBpdHMgY2FsbGluZyBjb250ZXh0OyB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIHRoaXMsIHdoaWNoIHdvdWxkIGluZGljYXRlIHdoYXQgaXRzIGZ1bmN0aW9uIGFjdHVhbGx5IGlzLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlIGFzIGEgd2hvbGUuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGdldHRpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjozNy42NDA1Njk4OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTQxOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vcGZuY2FjaGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jPTM4NT12b2lkIGt2bV9ncGNfaW5pdChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM5Ni1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM5NzpzdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM5OC1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDI2LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDI3OmludCBrdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4pXFxudmlydC9rdm0vcGZuY2FjaGUuYy00Mjgte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzUtXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzY6XFx0cmV0dXJuIF9fa3ZtX2dwY19hY3RpdmF0ZShncGMsIGdwYSwgS1ZNX0hWQV9FUlJfQkFELCBsZW4pO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDM3LX1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzOC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQzOTppbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyB1aHZhLCB1bnNpZ25lZCBsb25nIGxlbilcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0MC17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0My1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQ0NDpcXHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgSU5WQUxJRF9HUEEsIHVodmEsIGxlbik7XFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjozNy43MDc3MTU3NjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMjkzMzc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyBLVk0gTU1VIEludmFsaWRhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBLVk0gTU1VIGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYGt2bV9ncGNfYWN0aXZhdGVgIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgIGluIGZvY3VzIHJpZ2h0IG5vdywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZXkncmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmcg4oCTIGl0IG1lYW5zIHRoZXkncmUgbGlrZWx5IGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGUsIG9yIHBvdGVudGlhbGx5IGV2ZW4gZnJvbSBvdXRzaWRlIHRoZSBLVk0gbW9kdWxlLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgYWN0aXZhdGlvbi9tYW5hZ2VtZW50LlxuXG5UaGVuIEkgc2VlIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgd2hpY2ggKmlzKiBzdGF0aWMuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbi4gTm93LCB0aGUgb2J2aW91cyBxdWVzdGlvbiBpbW1lZGlhdGVseSBiZWNvbWVzOiBJZiB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYywgd2hhdCdzIGNhbGxpbmcgaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgc2NvcGUgd2l0aGluIHRoZSBNTVUgaW52YWxpZGF0aW9uIHByb2Nlc3MuIEdpdmVuIGl0J3Mgc3RhdGljLCBpdCdzIHByb2JhYmx5IG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIGZpbGUgb3IgYSBsb2NhbCBoZWxwZXIgZnVuY3Rpb24uIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgYW5kIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBndWVzcyBpcyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIGludmFsaWRhdGluZyBUTEIgZW50cmllcyByZWxhdGVkIHRvIGEgcmFuZ2UsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb25zIGl0IGhhcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gTU1VIGluZnJhc3RydWN0dXJlLiBHb3R0YSBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo0MS45MjA2NTMxODhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjYyNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTc3MT12b2lkIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy03OTYtXFxudmlydC9rdm0va3ZtX21haW4uYzo3OTc6c3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTc5OC1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9ODg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBrdm1fbW11X25vdGlmaWVyX29wcyA9IHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTg4Ni1cXHQuaW52YWxpZGF0ZV9yYW5nZV9zdGFydFxcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0LFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODg3OlxcdC5pbnZhbGlkYXRlX3JhbmdlX2VuZFxcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTg4OC1cXHQuY2xlYXJfZmx1c2hfeW91bmdcXHQ9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjQxLjk5NzkyMDA5M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzAxNzAzNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIE1NVSBOb3RpZmllciBDYWxsYmFja3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIGNhbGxiYWNrIHdpdGhpbiBga3ZtX21tdV9ub3RpZmllcl9vcHNgLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIEdsb2JhbCBQYWdlIENhY2hlIChHUEMpLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGV4YW1pbmluZyBga3ZtX2dwY19yZWZyZXNoYCwgYGt2bV9ncGNfYWN0aXZhdGVgLCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYC4gTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zLlxuXG5IbW0sIGlzIGBrdm1fbW11X2ludmFsaWRhdGVfZW5kYCByZWxldmFudD8gTm8sIHRoZSBwYXRjaCBJJ20gcmV2aWV3aW5nIG1vZGlmaWVkIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCBpbnN0ZWFkLiBXYWl0LCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzdWFsbHkgaW5saW5lZC4gQnV0LCBpdCdzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIE1NVSBub3RpZmllcnMuIENhbiBJIGV2ZW4gY29uc2lkZXIgaXQ/IFRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBCdXQsIHNpbmNlIGl0J3MgYSBjYWxsYmFjaywgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoZXJlZm9yZSwgaXQgd29uJ3QgYmUgaW5saW5lZC4gSSBjYW4gbGlzdCBpdCFcblxuTm93LCBJJ2xsIGRvdWJsZS1jaGVjayBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAuIEkgbmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4OTEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6NTAuNjk5NjI3MzI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQ2ODU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz03NzE9dm9pZCBrdm1fbW11X2ludmFsaWRhdGVfZW5kKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzk2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Nzk3OnN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXFxudmlydC9rdm0va3ZtX21haW4uYy03OTgtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTg4NT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMga3ZtX21tdV9ub3RpZmllcl9vcHMgPSB7XFxudmlydC9rdm0va3ZtX21haW4uYy04ODYtXFx0LmludmFsaWRhdGVfcmFuZ2Vfc3RhcnRcXHQ9IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjg4NzpcXHQuaW52YWxpZGF0ZV9yYW5nZV9lbmRcXHQ9IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQsXFxudmlydC9rdm0va3ZtX21haW4uYy04ODgtXFx0LmNsZWFyX2ZsdXNoX3lvdW5nXFx0PSBrdm1fbW11X25vdGlmaWVyX2NsZWFyX2ZsdXNoX3lvdW5nLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo1MC43NjYxMDA5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzgyOTc1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDYWxsYmFjayBhbmQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIGNhbGxiYWNrLiBSaWdodCwgbGV0IG1lIHBpbnBvaW50IHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGhlcmUuIEkgc2VlIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAsIGFuZCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAuIEhvbGQgb24sIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQsIGlzIGl0PyBCdXQgaXQgKmRvZXMqIGNhbGwgYF9fa3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCB0aGF0IG9uZSBjYWxscyBgX19rdm1fZ3BjX3JlZnJlc2hgLiBBaCwgYW5kIGBfX2t2bV9ncGNfcmVmcmVzaGAgdGhlbiBjYWxscyBgaHZhX3RvX3Bmbl9yZXRyeWAsIHdoaWNoICppcyogdGhlIG9uZSB3ZSdyZSBpbnRlcmVzdGVkIGluIGJlaW5nIG1vZGlmaWVkLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCdzIGFsbCBjb25uZWN0ZWQgYXMgSSBleHBlY3QuIFNvIHdlJ3JlIGdvb2QgdGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB2ZXJpZnkgdGhhdCBgS1ZNYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGhlcmUuIFllcCwgY29uZmlybWVkLCBgS1ZNYCBpcyB0aGUgbWFpbiBjb25maWcuIEFsbCBzZXQgdGhlbi4gTm93LCBJJ2xsIGdvIGFoZWFkIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzkxLCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo1Ni4yNDQ0MDA1ODFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI3NTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlX2h2YVwiLFxuICAgIFwia3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBub3RpZmllciBsb2dpYyBhbmQgcGZuY2FjaGUgcmVmcmVzaCBtZWNoYW5pc21zIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIGBtbl9pbnZhbGlkYXRlX3NlcWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCIsXG4gICAgXCJrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIG5vdGlmaWVyIGxvZ2ljIGFuZCBwZm5jYWNoZSByZWZyZXNoIG1lY2hhbmlzbXMgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYG1uX2ludmFsaWRhdGVfc2VxYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo1Ni4zMjQ2ODMxMDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTc0NDUwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo1Ni4zMjUyMTkwOTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTk1NjkwNjIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMzRlYzM5MmY3OTk2ZmE4YWEwNzU1YmQwYjRlMjBkYjNlY2MzMjFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjBhYzM4MmNkOWU2YWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTgwMCw2ICs4MDAsNyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdC8qIFVzZWQgdG8gd2FpdCBmb3IgY29tcGxldGlvbiBvZiBNTVUgbm90aWZpZXJzLiAgKi9cbiBcdHNwaW5sb2NrX3QgbW5faW52YWxpZGF0ZV9sb2NrO1xuIFx0dW5zaWduZWQgbG9uZyBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbitcdHVuc2lnbmVkIGxvbmcgbW5faW52YWxpZGF0ZV9zZXE7XG4gXHRzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDtcbiBcbiBcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLjVlNDNkZDYzYzhiZGQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDggKzgxMiwxNSBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4tXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbitcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKSB7XG4rXHRcdGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSsrO1xuK1x0XHQvKlxuK1x0XHQgKiBQdWJsaXNoIHRoZSBzZXF1ZW5jZSB1cGRhdGUgYmVmb3JlIGRyb3BwaW5nIHRoZSBhY3RpdmUgY291bnRcbitcdFx0ICogc28gdGhhdCBwZm5jYWNoZSByZWZyZXNoZXMgb2JzZXJ2ZSBvbmUgb3IgdGhlIG90aGVyLlxuK1x0XHQgKi9cbitcdFx0c21wX3dtYigpO1xuIFx0XHQtLWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbitcdH1cbiBcdHdha2UgPSAha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vcGZuY2FjaGUuYyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbmluZGV4IDcyOGQyYzFiNDg4YTguLmQzNjBmMWVkYTg5NzkgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jXG4rKysgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5AQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1uX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbitcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW5faW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiBcdCAqL1xuLVx0aWYgKGt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcbitcdGlmIChSRUFEX09OQ0Uoa3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuK1x0ICogbW5faW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuIFx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuK1x0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW5faW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuXG4gXHQgKi9cbiBcdHNtcF9ybWIoKTtcbi1cdHJldHVybiBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHR2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLVx1MDAzZWtodmEpO1xuIFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiBcdHZvaWQgKm5ld19raHZhID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbitcdHVuc2lnbmVkIGxvbmcgbW5fc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdG1uX3NlcSA9IFJFQURfT05DRShncGMtXHUwMDNla3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfc2VxKTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBtbl9zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjU2LjMyNTIyMjI3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTU2ODgxMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBNTVUgTm90aWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCBpbiBga3ZtX21haW4uY2AgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCBpbiBgcGZuY2FjaGUuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBLVk0ncyBNTVUgbm90aWZpZXIgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgd2l0aGluIHRoYXQgcGFydCBvZiB0aGUgaHlwZXJ2aXNvci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGBtbXVfaW52YWxpZGF0ZV9zZXFgIHdpdGggYSBLVk0tc3BlY2lmaWMgYG1uX2ludmFsaWRhdGVfc2VxYCBmaWVsZCBhZGRlZCB0byB0aGUgYHN0cnVjdCBrdm1gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCBzaWduYWxzIGEgZGVzaXJlIGZvciBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcuXG5cbkl0J3MgdXNpbmcgdGhpcyBuZXcgYG1uX2ludmFsaWRhdGVfc2VxYCBpbiB0aGUgYHBmbmNhY2hlYCBoYW5kbGluZywgd2hpY2ggc3VnZ2VzdHMgaXQncyBhaW1lZCBhdCByZXNvbHZpbmcgc29tZSByYWNlIGNvbmRpdGlvbiBvciBzZXF1ZW5jZSBjb3VudGVyIGlzc3VlIHJlbGF0ZWQgdG8gaG93IFBGTiBjYWNoZSBlbnRyaWVzIGFyZSBpbnZhbGlkYXRlZCB3aGVuIE1NVSBub3RpZmljYXRpb25zIGNvbWUgaW4uIEdvb2QuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgcmFjZSBpdCdzIHRyeWluZyB0byBlbGltaW5hdGUsIGJ1dCB0aGlzIGFwcHJvYWNoIG9mIHVzaW5nIGEgZGVkaWNhdGVkIHNlcXVlbmNlIGNvdW50ZXIgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgZWZmZWN0aXZlIHdheSB0byBoYW5kbGUgc3VjaCBwcm9ibGVtcy5cblxuSSBzZWUgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyBsaWtlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIFRoYXQncyBhIHJlbGllZi4gSXQncyBhIHByZXR0eSB0YXJnZXRlZCBjaGFuZ2UuIFRoZSBjb21taXQgbWVzc2FnZSByaWdodGx5IHBvaW50cyBvdXQgdGhhdCBpc3N1ZXMgYXJpc2luZyBmcm9tICp0aGlzKiBwYXJ0aWN1bGFyIHBhdGNoIGFyZSBsaWtlbHkgY29uY3VycmVuY3ktcmVsYXRlZCBidWdzIOKAkyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlcywgb3IgbG9naWNhbCBlcnJvcnMuIEtBU0FOLCBMT0NLREVQLCBhbmQgS0NTQU4gKG9yIHNpbXBseSByb2J1c3QgdGVzdGluZykgYXJlIHRoZSB0b29scyBmb3IgZGV0ZWN0aW5nIHRob3NlLCBhbmQgS01TQU4gaXNuJ3QgcGFydGljdWxhcmx5IHJlbGV2YW50IGhlcmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBleHBvc2UgaXQgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB0aGF0IEtNU0FOIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUgYXQgY2F0Y2hpbmcuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBteSBhc3N1bXB0aW9uczogWWVwLCBgbW5faW52YWxpZGF0ZV9zZXFgIGlzIGJlaW5nIGFkZGVkIHRvIGBzdHJ1Y3Qga3ZtYCBhbmQgaW5jcmVtZW50ZWQgaW4gYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBUaGUgc3dpdGNoIHRvIHVzaW5nIHRoYXQgc2VxdWVuY2UgY291bnRlciBpbnN0ZWFkIG9mIHRoZSBzaGFyZWQgb25lIGZvciBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gVGhpcyBsb29rcyBsaWtlIGEgY29uY3VycmVuY3kgZml4IHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEtWTSBQRk4gY2FjaGUgaW52YWxpZGF0aW9uLiBObyBjb25jZXJucyBhYm91dCBOZWVkc0tNU0FOID0gZmFsc2UsIEkgYWdyZWUgY29tcGxldGVseSB3aXRoIHRoYXQgYXNzZXNzbWVudC4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3MCwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMzowNi4yODIxMDk5MzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIEtWTSBNTVUgbm90aWZpZXJzIGJ5IGludHJvZHVjaW5nIGEgZGVkaWNhdGVkIHNlcXVlbmNlIGNvdW50ZXIgKGBtbl9pbnZhbGlkYXRlX3NlcWApIGZvciBwZm5jYWNoZSBpbnZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3Igc3RhbmRhcmQgdGVzdGluZywgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzhjhd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 18:49:40 +0000 UTC FinishedAt: 2026-08-10 19:33:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "395e9edd-926e-40bb-b32d-c338da216567" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gpc_refresh", "kvm_gpc_activate", "kvm_gpc_activate_hva", "kvm_mmu_notifier_invalidate_range_end" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGVfaHZhJiMzNDssCiAgICAmIzM0O2t2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBLVk0gTU1VIG5vdGlmaWVycyBieSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgbW5faW52YWxpZGF0ZV9zZXFgKSBmb3IgcGZuY2FjaGUgaW52YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIG9yIHN0YW5kYXJkIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbm90aWZpZXIgbG9naWMgYW5kIHBmbmNhY2hlIHJlZnJlc2ggbWVjaGFuaXNtcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBgbW5faW52YWxpZGF0ZV9zZXFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMzRlYzM5MmY3OTk2ZmE4YWEwNzU1YmQwYjRlMjBkYjNlY2MzMjFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCBhYjhjZmFlYzgyZDMxLi4wYWMzODJjZDllNmFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC04MDAsNiAmIzQzOzgwMCw3IEBAIHN0cnVjdCBrdm0ge1xuIFx0LyogVXNlZCB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIE1NVSBub3RpZmllcnMuICAqL1xuIFx0c3BpbmxvY2tfdCBtbl9pbnZhbGlkYXRlX2xvY2s7XG4gXHR1bnNpZ25lZCBsb25nIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbW5faW52YWxpZGF0ZV9zZXE7XG4gXHRzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDtcbiBcbiBcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLjVlNDNkZDYzYzhiZGQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDggJiM0Mzs4MTIsMTUgQEAgc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcbiBcbiBcdC8qIFBhaXJzIHdpdGggdGhlIGluY3JlbWVudCBpbiByYW5nZV9zdGFydCgpLiAqL1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xuLVx0aWYgKCFXQVJOX09OX09OQ0UoIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpXG4mIzQzO1x0aWYgKCFXQVJOX09OX09OQ0UoIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpIHtcbiYjNDM7XHRcdGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHVibGlzaCB0aGUgc2VxdWVuY2UgdXBkYXRlIGJlZm9yZSBkcm9wcGluZyB0aGUgYWN0aXZlIGNvdW50XG4mIzQzO1x0XHQgKiBzbyB0aGF0IHBmbmNhY2hlIHJlZnJlc2hlcyBvYnNlcnZlIG9uZSBvciB0aGUgb3RoZXIuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNtcF93bWIoKTtcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4mIzQzO1x0fVxuIFx0d2FrZSA9ICFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHRzcGluX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcbiBcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uZDM2MGYxZWRhODk3OSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbl9zZXEpXG4ge1xuIFx0LypcbiBcdCAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlc1xuQEAgLTEzNiwyMCAmIzQzOzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnRcbiBcdCAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLVx1MDAzZWxvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvXG4gXHQgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtXHUwMDNlbG9jaywgYW5kXG4tXHQgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiYjNDM7XHQgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbl9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLlxuIFx0ICovXG4tXHRpZiAoa3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KVxuJiM0MztcdGlmIChSRUFEX09OQ0Uoa3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuJiM0MztcdCAqIG1uX2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbiBcdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4gXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcbi1cdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiYjNDM7XHQgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbl9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtbl9zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4mIzQzO1x0XHRtbl9zZXEgPSBSRUFEX09OQ0UoZ3BjLVx1MDAzZWt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSk7XG4gXHRcdHNtcF9ybWIoKTtcbiBcbiBcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG5AQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxuIFx0XHQgKi9cbiBcdFx0V0FSTl9PTl9PTkNFKGdwYy1cdTAwM2V2YWxpZCk7XG4tXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgbW11X3NlcSkpO1xuJiM0MztcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBtbl9zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZV9odmEmIzM0OywKICAgICYjMzQ7a3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbm90aWZpZXIgbG9naWMgYW5kIHBmbmNhY2hlIHJlZnJlc2ggbWVjaGFuaXNtcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBgbW5faW52YWxpZGF0ZV9zZXFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMzRlYzM5MmY3OTk2ZmE4YWEwNzU1YmQwYjRlMjBkYjNlY2MzMjFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uMGFjMzgyY2Q5ZTZhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODAwLDYgJiM0Mzs4MDAsNyBAQCBzdHJ1Y3Qga3ZtIHsKIAkvKiBVc2VkIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgTU1VIG5vdGlmaWVycy4gICovCiAJc3BpbmxvY2tfdCBtbl9pbnZhbGlkYXRlX2xvY2s7CiAJdW5zaWduZWQgbG9uZyBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBtbl9pbnZhbGlkYXRlX3NlcTsKIAlzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDsKIAogCS8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA0NWU3ODQ0NjJlYzZlLi41ZTQzZGQ2M2M4YmRkIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTgxMiw4ICYjNDM7ODEyLDE1IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAKIAkvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi8KIAlzcGluX2xvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7Ci0JaWYgKCFXQVJOX09OX09OQ0UoIWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKQomIzQzOwlpZiAoIVdBUk5fT05fT05DRSgha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpIHsKJiM0MzsJCWt2bS0mZ3Q7bW5faW52YWxpZGF0ZV9zZXEmIzQzOyYjNDM7OwomIzQzOwkJLyoKJiM0MzsJCSAqIFB1Ymxpc2ggdGhlIHNlcXVlbmNlIHVwZGF0ZSBiZWZvcmUgZHJvcHBpbmcgdGhlIGFjdGl2ZSBjb3VudAomIzQzOwkJICogc28gdGhhdCBwZm5jYWNoZSByZWZyZXNoZXMgb2JzZXJ2ZSBvbmUgb3IgdGhlIG90aGVyLgomIzQzOwkJICovCiYjNDM7CQlzbXBfd21iKCk7CiAJCS0ta3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKJiM0MzsJfQogCXdha2UgPSAha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKIAlzcGluX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW5faW52YWxpZGF0ZV9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vcGZuY2FjaGUuYyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmMKaW5kZXggNzI4ZDJjMWI0ODhhOC4uZDM2MGYxZWRhODk3OSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW5fc2VxKQogewogCS8qCiAJICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzCkBAIC0xMzYsMjAgJiM0MzsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3MKIAkgKiBOb3RlLCBpdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudAogCSAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLSZndDtsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0bwogCSAqIGJlIGVsZXZhdGVkIGJlZm9yZSB0aGUgbW11X25vdGlmaWVyIGFjcXVpcmVzIGdwYy0mZ3Q7bG9jaywgYW5kCi0JICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiYjNDM7CSAqIGlzbiYjMzk7dCBkcm9wcGVkIHVudGlsIGFmdGVyIG1uX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiAJICovCi0JaWYgKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpCiYjNDM7CWlmIChSRUFEX09OQ0Uoa3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCkpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmUKLQkgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgomIzQzOwkgKiBtbl9pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluCiAJICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGUKIAkgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGUKLQkgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuCiYjNDM7CSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1uX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgogCSAqLwogCXNtcF9ybWIoKTsKLQlyZXR1cm4ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTsKJiM0MzsJcmV0dXJuIFJFQURfT05DRShrdm0tJmd0O21uX2ludmFsaWRhdGVfc2VxKSAhPSBtbl9zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU4LDcgJiM0MzsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAl2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLSZndDtraHZhKTsKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbW5fc2VxOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJc3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHsKQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpCiAJZ3BjLSZndDt2YWxpZCA9IGZhbHNlOwogCiAJZG8gewotCQltbXVfc2VxID0gZ3BjLSZndDtrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJCW1uX3NlcSA9IFJFQURfT05DRShncGMtJmd0O2t2bS0mZ3Q7bW5faW52YWxpZGF0ZV9zZXEpOwogCQlzbXBfcm1iKCk7CiAKIAkJd3JpdGVfdW5sb2NrX2lycSgmYW1wO2dwYy0mZ3Q7bG9jayk7CkBAIC0yMzIsNyAmIzQzOzIzMiw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCQkgKiBhdHRlbXB0aW5nIHRvIHJlZnJlc2guCiAJCSAqLwogCQlXQVJOX09OX09OQ0UoZ3BjLSZndDt2YWxpZCk7Ci0JfSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy0mZ3Q7a3ZtLCBtbXVfc2VxKSk7CiYjNDM7CX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW5fc2VxKSk7CiAKIAlncGMtJmd0O3ZhbGlkID0gdHJ1ZTsKIAlncGMtJmd0O3BmbiA9IG5ld19wZm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gTU1VIE5vdGlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgS1ZNIE1NVSBub3RpZmllciBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGlzIGBtbl9pbnZhbGlkYXRlX3NlcWAgZmllbGQgdG8gdGhlIGBzdHJ1Y3Qga3ZtYCBhbmQgdGhlbiB1cGRhdGluZyBmdW5jdGlvbnMgbGlrZSBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAsIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgLCBhbmQgYGh2YV90b19wZm5fcmV0cnlgIHRvIHVzZSB0aGlzIG5ldyBzZXF1ZW5jZSBjb3VudGVyLiBGcm9tIHRoZSBmaWxlIGxvY2F0aW9ucywgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AsIEkgY2FuIHRlbGwgdGhpcyBpcyByZWFsbHkgdG91Y2hpbmcgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSDigJMgcHJvYmFibHkgcmVsYXRlZCB0byBpbnZhbGlkYXRpbmcgY2FjaGVkIE1NVSBlbnRyaWVzLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGlzIHNlcXVlbmNlIG51bWJlciBpcyBjcnVjaWFsIGZvciBzb21lIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIG9yIG9yZGVyaW5nLgoKU2luY2UgdGhpcyBpcyBLVk0sIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBLY29uZmlnIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGlzIEtWTSBkZWZpbmVkPyBgQ09ORklHX0tWTWAgaXMgdHlwaWNhbGx5IHdoYXQgZW5hYmxlcyBpdCwgc28gbGV0JiMzOTtzIGNoZWNrIGB2aXJ0L2t2bS9LY29uZmlnYC4gTm8sIHdhaXQuIEdpdmVuIHRoZSBwYXRoIG9mIHRoZSBmaWxlcywgSSBrbm93IHRoaXMgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLgoKUmlnaHQsIGB2aXJ0L2t2bS9NYWtlZmlsZWAuIEkgd2lsbCBjaGVjayB3aGF0IEtWTSBidWlsZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX21haW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTY9S1ZNID89IC4uLy4uLy4uL3ZpcnQva3ZtXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tNy1cbnZpcnQva3ZtL01ha2VmaWxlLmt2bTo4Omt2bS15IDo9ICQoS1ZNKS9rdm1fbWFpbi5vICQoS1ZNKS9ldmVudGZkLm8gJChLVk0pL2JpbmFyeV9zdGF0cy5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tOS1rdm0tJChDT05GSUdfS1ZNX1ZGSU8pICYjNDM7PSAkKEtWTSkvdmZpby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA2NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4gaG9uZXMgaW4gb24gYENPTkZJR19LVk1gIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoaXMgd2hvbGUgdmlydHVhbGl6YXRpb24gc2V0dXAsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIGtleSBmZWF0dXJlcyBpdCBlbmFibGVzPyBJdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHN3aXRjaCwgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKQnV0IEkmIzM5O20gZ2V0dGluZyBhaGVhZCBvZiBteXNlbGYsIGl0JiMzOTtzIG5vdCB0aGUgY29uZmlndXJhdGlvbiBpdHNlbGYgSSB3YW50IHRvIGRlbHZlIGludG8ganVzdCB5ZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhpcyB0byB0aGUgS1ZNIGltcGxlbWVudGF0aW9uLCBhbmQgdGhhdCBpbW1lZGlhdGVseSB0YWtlcyBtZSB0byBgcGZuY2FjaGUuY2AuIFNlZW1zIGxpa2UgYW4gaW50ZXJlc3RpbmcgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBvdmVyYWxsIHZpcnR1YWwgbWFjaGluZSBtZW1vcnkgbWFuYWdlbWVudC4gSSBzdXNwZWN0IGl0JiMzOTtsbCBpbGx1bWluYXRlIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGFuZCB0aGUgY2FjaGluZyBtZWNoYW5pc21zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZm5jYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9NYWtlZmlsZS5rdm09MTM9a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX0RJUlRZX1JJTkcpICYjNDM7PSAkKEtWTSkvZGlydHlfcmluZy5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTQ6a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKSAmIzQzOz0gJChLVk0pL3BmbmNhY2hlLm9cbnZpcnQva3ZtL01ha2VmaWxlLmt2bS0xNS1rdm0tJChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSAmIzQzOz0gJChLVk0pL2d1ZXN0X21lbWZkLm9cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTc5Nz1zdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtODE4LVx0XHQgKiBQdWJsaXNoIHRoZSBzZXF1ZW5jZSB1cGRhdGUgYmVmb3JlIGRyb3BwaW5nIHRoZSBhY3RpdmUgY291bnRcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODE5Olx0XHQgKiBzbyB0aGF0IHBmbmNhY2hlIHJlZnJlc2hlcyBvYnNlcnZlIG9uZSBvciB0aGUgb3RoZXIuXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTgyMC1cdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU4MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFYCBhcmUgZXNzZW50aWFsLCBhcyBleHBlY3RlZC4gQnV0IHRoZW4gbXkgbWluZCBraWNrcyBpbiDigJMgaGFuZyBvbiBhIHNlY29uZCwgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBpcyAqdHlwaWNhbGx5KiBjaG9zZW4gYXV0b21hdGljYWxseSBieSBhcmNoaXRlY3R1cmVzIHRoYXQgYWN0dWFsbHkgcmVxdWlyZSBpdHMgZnVuY3Rpb25hbGl0eS4gU28gaXQgc2hvdWxkbiYjMzk7dCBqdXN0IGJlIGVuYWJsZWQgYXJiaXRyYXJpbHkuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IGNoYWluLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUsIHByb2JhYmx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIChvciBzb21ldGhpbmcgc2ltaWxhciBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB3aGV0aGVyIHRoZSBgS1ZNYCBjb25maWd1cmF0aW9uIG9wdGlvbiBkaXJlY3RseSBzZWxlY3RzIGBIQVZFX0tWTV9QRk5DQUNIRWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFuc3dlciB0byBob3cgdGhlIHR3byByZWxhdGUgbGllcy4gSSBleHBlY3QgdGhlcmUgdG8gYmUgc29tZSBsb2dpYyB0aGVyZSB3aGljaCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbCB0byBmaW5kIG91dCBleGFjdGx5IHdoeSBhIHBhcnRpY3VsYXIgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBVkVfS1ZNX1BGTkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNS1cdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyNjpcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxuYXJjaC94ODYva3ZtL0tjb25maWctMjctXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19UU09cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKktWTSBQRk4gQ2FjaGUgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBLVk0gY29kZSBvbiB4ODYsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBwcmVzZW5jZSBvZiB0aGUgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBmZWF0dXJlIGlzIGJlaW5nIHNlbGVjdGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBpdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBQRk4gY2FjaGUsIGFuZCBob3cgdGhhdCYjMzk7cyBiZWluZyBtYW5hZ2VkLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgdG91Y2hlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gYXJlOiBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAsIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgICh3aGljaCBpcyBpbmxpbmUsIG9mIGNvdXJzZSksIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAuCgpIb2xkIG9uLi4uIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBkZWNsYXJlZCBgc3RhdGljYD8gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHdyaW5rbGUuIElmIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoZSBjdXJyZW50IGZpbGUsIHNvIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIEkgaGF2ZSB0byBmaW5kIHRoZSBjYWxsaW5nIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSBiZWNvbWVzOiB3aGF0IGZ1bmN0aW9ucyAqY2FsbCogYGh2YV90b19wZm5fcmV0cnlgIHdpdGhpbiB0aGUgY3VycmVudCBmaWxlPyBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h2YV90b19wZm5fcmV0cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW5fc2VxKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTU0LVxudmlydC9rdm0vcGZuY2FjaGUuYzoxNTU6c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1Ni17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0yNTY9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzIyOlx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMy1cdGdwYy1cdTAwM2V1aHZhICYjNDM7PSBwYWdlX29mZnNldDtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyOS1cdGlmICghZ3BjLVx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMwOlx0XHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMS1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgQ2FsbCBDaGFpbiBvZiBgX19rdm1fZ3BjX3JlZnJlc2hgKioKCk9rYXksIHNvIGBfX2t2bV9ncGNfcmVmcmVzaGAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogd2hhdCYjMzk7cyB0aGUgY2FsbCBjaGFpbiB0aGF0IGxlYWRzIHRvIHRoaXMgZnVuY3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aCB0byB0cnVseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGtlcm5lbCBjb2RlIGlzIGNhbGxpbmcgYF9fa3ZtX2dwY19yZWZyZXNoYC4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgc3BlY2lmaWMgZXZlbnQsIGEgdGltZXIsIG9yIGEgcGFydGljdWxhciBzeXN0ZW0gY2FsbD8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbi4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscyBhbmQgc2VlIHdoZXJlIGl0IHNob3dzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jPTE1NT1zdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI1NS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MjU2OnN0YXRpYyBpbnQgX19rdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEpXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI1Ny17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0zNjY9aW50IGt2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIGxlbilcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4MS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzgyOlx0cmV0dXJuIF9fa3ZtX2dwY19yZWZyZXNoKGdwYywgZ3BjLVx1MDAzZWdwYSwgdWh2YSk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4My19XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0zOTc9c3RhdGljIGludCBfX2t2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEsXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MjMtXHR9XG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQyNDpcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYSwgdWh2YSk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIEd1ZXN0IFBhZ2UgQ2FjaGUgKEdQQykgUmVmcmVzaCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrdm1fZ3BjX3JlZnJlc2hgIGFuZCBgX19rdm1fZ3BjX2FjdGl2YXRlYC4gSSBzZWUgdGhleSYjMzk7cmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIEkmIzM5O3ZlIGdvdCB0byBhbnN3ZXI6ICp3aGF0KiBpcyBjYWxsaW5nIGBrdm1fZ3BjX3JlZnJlc2hgPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBnZXR0aW5nIGludm9rZWQgZnJvbSBzb21ld2hlcmU7IHVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zIGFuZCB0aGUgb3ZlcmFsbCBmbG93IHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IgcmVsYXRlZCB0byB0aGUgR3Vlc3QgUGFnZSBDYWNoZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gSXMgaXQgdHJpZ2dlcmVkIG9uIGV2ZXJ5IGNvbnRleHQgc3dpdGNoLCBvciBvbmx5IGluIGNlcnRhaW4gc2NlbmFyaW9zPyBJZGVudGlmeWluZyB0aGUgY2FsbGVycyBpcyB0aGUgZmlyc3QgY3JpdGljYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIEdQQyByZWZyZXNoIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9MzI0Mj1zdGF0aWMgdm9pZCBrdm1fc2V0dXBfZ3Vlc3RfcHZjbG9jayhzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqcmVmX2h2X2Nsb2NrLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zMjU2LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjMyNTc6XHRcdGlmIChrdm1fZ3BjX3JlZnJlc2goZ3BjLCBvZmZzZXQgJiM0Mzsgc2l6ZW9mKCpndWVzdF9odl9jbG9jaykpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTMyNTgtXHRcdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0zOD1zdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTUxLVxuYXJjaC94ODYva3ZtL3hlbi5jOjUyOlx0XHRyZXQgPSBrdm1fZ3BjX3JlZnJlc2goZ3BjLCBQQUdFX1NJWkUpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTUzLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xNTM9c3RhdGljIGludCB4ZW5fZ2V0X2d1ZXN0X3B2Y2xvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNjQtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTY1Olx0XHRyID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICYjNDM7IHNpemVvZigqaHZfY2xvY2spKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjYtXHRcdGlmIChyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0zMjE9c3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYylcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDM4LVxuYXJjaC94ODYva3ZtL3hlbi5jOjQzOTpcdFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMxLCB1c2VyX2xlbjEpKVxuYXJjaC94ODYva3ZtL3hlbi5jLTQ0MC1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTYzOT12b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjU2LVxuYXJjaC94ODYva3ZtL3hlbi5jOjY1NzpcdFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjU4LVx0XHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9Njk3PWludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTczMC1cbmFyY2gveDg2L2t2bS94ZW4uYzo3MzE6XHRcdGlmIChrdm1fZ3BjX3JlZnJlc2goZ3BjLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpKSB7XG5hcmNoL3g4Ni9rdm0veGVuLmMtNzMyLVx0XHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTE5MDE9c3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xOTQ0LVx0XHRpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk0NTpcdFx0cmMgPSBrdm1fZ3BjX3JlZnJlc2goZ3BjLCBQQUdFX1NJWkUpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE5NDYtXHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBHdWVzdCBDbG9jayBTeW5jaHJvbml6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBvZiB0aGUgZ3Vlc3QgY2xvY2sgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgaW4gS1ZNLiBJIHNlZSB0aGF0IGBrdm1fZ3BjX3JlZnJlc2hgIGdldHMgY2FsbGVkIGZyb20gYGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IGluaXRpYWxpemluZyB0aGUgcGFyYXZpcnR1YWxpemVkIGNsb2NrIHdvdWxkIGludm9sdmUgcmVmcmVzaGluZyB0aGUgZ2xvYmFsIHBhZ2UgZm9yIGl0LiBJJiMzOTttIGFsc28gc2VlaW5nIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHZhcmlvdXMgWGVuLXJlbGF0ZWQgZnVuY3Rpb25zLCB3aGljaCBzdWdnZXN0cyBzb21lIGRlZ3JlZSBvZiBpbnRlcm9wZXJhYmlsaXR5IG9yIGNyb3NzLWNvbXBhdGliaWxpdHkgdGhlcmUsIGxpa2VseSBmb3IgdXNlIGNhc2VzIGludm9sdmluZyBYZW4gZ3Vlc3RzIHJ1bm5pbmcgdW5kZXIgS1ZNLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0LCBteSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBrdm1fZ3BjX2FjdGl2YXRlYD8gSXMgaXQganVzdCBjYWxsZWQgZnJvbSBga3ZtX2dwY19yZWZyZXNoYD8gV2hhdCYjMzk7cyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGFjdGl2YXRpb24gcHJvY2VzcyBhbmQgdGhlIHJlZnJlc2ggcHJvY2Vzcz8gRG9lcyB0aGUgJiMzNDtyZWZyZXNoJiMzNDsgaW1wbHkgYSByZS1hY3RpdmF0aW9uPyBXaGVyZSBhcmUgdGhlIGFjdGl2YXRpb24gY2FsbHM/IElzIHRoZSBhY3RpdmF0aW9uIG9ubHkgdGllZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgb3IgaXMgaXQgdHJpZ2dlcmVkIGJ5IG90aGVyIGV2ZW50cz8gVGhlIGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGxpZmUgY3ljbGUgb2YgdGhpcyBtZWNoYW5pc20gbmVlZHMgbW9yZSBzY3J1dGlueSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ3BjX2FjdGl2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9MjQyOD1zdGF0aWMgdm9pZCBrdm1fd3JpdGVfc3lzdGVtX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzeXN0ZW1fdGltZSxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQ0NC1cdGlmIChzeXN0ZW1fdGltZSBcdTAwMjYgMSlcbmFyY2gveDg2L2t2bS94ODYuYzoyNDQ1Olx0XHRrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdl90aW1lLCBzeXN0ZW1fdGltZSBcdTAwMjYgfjFVTEwsXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQ0Ni1cdFx0XHRcdCBzaXplb2Yoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8pKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MzIxPXN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTQ4NS1cdFx0XHQvKlxuYXJjaC94ODYva3ZtL3hlbi5jOjQ4NjpcdFx0XHQgKiBVc2Uga3ZtX2dwY19hY3RpdmF0ZSgpIGhlcmUgYmVjYXVzZSBpZiB0aGUgcnVuc3RhdGVcbmFyY2gveDg2L2t2bS94ZW4uYy00ODctXHRcdFx0ICogYXJlYSB3YXMgY29uZmlndXJlZCBpbiAzMi1iaXQgbW9kZSBhbmQgb25seSBleHRlbmRzXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTQ5MC1cdFx0XHQgKi9cbmFyY2gveDg2L2t2bS94ZW4uYzo0OTE6XHRcdFx0aWYgKGt2bV9ncGNfYWN0aXZhdGUoZ3BjMiwgZ3BjMS1cdTAwM2VncGEgJiM0MzsgdXNlcl9sZW4xLFxuYXJjaC94ODYva3ZtL3hlbi5jLTQ5Mi1cdFx0XHRcdFx0ICAgICB1c2VyX2xlbjIpKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz03NDY9aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTc4NS1cdFx0XHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3hlbi5jOjc4NjpcdFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzg3LVx0XHRcdFx0XHRcdCAgICAgZ2ZuX3RvX2dwYShnZm4pLCBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy03OTctXHRcdFx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS94ZW4uYzo3OTg6XHRcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy03OTktXHRcdFx0XHRcdFx0XHQgKHVuc2lnbmVkIGxvbmcpaHZhLCBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz05MDY9aW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTI4LVxuYXJjaC94ODYva3ZtL3hlbi5jOjkyOTpcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy05MzAtXHRcdFx0XHRcdCAgICAgZGF0YS1cdTAwM2V1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTM3LVxuYXJjaC94ODYva3ZtL3hlbi5jOjkzODpcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTM5LVx0XHRcdFx0XHRcdCBkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy05NTMtXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTU0Olx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfdGltZV9pbmZvX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTk1NS1cdFx0XHRcdCAgICAgZGF0YS1cdTAwM2V1LmdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTg3LVx0XHRzejEgPSBQQUdFX1NJWkUgLSAoZGF0YS1cdTAwM2V1LmdwYSBcdTAwMjYgflBBR0VfTUFTSyk7XG5hcmNoL3g4Ni9rdm0veGVuLmM6OTg4Olx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnJ1bnN0YXRlX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTk4OS1cdFx0XHRcdCAgICAgZGF0YS1cdTAwM2V1LmdwYSwgc3oxKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTk4LVx0XHRcdEJVR19PTigoZGF0YS1cdTAwM2V1LmdwYSAmIzQzOyBzejEpIFx1MDAyNiB+UEFHRV9NQVNLKTtcbmFyY2gveDg2L2t2bS94ZW4uYzo5OTk6XHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5ydW5zdGF0ZTJfY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTAwMC1cdFx0XHRcdFx0ICAgICBkYXRhLVx1MDAzZXUuZ3BhICYjNDM7IHN6MSwgc3oyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEwMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFJhY2UgQ29uZGl0aW9uIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nLiBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgdHJpZ2dlcmVkIGZyb20gYGt2bV93cml0ZV9zeXN0ZW1fdGltZWAsIHdoaWNoIGhhbmRsZXMgd3JpdGVzIHRvIHRoZSBgTVNSX0tWTV9TWVNURU1fVElNRWAgYW5kIGBNU1JfS1ZNX1NZU1RFTV9USU1FX05FV2AgTVNScy4gVGhpcyBwYXRoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdpdGhpbiBRRU1VLCBwYXJ0aWN1bGFybHkgaW4gYSBHQ0UgZW52aXJvbm1lbnQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCB0YXJnZXQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhIHJhY2UgY29uZGl0aW9uIGx1cmtpbmcgd2l0aGluIGBwZm5jYWNoZS5jYCwgbGlrZWx5IGludm9sdmluZyBNTVUgbm90aWZpZXJzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBtbl9pbnZhbGlkYXRlX3NlcWAgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgIHBvaW50IHRvd2FyZHMgc3luY2hyb25pemF0aW9uIGVmZm9ydHMgd2l0aGluIHRoZSBNTVUgbm90aWZpY2F0aW9uIGZyYW1ld29yay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBLVk0gY29yZSwgd2hpY2ggbWVhbnMgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBmb2N1c2VkIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIHRvIGVuYWJsZSBhbmQgaGl0IHRoaXMgY29kZT8gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBqdXN0IGBLVk1gIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgS1ZNYCBpcyBhIHRyaXN0YXRlLCBzbyBqdXN0IGxpc3RpbmcgYEtWTWAgaXMgY29ycmVjdC4gSSBjaGVja2VkIHdoZXJlIHRoZSBjb2RlIHJlc2lkZXMsIGl0JiMzOTtzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBUaGUgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBjb25maWcgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGBLVk1gIG9uIHg4Niwgd2hpY2ggY29uZmlybXMgdGhhdCBgS1ZNYCBhbG9uZSBpcyB0aGUgdHJpZ2dlci4KCk5vdyBmb3Igc3ltYm9sIGFuYWx5c2lzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCAod2hpY2ggaXMgaW5saW5lKSwgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCAod2hpY2ggaXMgc3RhdGljKS4gSeKAmW0gZ29pbmcgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aG9zZS4gU2luY2UgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAgaXMgaW5saW5lIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAgaXMgc3RhdGljLCBJJiMzOTtsbCBiZSB0YXJnZXRpbmcgdGhlIHB1YmxpYyBmYWNpbmcgZnVuY3Rpb25zLiBTbywgdGhhdCBtZWFuczogYGt2bV9ncGNfcmVmcmVzaGAsIGBrdm1fZ3BjX2FjdGl2YXRlYCwgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCwgYW5kIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBga3ZtX2dwY19yZWZyZXNoYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBUaG9zZSB3aWxsIGJlIG15IHByaW1hcnkgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL3BmbmNhY2hlLmM9MTU1PXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjU1LVxudmlydC9rdm0vcGZuY2FjaGUuYzoyNTY6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjU3LXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM2NS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzY2OmludCBrdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM2Ny17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy0zODEtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM4MjpcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYy1cdTAwM2VncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy0zODMtfVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk3PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDIzLVx0fVxudmlydC9rdm0vcGZuY2FjaGUuYzo0MjQ6XHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy00MjUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUwMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLVk0gQ29kZWJhc2UqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCBga3ZtX2dwY19yZWZyZXNoYCBpcyAqbm9uLXN0YXRpYyouIE9rYXksIHNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGV4cG9zZWQuIEl0JiMzOTtzIG5vdCBsaW1pdGVkIGluIHNjb3BlIHdpdGhpbiBhIHNpbmdsZSBzb3VyY2UgZmlsZSwgd2hpY2ggaW1tZWRpYXRlbHkgYnJvYWRlbnMgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJdCBpbXBsaWVzIGl0IGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgcG90ZW50aWFsbHkgYWNyb3NzIGRpZmZlcmVudCBtb2R1bGVzIG9yIGV2ZW4sIGhlYXZlbiBmb3JiaWQsIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIHNvbWUgaW9jdGwuIEkgbmVlZCB0byBub3cgY29uc2lkZXIgaXRzIGNhbGxpbmcgY29udGV4dDsgd2hhdCBvdGhlciBmdW5jdGlvbnMgY2FsbCB0aGlzLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSB3aGF0IGl0cyBmdW5jdGlvbiBhY3R1YWxseSBpcywgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIEtWTSBpbmZyYXN0cnVjdHVyZSBhcyBhIHdob2xlLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBnZXR0aW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL3BmbmNhY2hlLmM9Mzg1PXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM5Ni1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6Mzk3OnN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTgtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MjYtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQyNzppbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKVxudmlydC9rdm0vcGZuY2FjaGUuYy00Mjgte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDM1LVxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzY6XHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgZ3BhLCBLVk1fSFZBX0VSUl9CQUQsIGxlbik7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzNy19XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzOC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDM5OmludCBrdm1fZ3BjX2FjdGl2YXRlX2h2YShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIHVodmEsIHVuc2lnbmVkIGxvbmcgbGVuKVxudmlydC9rdm0vcGZuY2FjaGUuYy00NDAte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQzLVxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDQ6XHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgSU5WQUxJRF9HUEEsIHVodmEsIGxlbik7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgS1ZNIE1NVSBJbnZhbGlkYXRpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBLVk0gTU1VIGZ1bmN0aW9ucy4gSSYjMzk7dmUgZ290IGBrdm1fZ3BjX2FjdGl2YXRlYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCBpbiBmb2N1cyByaWdodCBub3csIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGV5JiMzOTtyZSAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmcg4oCTIGl0IG1lYW5zIHRoZXkmIzM5O3JlIGxpa2VseSBleHBvcnRlZCBhbmQgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIEtWTSBjb2RlLCBvciBwb3RlbnRpYWxseSBldmVuIGZyb20gb3V0c2lkZSB0aGUgS1ZNIG1vZHVsZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGFjdGl2YXRpb24vbWFuYWdlbWVudC4KClRoZW4gSSBzZWUgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCB3aGljaCAqaXMqIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBkaXN0aW5jdGlvbi4gTm93LCB0aGUgb2J2aW91cyBxdWVzdGlvbiBpbW1lZGlhdGVseSBiZWNvbWVzOiBJZiB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYywgd2hhdCYjMzk7cyBjYWxsaW5nIGl0PyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIHNjb3BlIHdpdGhpbiB0aGUgTU1VIGludmFsaWRhdGlvbiBwcm9jZXNzLiBHaXZlbiBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHByb2JhYmx5IG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIGZpbGUgb3IgYSBsb2NhbCBoZWxwZXIgZnVuY3Rpb24uIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgYW5kIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBndWVzcyBpcyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBvZiBpbnZhbGlkYXRpbmcgVExCIGVudHJpZXMgcmVsYXRlZCB0byBhIHJhbmdlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucyBpdCBoYXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIE1NVSBpbmZyYXN0cnVjdHVyZS4gR290dGEgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NzcxPXZvaWQga3ZtX21tdV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy03OTYtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjc5NzpzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxudmlydC9rdm0va3ZtX21haW4uYy03OTgtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9ODg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBrdm1fbW11X25vdGlmaWVyX29wcyA9IHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg2LVx0LmludmFsaWRhdGVfcmFuZ2Vfc3RhcnRcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0LFxudmlydC9rdm0va3ZtX21haW4uYzo4ODc6XHQuaW52YWxpZGF0ZV9yYW5nZV9lbmRcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg4LVx0LmNsZWFyX2ZsdXNoX3lvdW5nXHQ9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODkxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIE1NVSBOb3RpZmllciBDYWxsYmFja3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgY2FsbGJhY2sgd2l0aGluIGBrdm1fbW11X25vdGlmaWVyX29wc2AuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgR2xvYmFsIFBhZ2UgQ2FjaGUgKEdQQykuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgZXhhbWluaW5nIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLiBMZXQgbWUgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMuCgpIbW0sIGlzIGBrdm1fbW11X2ludmFsaWRhdGVfZW5kYCByZWxldmFudD8gTm8sIHRoZSBwYXRjaCBJJiMzOTttIHJldmlld2luZyBtb2RpZmllZCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAgaW5zdGVhZC4gV2FpdCwgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB1c3VhbGx5IGlubGluZWQuIEJ1dCwgaXQmIzM5O3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgTU1VIG5vdGlmaWVycy4gQ2FuIEkgZXZlbiBjb25zaWRlciBpdD8gVGhlIHByb21wdCBpcyB0ZWxsaW5nIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEJ1dCwgc2luY2UgaXQmIzM5O3MgYSBjYWxsYmFjaywgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoZXJlZm9yZSwgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIEkgY2FuIGxpc3QgaXQhCgpOb3csIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAuIEkgbmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz03NzE9dm9pZCBrdm1fbW11X2ludmFsaWRhdGVfZW5kKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTc5Ni1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Nzk3OnN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTc5OC1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz04ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGt2bV9tbXVfbm90aWZpZXJfb3BzID0ge1xudmlydC9rdm0va3ZtX21haW4uYy04ODYtXHQuaW52YWxpZGF0ZV9yYW5nZV9zdGFydFx0PSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQsXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjg4NzpcdC5pbnZhbGlkYXRlX3JhbmdlX2VuZFx0PSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLFxudmlydC9rdm0va3ZtX21haW4uYy04ODgtXHQuY2xlYXJfZmx1c2hfeW91bmdcdD0ga3ZtX21tdV9ub3RpZmllcl9jbGVhcl9mbHVzaF95b3VuZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3OTEKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FsbGJhY2sgYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgdGhpcyBsb29rcyBsaWtlIGEgY2FsbGJhY2suIFJpZ2h0LCBsZXQgbWUgcGlucG9pbnQgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMgaGVyZS4gSSBzZWUgYGt2bV9ncGNfcmVmcmVzaGAsIGBrdm1fZ3BjX2FjdGl2YXRlYCwgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCwgYW5kIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSG9sZCBvbiwgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQsIGlzIGl0PyBCdXQgaXQgKmRvZXMqIGNhbGwgYF9fa3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCB0aGF0IG9uZSBjYWxscyBgX19rdm1fZ3BjX3JlZnJlc2hgLiBBaCwgYW5kIGBfX2t2bV9ncGNfcmVmcmVzaGAgdGhlbiBjYWxscyBgaHZhX3RvX3Bmbl9yZXRyeWAsIHdoaWNoICppcyogdGhlIG9uZSB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiBiZWluZyBtb2RpZmllZC4gVGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYWxsIGNvbm5lY3RlZCBhcyBJIGV4cGVjdC4gU28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGBLVk1gIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaGVyZS4gWWVwLCBjb25maXJtZWQsIGBLVk1gIGlzIHRoZSBtYWluIGNvbmZpZy4gQWxsIHNldCB0aGVuLiBOb3csIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlX2h2YSYjMzQ7LAogICAgJiMzNDtrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBub3RpZmllciBsb2dpYyBhbmQgcGZuY2FjaGUgcmVmcmVzaCBtZWNoYW5pc21zIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIGBtbl9pbnZhbGlkYXRlX3NlcWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZV9odmEmIzM0OywKICAgICYjMzQ7a3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbm90aWZpZXIgbG9naWMgYW5kIHBmbmNhY2hlIHJlZnJlc2ggbWVjaGFuaXNtcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBgbW5faW52YWxpZGF0ZV9zZXFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTM0ZWMzOTJmNzk5NmZhOGFhMDc1NWJkMGI0ZTIwZGIzZWNjMzIxYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE5OjMxOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IGFiOGNmYWVjODJkMzEuLjBhYzM4MmNkOWU2YWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTgwMCw2ICYjNDM7ODAwLDcgQEAgc3RydWN0IGt2bSB7CiAJLyogVXNlZCB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIE1NVSBub3RpZmllcnMuICAqLwogCXNwaW5sb2NrX3QgbW5faW52YWxpZGF0ZV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbW5faW52YWxpZGF0ZV9zZXE7CiAJc3RydWN0IHJjdXdhaXQgbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQ7CiAKIAkvKiBGb3IgbWFuYWdlbWVudCAvIGludmFsaWRhdGlvbiBvZiBnZm5fdG9fcGZuX2NhY2hlcyAqLwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNDVlNzg0NDYyZWM2ZS4uNWU0M2RkNjNjOGJkZCAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC04MTIsOCAmIzQzOzgxMiwxNSBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAogCiAJLyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovCiAJc3Bpbl9sb2NrKCZhbXA7a3ZtLSZndDttbl9pbnZhbGlkYXRlX2xvY2spOwotCWlmICghV0FSTl9PTl9PTkNFKCFrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSkKJiM0MzsJaWYgKCFXQVJOX09OX09OQ0UoIWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKSB7CiYjNDM7CQlrdm0tJmd0O21uX2ludmFsaWRhdGVfc2VxJiM0MzsmIzQzOzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQdWJsaXNoIHRoZSBzZXF1ZW5jZSB1cGRhdGUgYmVmb3JlIGRyb3BwaW5nIHRoZSBhY3RpdmUgY291bnQKJiM0MzsJCSAqIHNvIHRoYXQgcGZuY2FjaGUgcmVmcmVzaGVzIG9ic2VydmUgb25lIG9yIHRoZSBvdGhlci4KJiM0MzsJCSAqLwomIzQzOwkJc21wX3dtYigpOwogCQktLWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7CiYjNDM7CX0KIAl3YWtlID0gIWt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7CiAJc3Bpbl91bmxvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7CiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCmluZGV4IDcyOGQyYzFiNDg4YTguLmQzNjBmMWVkYTg5NzkgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuYwpAQCAtMTI0LDcgJiM0MzsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSkKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1uX3NlcSkKIHsKIAkvKgogCSAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcwpAQCAtMTM2LDIwICYjNDM7MTM2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zCiAJICogTm90ZSwgaXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQKIAkgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy0mZ3Q7bG9jay4gIEl0IGlzIGd1YXJhbnRlZWQgdG8KIAkgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtJmd0O2xvY2ssIGFuZAotCSAqIGlzbiYjMzk7dCBkcm9wcGVkIHVudGlsIGFmdGVyIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLgomIzQzOwkgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbl9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLgogCSAqLwotCWlmIChrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KQomIzQzOwlpZiAoUkVBRF9PTkNFKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCiAJICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlCi0JICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4KJiM0MzsJICogbW5faW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgogCSAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlCiAJICogb2xkIChub24temVybykgdmFsdWUgb2YgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgb3IgdGhlCi0JICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgomIzQzOwkgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbl9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KIAkgKi8KIAlzbXBfcm1iKCk7Ci0JcmV0dXJuIGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoa3ZtLSZndDttbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxOwogfQogCiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKQEAgLTE1OCw3ICYjNDM7MTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpCiAJdm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy0mZ3Q7a2h2YSk7CiAJa3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDsKIAl2b2lkICpuZXdfa2h2YSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBtbXVfc2VxOwomIzQzOwl1bnNpZ25lZCBsb25nIG1uX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCWdwYy0mZ3Q7dmFsaWQgPSBmYWxzZTsKIAogCWRvIHsKLQkJbW11X3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQltbl9zZXEgPSBSRUFEX09OQ0UoZ3BjLSZndDtrdm0tJmd0O21uX2ludmFsaWRhdGVfc2VxKTsKIAkJc21wX3JtYigpOwogCiAJCXdyaXRlX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwpAQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAkJICogYXR0ZW1wdGluZyB0byByZWZyZXNoLgogCQkgKi8KIAkJV0FSTl9PTl9PTkNFKGdwYy0mZ3Q7dmFsaWQpOwotCX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSkpOwomIzQzOwl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIG1uX3NlcSkpOwogCiAJZ3BjLSZndDt2YWxpZCA9IHRydWU7CiAJZ3BjLSZndDtwZm4gPSBuZXdfcGZuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3MAoJCQkJCQkJb3V0cHV0OiAxMjIKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIE1NVSBOb3RpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCBpbiBga3ZtX21haW4uY2AgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCBpbiBgcGZuY2FjaGUuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggS1ZNJiMzOTtzIE1NVSBub3RpZmllciBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBoeXBlcnZpc29yLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSByZXBsYWNpbmcgdGhlIGdlbmVyaWMgYG1tdV9pbnZhbGlkYXRlX3NlcWAgd2l0aCBhIEtWTS1zcGVjaWZpYyBgbW5faW52YWxpZGF0ZV9zZXFgIGZpZWxkIGFkZGVkIHRvIHRoZSBgc3RydWN0IGt2bWAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IHNpZ25hbHMgYSBkZXNpcmUgZm9yIG1vcmUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciBpbnZhbGlkYXRpb24gc2VxdWVuY2luZy4KCkl0JiMzOTtzIHVzaW5nIHRoaXMgbmV3IGBtbl9pbnZhbGlkYXRlX3NlcWAgaW4gdGhlIGBwZm5jYWNoZWAgaGFuZGxpbmcsIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIGFpbWVkIGF0IHJlc29sdmluZyBzb21lIHJhY2UgY29uZGl0aW9uIG9yIHNlcXVlbmNlIGNvdW50ZXIgaXNzdWUgcmVsYXRlZCB0byBob3cgUEZOIGNhY2hlIGVudHJpZXMgYXJlIGludmFsaWRhdGVkIHdoZW4gTU1VIG5vdGlmaWNhdGlvbnMgY29tZSBpbi4gR29vZC4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgcmFjZSBpdCYjMzk7cyB0cnlpbmcgdG8gZWxpbWluYXRlLCBidXQgdGhpcyBhcHByb2FjaCBvZiB1c2luZyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIGlzIGEgY29tbW9uIGFuZCB1c3VhbGx5IGVmZmVjdGl2ZSB3YXkgdG8gaGFuZGxlIHN1Y2ggcHJvYmxlbXMuCgpJIHNlZSBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIGxpa2UgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gVGhhdCYjMzk7cyBhIHJlbGllZi4gSXQmIzM5O3MgYSBwcmV0dHkgdGFyZ2V0ZWQgY2hhbmdlLiBUaGUgY29tbWl0IG1lc3NhZ2UgcmlnaHRseSBwb2ludHMgb3V0IHRoYXQgaXNzdWVzIGFyaXNpbmcgZnJvbSAqdGhpcyogcGFydGljdWxhciBwYXRjaCBhcmUgbGlrZWx5IGNvbmN1cnJlbmN5LXJlbGF0ZWQgYnVncyDigJMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvZ2ljYWwgZXJyb3JzLiBLQVNBTiwgTE9DS0RFUCwgYW5kIEtDU0FOIChvciBzaW1wbHkgcm9idXN0IHRlc3RpbmcpIGFyZSB0aGUgdG9vbHMgZm9yIGRldGVjdGluZyB0aG9zZSwgYW5kIEtNU0FOIGlzbiYjMzk7dCBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBleHBvc2UgaXQgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB0aGF0IEtNU0FOIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUgYXQgY2F0Y2hpbmcuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gbXkgYXNzdW1wdGlvbnM6IFllcCwgYG1uX2ludmFsaWRhdGVfc2VxYCBpcyBiZWluZyBhZGRlZCB0byBgc3RydWN0IGt2bWAgYW5kIGluY3JlbWVudGVkIGluIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gVGhlIHN3aXRjaCB0byB1c2luZyB0aGF0IHNlcXVlbmNlIGNvdW50ZXIgaW5zdGVhZCBvZiB0aGUgc2hhcmVkIG9uZSBmb3IgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAgaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuIFRoaXMgbG9va3MgbGlrZSBhIGNvbmN1cnJlbmN5IGZpeCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBLVk0gUEZOIGNhY2hlIGludmFsaWRhdGlvbi4gTm8gY29uY2VybnMgYWJvdXQgTmVlZHNLTVNBTiA9IGZhbHNlLCBJIGFncmVlIGNvbXBsZXRlbHkgd2l0aCB0aGF0IGFzc2Vzc21lbnQuIEkmIzM5O20gc2F0aXNmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBLVk0gTU1VIG5vdGlmaWVycyBieSBpbnRyb2R1Y2luZyBhIGRlZGljYXRlZCBzZXF1ZW5jZSBjb3VudGVyIChgbW5faW52YWxpZGF0ZV9zZXFgKSBmb3IgcGZuY2FjaGUgaW52YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgYmVzdCBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIG9yIHN0YW5kYXJkIHRlc3RpbmcsIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzE6NTMuNDMyNjM3MjAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4NDk1MDUzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlX2h2YVwiLFxuICAgIFwia3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIEtWTSBNTVUgbm90aWZpZXIgbG9naWMgYW5kIHBmbmNhY2hlIHJlZnJlc2ggbWVjaGFuaXNtcyB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBgbW5faW52YWxpZGF0ZV9zZXFgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMxOjUzLjQzMjY0NDc2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDEwNDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEzNGVjMzkyZjc5OTZmYThhYTA3NTViZDBiNGUyMGRiM2VjYzMyMWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggYWI4Y2ZhZWM4MmQzMS4uMGFjMzgyY2Q5ZTZhZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtODAwLDYgKzgwMCw3IEBAIHN0cnVjdCBrdm0ge1xcbiBcXHQvKiBVc2VkIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgTU1VIG5vdGlmaWVycy4gICovXFxuIFxcdHNwaW5sb2NrX3QgbW5faW52YWxpZGF0ZV9sb2NrO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xcbitcXHR1bnNpZ25lZCBsb25nIG1uX2ludmFsaWRhdGVfc2VxO1xcbiBcXHRzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDtcXG4gXFxuIFxcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggNDVlNzg0NDYyZWM2ZS4uNWU0M2RkNjNjOGJkZCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC04MTIsOCArODEyLDE1IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXFxuIFxcbiBcXHQvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi9cXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XFxuLVxcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcXG4rXFx0aWYgKCFXQVJOX09OX09OQ0UoIWt2bS1cXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKSB7XFxuK1xcdFxcdGt2bS1cXHUwMDNlbW5faW52YWxpZGF0ZV9zZXErKztcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUHVibGlzaCB0aGUgc2VxdWVuY2UgdXBkYXRlIGJlZm9yZSBkcm9wcGluZyB0aGUgYWN0aXZlIGNvdW50XFxuK1xcdFxcdCAqIHNvIHRoYXQgcGZuY2FjaGUgcmVmcmVzaGVzIG9ic2VydmUgb25lIG9yIHRoZSBvdGhlci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNtcF93bWIoKTtcXG4gXFx0XFx0LS1rdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xcbitcXHR9XFxuIFxcdHdha2UgPSAha3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXFxuaW5kZXggNzI4ZDJjMWI0ODhhOC4uZDM2MGYxZWRhODk3OSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jXFxuKysrIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xcbkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbl9zZXEpXFxuIHtcXG4gXFx0LypcXG4gXFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXFxuQEAgLTEzNiwyMCArMTM2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zXFxuIFxcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XFxuIFxcdCAqIGlzIG5vdCBwcm90ZWN0ZWQgYnkgZ3BjLVxcdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xcbiBcXHQgKiBiZSBlbGV2YXRlZCBiZWZvcmUgdGhlIG1tdV9ub3RpZmllciBhY3F1aXJlcyBncGMtXFx1MDAzZWxvY2ssIGFuZFxcbi1cXHQgKiBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyB1cGRhdGVkLlxcbitcXHQgKiBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIG1uX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa3ZtLVxcdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcXG4rXFx0aWYgKFJFQURfT05DRShrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmVcXG4tXFx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cXG4rXFx0ICogbW5faW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxcbiBcXHQgKiBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZVxcbiBcXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcXG4tXFx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxcbitcXHQgKiBuZXcgKGluY3JlbWVudGVkKSB2YWx1ZSBvZiBtbl9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cXG4gXFx0ICovXFxuIFxcdHNtcF9ybWIoKTtcXG4tXFx0cmV0dXJuIGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XFxuK1xcdHJldHVybiBSRUFEX09OQ0Uoa3ZtLVxcdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxO1xcbiB9XFxuIFxcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG5AQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbiBcXHR2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLVxcdTAwM2VraHZhKTtcXG4gXFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcXG4gXFx0dm9pZCAqbmV3X2todmEgPSBOVUxMO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbW5fc2VxO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFxuIFxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0Z3BjLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRtbXVfc2VxID0gZ3BjLVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0XFx0bW5fc2VxID0gUkVBRF9PTkNFKGdwYy1cXHUwMDNla3ZtLVxcdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSk7XFxuIFxcdFxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0XFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGdwYy1cXHUwMDNldmFsaWQpO1xcbi1cXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVxcdTAwM2Vrdm0sIG1tdV9zZXEpKTtcXG4rXFx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cXHUwMDNla3ZtLCBtbl9zZXEpKTtcXG4gXFxuIFxcdGdwYy1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbiBcXHRncGMtXFx1MDAzZXBmbiA9IG5ld19wZm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMxOjU1LjAwMzQ2MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MTMyMTIxNzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCIsXG4gICAgXCJrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIG5vdGlmaWVyIGxvZ2ljIGFuZCBwZm5jYWNoZSByZWZyZXNoIG1lY2hhbmlzbXMgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYG1uX2ludmFsaWRhdGVfc2VxYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMzRlYzM5MmY3OTk2ZmE4YWEwNzU1YmQwYjRlMjBkYjNlY2MzMjFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjBhYzM4MmNkOWU2YWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTgwMCw2ICs4MDAsNyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdC8qIFVzZWQgdG8gd2FpdCBmb3IgY29tcGxldGlvbiBvZiBNTVUgbm90aWZpZXJzLiAgKi9cbiBcdHNwaW5sb2NrX3QgbW5faW52YWxpZGF0ZV9sb2NrO1xuIFx0dW5zaWduZWQgbG9uZyBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbitcdHVuc2lnbmVkIGxvbmcgbW5faW52YWxpZGF0ZV9zZXE7XG4gXHRzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDtcbiBcbiBcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLjVlNDNkZDYzYzhiZGQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDggKzgxMiwxNSBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4tXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbitcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKSB7XG4rXHRcdGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSsrO1xuK1x0XHQvKlxuK1x0XHQgKiBQdWJsaXNoIHRoZSBzZXF1ZW5jZSB1cGRhdGUgYmVmb3JlIGRyb3BwaW5nIHRoZSBhY3RpdmUgY291bnRcbitcdFx0ICogc28gdGhhdCBwZm5jYWNoZSByZWZyZXNoZXMgb2JzZXJ2ZSBvbmUgb3IgdGhlIG90aGVyLlxuK1x0XHQgKi9cbitcdFx0c21wX3dtYigpO1xuIFx0XHQtLWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbitcdH1cbiBcdHdha2UgPSAha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vcGZuY2FjaGUuYyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbmluZGV4IDcyOGQyYzFiNDg4YTguLmQzNjBmMWVkYTg5NzkgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jXG4rKysgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5AQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1uX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbitcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW5faW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiBcdCAqL1xuLVx0aWYgKGt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcbitcdGlmIChSRUFEX09OQ0Uoa3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuK1x0ICogbW5faW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuIFx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuK1x0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW5faW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuXG4gXHQgKi9cbiBcdHNtcF9ybWIoKTtcbi1cdHJldHVybiBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHR2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLVx1MDAzZWtodmEpO1xuIFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiBcdHZvaWQgKm5ld19raHZhID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbitcdHVuc2lnbmVkIGxvbmcgbW5fc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdG1uX3NlcSA9IFJFQURfT05DRShncGMtXHUwMDNla3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfc2VxKTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBtbl9zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMxOjU1LjAwMzQ2MzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4MTM5OTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBNTVUgTm90aWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBLVk0gTU1VIG5vdGlmaWVyIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0J3MgaW50cm9kdWNpbmcgdGhpcyBgbW5faW52YWxpZGF0ZV9zZXFgIGZpZWxkIHRvIHRoZSBgc3RydWN0IGt2bWAgYW5kIHRoZW4gdXBkYXRpbmcgZnVuY3Rpb25zIGxpa2UgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCwgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCB0byB1c2UgdGhpcyBuZXcgc2VxdWVuY2UgY291bnRlci4gRnJvbSB0aGUgZmlsZSBsb2NhdGlvbnMsIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLCBJIGNhbiB0ZWxsIHRoaXMgaXMgcmVhbGx5IHRvdWNoaW5nIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkg4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gaW52YWxpZGF0aW5nIGNhY2hlZCBNTVUgZW50cmllcywgYW5kIEknbSBndWVzc2luZyB0aGlzIHNlcXVlbmNlIG51bWJlciBpcyBjcnVjaWFsIGZvciBzb21lIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIG9yIG9yZGVyaW5nLlxuXG5TaW5jZSB0aGlzIGlzIEtWTSwgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBjaGVja2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0aGUgS2NvbmZpZyBmaWxlLiBJJ20gdGhpbmtpbmcsIHdoZXJlIGlzIEtWTSBkZWZpbmVkPyBgQ09ORklHX0tWTWAgaXMgdHlwaWNhbGx5IHdoYXQgZW5hYmxlcyBpdCwgc28gbGV0J3MgY2hlY2sgYHZpcnQva3ZtL0tjb25maWdgLiBObywgd2FpdC4gR2l2ZW4gdGhlIHBhdGggb2YgdGhlIGZpbGVzLCBJIGtub3cgdGhpcyBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuXG5cblJpZ2h0LCBgdmlydC9rdm0vTWFrZWZpbGVgLiBJIHdpbGwgY2hlY2sgd2hhdCBLVk0gYnVpbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzczLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MDAuNzg0ODY0OTM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTQ1MTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9tYWluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZS5rdm09Nj1LVk0gPz0gLi4vLi4vLi4vdmlydC9rdm1cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tNy1cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06ODprdm0teSA6PSAkKEtWTSkva3ZtX21haW4ubyAkKEtWTSkvZXZlbnRmZC5vICQoS1ZNKS9iaW5hcnlfc3RhdHMub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bS05LWt2bS0kKENPTkZJR19LVk1fVkZJTykgKz0gJChLVk0pL3ZmaW8ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjowMC44NzE0MTUyMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgwNzY1MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBob25lcyBpbiBvbiBgQ09ORklHX0tWTWAg4oCTIHRoYXQncyB0aGUgY29yZSBvZiB0aGlzIHdob2xlIHZpcnR1YWxpemF0aW9uIHNldHVwLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgY29uZmlndXJlZC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBhcmUgdGhlIGtleSBmZWF0dXJlcyBpdCBlbmFibGVzPyBJdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gc3dpdGNoLCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuQnV0IEknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZiwgaXQncyBub3QgdGhlIGNvbmZpZ3VyYXRpb24gaXRzZWxmIEkgd2FudCB0byBkZWx2ZSBpbnRvIGp1c3QgeWV0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgdG8gdGhlIEtWTSBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdGFrZXMgbWUgdG8gYHBmbmNhY2hlLmNgLiBTZWVtcyBsaWtlIGFuIGludGVyZXN0aW5nIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCB2aXJ0dWFsIG1hY2hpbmUgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCdsbCBpbGx1bWluYXRlIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGFuZCB0aGUgY2FjaGluZyBtZWNoYW5pc21zLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjowNC40NTIxODI4OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4Nzc0ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBmbmNhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZS5rdm09MTM9a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX0RJUlRZX1JJTkcpICs9ICQoS1ZNKS9kaXJ0eV9yaW5nLm9cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTQ6a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKSArPSAkKEtWTSkvcGZuY2FjaGUub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bS0xNS1rdm0tJChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSArPSAkKEtWTSkvZ3Vlc3RfbWVtZmQub1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz03OTc9c3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODE4LVxcdFxcdCAqIFB1Ymxpc2ggdGhlIHNlcXVlbmNlIHVwZGF0ZSBiZWZvcmUgZHJvcHBpbmcgdGhlIGFjdGl2ZSBjb3VudFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODE5OlxcdFxcdCAqIHNvIHRoYXQgcGZuY2FjaGUgcmVmcmVzaGVzIG9ic2VydmUgb25lIG9yIHRoZSBvdGhlci5cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTgyMC1cXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MDUuMjQwOTY2MDQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyOTQxNTcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfSEFWRV9LVk1fUEZOQ0FDSEVgIGFyZSBlc3NlbnRpYWwsIGFzIGV4cGVjdGVkLiBCdXQgdGhlbiBteSBtaW5kIGtpY2tzIGluIOKAkyBoYW5nIG9uIGEgc2Vjb25kLCBgSEFWRV9LVk1fUEZOQ0FDSEVgIGlzICp0eXBpY2FsbHkqIGNob3NlbiBhdXRvbWF0aWNhbGx5IGJ5IGFyY2hpdGVjdHVyZXMgdGhhdCBhY3R1YWxseSByZXF1aXJlIGl0cyBmdW5jdGlvbmFsaXR5LiBTbyBpdCBzaG91bGRuJ3QganVzdCBiZSBlbmFibGVkIGFyYml0cmFyaWx5LiBUaGlzIG1lYW5zIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBjaGFpbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUsIHByb2JhYmx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgIChvciBzb21ldGhpbmcgc2ltaWxhciBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCkuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIHdoZXRoZXIgdGhlIGBLVk1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRpcmVjdGx5IHNlbGVjdHMgYEhBVkVfS1ZNX1BGTkNBQ0hFYC4gVGhhdCdzIHdoZXJlIHRoZSBhbnN3ZXIgdG8gaG93IHRoZSB0d28gcmVsYXRlIGxpZXMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgbG9naWMgdGhlcmUgd2hpY2ggSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbCB0byBmaW5kIG91dCBleGFjdGx5IHdoeSBhIHBhcnRpY3VsYXIgb3B0aW9uIGlzIGVuYWJsZWQgaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTgwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MDguOTcwMzg0NDQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTk0ODg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0tWTV9QRk5DQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjUtXFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyNjpcXHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNy1cXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19UU09cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MDkuNDYyMzM4NjIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2NjA2ODEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipLVk0gUEZOIENhY2hlIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIEtWTSBjb2RlIG9uIHg4NiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHByZXNlbmNlIG9mIHRoZSBgSEFWRV9LVk1fUEZOQ0FDSEVgIGZlYXR1cmUgaXMgYmVpbmcgc2VsZWN0ZWQuIFRoYXQncyBpbnRlcmVzdGluZywgaXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBQRk4gY2FjaGUsIGFuZCBob3cgdGhhdCdzIGJlaW5nIG1hbmFnZWQuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHRvdWNoZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uIGFyZTogYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCAod2hpY2ggaXMgaW5saW5lLCBvZiBjb3Vyc2UpLCBhbmQgYGh2YV90b19wZm5fcmV0cnlgLlxuXG5Ib2xkIG9uLi4uIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBkZWNsYXJlZCBgc3RhdGljYD8gVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZS4gSWYgaXQncyBzdGF0aWMsIGl0J3Mgc2NvcGVkIHRvIHRoZSBjdXJyZW50IGZpbGUsIHNvIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlcmUuIEkgaGF2ZSB0byBmaW5kIHRoZSBjYWxsaW5nIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpbW1lZGlhdGVseSBiZWNvbWVzOiB3aGF0IGZ1bmN0aW9ucyAqY2FsbCogYGh2YV90b19wZm5fcmV0cnlgIHdpdGhpbiB0aGUgY3VycmVudCBmaWxlPyBJJ2xsIG5lZWQgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBkZXRlcm1pbmUgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjEzLjQyODQxMDU5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5OTc4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHZhX3RvX3Bmbl9yZXRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW5fc2VxKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTQtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoxNTU6c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTYte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYz0yNTY9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzIxLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzIyOlxcdC8qIE5vdGU6IHRoZSBvZmZzZXQgbXVzdCBiZSBjb3JyZWN0IGJlZm9yZSBjYWxsaW5nIGh2YV90b19wZm5fcmV0cnkoKSAqL1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzIzLVxcdGdwYy1cXHUwMDNldWh2YSArPSBwYWdlX29mZnNldDtcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzI5LVxcdGlmICghZ3BjLVxcdTAwM2V2YWxpZCB8fCBodmFfY2hhbmdlKSB7XFxudmlydC9rdm0vcGZuY2FjaGUuYzozMzA6XFx0XFx0cmV0ID0gaHZhX3RvX3Bmbl9yZXRyeShncGMpO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzMxLVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjEzLjQ5ODQxMzcwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE4NzMwNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgQ2FsbCBDaGFpbiBvZiBgX19rdm1fZ3BjX3JlZnJlc2hgKipcblxuT2theSwgc28gYF9fa3ZtX2dwY19yZWZyZXNoYCBpcyB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gYnVybmluZyBpbiBteSBtaW5kIGlzOiB3aGF0J3MgdGhlIGNhbGwgY2hhaW4gdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggdG8gdHJ1bHkgZ3Jhc3AgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3QuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBrZXJuZWwgY29kZSBpcyBjYWxsaW5nIGBfX2t2bV9ncGNfcmVmcmVzaGAuIElzIGl0IHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50LCBhIHRpbWVyLCBvciBhIHBhcnRpY3VsYXIgc3lzdGVtIGNhbGw/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24uIExldCBtZSB0cmFjZSB0aGUgY2FsbHMgYW5kIHNlZSB3aGVyZSBpdCBzaG93cyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjE3LjExNzE0NjYyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NzQ1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rdm1fZ3BjX3JlZnJlc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MTU1PXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yNTUtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoyNTY6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI1Ny17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM2Nj1pbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zODEtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozODI6XFx0cmV0dXJuIF9fa3ZtX2dwY19yZWZyZXNoKGdwYywgZ3BjLVxcdTAwM2VncGEsIHVodmEpO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzgzLX1cXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk3PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MjMtXFx0fVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDI0OlxcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYSwgdWh2YSk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy00MjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjoxNy4xOTc2MjU2MDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNjgzOTk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEtWTSBHdWVzdCBQYWdlIENhY2hlIChHUEMpIFJlZnJlc2gqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGt2bV9ncGNfcmVmcmVzaGAgYW5kIGBfX2t2bV9ncGNfYWN0aXZhdGVgLiBJIHNlZSB0aGV5J3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBJJ3ZlIGdvdCB0byBhbnN3ZXI6ICp3aGF0KiBpcyBjYWxsaW5nIGBrdm1fZ3BjX3JlZnJlc2hgPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2Ygd2hhdCdzIGdvaW5nIG9uLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgZ2V0dGluZyBpbnZva2VkIGZyb20gc29tZXdoZXJlOyB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIHRyaWdnZXJpbmcgY29uZGl0aW9ucyBhbmQgdGhlIG92ZXJhbGwgZmxvdyB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yIHJlbGF0ZWQgdG8gdGhlIEd1ZXN0IFBhZ2UgQ2FjaGUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIElzIGl0IHRyaWdnZXJlZCBvbiBldmVyeSBjb250ZXh0IHN3aXRjaCwgb3Igb25seSBpbiBjZXJ0YWluIHNjZW5hcmlvcz8gSWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgaXMgdGhlIGZpcnN0IGNyaXRpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBHUEMgcmVmcmVzaCBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjoyMC45MDQ0NjczMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNDc0OTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfcmVmcmVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0zMjQyPXN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzI1Ni1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzI1NzpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICsgc2l6ZW9mKCpndWVzdF9odl9jbG9jaykpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMjU4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0zOD1zdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNTEtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjUyOlxcdFxcdHJldCA9IGt2bV9ncGNfcmVmcmVzaChncGMsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTUzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTUzPXN0YXRpYyBpbnQgeGVuX2dldF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjQtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE2NTpcXHRcXHRyID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICsgc2l6ZW9mKCpodl9jbG9jaykpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjYtXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MzIxPXN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDM4LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo0Mzk6XFx0XFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMxLCB1c2VyX2xlbjEpKVxcbmFyY2gveDg2L2t2bS94ZW4uYy00NDAtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTYzOT12b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy02NTYtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjY1NzpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjU4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz02OTc9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03MzAtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjczMTpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbmFyY2gveDg2L2t2bS94ZW4uYy03MzItXFx0XFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xOTAxPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTQ0LVxcdFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTQ1OlxcdFxcdHJjID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgUEFHRV9TSVpFKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk0Ni1cXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjIwLjk5Njk0NTk3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg3Njg0MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBHdWVzdCBDbG9jayBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhlIGd1ZXN0IGNsb2NrIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGluIEtWTS4gSSBzZWUgdGhhdCBga3ZtX2dwY19yZWZyZXNoYCBnZXRzIGNhbGxlZCBmcm9tIGBrdm1fc2V0dXBfZ3Vlc3RfcHZjbG9ja2AsIHdoaWNoIG1ha2VzIHNlbnNlOyBpbml0aWFsaXppbmcgdGhlIHBhcmF2aXJ0dWFsaXplZCBjbG9jayB3b3VsZCBpbnZvbHZlIHJlZnJlc2hpbmcgdGhlIGdsb2JhbCBwYWdlIGZvciBpdC4gSSdtIGFsc28gc2VlaW5nIGl0J3MgY2FsbGVkIGZyb20gdmFyaW91cyBYZW4tcmVsYXRlZCBmdW5jdGlvbnMsIHdoaWNoIHN1Z2dlc3RzIHNvbWUgZGVncmVlIG9mIGludGVyb3BlcmFiaWxpdHkgb3IgY3Jvc3MtY29tcGF0aWJpbGl0eSB0aGVyZSwgbGlrZWx5IGZvciB1c2UgY2FzZXMgaW52b2x2aW5nIFhlbiBndWVzdHMgcnVubmluZyB1bmRlciBLVk0uIFRoYXQncyBnb29kIHRvIGtub3cuIEJ1dCwgbXkgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBga3ZtX2dwY19hY3RpdmF0ZWA/IElzIGl0IGp1c3QgY2FsbGVkIGZyb20gYGt2bV9ncGNfcmVmcmVzaGA/IFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGFjdGl2YXRpb24gcHJvY2VzcyBhbmQgdGhlIHJlZnJlc2ggcHJvY2Vzcz8gRG9lcyB0aGUgXCJyZWZyZXNoXCIgaW1wbHkgYSByZS1hY3RpdmF0aW9uPyBXaGVyZSBhcmUgdGhlIGFjdGl2YXRpb24gY2FsbHM/IElzIHRoZSBhY3RpdmF0aW9uIG9ubHkgdGllZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgb3IgaXMgaXQgdHJpZ2dlcmVkIGJ5IG90aGVyIGV2ZW50cz8gVGhlIGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGxpZmUgY3ljbGUgb2YgdGhpcyBtZWNoYW5pc20gbmVlZHMgbW9yZSBzY3J1dGlueSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MjUuMjg0NjMyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDU1NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9MjQyOD1zdGF0aWMgdm9pZCBrdm1fd3JpdGVfc3lzdGVtX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzeXN0ZW1fdGltZSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0yNDQ0LVxcdGlmIChzeXN0ZW1fdGltZSBcXHUwMDI2IDEpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI0NDU6XFx0XFx0a3ZtX2dwY19hY3RpdmF0ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdl90aW1lLCBzeXN0ZW1fdGltZSBcXHUwMDI2IH4xVUxMLFxcbmFyY2gveDg2L2t2bS94ODYuYy0yNDQ2LVxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8pKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0zMjE9c3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYylcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy00ODUtXFx0XFx0XFx0LypcXG5hcmNoL3g4Ni9rdm0veGVuLmM6NDg2OlxcdFxcdFxcdCAqIFVzZSBrdm1fZ3BjX2FjdGl2YXRlKCkgaGVyZSBiZWNhdXNlIGlmIHRoZSBydW5zdGF0ZVxcbmFyY2gveDg2L2t2bS94ZW4uYy00ODctXFx0XFx0XFx0ICogYXJlYSB3YXMgY29uZmlndXJlZCBpbiAzMi1iaXQgbW9kZSBhbmQgb25seSBleHRlbmRzXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDkwLVxcdFxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS94ZW4uYzo0OTE6XFx0XFx0XFx0aWYgKGt2bV9ncGNfYWN0aXZhdGUoZ3BjMiwgZ3BjMS1cXHUwMDNlZ3BhICsgdXNlcl9sZW4xLFxcbmFyY2gveDg2L2t2bS94ZW4uYy00OTItXFx0XFx0XFx0XFx0XFx0ICAgICB1c2VyX2xlbjIpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTc0Nj1pbnQga3ZtX3hlbl9odm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03ODUtXFx0XFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0veGVuLmM6Nzg2OlxcdFxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzg3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZ2ZuX3RvX2dwYShnZm4pLCBQQUdFX1NJWkUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTc5Ny1cXHRcXHRcXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS94ZW4uYzo3OTg6XFx0XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzk5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAodW5zaWduZWQgbG9uZylodmEsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9OTA2PWludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTI4LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo5Mjk6XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTMwLVxcdFxcdFxcdFxcdFxcdCAgICAgZGF0YS1cXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTM3LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo5Mzg6XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzOS1cXHRcXHRcXHRcXHRcXHRcXHQgZGF0YS1cXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTUzLVxcbmFyY2gveDg2L2t2bS94ZW4uYzo5NTQ6XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfdGltZV9pbmZvX2NhY2hlLFxcbmFyY2gveDg2L2t2bS94ZW4uYy05NTUtXFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy05ODctXFx0XFx0c3oxID0gUEFHRV9TSVpFIC0gKGRhdGEtXFx1MDAzZXUuZ3BhIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuYXJjaC94ODYva3ZtL3hlbi5jOjk4ODpcXHRcXHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC54ZW4ucnVuc3RhdGVfY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTk4OS1cXHRcXHRcXHRcXHQgICAgIGRhdGEtXFx1MDAzZXUuZ3BhLCBzejEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTk5OC1cXHRcXHRcXHRCVUdfT04oKGRhdGEtXFx1MDAzZXUuZ3BhICsgc3oxKSBcXHUwMDI2IH5QQUdFX01BU0spO1xcbmFyY2gveDg2L2t2bS94ZW4uYzo5OTk6XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnJ1bnN0YXRlMl9jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTAwMC1cXHRcXHRcXHRcXHRcXHQgICAgIGRhdGEtXFx1MDAzZXUuZ3BhICsgc3oxLCBzejIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjoyNS4zOTU2OTI4OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUwODE5NjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFJhY2UgQ29uZGl0aW9uIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgaW50ZXJlc3RpbmcuIGBrdm1fZ3BjX2FjdGl2YXRlYCBpcyB0cmlnZ2VyZWQgZnJvbSBga3ZtX3dyaXRlX3N5c3RlbV90aW1lYCwgd2hpY2ggaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGBNU1JfS1ZNX1NZU1RFTV9USU1FYCBhbmQgYE1TUl9LVk1fU1lTVEVNX1RJTUVfTkVXYCBNU1JzLiBUaGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgd2l0aGluIFFFTVUsIHBhcnRpY3VsYXJseSBpbiBhIEdDRSBlbnZpcm9ubWVudCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHRhcmdldC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24gbHVya2luZyB3aXRoaW4gYHBmbmNhY2hlLmNgLCBsaWtlbHkgaW52b2x2aW5nIE1NVSBub3RpZmllcnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1uX2ludmFsaWRhdGVfc2VxYCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAgcG9pbnQgdG93YXJkcyBzeW5jaHJvbml6YXRpb24gZWZmb3J0cyB3aXRoaW4gdGhlIE1NVSBub3RpZmljYXRpb24gZnJhbWV3b3JrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIEtWTSBjb3JlLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZvY3VzZWQgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyB0byBlbmFibGUgYW5kIGhpdCB0aGlzIGNvZGU/IEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDoganVzdCBgS1ZNYCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYEtWTWAgaXMgYSB0cmlzdGF0ZSwgc28ganVzdCBsaXN0aW5nIGBLVk1gIGlzIGNvcnJlY3QuIEkgY2hlY2tlZCB3aGVyZSB0aGUgY29kZSByZXNpZGVzLCBpdCdzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBUaGUgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBjb25maWcgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGBLVk1gIG9uIHg4Niwgd2hpY2ggY29uZmlybXMgdGhhdCBgS1ZNYCBhbG9uZSBpcyB0aGUgdHJpZ2dlci5cblxuTm93IGZvciBzeW1ib2wgYW5hbHlzaXMuIFRoZSBwYXRjaCBtb2RpZmllcyBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAsIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgICh3aGljaCBpcyBpbmxpbmUpLCBhbmQgYGh2YV90b19wZm5fcmV0cnlgICh3aGljaCBpcyBzdGF0aWMpLiBJ4oCZbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIHRob3NlLiBTaW5jZSBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCBpcyBpbmxpbmUgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCBpcyBzdGF0aWMsIEknbGwgYmUgdGFyZ2V0aW5nIHRoZSBwdWJsaWMgZmFjaW5nIGZ1bmN0aW9ucy4gU28sIHRoYXQgbWVhbnM6IGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAsIGFuZCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGt2bV9ncGNfcmVmcmVzaGAgYW5kIGBrdm1fZ3BjX2FjdGl2YXRlYCBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYy4gVGhvc2Ugd2lsbCBiZSBteSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjozMy45MDM4OTE5NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTQ4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfcmVmcmVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MTU1PXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yNTUtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoyNTY6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI1Ny17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM2NS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM2NjppbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzY3LXtcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzgxLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzgyOlxcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYy1cXHUwMDNlZ3BhLCB1aHZhKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM4My19XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM5Nz1zdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDIzLVxcdH1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQyNDpcXHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGEsIHVodmEpO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDI1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6MzMuOTk3NDQ3OTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzExOTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtWTSBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIHRoYXQgYGt2bV9ncGNfcmVmcmVzaGAgaXMgKm5vbi1zdGF0aWMqLiBPa2F5LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBleHBvc2VkLiBJdCdzIG5vdCBsaW1pdGVkIGluIHNjb3BlIHdpdGhpbiBhIHNpbmdsZSBzb3VyY2UgZmlsZSwgd2hpY2ggaW1tZWRpYXRlbHkgYnJvYWRlbnMgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEl0IGltcGxpZXMgaXQgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzLCBwb3RlbnRpYWxseSBhY3Jvc3MgZGlmZmVyZW50IG1vZHVsZXMgb3IgZXZlbiwgaGVhdmVuIGZvcmJpZCwgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggc29tZSBpb2N0bC4gSSBuZWVkIHRvIG5vdyBjb25zaWRlciBpdHMgY2FsbGluZyBjb250ZXh0OyB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIHRoaXMsIHdoaWNoIHdvdWxkIGluZGljYXRlIHdoYXQgaXRzIGZ1bmN0aW9uIGFjdHVhbGx5IGlzLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlIGFzIGEgd2hvbGUuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGdldHRpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjozNy42NDA1Njk4OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MTQxOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vcGZuY2FjaGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jPTM4NT12b2lkIGt2bV9ncGNfaW5pdChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM5Ni1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM5NzpzdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM5OC1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDI2LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDI3OmludCBrdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4pXFxudmlydC9rdm0vcGZuY2FjaGUuYy00Mjgte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzUtXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzY6XFx0cmV0dXJuIF9fa3ZtX2dwY19hY3RpdmF0ZShncGMsIGdwYSwgS1ZNX0hWQV9FUlJfQkFELCBsZW4pO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDM3LX1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzOC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQzOTppbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyB1aHZhLCB1bnNpZ25lZCBsb25nIGxlbilcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0MC17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0My1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQ0NDpcXHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgSU5WQUxJRF9HUEEsIHVodmEsIGxlbik7XFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjozNy43MDc3MTU3NjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMjkzMzc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyBLVk0gTU1VIEludmFsaWRhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBLVk0gTU1VIGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYGt2bV9ncGNfYWN0aXZhdGVgIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgIGluIGZvY3VzIHJpZ2h0IG5vdywgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZXkncmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmcg4oCTIGl0IG1lYW5zIHRoZXkncmUgbGlrZWx5IGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGUsIG9yIHBvdGVudGlhbGx5IGV2ZW4gZnJvbSBvdXRzaWRlIHRoZSBLVk0gbW9kdWxlLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgYWN0aXZhdGlvbi9tYW5hZ2VtZW50LlxuXG5UaGVuIEkgc2VlIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgd2hpY2ggKmlzKiBzdGF0aWMuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbi4gTm93LCB0aGUgb2J2aW91cyBxdWVzdGlvbiBpbW1lZGlhdGVseSBiZWNvbWVzOiBJZiB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYywgd2hhdCdzIGNhbGxpbmcgaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgc2NvcGUgd2l0aGluIHRoZSBNTVUgaW52YWxpZGF0aW9uIHByb2Nlc3MuIEdpdmVuIGl0J3Mgc3RhdGljLCBpdCdzIHByb2JhYmx5IG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIGZpbGUgb3IgYSBsb2NhbCBoZWxwZXIgZnVuY3Rpb24uIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgYW5kIHNlZSB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBndWVzcyBpcyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIGludmFsaWRhdGluZyBUTEIgZW50cmllcyByZWxhdGVkIHRvIGEgcmFuZ2UsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb25zIGl0IGhhcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gTU1VIGluZnJhc3RydWN0dXJlLiBHb3R0YSBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo0MS45MjA2NTMxODhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjYyNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTc3MT12b2lkIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy03OTYtXFxudmlydC9rdm0va3ZtX21haW4uYzo3OTc6c3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTc5OC1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9ODg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBrdm1fbW11X25vdGlmaWVyX29wcyA9IHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTg4Ni1cXHQuaW52YWxpZGF0ZV9yYW5nZV9zdGFydFxcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0LFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6ODg3OlxcdC5pbnZhbGlkYXRlX3JhbmdlX2VuZFxcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTg4OC1cXHQuY2xlYXJfZmx1c2hfeW91bmdcXHQ9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjQxLjk5NzkyMDA5M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzAxNzAzNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIE1NVSBOb3RpZmllciBDYWxsYmFja3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIGNhbGxiYWNrIHdpdGhpbiBga3ZtX21tdV9ub3RpZmllcl9vcHNgLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIEdsb2JhbCBQYWdlIENhY2hlIChHUEMpLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGV4YW1pbmluZyBga3ZtX2dwY19yZWZyZXNoYCwgYGt2bV9ncGNfYWN0aXZhdGVgLCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYC4gTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zLlxuXG5IbW0sIGlzIGBrdm1fbW11X2ludmFsaWRhdGVfZW5kYCByZWxldmFudD8gTm8sIHRoZSBwYXRjaCBJJ20gcmV2aWV3aW5nIG1vZGlmaWVkIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCBpbnN0ZWFkLiBXYWl0LCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzdWFsbHkgaW5saW5lZC4gQnV0LCBpdCdzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIE1NVSBub3RpZmllcnMuIENhbiBJIGV2ZW4gY29uc2lkZXIgaXQ/IFRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBCdXQsIHNpbmNlIGl0J3MgYSBjYWxsYmFjaywgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoZXJlZm9yZSwgaXQgd29uJ3QgYmUgaW5saW5lZC4gSSBjYW4gbGlzdCBpdCFcblxuTm93LCBJJ2xsIGRvdWJsZS1jaGVjayBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAuIEkgbmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4OTEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MzI6NTAuNjk5NjI3MzI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQ2ODU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz03NzE9dm9pZCBrdm1fbW11X2ludmFsaWRhdGVfZW5kKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzk2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Nzk3OnN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sXFxudmlydC9rdm0va3ZtX21haW4uYy03OTgtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTg4NT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMga3ZtX21tdV9ub3RpZmllcl9vcHMgPSB7XFxudmlydC9rdm0va3ZtX21haW4uYy04ODYtXFx0LmludmFsaWRhdGVfcmFuZ2Vfc3RhcnRcXHQ9IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjg4NzpcXHQuaW52YWxpZGF0ZV9yYW5nZV9lbmRcXHQ9IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQsXFxudmlydC9rdm0va3ZtX21haW4uYy04ODgtXFx0LmNsZWFyX2ZsdXNoX3lvdW5nXFx0PSBrdm1fbW11X25vdGlmaWVyX2NsZWFyX2ZsdXNoX3lvdW5nLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo1MC43NjYxMDA5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzgyOTc1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDYWxsYmFjayBhbmQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIGNhbGxiYWNrLiBSaWdodCwgbGV0IG1lIHBpbnBvaW50IHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzIGhlcmUuIEkgc2VlIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAsIGFuZCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAuIEhvbGQgb24sIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQsIGlzIGl0PyBCdXQgaXQgKmRvZXMqIGNhbGwgYF9fa3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCB0aGF0IG9uZSBjYWxscyBgX19rdm1fZ3BjX3JlZnJlc2hgLiBBaCwgYW5kIGBfX2t2bV9ncGNfcmVmcmVzaGAgdGhlbiBjYWxscyBgaHZhX3RvX3Bmbl9yZXRyeWAsIHdoaWNoICppcyogdGhlIG9uZSB3ZSdyZSBpbnRlcmVzdGVkIGluIGJlaW5nIG1vZGlmaWVkLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCdzIGFsbCBjb25uZWN0ZWQgYXMgSSBleHBlY3QuIFNvIHdlJ3JlIGdvb2QgdGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB2ZXJpZnkgdGhhdCBgS1ZNYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGhlcmUuIFllcCwgY29uZmlybWVkLCBgS1ZNYCBpcyB0aGUgbWFpbiBjb25maWcuIEFsbCBzZXQgdGhlbi4gTm93LCBJJ2xsIGdvIGFoZWFkIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzkxLCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo1Ni4yNDQ0MDA1ODFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI3NTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlX2h2YVwiLFxuICAgIFwia3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIE1NVSBub3RpZmllciBsb2dpYyBhbmQgcGZuY2FjaGUgcmVmcmVzaCBtZWNoYW5pc21zIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIGBtbl9pbnZhbGlkYXRlX3NlcWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCIsXG4gICAgXCJrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gTU1VIG5vdGlmaWVyIGxvZ2ljIGFuZCBwZm5jYWNoZSByZWZyZXNoIG1lY2hhbmlzbXMgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYG1uX2ludmFsaWRhdGVfc2VxYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo1Ni4zMjQ2ODMxMDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTc0NDUwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMjo1Ni4zMjUyMTkwOTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTk1NjkwNjIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMzRlYzM5MmY3OTk2ZmE4YWEwNzU1YmQwYjRlMjBkYjNlY2MzMjFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTk6MzE6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjBhYzM4MmNkOWU2YWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTgwMCw2ICs4MDAsNyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdC8qIFVzZWQgdG8gd2FpdCBmb3IgY29tcGxldGlvbiBvZiBNTVUgbm90aWZpZXJzLiAgKi9cbiBcdHNwaW5sb2NrX3QgbW5faW52YWxpZGF0ZV9sb2NrO1xuIFx0dW5zaWduZWQgbG9uZyBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbitcdHVuc2lnbmVkIGxvbmcgbW5faW52YWxpZGF0ZV9zZXE7XG4gXHRzdHJ1Y3QgcmN1d2FpdCBtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdDtcbiBcbiBcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLjVlNDNkZDYzYzhiZGQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDggKzgxMiwxNSBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4tXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbitcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpKSB7XG4rXHRcdGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSsrO1xuK1x0XHQvKlxuK1x0XHQgKiBQdWJsaXNoIHRoZSBzZXF1ZW5jZSB1cGRhdGUgYmVmb3JlIGRyb3BwaW5nIHRoZSBhY3RpdmUgY291bnRcbitcdFx0ICogc28gdGhhdCBwZm5jYWNoZSByZWZyZXNoZXMgb2JzZXJ2ZSBvbmUgb3IgdGhlIG90aGVyLlxuK1x0XHQgKi9cbitcdFx0c21wX3dtYigpO1xuIFx0XHQtLWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbitcdH1cbiBcdHdha2UgPSAha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4gXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vcGZuY2FjaGUuYyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbmluZGV4IDcyOGQyYzFiNDg4YTguLmQzNjBmMWVkYTg5NzkgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jXG4rKysgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5AQCAtMTI0LDcgKzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1uX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbitcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW5faW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbiBcdCAqL1xuLVx0aWYgKGt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudClcbitcdGlmIChSRUFEX09OQ0Uoa3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKlxuIFx0ICogRW5zdXJlIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGlzIHJlYWQgYmVmb3JlXG4tXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuK1x0ICogbW5faW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuIFx0ICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuK1x0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW5faW52YWxpZGF0ZV9zZXEgaXMgb2JzZXJ2ZWQuXG4gXHQgKi9cbiBcdHNtcF9ybWIoKTtcbi1cdHJldHVybiBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKGt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX3NlcSkgIT0gbW5fc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHR2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLVx1MDAzZWtodmEpO1xuIFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiBcdHZvaWQgKm5ld19raHZhID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbitcdHVuc2lnbmVkIGxvbmcgbW5fc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdG1uX3NlcSA9IFJFQURfT05DRShncGMtXHUwMDNla3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfc2VxKTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBtbl9zZXEpKTtcbiBcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IHRydWU7XG4gXHRncGMtXHUwMDNlcGZuID0gbmV3X3BmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjMyOjU2LjMyNTIyMjI3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTU2ODgxMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBNTVUgTm90aWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCBpbiBga3ZtX21haW4uY2AgYW5kIGBodmFfdG9fcGZuX3JldHJ5YCBpbiBgcGZuY2FjaGUuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBLVk0ncyBNTVUgbm90aWZpZXIgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB3aXRoIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgd2l0aGluIHRoYXQgcGFydCBvZiB0aGUgaHlwZXJ2aXNvci4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGBtbXVfaW52YWxpZGF0ZV9zZXFgIHdpdGggYSBLVk0tc3BlY2lmaWMgYG1uX2ludmFsaWRhdGVfc2VxYCBmaWVsZCBhZGRlZCB0byB0aGUgYHN0cnVjdCBrdm1gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCBzaWduYWxzIGEgZGVzaXJlIGZvciBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgaW52YWxpZGF0aW9uIHNlcXVlbmNpbmcuXG5cbkl0J3MgdXNpbmcgdGhpcyBuZXcgYG1uX2ludmFsaWRhdGVfc2VxYCBpbiB0aGUgYHBmbmNhY2hlYCBoYW5kbGluZywgd2hpY2ggc3VnZ2VzdHMgaXQncyBhaW1lZCBhdCByZXNvbHZpbmcgc29tZSByYWNlIGNvbmRpdGlvbiBvciBzZXF1ZW5jZSBjb3VudGVyIGlzc3VlIHJlbGF0ZWQgdG8gaG93IFBGTiBjYWNoZSBlbnRyaWVzIGFyZSBpbnZhbGlkYXRlZCB3aGVuIE1NVSBub3RpZmljYXRpb25zIGNvbWUgaW4uIEdvb2QuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgcmFjZSBpdCdzIHRyeWluZyB0byBlbGltaW5hdGUsIGJ1dCB0aGlzIGFwcHJvYWNoIG9mIHVzaW5nIGEgZGVkaWNhdGVkIHNlcXVlbmNlIGNvdW50ZXIgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgZWZmZWN0aXZlIHdheSB0byBoYW5kbGUgc3VjaCBwcm9ibGVtcy5cblxuSSBzZWUgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyBsaWtlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIFRoYXQncyBhIHJlbGllZi4gSXQncyBhIHByZXR0eSB0YXJnZXRlZCBjaGFuZ2UuIFRoZSBjb21taXQgbWVzc2FnZSByaWdodGx5IHBvaW50cyBvdXQgdGhhdCBpc3N1ZXMgYXJpc2luZyBmcm9tICp0aGlzKiBwYXJ0aWN1bGFyIHBhdGNoIGFyZSBsaWtlbHkgY29uY3VycmVuY3ktcmVsYXRlZCBidWdzIOKAkyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlcywgb3IgbG9naWNhbCBlcnJvcnMuIEtBU0FOLCBMT0NLREVQLCBhbmQgS0NTQU4gKG9yIHNpbXBseSByb2J1c3QgdGVzdGluZykgYXJlIHRoZSB0b29scyBmb3IgZGV0ZWN0aW5nIHRob3NlLCBhbmQgS01TQU4gaXNuJ3QgcGFydGljdWxhcmx5IHJlbGV2YW50IGhlcmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBleHBvc2UgaXQgdG8gdXNlciBzcGFjZSBpbiBhIHdheSB0aGF0IEtNU0FOIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUgYXQgY2F0Y2hpbmcuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBteSBhc3N1bXB0aW9uczogWWVwLCBgbW5faW52YWxpZGF0ZV9zZXFgIGlzIGJlaW5nIGFkZGVkIHRvIGBzdHJ1Y3Qga3ZtYCBhbmQgaW5jcmVtZW50ZWQgaW4gYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBUaGUgc3dpdGNoIHRvIHVzaW5nIHRoYXQgc2VxdWVuY2UgY291bnRlciBpbnN0ZWFkIG9mIHRoZSBzaGFyZWQgb25lIGZvciBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gVGhpcyBsb29rcyBsaWtlIGEgY29uY3VycmVuY3kgZml4IHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEtWTSBQRk4gY2FjaGUgaW52YWxpZGF0aW9uLiBObyBjb25jZXJucyBhYm91dCBOZWVkc0tNU0FOID0gZmFsc2UsIEkgYWdyZWUgY29tcGxldGVseSB3aXRoIHRoYXQgYXNzZXNzbWVudC4gSSdtIHNhdGlzZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3MCwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozMzowNi4yODIxMDk5MzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIEtWTSBNTVUgbm90aWZpZXJzIGJ5IGludHJvZHVjaW5nIGEgZGVkaWNhdGVkIHNlcXVlbmNlIGNvdW50ZXIgKGBtbl9pbnZhbGlkYXRlX3NlcWApIGZvciBwZm5jYWNoZSBpbnZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSBiZXN0IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3Igc3RhbmRhcmQgdGVzdGluZywgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gS1ZNIE1NVSBub3RpZmllcnMgYnkgaW50cm9kdWNpbmcgYSBkZWRpY2F0ZWQgc2VxdWVuY2UgY291bnRlciAoYG1uX2ludmFsaWRhdGVfc2VxYCkgZm9yIHBmbmNhY2hlIGludmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIGJlc3QgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzhjhd[1] Phase: Succeeded StartedAt: 2026-08-10 19:33:29 +0000 UTC FinishedAt: 2026-08-10 19:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 19:33:29 +0000 UTC FinishedAt: 2026-08-10 19:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2] Phase: Succeeded StartedAt: 2026-08-10 19:33:29 +0000 UTC FinishedAt: 2026-08-10 23:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 19:33:29 +0000 UTC FinishedAt: 2026-08-10 23:22:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 19:33:29 +0000 UTC FinishedAt: 2026-08-10 19:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 19:33:29 +0000 UTC FinishedAt: 2026-08-10 19:33:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzhjhd/series-workflowzhjhd-convert-artifact-199176617/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 19:33:40 +0000 UTC FinishedAt: 2026-08-10 19:53:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 19:33:40 +0000 UTC FinishedAt: 2026-08-10 19:53:12 +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:*c88c9833-e37d-4791-8cf7-0afaa7fc4fcc,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-workflowzhjhd/series-workflowzhjhd-convert-artifact-199176617/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": "73b3c65e-c1fa-427a-ac18-68f8c477e6ba", "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-workflowzhjhd/series-workflowzhjhd-build-action-81107463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 19:33:40 +0000 UTC FinishedAt: 2026-08-10 19:53:02 +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:*c88c9833-e37d-4791-8cf7-0afaa7fc4fcc,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-workflowzhjhd/series-workflowzhjhd-convert-artifact-199176617/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": "73b3c65e-c1fa-427a-ac18-68f8c477e6ba", "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-workflowzhjhd/series-workflowzhjhd-build-action-81107463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 19:53:12 +0000 UTC FinishedAt: 2026-08-10 19:53:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 19:53:12 +0000 UTC FinishedAt: 2026-08-10 19:53:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 19:53:12 +0000 UTC FinishedAt: 2026-08-10 19:53:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 19:53:12 +0000 UTC FinishedAt: 2026-08-10 19:53:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzhjhd/series-workflowzhjhd-convert-artifact-1647542332/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 19:53:22 +0000 UTC FinishedAt: 2026-08-10 19:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 19:53:22 +0000 UTC FinishedAt: 2026-08-10 19:55:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*73b3c65e-c1fa-427a-ac18-68f8c477e6ba,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-workflowzhjhd/series-workflowzhjhd-build-action-81107463/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-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 19:55:39 +0000 UTC FinishedAt: 2026-08-10 19:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 19:55:39 +0000 UTC FinishedAt: 2026-08-10 19:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 19:55:39 +0000 UTC FinishedAt: 2026-08-10 20:17:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 19:55:39 +0000 UTC FinishedAt: 2026-08-10 20:17:52 +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:*c88c9833-e37d-4791-8cf7-0afaa7fc4fcc,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-workflowzhjhd/series-workflowzhjhd-convert-artifact-1647542332/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": "6297ff00-368f-4c9e-a0fb-71cd0b60e831", "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-workflowzhjhd/series-workflowzhjhd-build-action-841435800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 19:55:39 +0000 UTC FinishedAt: 2026-08-10 20:17:42 +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:*c88c9833-e37d-4791-8cf7-0afaa7fc4fcc,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-workflowzhjhd/series-workflowzhjhd-convert-artifact-1647542332/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": "6297ff00-368f-4c9e-a0fb-71cd0b60e831", "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-workflowzhjhd/series-workflowzhjhd-build-action-841435800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 20:17:52 +0000 UTC FinishedAt: 2026-08-10 20:17:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 20:17:52 +0000 UTC FinishedAt: 2026-08-10 20:17:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 20:17:52 +0000 UTC FinishedAt: 2026-08-10 20:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 20:17:52 +0000 UTC FinishedAt: 2026-08-10 20:19:43 +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:*6297ff00-368f-4c9e-a0fb-71cd0b60e831,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-workflowzhjhd/series-workflowzhjhd-build-action-841435800/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-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 20:19:53 +0000 UTC FinishedAt: 2026-08-10 23:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 20:19:53 +0000 UTC FinishedAt: 2026-08-10 23:22:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*73b3c65e-c1fa-427a-ac18-68f8c477e6ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6297ff00-368f-4c9e-a0fb-71cd0b60e831,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-workflowzhjhd/series-workflowzhjhd-build-action-81107463/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-workflowzhjhd/series-workflowzhjhd-build-action-841435800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 20:19:53 +0000 UTC FinishedAt: 2026-08-10 20:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 20:19:53 +0000 UTC FinishedAt: 2026-08-10 20:19:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzhjhd/series-workflowzhjhd-convert-artifact-1077836293/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 20:19:53 +0000 UTC FinishedAt: 2026-08-10 20:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 20:19:53 +0000 UTC FinishedAt: 2026-08-10 20:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 20:19:53 +0000 UTC FinishedAt: 2026-08-10 20:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 20:20:03 +0000 UTC FinishedAt: 2026-08-10 23:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzhjhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva","kvm_mmu_notifier_invalidate_range_end"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"395e9edd-926e-40bb-b32d-c338da216567","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 20:20:03 +0000 UTC FinishedAt: 2026-08-10 23:22:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*73b3c65e-c1fa-427a-ac18-68f8c477e6ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6297ff00-368f-4c9e-a0fb-71cd0b60e831,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-workflowzhjhd/series-workflowzhjhd-build-action-81107463/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-workflowzhjhd/series-workflowzhjhd-build-action-841435800/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-workflowzhjhd/series-workflowzhjhd-convert-artifact-1077836293/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,}