Name: series-workflowsvw2z Phase: Succeeded StartedAt: 2026-08-12 16:32:49 +0000 UTC FinishedAt: 2026-08-12 21:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[0] Phase: Succeeded StartedAt: 2026-08-12 16:32:49 +0000 UTC FinishedAt: 2026-08-12 17:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 16:32:49 +0000 UTC FinishedAt: 2026-08-12 17:26:16 +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", "KVM_XEN" ], "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", "KVM_XEN" ], "series_id": "9dfd5081-ff52-4d59-bde4-bacb7fe02a8d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_xen_vcpu_set_attr", "kvm_xen_hypercall", "kvm_xen_set_evtchn_fast", "kvm_xen_setup_evtchn", "kvm_xen_hvm_evtchn_send", "kvm_xen_hvm_set_attr" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHlwZXJjYWxsJiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0X2V2dGNobl9mYXN0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0dXBfZXZ0Y2huJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX2V2dGNobl9zZW5kJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGFsaWdubWVudCBpc3N1ZXMsIGF0b21pYyBvcGVyYXRpb25zIG9uIGd1ZXN0IG1lbW9yeSwgYW5kIGEgc2VxdWVuY2UgY291bnRlciBmb3IgR3Vlc3QgUGFnZSBDYWNoZSAoR1BDKSBpbiBLVk0gWGVuIGVtdWxhdGlvbi4gSXQgcmVwbGFjZXMgYElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZWAgd2l0aCBhIG1hY3JvIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAsIGhhbmRsZXMgdW5hbGlnbmVkIGF0b21pYyBvcGVyYXRpb25zIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIHVzZXMgYGJ0c2xgIGZvciAzMi1iaXQgYWxpZ25lZCBndWVzdC1jb250cm9sbGVkIG1lbW9yeSBpbiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBhbmQgaW50cm9kdWNlcyBgZ3BjX2ludmFsaWRhdGVfc2VxYCB0byBzZXBhcmF0ZSBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGZyb20gTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBlbXVsYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgMzItYml0LzY0LWJpdCBzaGFyZWQgaW5mbyBoYW5kbGluZywgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSwgYW5kIHBmbmNhY2hlIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZSBhbmQgWGVuIGVtdWxhdGlvbiwgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4OTczZTA4YmQ2OGY4ZDk1ZTMzNGVkNWQ2YmRjOTk3MzRiZWM0ZGYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTc6MjM6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC03Miw3ICYjNDM7NzIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3YykgIT0gMHhjMDApO1xuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2Nfc2VjX2hpKSAhPSAweGMwYyk7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4mIzQzO1x0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4gXHRcdHdjX3NlY19oaSA9IFx1MDAyNnNoaW5mby1cdTAwM2V3Y19zZWNfaGk7XG5AQCAtMzkwLDcgJiM0MzszOTAsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuIFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCB0aW1lKSAhPVxuIFx0XHQgICAgIHNpemVvZih2eC1cdTAwM2VydW5zdGF0ZV90aW1lcykpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4mIzQzO1x0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2LVx1MDAzZWt2bSkpIHtcbiBcdFx0dXNlcl9sZW4gPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XG4gXHRcdHRpbWVzX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sXG4gXHRcdFx0XHQgICAgIHN0YXRlX2VudHJ5X3RpbWUpO1xuQEAgLTY2MSwyOCAmIzQzOzY2MSwzMiBAQCB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdH1cbiBcbiBcdC8qIE5vdyBncGMtXHUwMDNla2h2YSBpcyBhIHZhbGlkIGtlcm5lbCBhZGRyZXNzIGZvciB0aGUgdmNwdV9pbmZvICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuJiM0MztcdFx0dm9pZCAqdmlfcGVuZGluZ19zZWwgPSBcdTAwMjZ2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWw7XG4gXG4tXHRcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcJiMzNDtvcnEgJTAsICUxXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtub3RxICUwXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICBMT0NLX1BSRUZJWCBcJiMzNDthbmRxICUwLCAlMlxcblwmIzM0O1xuLVx0XHRcdCAgICAgOiBcJiMzNDs9clwmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcbi1cdFx0XHQgICAgICAgXCYjMzQ7JiM0MzttXCYjMzQ7ICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcJiMzNDsmIzQzO21cJiMzNDsgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcJiMzNDswXCYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpKTtcbiYjNDM7XHRcdGlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXZpX3BlbmRpbmdfc2VsLCBzaXplb2YodTY0KSkpIHtcbiYjNDM7XHRcdFx0YXRvbWljNjRfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LFxuJiM0MztcdFx0XHQgKiB3aGVyZSBldnRjaG5fcGVuZGluZ19zZWwgaXMgMzIgYml0cyB3aWRlIGFuZCB0aGlzXG4mIzQzO1x0XHRcdCAqIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBhbnl3YXkgKHRoaXMgaXMgaW5zaWRlXG4mIzQzO1x0XHRcdCAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvblxuJiM0MztcdFx0XHQgKiBJU19FTkFCTEVEKENPTkZJR182NEJJVCkpLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0YXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsIFx1MDAzZVx1MDAzZSAzMixcbiYjNDM7XHRcdFx0XHQgIHZpX3BlbmRpbmdfc2VsICYjNDM7IDQpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGF0b21pYzY0X2FuZG5vdChldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopXHUwMDI2di1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xuIFx0XHRXUklURV9PTkNFKHZpLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4gXHR9IGVsc2Uge1xuLVx0XHR1MzIgZXZ0Y2huX3BlbmRpbmdfc2VsMzIgPSBldnRjaG5fcGVuZGluZ19zZWw7XG4gXHRcdHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuIFxuLVx0XHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXCYjMzQ7b3JsICUwLCAlMVxcblwmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7bm90bCAlMFxcblwmIzM0O1xuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCYjMzQ7YW5kbCAlMCwgJTJcXG5cJiMzNDtcbi1cdFx0XHQgICAgIDogXCYjMzQ7PXJcJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSxcbi1cdFx0XHQgICAgICAgXCYjMzQ7JiM0MzttXCYjMzQ7ICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcJiMzNDsmIzQzO21cJiMzNDsgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcJiMzNDswXCYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwzMikpO1xuJiM0MztcdFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpO1xuJiM0MztcdFx0YXRvbWljX2FuZG5vdChldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopXHUwMDI2di1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xuIFx0XHRXUklURV9PTkNFKHZpLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4gXHR9XG4gXG5AQCAtNzEzLDYgJiM0Mzs3MTcsMTYgQEAgaW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XG4gXHRcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLVx1MDAzZXNyY3UgbXVzdCBiZVxuJiM0MztcdCAqIGhlbGQuIE1vc3QgY2FsbGVycyBob2xkIGl0IGFscmVhZHksIGJ1dCB0aGlzIGlzIGFsc28gcmVhY2hlZCBmcm9tXG4mIzQzO1x0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcbiYjNDM7XHQgKiB3aGVyZSB2Y3B1X2VudGVyX2d1ZXN0KCkgaGFzIGFscmVhZHkgZHJvcHBlZCB0aGUgdkNQVSYjMzk7cyBTUkNVIGxvY2suXG4mIzQzO1x0ICogVGFraW5nIFNSQ1UgZG9lcyBub3Qgc2xlZXAsIHNvIGl0IGlzIHNhZmUgZXZlbiBpbiB0aGUgYXRvbWljIGNhc2VcbiYjNDM7XHQgKiB3aGljaCBpcyBoYW5kbGVkIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGd1YXJkKHNyY3UpKFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuJiM0MztcbiBcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHR3aGlsZSAoIWt2bV9ncGNfY2hlY2soZ3BjLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpKSB7XG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC05MjYsNiAmIzQzOzk0MCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHRyID0gLUVOWElPO1xuJiM0MztcdFx0XHRpZiAoIUlTX0FMSUdORUQoZGF0YS1cdTAwM2V1LmdwYSwgc2l6ZW9mKHUzMikpKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0ICAgICBkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTkzNSw2ICYjNDM7OTUzLDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdHIgPSAtRU5YSU87XG4mIzQzO1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0XHQgZGF0YS1cdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbiBcdFx0fVxuQEAgLTk3OCw3ICYjNDM7MTAwMCw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdCAqIGFkZHJlc3MsIHRoYXQmIzM5O3MgYWN0dWFsbHkgT0suIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KClcbiBcdFx0ICogd2lsbCBjb3BlLlxuIFx0XHQgKi9cbi1cdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxuJiM0MztcdFx0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzeiA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyk7XG5AQCAtMTQyMiwxNiAmIzQzOzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVx1MDAzZXhlbi51LmhjYWxsLnJlc3VsdCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChib29sIGhhc182NGJpdF9zaGluZm8pXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSlcbiYjNDM7XHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcbiBcdFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gfVxuIFxuLXN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbi1cdFx0XHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbyxcbiYjNDM7XHRcdFx0ICAgICAgIGludCBucl9wb3J0cywgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbkBAIC0xNDQ2LDcgJiM0MzsxNDczLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxuIFx0XHRnb3RvIG91dF9yY3U7XG4gXG4gXHRyZXQgPSBmYWxzZTtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdH0gZWxzZSB7XG5AQCAtMTQ2OCw5ICYjNDM7MTQ5NSwxMCBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4mIzQzO3N0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCxcbiBcdFx0XHRcdCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4mIzQzO1x0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXHUwMDNla3ZtKTtcbiBcdHN0cnVjdCBzY2hlZF9wb2xsIHNjaGVkX3BvbGw7XG4gXHRldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0cztcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtMTQ4MCw3ICYjNDM7MTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiBcdCAgICAhKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgXHUwMDI2IEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2ICFsb25nbW9kZSkge1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2ICFpc182NGJpdCkge1xuIFx0XHRzdHJ1Y3QgY29tcGF0X3NjaGVkX3BvbGwgc3AzMjtcbiBcbiBcdFx0LyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGNvbXBhdCBzdHJ1Y3QgZGVmaW5pdGlvbiBpcyBjb3JyZWN0ICovXG5AQCAtMTUyOSw3ICYjNDM7MTU1Nyw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNjaGVkX3BvbGwubnJfcG9ydHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChwb3J0c1tpXSBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdGlmIChwb3J0c1tpXSBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChoYXNfNjRiaXRfc2hpbmZvKSkge1xuIFx0XHRcdCpyID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuQEAgLTE1NDIsNyAmIzQzOzE1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXG4gXHRzZXRfYml0KHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnBvbGxfbWFzayk7XG4gXG4tXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbiYjNDM7XHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbiBcdFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcbiBcbiBcdFx0aWYgKHNjaGVkX3BvbGwudGltZW91dClcbkBAIC0xNTc3LDEyICYjNDM7MTYwNSwxMiBAQCBzdGF0aWMgdm9pZCBjYW5jZWxfZXZ0Y2huX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuJiM0MztcdFx0aWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBTQ0hFRE9QX3lpZWxkOlxuQEAgLTE2MDEsNyAmIzQzOzE2MjksNyBAQCBzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIge1xuICAgICB1aW50MzJfdCBmbGFncztcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4mIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2MzMsNyAmIzQzOzE2NjEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuIFx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9XG4gXHRcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSk7XG4gXG4tXHRcdGlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIHBhcmFtLCBcdTAwMjZvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6XG4mIzQzO1x0XHRpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgXHUwMDI2b25lc2hvdCwgaXNfNjRiaXQgPyBzaXplb2Yob25lc2hvdCkgOlxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyKSwgXHUwMDI2ZSkpIHtcbiBcdFx0XHQqciA9IC1FRkFVTFQ7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtMTY3Myw3ICYjNDM7MTcwMSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4mIzQzO1x0Ym9vbCBpc182NGJpdDtcbiBcdHU2NCBpbnB1dCwgcGFyYW1zWzZdLCByID0gLUVOT1NZUztcbiBcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xuIFx0dTggY3BsO1xuQEAgLTE2ODMsOCAmIzQzOzE3MTEsOCBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7XG4gXG4tXHRsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7XG4tXHRpZiAoIWxvbmdtb2RlKSB7XG4mIzQzO1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuJiM0MztcdGlmICghaXNfNjRiaXQpIHtcbiBcdFx0aW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7XG4gXHRcdHBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpO1xuQEAgLTE3MzAsMTcgJiM0MzsxNzU4LDE3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQodmNwdSwgcGFyYW1zWzFdLCBcdTAwMjZyKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIF9fSFlQRVJWSVNPUl9zY2hlZF9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSxcbiYjNDM7XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4mIzQzO1x0XHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSxcbiBcdFx0XHRcdFx0XHRwYXJhbXNbMl0sIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgX19IWVBFUlZJU09SX3NldF90aW1lcl9vcDoge1xuIFx0XHR1NjQgdGltZW91dCA9IHBhcmFtc1swXTtcbiBcdFx0LyogSW4gMzItYml0IG1vZGUsIHRoZSA2NC1iaXQgdGltZW91dCBpcyBpbiB0d28gMzItYml0IHBhcmFtcy4gKi9cbi1cdFx0aWYgKCFsb25nbW9kZSlcbiYjNDM7XHRcdGlmICghaXNfNjRiaXQpXG4gXHRcdFx0dGltZW91dCB8PSBwYXJhbXNbMV0gXHUwMDNjXHUwMDNjIDMyO1xuIFx0XHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuQEAgLTE3NTUsNyAmIzQzOzE3ODMsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbiYjNDM7XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwuY3BsID0gY3BsO1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTtcbkBAIC0xNzk1LDggJiM0MzsxODIzLDkgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbiBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuJiM0MztcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cywgdmlfcGVuZGluZ19zZWxfb2ZzO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBwb3J0X3dvcmRfYml0O1xuIFx0Ym9vbCBraWNrX3ZjcHUgPSBmYWxzZTtcbkBAIC0xODEyLDcgJiM0MzsxODQxLDcgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0V1JJVEVfT05DRSh4ZS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2V2Y3B1X2lkeCk7XG4gXHR9XG4gXG4tXHRpZiAoeGUtXHUwMDNlcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuJiM0MztcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4MjMsMTYgJiM0MzsxODUyLDIzIEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKVxuIFx0XHRnb3RvIG91dF9yY3U7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4mIzQzO1x0aWYgKGhhc182NGJpdF9zaGluZm8pIHtcbiBcdFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcdFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XG4gXHRcdG1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9tYXNrO1xuIFx0XHRwb3J0X3dvcmRfYml0ID0geGUtXHUwMDNlcG9ydCAvIDY0O1xuJiM0MztcbiYjNDM7XHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcdFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XG4gXHRcdG1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9tYXNrO1xuIFx0XHRwb3J0X3dvcmRfYml0ID0geGUtXHUwMDNlcG9ydCAvIDMyO1xuJiM0MztcbiYjNDM7XHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRlc3RfYW5kX3NldF9iaXQoKSBuZWVkcyA2NC1iaXQgYWxpZ25tZW50LCBidXQgdGhhdCYjMzk7cyBPSyAqL1xuJiM0MztcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIGV2dGNobl9wZW5kaW5nKSBcdTAwMjYgNyk7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTE4NDgsNiAmIzQzOzE4ODQsOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRyYyA9IC1FTk9UQ09OTjsgLyogTWFza2VkICovXG4gXHRcdGt2bV94ZW5fY2hlY2tfcG9sbGVyKHZjcHUsIHhlLVx1MDAzZXBvcnQpO1xuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdGJvb2wgb2xkO1xuJiM0MztcbiBcdFx0cmMgPSAxOyAvKiBEZWxpdmVyZWQgdG8gdGhlIGJpdG1hcCBpbiBzaGFyZWRfaW5mby4gKi9cbiBcdFx0LyogTm93IHN3aXRjaCB0byB0aGUgdkNQVSYjMzk7cyB2Y3B1X2luZm8gdG8gc2V0IHRoZSBpbmRleCBhbmQgcGVuZGluZ19zZWwgKi9cbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTE4NjQsMTkgJiM0MzsxOTAyLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBFeHBsaWNpdGx5IHVzZSBhIDMyLWJpdCBidHNsIGluc3RlYWQgb2YgdGVzdF9hbmRfc2V0X2JpdCgpLFxuJiM0MztcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuJiM0MztcdFx0ICogY29udHJvbGxlZCBhbmQgb25seSByZXF1aXJlZCB0byBiZSAzMi1iaXQgYWxpZ25lZCwgc28gYVxuJiM0MztcdFx0ICogNjQtYml0IGFjY2VzcyBjb3VsZCBnZW5lcmF0ZSBhIHNwbGl0LWxvY2sgI0FDLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIE5vdGUsIHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBvblxuJiM0MztcdFx0ICogcGVuZGluZ19iaXRzIGFib3ZlOiB0aGF0IGlzIGluIHRoZSBwZXItVk0gc2hhcmVkX2luZm8sIHdoaWNoXG4mIzQzO1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbiYjNDM7XHRcdCAqIGFsaWduZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCYjMzQ7YnRzbFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgJiM0MzsgdmlfcGVuZGluZ19zZWxfb2ZzKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgYywgXCYjMzQ7SXJcJiMzNDssIHBvcnRfd29yZF9iaXQpO1xuJiM0MztcdFx0aWYgKCFvbGQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vIG5lZWQgZm9yIGNvbXBhdCBoYW5kbGluZyAqL1xuJiM0MztcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuJiM0MztcdFx0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpO1xuJiM0MztcbiYjNDM7XHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuJiM0MztcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuIFx0XHR9XG4gXG4gXHRcdC8qIEZvciB0aGUgcGVyLXZDUFUgbGFwaWMgdmVjdG9yLCBkZWxpdmVyIGl0IGFzIE1TSS4gKi9cbkBAIC0xOTc0LDcgJiM0MzsyMDIyLDcgQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcbiBcdC8qXG4tXHQgKiBEb24mIzM5O3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbiYjNDM7XHQgKiBEb24mIzM5O3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBrdm1fbWF4X2V2dGNobl9wb3J0KCkuXG4gXHQgKiBVc2Vyc3BhY2UgY2FuIGNvbmZpZ3VyZSB3aGF0IGV2ZXIgdGFyZ2V0cyBpdCBsaWtlczsgZXZlbnRzIGp1c3Qgd29uJiMzOTt0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0xOTgzLDggJiM0MzsyMDMxLDggQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqIGNhbiBiZSByZXN0b3JlZCAqaW5kZXBlbmRlbnRseSogb2Ygb3RoZXIgdGhpbmdzIGxpa2UgY3JlYXRpbmcgdkNQVXMsXG4gXHQgKiB3aXRob3V0IGltcG9zaW5nIGFuIG9yZGVyaW5nIGRlcGVuZGVuY3kgb24gdXNlcnNwYWNlLiAgSW4gdGhpc1xuIFx0ICogcGFydGljdWxhciBjYXNlLCB0aGUgcHJvYmxlbWF0aWMgb3JkZXJpbmcgd291bGQgYmUgd2l0aCBzZXR0aW5nIHRoZVxuLVx0ICogWGVuICYjMzk7bG9uZyBtb2RlJiMzOTsgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4mIzQzO1x0ICogWGVuICYjMzk7bG9uZyBtb2RlJiMzOTsgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbiYjNDM7XHQgKiA0MDk2IGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy5cbiBcdCAqL1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIwMjEsNyAmIzQzOzIwNjksNyBAQCBpbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKlxuIFx0c3RydWN0IGt2bV94ZW5fZXZ0Y2huIGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCF1eGUtXHUwMDNlcG9ydCB8fCB1eGUtXHUwMDNlcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuJiM0MztcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIxMzEsNyAmIzQzOzIxNzksNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0Y2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOlxuIFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkge1xuLVx0XHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4mIzQzO1x0XHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxuIFx0XHRcdFx0Z290byBvdXRfbm9ldmVudGZkOyAvKiAtRUlOVkFMICovXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0ZXZlbnRmZCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5ldmVudGZkLmZkKTtcbkBAIC0yMjQ5LDcgJiM0MzsyMjk3LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGFcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKVxuIFx0XHRyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7XG4gXG4tXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuJiM0MztcdGlmICghcG9ydCB8fCBwb3J0IFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX0RFQVNTSUdOKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaFxuaW5kZXggNTllNjEyOGE3YmQzYy4uM2U4YzkzMDZlYjg5NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oXG5AQCAtMjQ4LDYgJiM0MzsyNDgsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XG4gI2RlZmluZSBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTICg4ICpcdFx0XHRcdFxcXG4gXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcbiBcdFx0XHRcdFx0XHQgICBldnRjaG5fcGVuZGluZykpXG4mIzQzO1xuJiM0MzsvKiBMYXRjaGVkIFZNLXdpZGUgbW9kZTsgdGhlIEtWTSBlcXVpdmFsZW50IG9mIFhlbiYjMzk7cyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xuJiM0MzsjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXG4mIzQzO1x0KElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgUkVBRF9PTkNFKChrdm0pLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkpXG4mIzQzO1xuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcbiAgICAgaW50IHN0YXRlO1xuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggYWI4Y2ZhZWM4MmQzMS4uZDc0MDZjMTBlMDkwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtODU0LDYgJiM0Mzs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kO1xuIFxuJiM0MztcdHVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxO1xuJiM0MztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcbiBcdHU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNDVlNzg0NDYyZWM2ZS4uZDI0N2Y3NDFkMWUzZiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC04MTIsNiAmIzQzOzgxMiwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4mIzQzO1x0a3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGVcbiYjNDM7XHQgKiBHUEMgc2VxdWVuY2UgaW5jcmVhc2UgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB0aGUgaW52YWxpZGF0ZSBjb3VudFxuJiM0MztcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxuJiM0MztcdCAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF93bWIoKTtcbiYjNDM7XG4gXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHR3YWtlID0gIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxuIHtcbiBcdC8qXG4gXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcbkBAIC0xMzYsMjAgJiM0MzsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4mIzQzO1x0ICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4gXHQgKi9cbiBcdGlmIChrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxuLVx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbi1cdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4mIzQzO1x0ICogZ3BjX2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbiYjNDM7XHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuJiM0MztcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRncGMtXHUwMDNldmFsaWQgPSBmYWxzZTtcbiBcbiBcdGRvIHtcbi1cdFx0bW11X3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICYjNDM7MjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbiYjNDM7XHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgZ3BjX3NlcSkpO1xuIFxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiBcdGdwYy1cdTAwM2VwZm4gPSBuZXdfcGZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV94ZW5fdmNwdV9zZXRfYXR0ciYjMzQ7LAogICAgJiMzNDtrdm1feGVuX2h5cGVyY2FsbCYjMzQ7LAogICAgJiMzNDtrdm1feGVuX3NldF9ldnRjaG5fZmFzdCYjMzQ7LAogICAgJiMzNDtrdm1feGVuX3NldHVwX2V2dGNobiYjMzQ7LAogICAgJiMzNDtrdm1feGVuX2h2bV9ldnRjaG5fc2VuZCYjMzQ7LAogICAgJiMzNDtrdm1feGVuX2h2bV9zZXRfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gWGVuIGVtdWxhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyAzMi1iaXQvNjQtYml0IHNoYXJlZCBpbmZvIGhhbmRsaW5nLCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5LCBhbmQgcGZuY2FjaGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBjb2RlIGFuZCBYZW4gZW11bGF0aW9uLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIGd1ZXN0IGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5NzNlMDhiZDY4ZjhkOTVlMzM0ZWQ1ZDZiZGM5OTczNGJlYzRkZjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoyMzoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC03Miw3ICYjNDM7NzIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTsKIAlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAKIAkJd2Nfc2VjX2hpID0gJmFtcDtzaGluZm8tJmd0O3djX3NlY19oaTsKQEAgLTM5MCw3ICYjNDM7MzkwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYykKIAlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9CiAJCSAgICAgc2l6ZW9mKHZ4LSZndDtydW5zdGF0ZV90aW1lcykpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IHYtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi0mZ3Q7a3ZtKSkgewogCQl1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJdGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywKIAkJCQkgICAgIHN0YXRlX2VudHJ5X3RpbWUpOwpAQCAtNjYxLDI4ICYjNDM7NjYxLDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KQogCX0KIAogCS8qIE5vdyBncGMtJmd0O2todmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyB2LSZndDtrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtJmd0O2t2bSkpIHsKIAkJc3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiYjNDM7CQl2b2lkICp2aV9wZW5kaW5nX3NlbCA9ICZhbXA7dmktJmd0O2V2dGNobl9wZW5kaW5nX3NlbDsKIAotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggJiMzNDtvcnEgJTAsICUxXG4mIzM0OwotCQkJICAgICAmIzM0O25vdHEgJTBcbiYjMzQ7Ci0JCQkgICAgIExPQ0tfUFJFRklYICYjMzQ7YW5kcSAlMCwgJTJcbiYjMzQ7Ci0JCQkgICAgIDogJiMzNDs9ciYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7CiYjNDM7CQlpZiAoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl2aV9wZW5kaW5nX3NlbCwgc2l6ZW9mKHU2NCkpKSB7CiYjNDM7CQkJYXRvbWljNjRfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LAomIzQzOwkJCSAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXMKJiM0MzsJCQkgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZQomIzQzOwkJCSAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvbgomIzQzOwkJCSAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuCiYjNDM7CQkJICovCiYjNDM7CQkJYXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsICZndDsmZ3Q7IDMyLAomIzQzOwkJCQkgIHZpX3BlbmRpbmdfc2VsICYjNDM7IDQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKikmYW1wO3YtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7CiAJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiAJfSBlbHNlIHsKLQkJdTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsOwogCQlzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiAKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICYjMzQ7b3JsICUwLCAlMVxuJiMzNDsKLQkJCSAgICAgJiMzNDtub3RsICUwXG4mIzM0OwotCQkJICAgICBMT0NLX1BSRUZJWCAmIzM0O2FuZGwgJTAsICUyXG4mIzM0OwotCQkJICAgICA6ICYjMzQ7PXImIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTsKJiM0MzsJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopJmFtcDt2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKTsKJiM0MzsJCWF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKSZhbXA7di0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTsKIAkJV1JJVEVfT05DRSh2aS0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKIAl9CiAKQEAgLTcxMyw2ICYjNDM7NzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiAJQlVJTERfQlVHX09OKHNpemVvZihyYykgIT0KIAkJICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwogCiYjNDM7CS8qCiYjNDM7CSAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLSZndDtzcmN1IG11c3QgYmUKJiM0MzsJICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb20KJiM0MzsJICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSwKJiM0MzsJICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUmIzM5O3MgU1JDVSBsb2NrLgomIzQzOwkgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZQomIzQzOwkgKiB3aGljaCBpcyBoYW5kbGVkIGJlbG93LgomIzQzOwkgKi8KJiM0MzsJZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpOwomIzQzOwogCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiAJd2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkgewogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC05MjYsNiAmIzQzOzk0MCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJciA9IC1FTlhJTzsKJiM0MzsJCQlpZiAoIUlTX0FMSUdORUQoZGF0YS0mZ3Q7dS5ncGEsIHNpemVvZih1MzIpKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiAJCQlyID0ga3ZtX2dwY19hY3RpdmF0ZSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJICAgICBkYXRhLSZndDt1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfSBlbHNlIHsKQEAgLTkzNSw2ICYjNDM7OTUzLDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJCQkJYnJlYWs7CiAJCQl9CiAKJiM0MzsJCQlyID0gLUVOWElPOwomIzQzOwkJCWlmICghSVNfQUxJR05FRChkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHUzMikpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKIAkJCXIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJCSBkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfQpAQCAtOTc4LDcgJiM0MzsxMDAwLDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSkKIAkJICogYWRkcmVzcywgdGhhdCYjMzk7cyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKQogCQkgKiB3aWxsIGNvcGUuCiAJCSAqLwotCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpCiYjNDM7CQlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSkpCiAJCQlzeiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJZWxzZQogCQkJc3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pOwpAQCAtMTQyMiwxNiAmIzQzOzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi0mZ3Q7eGVuLnUuaGNhbGwucmVzdWx0KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pCiAJCXJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7CiAJZWxzZQogCQlyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUzsKIH0KIAotc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAotCQkJICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbywKJiM0MzsJCQkgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9ICZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGU7CkBAIC0xNDQ2LDcgJiM0MzsxNDczLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAogCQlnb3RvIG91dF9yY3U7CiAKIAlyZXQgPSBmYWxzZTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCX0gZWxzZSB7CkBAIC0xNDY4LDkgJiM0MzsxNDk1LDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsCiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSB1NjQgcGFyYW0sIHU2NCAqcikKIHsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSk7CiAJc3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDsKIAlldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0czsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwpAQCAtMTQ4MCw3ICYjNDM7MTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAkgICAgISh2Y3B1LSZndDtrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgJmFtcDsgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7ICFsb25nbW9kZSkgewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgIWlzXzY0Yml0KSB7CiAJCXN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyOwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqLwpAQCAtMTUyOSw3ICYjNDM7MTU1Nyw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHBvcnRzW2ldICZndDs9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQlpZiAocG9ydHNbaV0gJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7CiAJCQkqciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTU0Miw3ICYjNDM7MTU3MCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAogCXNldF9iaXQodmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ucG9sbF9tYXNrKTsKIAotCWlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkgewomIzQzOwlpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHsKIAkJa3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTsKIAogCQlpZiAoc2NoZWRfcG9sbC50aW1lb3V0KQpAQCAtMTU3NywxMiAmIzQzOzE2MDUsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSAgIGludCBjbWQsIHU2NCBwYXJhbSwgdTY0ICpyKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTQ0hFRE9QX3BvbGw6Ci0JCWlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKQomIzQzOwkJaWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZmFsbHRocm91Z2g7CiAJY2FzZSBTQ0hFRE9QX3lpZWxkOgpAQCAtMTYwMSw3ICYjNDM7MTYyOSw3IEBAIHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7CiAgICAgdWludDMyX3QgZmxhZ3M7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsCiAJCQkJICBpbnQgdmNwdV9pZCwgdTY0IHBhcmFtLCB1NjQgKnIpCiB7CiAJc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgb25lc2hvdDsKQEAgLTE2MzMsNyAmIzQzOzE2NjEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAogCQlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9CiAJCQkgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTsKIAotCQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6CiYjNDM7CQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBpc182NGJpdCA/IHNpemVvZihvbmVzaG90KSA6CiAJCQkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIpLCAmYW1wO2UpKSB7CiAJCQkqciA9IC1FRkFVTFQ7CiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2NzMsNyAmIzQzOzE3MDEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IHRpbWVvdXQsCiAKIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JYm9vbCBsb25nbW9kZTsKJiM0MzsJYm9vbCBpc182NGJpdDsKIAl1NjQgaW5wdXQsIHBhcmFtc1s2XSwgciA9IC1FTk9TWVM7CiAJYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAJdTggY3BsOwpAQCAtMTY4Myw4ICYjNDM7MTcxMSw4IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSkKIAkJcmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7CiAKLQlsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7Ci0JaWYgKCFsb25nbW9kZSkgewomIzQzOwlpc182NGJpdCA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7CiYjNDM7CWlmICghaXNfNjRiaXQpIHsKIAkJaW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7CiAJCXBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTsKIAkJcGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpOwpAQCAtMTczMCwxNyAmIzQzOzE3NTgsMTcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6Ci0JCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLAogCQkJCQkJIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDoKLQkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSwKIAkJCQkJCXBhcmFtc1syXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7CiAJCXU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdOwogCQkvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqLwotCQlpZiAoIWxvbmdtb2RlKQomIzQzOwkJaWYgKCFpc182NGJpdCkKIAkJCXRpbWVvdXQgfD0gcGFyYW1zWzFdICZsdDsmbHQ7IDMyOwogCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgJmFtcDtyKTsKIAkJYnJlYWs7CkBAIC0xNzU1LDcgJiM0MzsxNzgzLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGhhbmRsZV9pbl91c2Vyc3BhY2U6CiAJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMOwotCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTsKJiM0MzsJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0OwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuY3BsID0gY3BsOwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTsKQEAgLTE3OTUsOCAmIzQzOzE4MjMsOSBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gJmFtcDtrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZTsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cywgdmlfcGVuZGluZ19zZWxfb2ZzOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQl1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcG9ydF93b3JkX2JpdDsKIAlib29sIGtpY2tfdmNwdSA9IGZhbHNlOwpAQCAtMTgxMiw3ICYjNDM7MTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCVdSSVRFX09OQ0UoeGUtJmd0O3ZjcHVfaWR4LCB2Y3B1LSZndDt2Y3B1X2lkeCk7CiAJfQogCi0JaWYgKHhlLSZndDtwb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChrdm0pKQomIzQzOwlpZiAoeGUtJmd0O3BvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJjID0gLUVXT1VMREJMT0NLOwpAQCAtMTgyMywxNiAmIzQzOzE4NTIsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAlpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKQogCQlnb3RvIG91dF9yY3U7CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCQltYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fbWFzazsKIAkJcG9ydF93b3JkX2JpdCA9IHhlLSZndDtwb3J0IC8gNjQ7CiYjNDM7CiYjNDM7CQl2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKIAkJcGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmc7CiAJCW1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9tYXNrOwogCQlwb3J0X3dvcmRfYml0ID0geGUtJmd0O3BvcnQgLyAzMjsKJiM0MzsKJiM0MzsJCXZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpOwomIzQzOwomIzQzOwkJLyogdGVzdF9hbmRfc2V0X2JpdCgpIG5lZWRzIDY0LWJpdCBhbGlnbm1lbnQsIGJ1dCB0aGF0JiMzOTtzIE9LICovCiYjNDM7CQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpICZhbXA7IDcpOwogCX0KIAogCS8qCkBAIC0xODQ4LDYgJiM0MzsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJcmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqLwogCQlrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS0mZ3Q7cG9ydCk7CiAJfSBlbHNlIHsKJiM0MzsJCWJvb2wgb2xkOwomIzQzOwogCQlyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqLwogCQkvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJiMzOTtzIHZjcHVfaW5mbyB0byBzZXQgdGhlIGluZGV4IGFuZCBwZW5kaW5nX3NlbCAqLwogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC0xODY0LDE5ICYjNDM7MTkwMiwyOSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCQkJZ290byBvdXRfcmN1OwogCQl9CiAKLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7Ci0JCQlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtJmd0O2todmE7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgJmFtcDt2Y3B1X2luZm8tJmd0O2V2dGNobl9wZW5kaW5nX3NlbCkpIHsKLQkJCQlXUklURV9PTkNFKHZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKLQkJCQlraWNrX3ZjcHUgPSB0cnVlOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0X3dvcmRfYml0LAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyAqKSZhbXA7dmNwdV9pbmZvLSZndDtldnRjaG5fcGVuZGluZ19zZWwpKSB7Ci0JCQkJV1JJVEVfT05DRSh2Y3B1X2luZm8tJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7Ci0JCQkJa2lja192Y3B1ID0gdHJ1ZTsKLQkJCX0KJiM0MzsJCS8qCiYjNDM7CQkgKiBFeHBsaWNpdGx5IHVzZSBhIDMyLWJpdCBidHNsIGluc3RlYWQgb2YgdGVzdF9hbmRfc2V0X2JpdCgpLAomIzQzOwkJICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LQomIzQzOwkJICogY29udHJvbGxlZCBhbmQgb25seSByZXF1aXJlZCB0byBiZSAzMi1iaXQgYWxpZ25lZCwgc28gYQomIzQzOwkJICogNjQtYml0IGFjY2VzcyBjb3VsZCBnZW5lcmF0ZSBhIHNwbGl0LWxvY2sgI0FDLgomIzQzOwkJICoKJiM0MzsJCSAqIE5vdGUsIHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBvbgomIzQzOwkJICogcGVuZGluZ19iaXRzIGFib3ZlOiB0aGF0IGlzIGluIHRoZSBwZXItVk0gc2hhcmVkX2luZm8sIHdoaWNoCiYjNDM7CQkgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXQKJiM0MzsJCSAqIGFsaWduZWQuCiYjNDM7CQkgKi8KJiM0MzsJCW9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggJiMzNDtidHNsJiMzNDssCiYjNDM7CQkJCSAgICAgICAqKHUzMiAqKShncGMtJmd0O2todmEgJiM0MzsgdmlfcGVuZGluZ19zZWxfb2ZzKSwKJiM0MzsJCQkJICAgICAgIGMsICYjMzQ7SXImIzM0OywgcG9ydF93b3JkX2JpdCk7CiYjNDM7CQlpZiAoIW9sZCkgewomIzQzOwkJCXN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLSZndDtraHZhOwomIzQzOwomIzQzOwkJCS8qIE5vIG5lZWQgZm9yIGNvbXBhdCBoYW5kbGluZyAqLwomIzQzOwkJCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpICE9CiYjNDM7CQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwomIzQzOwomIzQzOwkJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiYjNDM7CQkJa2lja192Y3B1ID0gdHJ1ZTsKIAkJfQogCiAJCS8qIEZvciB0aGUgcGVyLXZDUFUgbGFwaWMgdmVjdG9yLCBkZWxpdmVyIGl0IGFzIE1TSS4gKi8KQEAgLTE5NzQsNyAmIzQzOzIwMjIsNyBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAogCS8qCi0JICogRG9uJiMzOTt0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2YgbWF4X2V2dGNobl9wb3J0KCkuCiYjNDM7CSAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKS4KIAkgKiBVc2Vyc3BhY2UgY2FuIGNvbmZpZ3VyZSB3aGF0IGV2ZXIgdGFyZ2V0cyBpdCBsaWtlczsgZXZlbnRzIGp1c3Qgd29uJiMzOTt0CiAJICogYmUgZGVsaXZlcmVkIGlmL3doaWxlIHRoZSB0YXJnZXQgaXMgaW52YWxpZCwganVzdCBsaWtlIHVzZXJzcGFjZSBjYW4KIAkgKiBjb25maWd1cmUgTVNJcyB3aGljaCB0YXJnZXQgbm9uLWV4aXN0ZW50IEFQSUNzLgpAQCAtMTk4Myw4ICYjNDM7MjAzMSw4IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sCiAJICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcywKIAkgKiB3aXRob3V0IGltcG9zaW5nIGFuIG9yZGVyaW5nIGRlcGVuZGVuY3kgb24gdXNlcnNwYWNlLiAgSW4gdGhpcwogCSAqIHBhcnRpY3VsYXIgY2FzZSwgdGhlIHByb2JsZW1hdGljIG9yZGVyaW5nIHdvdWxkIGJlIHdpdGggc2V0dGluZyB0aGUKLQkgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIG1heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93IDQwOTYKLQkgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuCiYjNDM7CSAqIFhlbiAmIzM5O2xvbmcgbW9kZSYjMzk7IGZsYWcsIHdoaWNoIGNoYW5nZXMga3ZtX21heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93CiYjNDM7CSAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLgogCSAqLwogCiAJLyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqLwpAQCAtMjAyMSw3ICYjNDM7MjA2OSw3IEBAIGludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqCiAJc3RydWN0IGt2bV94ZW5fZXZ0Y2huIGU7CiAJaW50IHJldDsKIAotCWlmICghdXhlLSZndDtwb3J0IHx8IHV4ZS0mZ3Q7cG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCF1eGUtJmd0O3BvcnQgfHwgdXhlLSZndDtwb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovCkBAIC0yMTMxLDcgJiM0MzsyMTc5LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwKIAogCWNhc2UgRVZUQ0hOU1RBVF9pbnRlcmRvbWFpbjoKIAkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7Ci0JCQlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CQkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJCQlnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi8KIAkJfSBlbHNlIHsKIAkJCWV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpOwpAQCAtMjI0OSw3ICYjNDM7MjI5Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhCiAJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKQogCQlyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7CiAKLQlpZiAoIXBvcnQgfHwgcG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCFwb3J0IHx8IHBvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkYXRhLSZndDt1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaAppbmRleCA1OWU2MTI4YTdiZDNjLi4zZThjOTMwNmViODk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oCkBAIC0yNDgsNiAmIzQzOzI0OCwxMSBAQCBzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvIHsKICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqCQkJCVwKIAkJCQkgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXAogCQkJCQkJICAgZXZ0Y2huX3BlbmRpbmcpKQomIzQzOwomIzQzOy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJiMzOTtzICFoYXNfMzJiaXRfc2hpbmZvKCkuICovCiYjNDM7I2RlZmluZSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSBcCiYjNDM7CShJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBSRUFEX09OQ0UoKGt2bSktJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkpCiYjNDM7CiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7CiAgICAgaW50IHN0YXRlOwogICAgIHVpbnQ2NF90IHN0YXRlX2VudHJ5X3RpbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uZDc0MDZjMTBlMDkwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODU0LDYgJiM0Mzs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydDsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7CiAKJiM0MzsJdW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwogCXU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA0NWU3ODQ0NjJlYzZlLi5kMjQ3Zjc0MWQxZTNmIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTgxMiw2ICYjNDM7ODEyLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAKIAkvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi8KIAlzcGluX2xvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7CiYjNDM7CWt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGUKJiM0MzsJICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnQKJiM0MzsJICogZ29lcyB0byB6ZXJvLiAgUGFpcnMgd2l0aCB0aGUgc21wX3JtYigpIGluCiYjNDM7CSAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3dtYigpOwomIzQzOwogCWlmICghV0FSTl9PTl9PTkNFKCFrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSkKIAkJLS1rdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50OwogCXdha2UgPSAha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCmluZGV4IDcyOGQyYzFiNDg4YTguLjM2NTk2ODZiOTdjMjQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuYwpAQCAtMTI0LDcgJiM0MzsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSkKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdwY19zZXEpCiB7CiAJLyoKIAkgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMKQEAgLTEzNiwyMCAmIzQzOzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfcwogCSAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50CiAJICogaXMgbm90IHByb3RlY3RlZCBieSBncGMtJmd0O2xvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvCiAJICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLSZndDtsb2NrLCBhbmQKLQkgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC4KJiM0MzsJICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiAJICovCiAJaWYgKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmUKLQkgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgotCSAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlCiYjNDM7CSAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluCiYjNDM7CSAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZQogCSAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZQotCSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KJiM0MzsJICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgogCSAqLwogCXNtcF9ybWIoKTsKLQlyZXR1cm4ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTsKJiM0MzsJcmV0dXJuIGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU4LDcgJiM0MzsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAl2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLSZndDtraHZhKTsKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCWdwYy0mZ3Q7dmFsaWQgPSBmYWxzZTsKIAogCWRvIHsKLQkJbW11X3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQlncGNfc2VxID0gZ3BjLSZndDtrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcTsKIAkJc21wX3JtYigpOwogCiAJCXdyaXRlX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwpAQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAkJICogYXR0ZW1wdGluZyB0byByZWZyZXNoLgogCQkgKi8KIAkJV0FSTl9PTl9PTkNFKGdwYy0mZ3Q7dmFsaWQpOwotCX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSkpOwomIzQzOwl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIGdwY19zZXEpKTsKIAogCWdwYy0mZ3Q7dmFsaWQgPSB0cnVlOwogCWdwYy0mZ3Q7cGZuID0gbmV3X3BmbjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIFhlbiBFbXVsYXRpb24gUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGZpbGVzOiBgYXJjaC94ODYva3ZtL3hlbi5jYCwgYGFyY2gveDg2L2t2bS94ZW4uaGAsIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLCBgdmlydC9rdm0va3ZtX21haW4uY2AsIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBmb2N1c2VkIG9uIEtWTSYjMzk7cyBYZW4gZW11bGF0aW9uIGxheWVyLCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgYSBmZXcga2V5IGNoYW5nZXMuIEZpcnN0LCB0aGVyZSYjMzk7cyB0aGlzIG5ldyBmdW5jdGlvbiwgYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYCwgd2hpY2ggc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSBvbGRlciBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGVgIGxvZ2ljLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgcmVmYWN0b3IgZm9yIGNsYXJpdHkgb3IgcG90ZW50aWFsIGZ1dHVyZSBmbGV4aWJpbGl0eS4gVGhlbiwgdGhleSYjMzk7cmUgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMgZm9yIGBldnRjaG5fcGVuZGluZ19zZWxgIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cygpYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24g4oCTIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvbmN1cnJlbmN5IGFuZCBpbnRlci1WTSBjb21tdW5pY2F0aW9uLCBzbyB0aGF0JiMzOTtzIGEgd2VsY29tZSBjaGFuZ2UuIFRoZSBhZGRpdGlvbiBvZiBgZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpO2AgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KClgIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSBhZGRpbmcgcHJvcGVyIHN5bmNocm9uaXphdGlvbi4KClRoZXJlIGFyZSBhbGlnbm1lbnQgY2hlY2tzIGFkZGVkIHdpdGhpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyKClgLCBhbHdheXMgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlIGFuZCBpdCBjaGFuZ2VzIGBtYXhfZXZ0Y2huX3BvcnQoKWAgdG8gdGFrZSBhIGJvb2xlYW4gYGhhc182NGJpdF9zaGluZm9gIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHN0cnVjdCBwb2ludGVyLCB3aGljaCBpcyBuaWNlIGFuZCBjb25jaXNlLiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoKWAgbm93IHVzZXMgYEdFTl9CSU5BUllfUk1XY2NgIGZvciBiaXQgc2V0dGluZy4gVGhpcyBpcyBpbnRlcmVzdGluZzogYSBsb3cgbGV2ZWwgY2hhbmdlIHRoYXQgY291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSBidXQgaXMgYWxzbyBhIHBvc3NpYmxlIHNvdXJjZSBvZiBlcnJvcnMuIExhc3RseSwgd2Ugc2VlIGEgbmV3IGBncGNfaW52YWxpZGF0ZV9zZXFgIGZpZWxkIGluIGBzdHJ1Y3Qga3ZtYCwgYW5kIHRoZXkmIzM5O3ZlIHVwZGF0ZWQgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKWAgYW5kIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoKWAgdG8gdXNlIGl0LCB3aGljaCBpcyByZWxhdGVkIHRvIE1NVSBpbnZhbGlkYXRpb24uCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gS1ZNIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFhlbiBlbXVsYXRpb24sIHNvIGRlZmluaXRlbHkgd29ydGggc29tZSBnb29kIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbnZvbHZlZCwgYW5kIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scywgb2YgY291cnNlLiBHaXZlbiB0aGUgZmlsZXMgdG91Y2hlZCwgYEtWTWAgYW5kIGBLVk1fWEVOYCBhcmUgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBiZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBkaWcgaW50byBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdCBgS1ZNX1hFTmAgaXMgaW5kZWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1hFTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1NgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEtWTV9YRU4gQ29uZmlndXJhdGlvbiBhbmQgSXRzIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNsdWUgcG9pbnRzIHVzIHRvd2FyZHMgYEtWTV9YRU5gIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEtWTSwgYSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGhpbiB0aGUgY29yZSBLVk0gY29kZSBpdHNlbGYuIE15IGF0dGVudGlvbiBpbW1lZGlhdGVseSB0dXJucyB0byBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIFRoaXMgZmlsZSBhbG1vc3QgY2VydGFpbmx5IGhvbGRzIGNyaXRpY2FsIGluZm9ybWF0aW9uIGFib3V0IGhvdyBLVk0gbWFuYWdlcyBwaHlzaWNhbCBwYWdlIG51bWJlcnMsIGFuZCB0aGUgJiMzNDtYRU4mIzM0OyBwYXJ0IG9mIHRoZSBjb25maWcgbWlnaHQgaW5mbHVlbmNlIGhvdyB0aGVzZSBwYWdlcyBhcmUgaGFuZGxlZCBvciBjYWNoZWQsIHBlcmhhcHMgd2l0aCBzcGVjaWZpYyBob29rcyBvciBjb21wYXRpYmlsaXR5IGxheWVycy4gVW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiByZXF1aXJlcyBleGFtaW5pbmcgdGhlIGxvZ2ljIHdpdGhpbiB0aGlzIGBwZm5jYWNoZS5jYCBmaWxlIGFuZCBzZWVpbmcgaG93IGBLVk1fWEVOYCBpcyB1c2VkIGFzIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBvciBjb25kaXRpb24gd2l0aGluIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcywgZnVuY3Rpb24gY2FsbHMsIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBpbmZsdWVuY2VkIGJ5IHRoaXMgc2V0dGluZyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEkgZXhwZWN0IGl0IGlzIGFmZmVjdGluZyB0aGUgS1ZNIGNvZGUgaW4gcmVnYXJkIHRvIHRoZSBYZW4gaHlwZXJ2aXNvciwgcGVyaGFwcyBmb3IgcGFnZSBvciBJL08gY2FjaGUgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz0xNj1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzozMTpjb25maWcgS1ZNX01JUFNfREVCVUdfQ09QMF9DT1VOVEVSU1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtNYWludGFpbiBjb3VudGVycyBmb3IgQ09QMCBhY2Nlc3Nlc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMC1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQzLVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQ1OmNvbmZpZyBLVk1fQk9PSzNTXzMyXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfMzIgcHJvY2Vzc29yc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXHRib29sXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O0RldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDhfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIGh5cGVydmlzb3IgcmVhbC1tb2RlIGNvZGUgKGZvciBQT1dFUjgpXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O0h5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX0JPT0tFX0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgZXhpdCB0aW1pbmdcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OS1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxMzpjb25maWcgS1ZNX0U1MDBNQ1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI1MTpjb25maWcgS1ZNX1hJVkVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXCYjMzQ7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtLVk0gR3Vlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9ODI2PXNvdXJjZSBcJiMzNDthcmNoL3g4Ni94ZW4vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYvS2NvbmZpZy04MjctXG5hcmNoL3g4Ni9LY29uZmlnOjgyODpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTgyOS1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTMtXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cbnZpcnQva3ZtL0tjb25maWctNS0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cbnZpcnQva3ZtL0tjb25maWctNDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNDUtXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcbnZpcnQva3ZtL0tjb25maWctNDctICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxudmlydC9rdm0vS2NvbmZpZzo1MDpjb25maWcgS1ZNX0FTWU5DX1BGX1NZTkNcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTU5PWNvbmZpZyBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4tLVxudmlydC9rdm0vS2NvbmZpZy02MS1cbnZpcnQva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9WRklPXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz02NT1jb25maWcgSEFWRV9LVk1fSU5WQUxJRF9XQUtFVVBTXG4tLVxudmlydC9rdm0vS2NvbmZpZy02Ny1cbnZpcnQva3ZtL0tjb25maWc6Njg6Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy03MC1cbnZpcnQva3ZtL0tjb25maWc6NzE6Y29uZmlnIEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzMtXG52aXJ0L2t2bS9LY29uZmlnOjc0OmNvbmZpZyBLVk1fQ09NUEFUXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XG4tLVxudmlydC9rdm0vS2NvbmZpZz05MT1jb25maWcgSEFWRV9LVk1fUE1fTk9USUZJRVJcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxudmlydC9rdm0vS2NvbmZpZzo5NDpjb25maWcgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctOTYtXG52aXJ0L2t2bS9LY29uZmlnOjk3OmNvbmZpZyBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxudmlydC9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU1NQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbiBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIGRpZmZlcmVuY2VzIGJldHdlZW4gS1ZNIGFuZCBLVk0tWGVuIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoZXJlIHRoZXNlIHR3byBhcmUgaW50ZXJ0d2luZWQuIFRoZSBwcmltYXJ5IGluZGljYXRvciBoZXJlIGlzIHRoZSBjb25maWcgc3ltYm9scywgYEtWTWAgYW5kIGBLVk1fWEVOYC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuCgpBbHJpZ2h0LCBoZXJlJiMzOTtzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0d2Vha2VkIGluIHRoaXMgY29uZmlndXJhdGlvbjogYGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdGAsIGBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdGAsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxfY29tcGxldGVfdXNlcnNwYWNlYCwgYG1heF9ldnRjaG5fcG9ydGAsIGB3YWl0X3BlbmRpbmdfZXZlbnRgLCBga3ZtX3hlbl9zY2hlZG9wX3BvbGxgLCBga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcGAsIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbmAsIGBrdm1feGVuX3NldGF0dHJfZXZ0Y2huYCwgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCwgYW5kIGBodmFfdG9fcGZuX3JldHJ5YC4gUXVpdGUgYSBmZXchCgpJIG5lZWQgdG8gaG9tZSBpbiBvbiB0aGUgbW9yZSBjcml0aWNhbCBpbnRlZ3JhdGlvbiBwb2ludHMsIHNvIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbmAsIGBrdm1feGVuX3NldGF0dHJfZXZ0Y2huYCwgYW5kIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gVGhlc2Ugc2VlbSB0byByZXByZXNlbnQgdGhlIGhlYXJ0IG9mIHRoZSBpbnRlcmFjdGlvbiwgcGFydGljdWxhcmx5IGFyb3VuZCBldmVudCBpbmplY3Rpb24sIGludGVycnVwdHMsIHZDUFUgYXR0cmlidXRlcywgaHlwZXJjYWxscywgZXZlbnQgY2hhbm5lbHMsIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4KClJpZ2h0LCBJIHNob3VsZCBmaXJzdCBkZXRlcm1pbmUgaWYgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCBpcyBzdGF0aWMgb3Igbm90LiBLbm93aW5nIHRoYXQgd2lsbCBzaGVkIGxpZ2h0IG9uIGl0cyBzY29wZSBhbmQgdGhlIG5hdHVyZSBvZiBpdHMgaW50ZXJhY3Rpb25zLiBUaGlzIHNob3VsZCBzZXQgYSBjb250ZXh0IGZvciBteSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0xMTY5Mj1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTYtXHRcdGlmIChrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyh2Y3B1KSlcbmFyY2gveDg2L2t2bS94ODYuYzoxMTcxNzpcdFx0XHRrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxOC1cbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9NjE4PXZvaWQga3ZtX3hlbl9pbmplY3RfdmNwdV92ZWN0b3Ioc3RydWN0IGt2bV92Y3B1ICp2KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy02MzgtICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6NjM5OnZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxuYXJjaC94ODYva3ZtL3hlbi5jLTY0MC17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTIwPWludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3hlbi5oOjIxOnZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS94ZW4uaC0yMi12b2lkIGt2bV94ZW5faW5qZWN0X3ZjcHVfdmVjdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTE1Mz1zdGF0aWMgaW5saW5lIGludCBrdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaC0xNTctXG5hcmNoL3g4Ni9rdm0veGVuLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTU5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA4OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmcuIFRoZXNlIGZ1bmN0aW9ucywgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCwgYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCwgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBrdm1feGVuX2h5cGVyY2FsbGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX3NldHVwX2V2dGNobmAsIGFuZCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLi4uIG5vbmUgb2YgdGhlbSBhcmUgZGVjbGFyZWQgc3RhdGljLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgaXQgbWVhbnMgdGhleSBhcmUgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbnMsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGVzZSBhcmUgaW50ZWdyYWwgdG8gdGhlIEtWTS1YZW4gaW50ZWdyYXRpb24gbGF5ZXIsIGRlYWxpbmcgd2l0aCB0aGluZ3MgbGlrZSBldmVudCBpbmplY3Rpb24sIGludGVycnVwdCBoYW5kbGluZywgYXR0cmlidXRlIHNldHRpbmcgb24gdkNQVXMsIGh5cGVyY2FsbHMgYW5kIGV2ZW50IGNoYW5uZWwgbWFuYWdlbWVudC4gVGhlIGxhY2sgb2YgYHN0YXRpY2Agc3VnZ2VzdHMgdGhleSBhcmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgbGlrZWx5IGJ5IHRoZSBYZW4gc2lkZSwgcmlnaHQ/IEkmIzM5O2QgZXhwZWN0IGludGVybmFsIGZ1bmN0aW9ucyBpbiB0aGF0IHNjZW5hcmlvLiBNYWtlcyBtZSB3b25kZXIgd2hhdCB0aGUgZGVzaWduIHJhdGlvbmFsZSB3YXMgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlaXIgdXNlLiBNeSBuZXh0IHN0ZXA/IExldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbmAgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9ldmVudGZkX2Fzc2lnbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmM9MjExND1zdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMTYwLSAqL1xuYXJjaC94ODYva3ZtL3hlbi5jOjIxNjE6c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS94ZW4uYy0yMTYyLVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjI5Mz1zdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMwOS1cbmFyY2gveDg2L2t2bS94ZW4uYzoyMzEwOlx0cmV0dXJuIGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oa3ZtLCBkYXRhKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0yMzExLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEtWTS1YZW4gaW50ZXJhY3Rpb24sIGFuZCBJJiMzOTttIHNlZWluZyB0aGF0IGBrdm1feGVuX2V2ZW50ZmRfYXNzaWduYCBhbmQgYGt2bV94ZW5fc2V0YXR0cl9ldnRjaG5gIGFyZSBib3RoIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIGRlc2lnbiBjaG9pY2UuIFN0YXRpYyBzdWdnZXN0cyB0aGV5JiMzOTtyZSBsaWtlbHkgaW50ZXJuYWwgZnVuY3Rpb25zLCBjb25maW5lZCB0byB0aGVpciBzcGVjaWZpYyBzb3VyY2UgZmlsZSBhbmQgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIEl0IGltcGxpZXMgYSBkZWdyZWUgb2YgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMgZ29vZCBmb3IgbW9kdWxhcml0eSwgYWx0aG91Z2ggaXQgYWxzbyBtYWtlcyBleHRlcm5hbCBhY2Nlc3MgdG8gdGhlc2UgZnVuY3Rpb25zIGltcG9zc2libGUsIHdoaWNoIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBhIHByb2JsZW0gZGVwZW5kaW5nIG9uIHRoZSB1c2UgY2FzZS4gTm93LCBnaXZlbiB0aGF0IGNvbnRleHQsIHRoZSBuZXh0IGxvZ2ljYWwgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUsIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCBpcyBga3ZtX3hlbl9odm1fc2V0X2F0dHJgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IG9uZSBpcyBpbXBsZW1lbnRlZCBhbmQgaWYgaXQgbWFrZXMgdXNlIG9mIGVpdGhlciBvZiB0aGVzZSB0d28gc3RhdGljIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTcyNTg9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03NTEzLVx0XHRcdGdvdG8gb3V0O1xuYXJjaC94ODYva3ZtL3g4Ni5jOjc1MTQ6XHRcdHIgPSBrdm1feGVuX2h2bV9zZXRfYXR0cihrdm0sIFx1MDAyNnhoYSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxNS1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTcwMT1pbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy03NTktXG5hcmNoL3g4Ni9rdm0veGVuLmM6NzYwOmludCBrdm1feGVuX2h2bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxuYXJjaC94ODYva3ZtL3hlbi5jLTc2MS17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTI0PWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5oOjI1OmludCBrdm1feGVuX2h2bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbmFyY2gveDg2L2t2bS94ZW4uaC0yNi1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTAyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEtWTS9YZW4gSFZNIEF0dHJpYnV0ZSBTZXR0aW5nKioKCkFscmlnaHQsIHNvIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgaXNuJiMzOTt0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIG1vcmUgZGV0YWlsLiBUaGF0IG1lYW5zIGl04oCZcyBub3QgYXMgc2ltcGxlIGFzIEkgaW5pdGlhbGx5IHRob3VnaHQuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgZnVuY3Rpb24mIzM5O3MgZHluYW1pYyBuYXR1cmUgaXMgbWFraW5nIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBNTVUgaW52YWxpZGF0aW9uIHNjZW5hcmlvcy4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgYXNzdW1wdGlvbnMgSSBjYW4gbWFrZS4KCkxldCBtZSB0dXJuIG15IGF0dGVudGlvbiB0byBob3cgdGhpcyBpbXBhY3RzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBleHBsb3JlIGlzIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSSB3YW50IHRvIHNlZSBob3cgbWVtb3J5IHJhbmdlcyBhcmUgaW52YWxpZGF0ZWQgd2hlbiB0aGVzZSBIVk0gYXR0cmlidXRlcyBjaGFuZ2UsIHdoaWNoIG1pZ2h0IHVudmVpbCBjbHVlcyBhcyB0byB3aHkgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyBub24tc3RhdGljLiBQZXJoYXBzIHRoZSBkeW5hbWlzbSBhcmlzZXMgZnJvbSBoYW5kbGluZyBhIG5vbi1jb25zdGFudCBudW1iZXIgb3IgdHlwZSBvZiBNTVUgZW50cmllcy4gSSBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgdHdvIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NzcxPXZvaWQga3ZtX21tdV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy03OTYtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjc5NzpzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxudmlydC9rdm0va3ZtX21haW4uYy03OTgtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9ODg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBrdm1fbW11X25vdGlmaWVyX29wcyA9IHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg5LVx0LmludmFsaWRhdGVfcmFuZ2Vfc3RhcnRcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0LFxudmlydC9rdm0va3ZtX21haW4uYzo4OTA6XHQuaW52YWxpZGF0ZV9yYW5nZV9lbmRcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODkxLVx0LmNsZWFyX2ZsdXNoX3lvdW5nXHQ9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE0Ni1cdCAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjE0NzpcdCAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZVxudmlydC9rdm0vcGZuY2FjaGUuYy0xNDgtXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtWTS9YZW4gSW50ZXJhY3Rpb24qKgoKSG1tLCB0aGlzIGZlZWxzLi4uICpzdGF0aWMqLiBUaGVyZSYjMzk7cyBhIGNlcnRhaW4gcmlnaWRpdHkgaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBtZSB1bmVhc3kuIEl0JiMzOTtzIGxpa2Ugc3RhcmluZyBhdCBhIHNpbmdsZSBwb2ludCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIHRoZSBkeW5hbWljIGludGVycGxheS4gVGltZSB0byBkcmlsbCBkb3duLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgdGhlIGZpcnN0IG9idmlvdXMgcGxhY2UgdG8gbG9vayB3aGVuIGRlYWxpbmcgd2l0aCBLVk0gYW5kIFhlbiBpbnRlZ3JhdGlvbiwgZXNwZWNpYWxseSBpZiBzb21ldGhpbmcgZmVlbHMgc3RhbGxlZD8gUmlnaHQsIGBrdm1feGVuX3NldHVwX2V2dGNobmAuIFRoYXQgZXZlbnQgY2hhbm5lbCBzZXR1cCBpcyBhIGNyaXRpY2FsIGhhbmRzaGFrZSBwb2ludCBiZXR3ZWVuIHRoZSBoeXBlcnZpc29ycy4gVGhhdCYjMzk7cyBnb3QgdG8gYmUgdGhlIGZpcnN0IHBvaW50IG9mIGludmVzdGlnYXRpb24uIElmIHRoaW5ncyBhcmUgc3RhdGljLCB0aGlzIGlzIHRoZSBhcmVhIEkgd2FudCB0byBmb2N1cyBvbiBpbml0aWFsbHkuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSBkdXJpbmcgdGhhdCBzdGFnZSwgZXZlcnl0aGluZyBmdXJ0aGVyIGRvd24gdGhlIGxpbmUgd2lsbCBiZSBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9zZXR1cF9ldnRjaG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lycS5jPTI5Nj1pbnQga3ZtX3NldF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzQ3LVx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfWEVOX0VWVENITjpcbmFyY2gveDg2L2t2bS9pcnEuYzozNDg6XHRcdHJldHVybiBrdm1feGVuX3NldHVwX2V2dGNobihrdm0sIGUsIHVlKTtcbmFyY2gveDg2L2t2bS9pcnEuYy0zNDktI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTIwMDQ9c3RhdGljIGludCBldnRjaG5fc2V0X2ZuKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTIwMTYtICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjAxNzppbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3hlbi5jLTIwMTgtXHRcdFx0IHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0zND1pbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSxcbmFyY2gveDg2L2t2bS94ZW4uaC0zNS1cdFx0XHQgICAgc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uaDozNjppbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3hlbi5oLTM3LVx0XHRcdCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MDkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtWTS1YZW4gSW50ZWdyYXRpb24gUG9pbnRzKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBwaWN0dXJlOyB0aGVyZSYjMzk7cyBhIGR5bmFtaWMgaW50ZXJwbGF5IGhhcHBlbmluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgbWVjaGFuaXNtcyB3aGVyZSBLVk0gYW5kIFhlbiBhcmUgaW50ZXJhY3RpbmcuIFRoZSBrZXkgc3ltYm9scyBqdW1waW5nIG91dCBhdCBtZSBhcmUgdGhlc2U6IGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBhbmQgYGt2bV94ZW5faHZtX3NldF9hdHRyYC4gVGhlc2Ugc2VlbSB0byByZXByZXNlbnQgdGhlIGhlYXJ0IG9mIGhvdyBldmVudHMsIGF0dHJpYnV0ZXMsIGh5cGVyY2FsbHMsIGFuZCBldmVudCBjaGFubmVsIG1hbmFnZW1lbnQgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBoeWJyaWQgZW52aXJvbm1lbnQuCgpOb3csIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBLVk1gIGFuZCBgS1ZNX1hFTmAuIFRoZSBxdWVzdGlvbiBpcywgaXMgYEtWTV9YRU5gIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBuZWVkcyB0byBiZSBzZXQgZm9yIHRoaXMgaW50ZWdyYXRpb24gdG8gb2NjdXI/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgYXJjaC94ODYva3ZtL3hlbi5jYCBpcyBpbmRlZWQgY29tcGlsZWQgYW5kIGluY2x1ZGVkIGluIHRoZSBidWlsZCBvbmx5IGlmIGBDT05GSUdfS1ZNX1hFTmAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgY2hlY2sgdG8gZW5zdXJlIHdlIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgaW52b2x2ZWQgaGVyZS4gVGhpcyB3aWxsIGhlbHAgY29uZmlybSB0aGF0IGBLVk1fWEVOYCBpc24mIzM5O3QgYWNjaWRlbnRhbGx5IGRlcGVuZGVudCBvbiBhbm90aGVyIGZsYWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hlblxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS94ZW4udHh0PTYxPW9mIFVFRkkgcnVudGltZSBzZXJ2aWNlcyBpbXBsZW1lbnRlZCB2aWEgaHlwZXJjYWxscywgc2VlXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3hlbi50eHQ6NjI6aHR0cDovL3hlbmJpdHMueGVuLm9yZy9kb2NzL3Vuc3RhYmxlL2h5cGVyY2FsbC94ODZfNjQvaW5jbHVkZSxwdWJsaWMscGxhdGZvcm0uaC5odG1sLlxuLS1cbk1BSU5UQUlORVJTPTE0NTc1PU06XHREYXZpZCBXb29kaG91c2UgXHUwMDNjZHdtdzJAaW5mcmFkZWFkLm9yZ1x1MDAzZVxuTUFJTlRBSU5FUlM6MTQ1NzY6TTpcdFBhdWwgRHVycmFudCBcdTAwM2NwYXVsQHhlbi5vcmdcdTAwM2Vcbk1BSU5UQUlORVJTLTE0NTc3LU06XHRTZWFuIENocmlzdG9waGVyc29uIFx1MDAzY3NlYW5qY0Bnb29nbGUuY29tXHUwMDNlXG4tLVxuTUFJTlRBSU5FUlM9Mjk0NTA9TTpcdFdlaSBMaXUgXHUwMDNjd2VpLmxpdUBrZXJuZWwub3JnXHUwMDNlXG5NQUlOVEFJTkVSUzoyOTQ1MTpNOlx0UGF1bCBEdXJyYW50IFx1MDAzY3BhdWxAeGVuLm9yZ1x1MDAzZVxuTUFJTlRBSU5FUlMtMjk0NTItTDpcdHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2NwdWlkLmgtMjYtICogQXV0aG9yczpcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9jcHVpZC5oOjI3OiAqICAgIEtlaXIgRnJhc2VyIFx1MDAzY2tlaXJAeGVuLm9yZ1x1MDAzZVxuYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2NwdWlkLmgtMjgtICovXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTEzPWt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSAmIzQzOz0gaHlwZXJ2Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxNDprdm0tJChDT05GSUdfS1ZNX1hFTilcdCYjNDM7PSB4ZW4ub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTE1LWt2bS0kKENPTkZJR19LVk1fU01NKVx0JiM0Mzs9IHNtbS5vXG4tLVxuYXJjaC94ODYvcGNpL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1BDSV9PTFBDKVx0XHQmIzQzOz0gb2xwYy5vXG5hcmNoL3g4Ni9wY2kvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfUENJX1hFTilcdFx0JiM0Mzs9IHhlbi5vXG5hcmNoL3g4Ni9wY2kvTWFrZWZpbGUtOS1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTAtICpcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYzo5MTogKiAgICAgIEF1Zy4yMiwgMjAwNCAgICBEYXZpZCBCcm9uYXVnaCBcdTAwM2NkYnJvbmF1Z2hAbGludXhib3hlbi5vcmdcdTAwM2VcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYy05Mi0gKiAgICAgICAgICAgICAgLXYwLjYuMiBBZGQgY2hlY2sgb24gQUNQSSBkYXRhIChudW1fc2lmcilcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTUtICpcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYzo5NjogKiAgICAgIEF1Zy4yMSwgMjAwNCAgICBEYXZpZCBCcm9uYXVnaCBcdTAwM2NkYnJvbmF1Z2hAbGludXhib3hlbi5vcmdcdTAwM2VcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYy05Ny0gKiAgICAgICAgICAgICAgLXYwLjYuMSBGaXggYSBzaWxseSBlcnJvciB3aXRoIHN0YXR1cyBjaGVja2luZ1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jLTk4LSAqXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6OTk6ICogICAgICBBdWcuMjAsIDIwMDQgICAgRGF2aWQgQnJvbmF1Z2ggXHUwMDNjZGJyb25hdWdoQGxpbnV4Ym94ZW4ub3JnXHUwMDNlXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtMTAwLSAqICAgICAgICAgICAgICAtIHYwLjYgIENvcnJlY3QgYnJpZ2h0bmVzcyBjb250cm9scyB0byByZWZsZWN0IHJlYWxpdHlcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM9MTQwPU1PRFVMRV9BVVRIT1IoXCYjMzQ7SGlyb3NoaSBNaXVyYSBcdTAwM2NtaXVyYUBkYS1jaGEub3JnXHUwMDNlXCYjMzQ7KTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYzoxNDE6TU9EVUxFX0FVVEhPUihcJiMzNDtEYXZpZCBCcm9uYXVnaCBcdTAwM2NkYnJvbmF1Z2hAbGludXhib3hlbi5vcmdcdTAwM2VcJiMzNDspO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jLTE0Mi1NT0RVTEVfQVVUSE9SKFwmIzM0O0hhcmFsZCBXZWx0ZSBcdTAwM2NsYWZvcmdlQGdudW1vbmtzLm9yZ1x1MDAzZVwmIzM0Oyk7XG4tLVxuZHJpdmVycy90dHkvaHZjL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0hWQ19JUlEpXHRcdCYjNDM7PSBodmNfaXJxLm9cbmRyaXZlcnMvdHR5L2h2Yy9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19IVkNfWEVOKVx0XHQmIzQzOz0gaHZjX3hlbi5vXG5kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0hWQ19JVUNWKVx0XHQmIzQzOz0gaHZjX2l1Y3Yub1xuLS1cbmRyaXZlcnMveGVuL0tjb25maWc9MjMyPWNvbmZpZyBYRU5fUFZDQUxMU19GUk9OVEVORFxuLS1cbmRyaXZlcnMveGVuL0tjb25maWctMjM3LVx0ICBFeHBlcmltZW50YWwgZnJvbnRlbmQgZm9yIHRoZSBYZW4gUFYgQ2FsbHMgcHJvdG9jb2xcbmRyaXZlcnMveGVuL0tjb25maWc6MjM4Olx0ICAoaHR0cHM6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9taXNjL3B2Y2FsbHMuaHRtbCkuIEl0XG5kcml2ZXJzL3hlbi9LY29uZmlnLTIzOS1cdCAgc2VuZHMgYSBzbWFsbCBzZXQgb2YgUE9TSVggY2FsbHMgdG8gdGhlIGJhY2tlbmQsIHdoaWNoXG4tLVxuZHJpdmVycy94ZW4vS2NvbmZpZz0yNDI9Y29uZmlnIFhFTl9QVkNBTExTX0JBQ0tFTkRcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnLTI0Ni1cdCAgRXhwZXJpbWVudGFsIGJhY2tlbmQgZm9yIHRoZSBYZW4gUFYgQ2FsbHMgcHJvdG9jb2xcbmRyaXZlcnMveGVuL0tjb25maWc6MjQ3Olx0ICAoaHR0cHM6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9taXNjL3B2Y2FsbHMuaHRtbCkuIEl0XG5kcml2ZXJzL3hlbi9LY29uZmlnLTI0OC1cdCAgYWxsb3dzIFBWIENhbGxzIGZyb250ZW5kcyB0byBzZW5kIFBPU0lYIGNhbGxzIHRvIHRoZSBiYWNrZW5kLFxuLS1cbmRyaXZlcnMveGVuL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19YRU5fUFZIVk1fR1VFU1QpXHRcdCYjNDM7PSBwbGF0Zm9ybS1wY2kub1xuZHJpdmVycy94ZW4vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1NXSU9UTEJfWEVOKVx0XHQmIzQzOz0gc3dpb3RsYi14ZW4ub1xuZHJpdmVycy94ZW4vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX1hFTl9NQ0VfTE9HKVx0XHQmIzQzOz0gbWNlbG9nLm9cbi0tXG5kcml2ZXJzL3hlbi9hY3BpLmM9Mzk9c3RhdGljIGludCB4ZW5fYWNwaV9ub3RpZnlfaHlwZXJ2aXNvcl9zdGF0ZSh1OCBzbGVlcF9zdGF0ZSxcbi0tXG5kcml2ZXJzL3hlbi9hY3BpLmMtNTctXHRcdCBcJiMzNDtVc2luZyBtb3JlIHRoYW4gJXUgYml0cyBvZiBzbGVlcCBjb250cm9sIHZhbHVlcyAlI3gvJSN4IVwmIzM0O1xuZHJpdmVycy94ZW4vYWNwaS5jOjU4Olx0XHQgXCYjMzQ7RW1haWwgeGVuLWRldmVsQGxpc3RzLnhlbi5vcmcgLSBUaGFuayB5b3UuXFxuXCYjMzQ7LCBcXFxuZHJpdmVycy94ZW4vYWNwaS5jLTU5LVx0XHQgYml0cywgdmFsX2EsIHZhbF9iKSlcbi0tXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vOXBmcy5oLTE0LSAqIFNlZSBkb2NzL21pc2MvOXBmcy5tYXJrZG93biBpbiB4ZW4uZ2l0IGZvciB0aGUgZnVsbCBzcGVjaWZpY2F0aW9uOlxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvLzlwZnMuaDoxNTogKiBodHRwczovL3hlbmJpdHMueGVuLm9yZy9kb2NzL3Vuc3RhYmxlL21pc2MvOXBmcy5odG1sXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vOXBmcy5oLTE2LSAqL1xuLS1cbmluY2x1ZGUveGVuL2ludGVyZmFjZS9pby9wdmNhbGxzLmgtMTQtICogU2VlIGRvY3MvbWlzYy9wdmNhbGxzLm1hcmtkb3duIGluIHhlbi5naXQgZm9yIHRoZSBmdWxsIHNwZWNpZmljYXRpb246XG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vcHZjYWxscy5oOjE1OiAqIGh0dHBzOi8veGVuYml0cy54ZW4ub3JnL2RvY3MvdW5zdGFibGUvbWlzYy9wdmNhbGxzLmh0bWxcbmluY2x1ZGUveGVuL2ludGVyZmFjZS9pby9wdmNhbGxzLmgtMTYtICovXG4tLVxubmV0LzlwL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX05FVF85UF9GRCkgJiM0Mzs9IDlwbmV0X2ZkLm9cbm5ldC85cC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfOVBfWEVOKSAmIzQzOz0gOXBuZXRfeGVuLm9cbm5ldC85cC9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfOVBfVklSVElPKSAmIzQzOz0gOXBuZXRfdmlydGlvLm9cbi0tXG5uZXQvOXAvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfTkVUXzlQX1VTQkcpICYjNDM7PSA5cG5ldF91c2JnLm9cbi0tXG5uZXQvOXAvTWFrZWZpbGUtMjItOXBuZXRfeGVuLW9ianMgOj0gXFxcbm5ldC85cC9NYWtlZmlsZToyMzpcdHRyYW5zX3hlbi5vIFxcXG5uZXQvOXAvTWFrZWZpbGUtMjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBYZW4gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuIFJpZ2h0LCBpdCBzaG93cyBga3ZtLSQoQ09ORklHX0tWTV9YRU4pICYjNDM7PSB4ZW4ub2AuIFRoYXQgY29uZmlybXMgaXQsIGBLVk1fWEVOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiByZWxhdGVkIHRvIFhlbi4gQW5kIG9mIGNvdXJzZSwgYEtWTWAgaXMgdGhlIG1haW4gS1ZNIGNvbmZpZy4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIEkgdGhpbmsgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCBtaWdodCBiZSBwcm9taXNpbmcuIEl04oCZcyBjYWxsZWQgZnJvbSBgdmNwdV9ydW5gIHRocm91Z2ggYGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzYC4gYHZjcHVfcnVuYCBpcyBhYnNvbHV0ZWx5IGEgaG90IHBhdGggaW4gYW55IEtWTSBzeXN0ZW0sIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gSG1tLCBhY3R1YWxseSwgYHZjcHVfcnVuYCAqaXMqIHRoZSBob3QgcGF0aCwgZnVsbCBzdG9wLiBMZXQmIzM5O3MgZGlnIGludG8gYGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzYCBzcGVjaWZpY2FsbHkuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIGJldHRlciBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTExNTY5PWJvb2wga3ZtX3ZjcHVfaGFzX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjA5LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjEwOlx0aWYgKGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzKHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjExLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE2OTI9c3RhdGljIGludCB2Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE1LVx0XHRrdm1fY2xlYXJfcmVxdWVzdChLVk1fUkVRX1VOQkxPQ0ssIHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjExNzE2Olx0XHRpZiAoa3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHModmNwdSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTctXHRcdFx0a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHModmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTkxLVxuYXJjaC94ODYva3ZtL3hlbi5oOjkyOnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veGVuLmgtOTMte1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0xNTg9c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTYxLVxuYXJjaC94ODYva3ZtL3hlbi5oOjE2MjpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3hlbi5oLTE2My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjUwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBLVk0vWGVuIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBnZXQgYSBnb29kIGRpc3RyaWJ1dGlvbiBvZiB0ZXN0IGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgYXZvaWRpbmcgY29tbW9uLCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSSBrbm93IGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgdmNwdV9ydW5gLCB3aGljaCBpcyBhIHRvdGFsIGhvdCBwYXRoLiBMaXN0aW5nIHRoYXQgd291bGRuJiMzOTt0IGJlIHZlcnkgaW5mb3JtYXRpdmUuCgpMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYWJvdXQgYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YD8gSXQmIzM5O3MgY2FsbGVkIGluZGlyZWN0bHkgZnJvbSBga3ZtX3ZjcHVfaGFzX2V2ZW50c2AgYW5kIGBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZGAsIHNvIGl0JiMzOTtzIGFsc28gYSBob3QgcGF0aC4gTm90IGlkZWFsLgoKSG1tLCBob3cgYWJvdXQgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmA/IEFoLCB0aGF0JiMzOTtzIGFuIGlvY3RsIGhhbmRsZXIhIFRoYXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZm9jdXMuIFdlIGFyZSBsb29raW5nIGZvciBnb29kIGZvY3VzIHN5bWJvbHMsIHNvIHdlJiMzOTtyZSBtYWtpbmcgcHJvZ3Jlc3MuCgpga3ZtX3hlbl9oeXBlcmNhbGxgLi4uIHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGh5cGVyY2FsbHMuIERlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC4KClRoZW4sIHRoZXJlJiMzOTtzIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAgYW5kIGBrdm1feGVuX3NldF9ldnRjaG5gLgoKQW5kIGBrdm1feGVuX3NldHVwX2V2dGNobmAgaXMgY2FsbGVkIGZyb20gYGt2bV9zZXRfcm91dGluZ19lbnRyeWAuIFRoYXQgc2VlbXMgbGlrZSBhIHN0cm9uZyBmb2N1cyBzeW1ib2wuCgpga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgIGlzIGNhbGxlZCBmcm9tIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgYW5kIGBrdm1feGVuX2h5cGVyY2FsbGAg4oCTIGFub3RoZXIgZ29vZCBmb2N1cyBzeW1ib2wuCgpBbmQgZmluYWxseSwgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyBhbiBpb2N0bCBoYW5kbGVyLiBBbm90aGVyIHN0cm9uZyBjYW5kaWRhdGUuCgpSaWdodCwgc28sIEkgd2FudCB0byBleHBsb3JlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lycS5jPTI0MT1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjY5LVxuYXJjaC94ODYva3ZtL2lycS5jOjI3MDpcdFx0cmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUtXHUwMDNleGVuX2V2dGNobiwga3ZtKTtcbmFyY2gveDg2L2t2bS9pcnEuYy0yNzEtI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTEyNT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgeGVuX3RpbWVyX2NhbGxiYWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTM5LVxuYXJjaC94ODYva3ZtL3hlbi5jOjE0MDpcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZSwgdmNwdS1cdTAwM2Vrdm0pO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE0MS1cdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTgwMj1zdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xODIyLSAqL1xuYXJjaC94ODYva3ZtL3hlbi5jOjE4MjM6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS94ZW4uYy0xODI0LXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTk0OT1zdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5NTMtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk1NDpcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk1NS1cdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5ODctXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk4ODpcdFx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTg5LVx0XHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0zMz12b2lkIGt2bV94ZW5fZGVzdHJveV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmg6MzQ6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsXG5hcmNoL3g4Ni9rdm0veGVuLmgtMzUtXHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Nzc0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtWTS1YZW4gRXZlbnQgQ2hhbm5lbCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUuIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYHhlbl90aW1lcl9jYWxsYmFja2AsIGFuZCBga3ZtX3hlbl9zZXRfZXZ0Y2huYC4gVGhhdCYjMzk7cyBhIHNvbGlkLCBmb2N1c2VkIHN5bWJvbCB0byBzdGFydCB3aXRoLiBJdCYjMzk7cyB1c2VkIGluIGRpZmZlcmVudCBjb250ZXh0cyBidXQgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcuCgpTaW5jZSB0aGlzIHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9mIGV2ZW50IGNoYW5uZWwgbWFuaXB1bGF0aW9uLCBsZXQmIzM5O3MgZHJpbGwgZG93biBkZWVwZXIsIGFuZCB0YWtlIGEgbG9vayBhdCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLiBJJiMzOTttIGN1cmlvdXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGludGVycnVwdCBpdHNlbGYgaXMgc2VudCB0byB0aGUgaHlwZXJ2aXNvci4gVGhpcyBjb3VsZCBnaXZlIG1vcmUgY29udGV4dCBhYm91dCBob3cgdGhlIGZhc3QgcGF0aCB0aWVzIGluIHdpdGggdGhlIG92ZXJhbGwgaW50ZXJydXB0IGluamVjdGlvbiBtZWNoYW5pc20gaW4gdGhlIEtWTS9YZW4gSFZNIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2h2bV9ldnRjaG5fc2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc1MjItXHRcdFx0Z290byBvdXQ7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUyMzpcdFx0ciA9IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKGt2bSwgXHUwMDI2dXhlKTtcbmFyY2gveDg2L2t2bS94ODYuYy03NTI0LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjAxNz1pbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMDY2LSAqL1xuYXJjaC94ODYva3ZtL3hlbi5jOjIwNjc6aW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICp1eGUpXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA2OC17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTI2PWludCBrdm1feGVuX2h2bV9nZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbmFyY2gveDg2L2t2bS94ZW4uaDoyNzppbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKmV2dCk7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMjgtaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTIxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29kZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHN0YXJ0aW5nIGluIGBrdm1fYXJjaF92bV9pb2N0bGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhIHdlbGwtZGVmaW5lZCBlbnRyeSBwb2ludCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgS1ZNIHZpcnR1YWwgbWFjaGluZSBmcm9tIHRoZSBvdXRzaWRlLiAmIzM0O0dvb2QgZm9jdXMgc3ltYm9sLCYjMzQ7IHllYWgsIHRoYXQgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvIHRoZSBhcmVhIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gTm93LCB3aGF0JiMzOTtzIGdvaW5nIG9uICpzcGVjaWZpY2FsbHkqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBga3ZtX3hlbl9odm1fc2V0X2F0dHJgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBzZXR0aW5nIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byBYZW4tSFZNIGd1ZXN0cyB3aXRoaW4gS1ZNLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb25maWd1cmF0aW9uIHRoZSBzeXN0ZW0gaXMgdGFyZ2V0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2h2bV9zZXRfYXR0ciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc1MTMtXHRcdFx0Z290byBvdXQ7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUxNDpcdFx0ciA9IGt2bV94ZW5faHZtX3NldF9hdHRyKGt2bSwgXHUwMDI2eGhhKTtcbmFyY2gveDg2L2t2bS94ODYuYy03NTE1LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9NzAxPWludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTc1OS1cbmFyY2gveDg2L2t2bS94ZW4uYzo3NjA6aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzYxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmg9MjQ9aW50IGt2bV94ZW5fdmNwdV9nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSk7XG5hcmNoL3g4Ni9rdm0veGVuLmg6MjU6aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5oLTI2LWludCBrdm1feGVuX2h2bV9nZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBDYWxsKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLCB3aGljaCBpbW1lZGlhdGVseSBwcm92aWRlcyBhIHByZXR0eSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhhdCYjMzk7cyBhIGdvb2QsIHNwZWNpZmljIHN5bWJvbCB0byBmb2N1cyBvbi4gSXQgZGlyZWN0cyB1cyB0b3dhcmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBWaXJ0dWFsIE1hY2hpbmUgSS9PIGNvbnRyb2wgbGF5ZXIsIHdoaWNoIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHR5cGUgb2YgaXNzdWUgd2UmIzM5O3JlIGxpa2VseSBjaGFzaW5nLiBOb3csIGJhc2VkIG9uIHdoZXJlIHRoaXMgaXMgdHJpZ2dlcmVkIGZyb20sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyB3ZSBjYWxsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZGVlcGVyIGludG8gdGhhdCByb3V0aW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTYxODk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NjExLVx0XHRcdGdvdG8gb3V0O1xuYXJjaC94ODYva3ZtL3g4Ni5jOjY2MTI6XHRcdHIgPSBrdm1feGVuX3ZjcHVfc2V0X2F0dHIodmNwdSwgXHUwMDI2eHZhKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NjEzLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9ODY1PWludCBrdm1feGVuX2h2bV9nZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy05MTktXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTIwOmludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTIxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmg9MjI9dm9pZCBrdm1feGVuX2luamVjdF92Y3B1X3ZlY3RvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3hlbi5oOjIzOmludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5oLTI0LWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg2OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtWTSBIeXBlcmNhbGwgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC4gVGhhdCYjMzk7cyBhIHNvbGlkIGVudHJ5IHBvaW50OyBnb29kLCBmb2N1c2VkIHBsYWNlIHRvIGJlZ2luIHRyYWNpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGF0aCBmb3IgYSBsb3Qgb2YgS1ZNIGludGVyYWN0aW9uLCBzbyBpdCYjMzk7cyB0aGUgbmF0dXJhbCBmaXJzdCBzdGVwIHRvIGxvb2sgYXQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIHJlYWNoaW5nIHRoZSBYZW4gaHlwZXJjYWxsLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHNwZWNpZmljYWxseSBhcm91bmQgYGt2bV94ZW5faHlwZXJjYWxsYC4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgdGhhdCBsZWQgdG8gdGhpcyBwYXRoLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmUgYmVoaW5kIGl0cyBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5PyBJIHdvbmRlciBob3cgbWFueSBkaWZmZXJlbnQgaHlwZXJjYWxscyB3ZSYjMzk7bGwgZmluZCBoZXJlLCBvciBpZiB0aGlzIGZ1bmN0aW9uIGlzIGEgc3dpdGNoYm9hcmQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IEtWTSBpcyBoYW5kbGluZyB0aGUgdHJhbnNpdGlvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2h5cGVyY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTM3Nj1zdGF0aWMgaW50IGt2bV9odl9zZXRfbXNyX3B3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE0MTAtXHRcdCAqL1xuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE0MTE6XHRcdGlmIChrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKGt2bSkpIHtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNDEyLVx0XHRcdC8qIG9ybCAkMHg4MDAwMDAwMCwgJWVheCAqL1xuLS1cbmFyY2gveDg2L2t2bS90cmFjZS5oPTExND1UUkFDRV9FVkVOVChrdm1faHZfaHlwZXJjYWxsX2RvbmUsXG4tLVxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTMxLSAqL1xuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTMyOlRSQUNFX0VWRU5UKGt2bV94ZW5faHlwZXJjYWxsLFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTMzLVx0ICAgIFRQX1BST1RPKHU4IGNwbCwgdW5zaWduZWQgbG9uZyBucixcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1MDQ9aW50IGt2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1MDUte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTA2Olx0aWYgKGt2bV94ZW5faHlwZXJjYWxsX2VuYWJsZWQodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTA3Olx0XHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGwodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1MDgtXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTEyOTg9aW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTMyOC1cdCAqL1xuYXJjaC94ODYva3ZtL3hlbi5jOjEzMjk6XHRpZiAoa3ZtX3hlbl9oeXBlcmNhbGxfZW5hYmxlZChrdm0pKSB7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTMzMC1cdFx0dTggaW5zdHJ1Y3Rpb25zWzMyXTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTM4ND1pbnQga3ZtX3hlbl9odm1fY29uZmlnKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2NvbmZpZyAqeGhjKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNDMwLVxuYXJjaC94ODYva3ZtL3hlbi5jOjE0MzE6c3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcbmFyY2gveDg2L2t2bS94ZW4uYy0xNDMyLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQzNi1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNDM3OnN0YXRpYyBpbnQga3ZtX3hlbl9oeXBlcmNhbGxfY29tcGxldGVfdXNlcnNwYWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uYy0xNDM4LXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQ0My1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNDQ0Olx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVx1MDAzZXhlbi51LmhjYWxsLnJlc3VsdCk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQ0NS19XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTE2ODc9c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCB0aW1lb3V0LFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNzAxLVxuYXJjaC94ODYva3ZtL3hlbi5jOjE3MDI6aW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzAzLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTczOC1cdGNwbCA9IGt2bV94ODZfY2FsbChnZXRfY3BsKSh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzM5Olx0dHJhY2Vfa3ZtX3hlbl9oeXBlcmNhbGwoY3BsLCBpbnB1dCwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sIHBhcmFtc1syXSxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzQwLVx0XHRcdFx0cGFyYW1zWzNdLCBwYXJhbXNbNF0sIHBhcmFtc1s1XSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3ODAtXHRpZiAoaGFuZGxlZClcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzgxOlx0XHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCByKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzgyLVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNzk2LVx0dmNwdS1cdTAwM2VhcmNoLmNvbXBsZXRlX3VzZXJzcGFjZV9pbyA9XG5hcmNoL3g4Ni9rdm0veGVuLmM6MTc5NzpcdFx0a3ZtX3hlbl9oeXBlcmNhbGxfY29tcGxldGVfdXNlcnNwYWNlO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTgtXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTY3PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2lzX2h5cGVyY2FsbF9wYWdlX21zcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBtc3IpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTc0LVxuYXJjaC94ODYva3ZtL3hlbi5oOjc1OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS94ZW4uaC03Ni17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTEwMz1zdGF0aWMgaW5saW5lIGludCBrdm1feGVuX2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uaC0xMDQte1xuYXJjaC94ODYva3ZtL3hlbi5oOjEwNTpcdGlmIChrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjYga3ZtX3hlbl90aW1lcl9lbmFibGVkKHZjcHUpKVxuYXJjaC94ODYva3ZtL3hlbi5oLTEwNi1cdFx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udGltZXJfcGVuZGluZyk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTE0Mz1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3hlbl9pc19oeXBlcmNhbGxfcGFnZV9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgbXNyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaC0xNDctXG5hcmNoL3g4Ni9rdm0veGVuLmg6MTQ4OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS94ZW4uaC0xNDkte1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0xODE9c3RhdGljIGlubGluZSBib29sIGt2bV94ZW5faXNfdHNjX2xlYWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZnVuY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTE4Ni1cbmFyY2gveDg2L2t2bS94ZW4uaDoxODc6aW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMTg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk3MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNLVhlbiBIeXBlcmNhbGwgUGF0aCoqCgpPa2F5LCBzbyBga3ZtX3hlbl9oeXBlcmNhbGxgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgWGVuIGh5cGVyY2FsbHMgd2hlbiB0aGV5JiMzOTtyZSBjb21pbmcgZnJvbSB0aGUgS1ZNIGVtdWxhdGlvbiBsYXllci4gVGhhdCBtYWtlcyBzZW5zZSwgYGt2bV9lbXVsYXRlX2h5cGVyY2FsbGAgaXMgdGhlIGludGVybWVkaWFyeSwgY2FsbGVkIHdoZW5ldmVyIGEgZ3Vlc3QgbWFrZXMgYSBoeXBlcmNhbGwgaW5zdHJ1Y3Rpb24uIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsLCBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYSwgYSBkZWZpbml0ZSAmIzM0O2hvdCBwYXRoJiMzNDsgZm9yIFhlbiBndWVzdHMuIEZvY3VzaW5nIG9uIGBrdm1feGVuX2h5cGVyY2FsbGAgaXRzZWxmIGlzIGEgZ29vZCBzdHJhdGVneSB0byB1bmRlcnN0YW5kIHRoZSBmbG93LgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIG91dCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLiBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGluIHRoaXMgY29udGV4dDsgSSBzdXNwZWN0IGl0IHBsYXlzIGEgc2lnbmlmaWNhbnQgcm9sZSBpbiB0aGUgb3ZlcmFsbCBYZW4gaHlwZXJjYWxsIGVtdWxhdGlvbiBwcm9jZXNzLCBhbmQgbWlnaHQgYmUgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rdm1feGVuX2hhc19pbnRlcnJ1cHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jPTYzOT12b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzAwLVxuYXJjaC94ODYva3ZtL3hlbi5jOjcwMTppbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxuYXJjaC94ODYva3ZtL3hlbi5jLTcwMi17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTE4PWV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZV9kZWZlcnJlZCBrdm1feGVuX2VuYWJsZWQ7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMTktXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjA6aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMjEtdm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD00MD1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3hlbl9zd19lbmFibGVfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaC00OC1cdCAgICB2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZS5hY3RpdmUgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0veGVuLmg6NDk6XHQgICAgdmNwdS1cdTAwM2VhcmNoLnhlbi51cGNhbGxfdmVjdG9yIFx1MDAyNlx1MDAyNiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCh2Y3B1KSlcbmFyY2gveDg2L2t2bS94ZW4uaC01MC1cdFx0a3ZtX3hlbl9pbmplY3RfdmNwdV92ZWN0b3IodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTg2LVx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnVwY2FsbF92ZWN0b3IpXG5hcmNoL3g4Ni9rdm0veGVuLmg6ODc6XHRcdHJldHVybiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ZW4uaC04OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNL1hlbiBQZXJmb3JtYW5jZSBIb3RzcG90cyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIEtWTS9YZW4gaW50ZWdyYXRpb24gY29kZSB0byB1bmRlcnN0YW5kIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHNlZSB0aGF0IGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAgaXMgY2FsbGVkIGRlZXBseSB3aXRoaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYywgZnJvbSBga3ZtX3hlbl9oYXNfaW50ZXJydXB0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBga3ZtX3ZjcHVfaGFzX2V2ZW50c2AgYW5kIGBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZGAuIEl0JiMzOTtzIGRlZmluaXRlbHkgYSBob3QgcGF0aCwgc28gSSYjMzk7bGwgZXhjbHVkZSBpdCBmcm9tIHRoZSBzeW1ib2xzIEkmIzM5O20gZm9jdXNpbmcgb24gdG8ga2VlcCBteSBhbmFseXNpcyBhY2N1cmF0ZS4gSSBhbHNvIG5lZWQgdG8gaWdub3JlIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2Agc2luY2UgaXQmIzM5O3MgYWxzbyBvbiB0aGUgY3JpdGljYWwgcGF0aCwgY2FsbGVkIGZyb20gYHZjcHVfcnVuYC4KClNvLCB0aGF0IGxlYXZlcyBhIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZnVuY3Rpb25zOiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYGt2bV94ZW5faHlwZXJjYWxsYCwgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCwgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCwgYW5kIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAuIEkmIzM5O2xsIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZXNlLgoKTm93LCB3aGF0IGFib3V0IHRob3NlIHN0YXRpYyBmdW5jdGlvbnM/IEhtbSwgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAuIFRoZXkgKmFyZSogc3RhdGljLCBidXQgdGhleSBjb3VsZCBzdGlsbCBiZSBpbXBvcnRhbnQuIEkmIzM5O2xsIGZsYWcgdGhlbSBmb3IgbGF0ZXIgcmV2aWV3LCBlc3BlY2lhbGx5IGlmIHRoZSBtb3JlIG9idmlvdXMgZnVuY3Rpb25zIGRvbiYjMzk7dCB5aWVsZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExvb2tzIGxpa2UgYEtWTWAgYW5kIGBLVk1fWEVOYC4gV2FpdCwgYEtWTV9YRU5gIGlzIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFJpZ2h0LCBpdCYjMzk7cyBzcGVjaWZpYyB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgYXMgSSB3b3VsZCBleHBlY3QuIExldCYjMzk7cyBzZWUuLi5hbnkgb3RoZXIgY29uZmlncyBpbnZvbHZlZCBoZXJlPyBObywgaXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29kZSBtb2RpZmljYXRpb25zIGFyZSBjb25maW5lZCB0byBgYXJjaC94ODYva3ZtL3hlbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBBbmQsIG9mIGNvdXJzZSwgYHZpcnQva3ZtL3BmbmNhY2hlLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGFjdGl2ZS4gR29vZC4gSSB0aGluayBJIGhhdmUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZXNlIGFyZWFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZm5jYWNoZVxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTEzPWt2bS0kKENPTkZJR19IQVZFX0tWTV9ESVJUWV9SSU5HKSAmIzQzOz0gJChLVk0pL2RpcnR5X3Jpbmcub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtOjE0Omt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tMTUta3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODIzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqS1ZNIFBGTiBDYWNoZSBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCAqQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKi4uLiB0aGF0JiMzOTtzIHRoZSBmbGFnIHdlIG5lZWQgdG8gYmUgbG9va2luZyBhdC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtPa2F5LCBkb2VzIG91ciBidWlsZCBzeXN0ZW0gYWN0dWFsbHkgKmRlZmluZSogYEhBVkVfS1ZNX1BGTkNBQ0hFYD8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIEl0JiMzOTtzIHRoZSBtb3N0IGJhc2ljIGNoZWNrLCByZWFsbHkuIFRoZSBjb25maWcgc3ltYm9sIGRpY3RhdGVzIHRoYXQgY2VydGFpbiBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQsIGJ1dCBkbyB3ZSBhY3R1YWxseSBoYXZlIHRoZSBjb21waWxlciBzdXBwb3J0IHRvIHV0aWxpemUgaXQ/JiMzNDsuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgYXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFWRV9LVk1fUEZOQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZz00PWNvbmZpZyBLVk1fQ09NTU9OXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMC1cbnZpcnQva3ZtL0tjb25maWc6MTE6Y29uZmlnIEhBVkVfS1ZNX1BGTkNBQ0hFXG52aXJ0L2t2bS9LY29uZmlnLTEyLSAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDk5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIHN0dW1ibGVkIHVwb24gYEhBVkVfS1ZNX1BGTkNBQ0hFYC4gSXQmIzM5O3MgYSBoaWRkZW4gY29uZmlnIG9wdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSYjMzk7ZCB0eXBpY2FsbHkgZmluZCB0aHJvdWdoIGEgc3RhbmRhcmQgYG1ha2UgbWVudWNvbmZpZ2Agb3Igc2ltaWxhciBpbnRlcmZhY2UuIEl0JiMzOTtzIGFsc28gYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCB3aGljaCBpcyBnb29kIHRvIGtlZXAgaW4gbWluZC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgb2YgY291cnNlLCBpcyB3aGF0JiMzOTtzICpzZWxlY3RpbmcqIHRoaXMgdGhpbmc/IEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBhbmQgc2VlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGJlaW5nIHB1bGxlZCBpbi4gR290dGEgdHJhY2UgdGhlIGNvbmZpZyBoaWVyYXJjaHkgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRlbGxpbmcgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTI1LVx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI2Olx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNy1cdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQzMwoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA2NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBYZW4gRW11bGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgYEtWTV9YODZgLCB3aGljaCBtZWFucyBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQuIEkmIzM5O3ZlIHJlLWV4YW1pbmVkIHRoZSBmb2N1cyBzeW1ib2xzOiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYGt2bV94ZW5faHlwZXJjYWxsYCwgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCwgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCwgYW5kIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55LiBJIGNoZWNrZWQgZm9yIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIG1hY3JvcyBhbmQgc3RhdGljIGlubGluZXMgYXJlbiYjMzk7dCBjcml0aWNhbCBpbiB0aGUgc2FtZSB3YXksIGJ1dCBJIG1hZGUgc3VyZSB0byBub3RlIHRoZW0uCgpJIHRoZW4gdmVyaWZpZWQgcmVhY2hhYmlsaXR5LiBJIHNlZSB0aGF0IGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAgd2l0aGluIGBrdm1fYXJjaF92bV9pb2N0bGAgKHRyaWdnZXJlZCBieSBgS1ZNX1hFTl9IVk1fRVZUQ0hOX1NFTkRgKS4gYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCBpcyByZWFjaGFibGUgdmlhIGBrdm1fc2V0X3JvdXRpbmdfZW50cnlgICh0cmlnZ2VyZWQgYnkgYEtWTV9TRVRfR1NJX1JPVVRJTkdgKS4gYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyByZWFjaGFibGUgdmlhIGBrdm1fYXJjaF92bV9pb2N0bGAgKHRyaWdnZXJlZCBieSBgS1ZNX1hFTl9IVk1fU0VUX0FUVFJgKS4gQW5kIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGlzIGV4cG9zZWQgdGhyb3VnaCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgKHRyaWdnZXJlZCBieSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCkuIEZpbmFsbHksIGBrdm1feGVuX2h5cGVyY2FsbGAgaXMgZXhwb3NlZCB0byB0aGUgZ3Vlc3QgZXhlY3V0aW9uLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggdG91Y2hlcyBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIFhlbiBlbXVsYXRpb24gd2l0aGluIEtWTS4gSXQgYWRkcmVzc2VzIDMyLWJpdC82NC1iaXQgc2hhcmVkIGluZm8gaGFuZGxpbmcsIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnksIGFuZCBwZm5jYWNoZSBpbnZhbGlkYXRpb24g4oCTIGNvcmUgZnVuY3Rpb25hbGl0aWVzLiBUaGVzZSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHVzZXJzcGFjZSBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBzbyB0aGlzIHBhdGNoIG5lZWRzIHRob3JvdWdoIHJldmlldy4KCk15IGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMgaXMgY29tcGxldGUuIE5vdywgdGltZSB0byBldmFsdWF0ZSB0aGlzIGZ1cnRoZXIgYW5kIHJlcG9ydCBiYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oeXBlcmNhbGwmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXR1cF9ldnRjaG4mIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBlbXVsYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgMzItYml0LzY0LWJpdCBzaGFyZWQgaW5mbyBoYW5kbGluZywgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSwgYW5kIHBmbmNhY2hlIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZSBhbmQgWGVuIGVtdWxhdGlvbiwgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHlwZXJjYWxsJiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0X2V2dGNobl9mYXN0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0dXBfZXZ0Y2huJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX2V2dGNobl9zZW5kJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIDMyLWJpdC82NC1iaXQgc2hhcmVkIGluZm8gaGFuZGxpbmcsIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnksIGFuZCBwZm5jYWNoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUgYW5kIFhlbiBlbXVsYXRpb24sIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgZ3Vlc3QgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhbGlnbm1lbnQgaXNzdWVzLCBhdG9taWMgb3BlcmF0aW9ucyBvbiBndWVzdCBtZW1vcnksIGFuZCBhIHNlcXVlbmNlIGNvdW50ZXIgZm9yIEd1ZXN0IFBhZ2UgQ2FjaGUgKEdQQykgaW4gS1ZNIFhlbiBlbXVsYXRpb24uIEl0IHJlcGxhY2VzIGBJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGVgIHdpdGggYSBtYWNybyBga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSlgLCBoYW5kbGVzIHVuYWxpZ25lZCBhdG9taWMgb3BlcmF0aW9ucyBpbiBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCB1c2VzIGBidHNsYCBmb3IgMzItYml0IGFsaWduZWQgZ3Vlc3QtY29udHJvbGxlZCBtZW1vcnkgaW4gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYW5kIGludHJvZHVjZXMgYGdwY19pbnZhbGlkYXRlX3NlcWAgdG8gc2VwYXJhdGUgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBmcm9tIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5NzNlMDhiZDY4ZjhkOTVlMzM0ZWQ1ZDZiZGM5OTczNGJlYzRkZjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoyMzoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC03Miw3ICYjNDM7NzIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTsKIAlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAKIAkJd2Nfc2VjX2hpID0gJmFtcDtzaGluZm8tJmd0O3djX3NlY19oaTsKQEAgLTM5MCw3ICYjNDM7MzkwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYykKIAlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9CiAJCSAgICAgc2l6ZW9mKHZ4LSZndDtydW5zdGF0ZV90aW1lcykpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IHYtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi0mZ3Q7a3ZtKSkgewogCQl1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJdGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywKIAkJCQkgICAgIHN0YXRlX2VudHJ5X3RpbWUpOwpAQCAtNjYxLDI4ICYjNDM7NjYxLDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KQogCX0KIAogCS8qIE5vdyBncGMtJmd0O2todmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyB2LSZndDtrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtJmd0O2t2bSkpIHsKIAkJc3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiYjNDM7CQl2b2lkICp2aV9wZW5kaW5nX3NlbCA9ICZhbXA7dmktJmd0O2V2dGNobl9wZW5kaW5nX3NlbDsKIAotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggJiMzNDtvcnEgJTAsICUxXG4mIzM0OwotCQkJICAgICAmIzM0O25vdHEgJTBcbiYjMzQ7Ci0JCQkgICAgIExPQ0tfUFJFRklYICYjMzQ7YW5kcSAlMCwgJTJcbiYjMzQ7Ci0JCQkgICAgIDogJiMzNDs9ciYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7CiYjNDM7CQlpZiAoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl2aV9wZW5kaW5nX3NlbCwgc2l6ZW9mKHU2NCkpKSB7CiYjNDM7CQkJYXRvbWljNjRfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LAomIzQzOwkJCSAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXMKJiM0MzsJCQkgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZQomIzQzOwkJCSAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvbgomIzQzOwkJCSAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuCiYjNDM7CQkJICovCiYjNDM7CQkJYXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsICZndDsmZ3Q7IDMyLAomIzQzOwkJCQkgIHZpX3BlbmRpbmdfc2VsICYjNDM7IDQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKikmYW1wO3YtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7CiAJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiAJfSBlbHNlIHsKLQkJdTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsOwogCQlzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiAKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICYjMzQ7b3JsICUwLCAlMVxuJiMzNDsKLQkJCSAgICAgJiMzNDtub3RsICUwXG4mIzM0OwotCQkJICAgICBMT0NLX1BSRUZJWCAmIzM0O2FuZGwgJTAsICUyXG4mIzM0OwotCQkJICAgICA6ICYjMzQ7PXImIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTsKJiM0MzsJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopJmFtcDt2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKTsKJiM0MzsJCWF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKSZhbXA7di0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTsKIAkJV1JJVEVfT05DRSh2aS0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKIAl9CiAKQEAgLTcxMyw2ICYjNDM7NzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiAJQlVJTERfQlVHX09OKHNpemVvZihyYykgIT0KIAkJICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwogCiYjNDM7CS8qCiYjNDM7CSAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLSZndDtzcmN1IG11c3QgYmUKJiM0MzsJICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb20KJiM0MzsJICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSwKJiM0MzsJICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUmIzM5O3MgU1JDVSBsb2NrLgomIzQzOwkgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZQomIzQzOwkgKiB3aGljaCBpcyBoYW5kbGVkIGJlbG93LgomIzQzOwkgKi8KJiM0MzsJZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpOwomIzQzOwogCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiAJd2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkgewogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC05MjYsNiAmIzQzOzk0MCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJciA9IC1FTlhJTzsKJiM0MzsJCQlpZiAoIUlTX0FMSUdORUQoZGF0YS0mZ3Q7dS5ncGEsIHNpemVvZih1MzIpKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiAJCQlyID0ga3ZtX2dwY19hY3RpdmF0ZSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJICAgICBkYXRhLSZndDt1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfSBlbHNlIHsKQEAgLTkzNSw2ICYjNDM7OTUzLDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJCQkJYnJlYWs7CiAJCQl9CiAKJiM0MzsJCQlyID0gLUVOWElPOwomIzQzOwkJCWlmICghSVNfQUxJR05FRChkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHUzMikpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKIAkJCXIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJCSBkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfQpAQCAtOTc4LDcgJiM0MzsxMDAwLDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSkKIAkJICogYWRkcmVzcywgdGhhdCYjMzk7cyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKQogCQkgKiB3aWxsIGNvcGUuCiAJCSAqLwotCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpCiYjNDM7CQlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSkpCiAJCQlzeiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJZWxzZQogCQkJc3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pOwpAQCAtMTQyMiwxNiAmIzQzOzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi0mZ3Q7eGVuLnUuaGNhbGwucmVzdWx0KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pCiAJCXJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7CiAJZWxzZQogCQlyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUzsKIH0KIAotc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAotCQkJICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbywKJiM0MzsJCQkgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9ICZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGU7CkBAIC0xNDQ2LDcgJiM0MzsxNDczLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAogCQlnb3RvIG91dF9yY3U7CiAKIAlyZXQgPSBmYWxzZTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCX0gZWxzZSB7CkBAIC0xNDY4LDkgJiM0MzsxNDk1LDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsCiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSB1NjQgcGFyYW0sIHU2NCAqcikKIHsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSk7CiAJc3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDsKIAlldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0czsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwpAQCAtMTQ4MCw3ICYjNDM7MTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAkgICAgISh2Y3B1LSZndDtrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgJmFtcDsgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7ICFsb25nbW9kZSkgewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgIWlzXzY0Yml0KSB7CiAJCXN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyOwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqLwpAQCAtMTUyOSw3ICYjNDM7MTU1Nyw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHBvcnRzW2ldICZndDs9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQlpZiAocG9ydHNbaV0gJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7CiAJCQkqciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTU0Miw3ICYjNDM7MTU3MCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAogCXNldF9iaXQodmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ucG9sbF9tYXNrKTsKIAotCWlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkgewomIzQzOwlpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHsKIAkJa3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTsKIAogCQlpZiAoc2NoZWRfcG9sbC50aW1lb3V0KQpAQCAtMTU3NywxMiAmIzQzOzE2MDUsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSAgIGludCBjbWQsIHU2NCBwYXJhbSwgdTY0ICpyKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTQ0hFRE9QX3BvbGw6Ci0JCWlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKQomIzQzOwkJaWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZmFsbHRocm91Z2g7CiAJY2FzZSBTQ0hFRE9QX3lpZWxkOgpAQCAtMTYwMSw3ICYjNDM7MTYyOSw3IEBAIHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7CiAgICAgdWludDMyX3QgZmxhZ3M7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsCiAJCQkJICBpbnQgdmNwdV9pZCwgdTY0IHBhcmFtLCB1NjQgKnIpCiB7CiAJc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgb25lc2hvdDsKQEAgLTE2MzMsNyAmIzQzOzE2NjEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAogCQlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9CiAJCQkgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTsKIAotCQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6CiYjNDM7CQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBpc182NGJpdCA/IHNpemVvZihvbmVzaG90KSA6CiAJCQkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIpLCAmYW1wO2UpKSB7CiAJCQkqciA9IC1FRkFVTFQ7CiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2NzMsNyAmIzQzOzE3MDEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IHRpbWVvdXQsCiAKIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JYm9vbCBsb25nbW9kZTsKJiM0MzsJYm9vbCBpc182NGJpdDsKIAl1NjQgaW5wdXQsIHBhcmFtc1s2XSwgciA9IC1FTk9TWVM7CiAJYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAJdTggY3BsOwpAQCAtMTY4Myw4ICYjNDM7MTcxMSw4IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSkKIAkJcmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7CiAKLQlsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7Ci0JaWYgKCFsb25nbW9kZSkgewomIzQzOwlpc182NGJpdCA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7CiYjNDM7CWlmICghaXNfNjRiaXQpIHsKIAkJaW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7CiAJCXBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTsKIAkJcGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpOwpAQCAtMTczMCwxNyAmIzQzOzE3NTgsMTcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6Ci0JCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLAogCQkJCQkJIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDoKLQkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSwKIAkJCQkJCXBhcmFtc1syXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7CiAJCXU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdOwogCQkvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqLwotCQlpZiAoIWxvbmdtb2RlKQomIzQzOwkJaWYgKCFpc182NGJpdCkKIAkJCXRpbWVvdXQgfD0gcGFyYW1zWzFdICZsdDsmbHQ7IDMyOwogCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgJmFtcDtyKTsKIAkJYnJlYWs7CkBAIC0xNzU1LDcgJiM0MzsxNzgzLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGhhbmRsZV9pbl91c2Vyc3BhY2U6CiAJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMOwotCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTsKJiM0MzsJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0OwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuY3BsID0gY3BsOwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTsKQEAgLTE3OTUsOCAmIzQzOzE4MjMsOSBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gJmFtcDtrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZTsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cywgdmlfcGVuZGluZ19zZWxfb2ZzOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQl1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcG9ydF93b3JkX2JpdDsKIAlib29sIGtpY2tfdmNwdSA9IGZhbHNlOwpAQCAtMTgxMiw3ICYjNDM7MTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCVdSSVRFX09OQ0UoeGUtJmd0O3ZjcHVfaWR4LCB2Y3B1LSZndDt2Y3B1X2lkeCk7CiAJfQogCi0JaWYgKHhlLSZndDtwb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChrdm0pKQomIzQzOwlpZiAoeGUtJmd0O3BvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJjID0gLUVXT1VMREJMT0NLOwpAQCAtMTgyMywxNiAmIzQzOzE4NTIsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAlpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKQogCQlnb3RvIG91dF9yY3U7CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCQltYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fbWFzazsKIAkJcG9ydF93b3JkX2JpdCA9IHhlLSZndDtwb3J0IC8gNjQ7CiYjNDM7CiYjNDM7CQl2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKIAkJcGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmc7CiAJCW1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9tYXNrOwogCQlwb3J0X3dvcmRfYml0ID0geGUtJmd0O3BvcnQgLyAzMjsKJiM0MzsKJiM0MzsJCXZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpOwomIzQzOwomIzQzOwkJLyogdGVzdF9hbmRfc2V0X2JpdCgpIG5lZWRzIDY0LWJpdCBhbGlnbm1lbnQsIGJ1dCB0aGF0JiMzOTtzIE9LICovCiYjNDM7CQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpICZhbXA7IDcpOwogCX0KIAogCS8qCkBAIC0xODQ4LDYgJiM0MzsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJcmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqLwogCQlrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS0mZ3Q7cG9ydCk7CiAJfSBlbHNlIHsKJiM0MzsJCWJvb2wgb2xkOwomIzQzOwogCQlyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqLwogCQkvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJiMzOTtzIHZjcHVfaW5mbyB0byBzZXQgdGhlIGluZGV4IGFuZCBwZW5kaW5nX3NlbCAqLwogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC0xODY0LDE5ICYjNDM7MTkwMiwyOSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCQkJZ290byBvdXRfcmN1OwogCQl9CiAKLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7Ci0JCQlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtJmd0O2todmE7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgJmFtcDt2Y3B1X2luZm8tJmd0O2V2dGNobl9wZW5kaW5nX3NlbCkpIHsKLQkJCQlXUklURV9PTkNFKHZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKLQkJCQlraWNrX3ZjcHUgPSB0cnVlOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0X3dvcmRfYml0LAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyAqKSZhbXA7dmNwdV9pbmZvLSZndDtldnRjaG5fcGVuZGluZ19zZWwpKSB7Ci0JCQkJV1JJVEVfT05DRSh2Y3B1X2luZm8tJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7Ci0JCQkJa2lja192Y3B1ID0gdHJ1ZTsKLQkJCX0KJiM0MzsJCS8qCiYjNDM7CQkgKiBFeHBsaWNpdGx5IHVzZSBhIDMyLWJpdCBidHNsIGluc3RlYWQgb2YgdGVzdF9hbmRfc2V0X2JpdCgpLAomIzQzOwkJICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LQomIzQzOwkJICogY29udHJvbGxlZCBhbmQgb25seSByZXF1aXJlZCB0byBiZSAzMi1iaXQgYWxpZ25lZCwgc28gYQomIzQzOwkJICogNjQtYml0IGFjY2VzcyBjb3VsZCBnZW5lcmF0ZSBhIHNwbGl0LWxvY2sgI0FDLgomIzQzOwkJICoKJiM0MzsJCSAqIE5vdGUsIHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBvbgomIzQzOwkJICogcGVuZGluZ19iaXRzIGFib3ZlOiB0aGF0IGlzIGluIHRoZSBwZXItVk0gc2hhcmVkX2luZm8sIHdoaWNoCiYjNDM7CQkgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXQKJiM0MzsJCSAqIGFsaWduZWQuCiYjNDM7CQkgKi8KJiM0MzsJCW9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggJiMzNDtidHNsJiMzNDssCiYjNDM7CQkJCSAgICAgICAqKHUzMiAqKShncGMtJmd0O2todmEgJiM0MzsgdmlfcGVuZGluZ19zZWxfb2ZzKSwKJiM0MzsJCQkJICAgICAgIGMsICYjMzQ7SXImIzM0OywgcG9ydF93b3JkX2JpdCk7CiYjNDM7CQlpZiAoIW9sZCkgewomIzQzOwkJCXN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLSZndDtraHZhOwomIzQzOwomIzQzOwkJCS8qIE5vIG5lZWQgZm9yIGNvbXBhdCBoYW5kbGluZyAqLwomIzQzOwkJCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpICE9CiYjNDM7CQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwomIzQzOwomIzQzOwkJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiYjNDM7CQkJa2lja192Y3B1ID0gdHJ1ZTsKIAkJfQogCiAJCS8qIEZvciB0aGUgcGVyLXZDUFUgbGFwaWMgdmVjdG9yLCBkZWxpdmVyIGl0IGFzIE1TSS4gKi8KQEAgLTE5NzQsNyAmIzQzOzIwMjIsNyBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAogCS8qCi0JICogRG9uJiMzOTt0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2YgbWF4X2V2dGNobl9wb3J0KCkuCiYjNDM7CSAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKS4KIAkgKiBVc2Vyc3BhY2UgY2FuIGNvbmZpZ3VyZSB3aGF0IGV2ZXIgdGFyZ2V0cyBpdCBsaWtlczsgZXZlbnRzIGp1c3Qgd29uJiMzOTt0CiAJICogYmUgZGVsaXZlcmVkIGlmL3doaWxlIHRoZSB0YXJnZXQgaXMgaW52YWxpZCwganVzdCBsaWtlIHVzZXJzcGFjZSBjYW4KIAkgKiBjb25maWd1cmUgTVNJcyB3aGljaCB0YXJnZXQgbm9uLWV4aXN0ZW50IEFQSUNzLgpAQCAtMTk4Myw4ICYjNDM7MjAzMSw4IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sCiAJICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcywKIAkgKiB3aXRob3V0IGltcG9zaW5nIGFuIG9yZGVyaW5nIGRlcGVuZGVuY3kgb24gdXNlcnNwYWNlLiAgSW4gdGhpcwogCSAqIHBhcnRpY3VsYXIgY2FzZSwgdGhlIHByb2JsZW1hdGljIG9yZGVyaW5nIHdvdWxkIGJlIHdpdGggc2V0dGluZyB0aGUKLQkgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIG1heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93IDQwOTYKLQkgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuCiYjNDM7CSAqIFhlbiAmIzM5O2xvbmcgbW9kZSYjMzk7IGZsYWcsIHdoaWNoIGNoYW5nZXMga3ZtX21heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93CiYjNDM7CSAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLgogCSAqLwogCiAJLyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqLwpAQCAtMjAyMSw3ICYjNDM7MjA2OSw3IEBAIGludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqCiAJc3RydWN0IGt2bV94ZW5fZXZ0Y2huIGU7CiAJaW50IHJldDsKIAotCWlmICghdXhlLSZndDtwb3J0IHx8IHV4ZS0mZ3Q7cG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCF1eGUtJmd0O3BvcnQgfHwgdXhlLSZndDtwb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovCkBAIC0yMTMxLDcgJiM0MzsyMTc5LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwKIAogCWNhc2UgRVZUQ0hOU1RBVF9pbnRlcmRvbWFpbjoKIAkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7Ci0JCQlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CQkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJCQlnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi8KIAkJfSBlbHNlIHsKIAkJCWV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpOwpAQCAtMjI0OSw3ICYjNDM7MjI5Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhCiAJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKQogCQlyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7CiAKLQlpZiAoIXBvcnQgfHwgcG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCFwb3J0IHx8IHBvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkYXRhLSZndDt1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaAppbmRleCA1OWU2MTI4YTdiZDNjLi4zZThjOTMwNmViODk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oCkBAIC0yNDgsNiAmIzQzOzI0OCwxMSBAQCBzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvIHsKICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqCQkJCVwKIAkJCQkgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXAogCQkJCQkJICAgZXZ0Y2huX3BlbmRpbmcpKQomIzQzOwomIzQzOy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJiMzOTtzICFoYXNfMzJiaXRfc2hpbmZvKCkuICovCiYjNDM7I2RlZmluZSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSBcCiYjNDM7CShJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBSRUFEX09OQ0UoKGt2bSktJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkpCiYjNDM7CiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7CiAgICAgaW50IHN0YXRlOwogICAgIHVpbnQ2NF90IHN0YXRlX2VudHJ5X3RpbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uZDc0MDZjMTBlMDkwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODU0LDYgJiM0Mzs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydDsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7CiAKJiM0MzsJdW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwogCXU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA0NWU3ODQ0NjJlYzZlLi5kMjQ3Zjc0MWQxZTNmIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTgxMiw2ICYjNDM7ODEyLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAKIAkvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi8KIAlzcGluX2xvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7CiYjNDM7CWt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGUKJiM0MzsJICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnQKJiM0MzsJICogZ29lcyB0byB6ZXJvLiAgUGFpcnMgd2l0aCB0aGUgc21wX3JtYigpIGluCiYjNDM7CSAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3dtYigpOwomIzQzOwogCWlmICghV0FSTl9PTl9PTkNFKCFrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSkKIAkJLS1rdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50OwogCXdha2UgPSAha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCmluZGV4IDcyOGQyYzFiNDg4YTguLjM2NTk2ODZiOTdjMjQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuYwpAQCAtMTI0LDcgJiM0MzsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSkKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdwY19zZXEpCiB7CiAJLyoKIAkgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMKQEAgLTEzNiwyMCAmIzQzOzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfcwogCSAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50CiAJICogaXMgbm90IHByb3RlY3RlZCBieSBncGMtJmd0O2xvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvCiAJICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLSZndDtsb2NrLCBhbmQKLQkgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC4KJiM0MzsJICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiAJICovCiAJaWYgKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmUKLQkgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgotCSAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlCiYjNDM7CSAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluCiYjNDM7CSAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZQogCSAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZQotCSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KJiM0MzsJICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgogCSAqLwogCXNtcF9ybWIoKTsKLQlyZXR1cm4ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTsKJiM0MzsJcmV0dXJuIGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU4LDcgJiM0MzsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAl2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLSZndDtraHZhKTsKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCWdwYy0mZ3Q7dmFsaWQgPSBmYWxzZTsKIAogCWRvIHsKLQkJbW11X3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQlncGNfc2VxID0gZ3BjLSZndDtrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcTsKIAkJc21wX3JtYigpOwogCiAJCXdyaXRlX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwpAQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAkJICogYXR0ZW1wdGluZyB0byByZWZyZXNoLgogCQkgKi8KIAkJV0FSTl9PTl9PTkNFKGdwYy0mZ3Q7dmFsaWQpOwotCX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSkpOwomIzQzOwl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIGdwY19zZXEpKTsKIAogCWdwYy0mZ3Q7dmFsaWQgPSB0cnVlOwogCWdwYy0mZ3Q7cGZuID0gbmV3X3BmbjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE1CgkJCQkJCQlvdXRwdXQ6IDI1NwoJCQkJCQkJdGhvdWdodHM6IDIyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNLVhlbiBQYXRjaCBBbmFseXNpczogU2FmZXR5IEZpcnN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgS1ZNLVhlbiBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYSBsb3ctcmlzayBwcm9maWxlLCBmb2N1c2luZyBvbiBhbGlnbm1lbnQgZml4ZXMsIGF0b21pYyBvcGVyYXRpb24gaGFuZGxpbmcgb24gZ3Vlc3QgbWVtb3J5LCBhbmQgYSBHUEMgc2VxdWVuY2UgY291bnRlci4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmaWxlczogYGFyY2gveDg2L2t2bS94ZW4uY2AsIGBhcmNoL3g4Ni9rdm0veGVuLmhgLCBgaW5jbHVkZS9saW51eC9rdm1faG9zdC5oYCwgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLgoKVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AgcmV2b2x2ZXMgYXJvdW5kIGFkYXB0aW5nIHRvIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIHRoZSBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGVgIGNoZWNrIHdpdGggYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYC4gVGhpcyBpbnZvbHZlcyBpbnRyb2R1Y2luZyBga3ZtX21heF9ldnRjaG5fcG9ydGAgYW5kIGBtYXhfZXZ0Y2huX3BvcnRgIHdoaWNoIGRlcGVuZCBvbiBgaGFzXzY0Yml0X3NoaW5mb2AuIEZ1cnRoZXJtb3JlLCBpdCYjMzk7cyBtb2RpZnlpbmcgaG93IHBlbmRpbmcgZXZlbnRzIGFyZSBpbmplY3RlZCBmb3IgNjQtYml0IGFsaWdubWVudCBhbmQgYXRvbWljIG9wZXJhdGlvbiBoYW5kbGluZy4gVGhlIHBhdGNoIGFsc28gYWRkcyBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGZvciBgZ3BhYCBhbmQgYGh2YWAuIFRoZSBgZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpO2AgaGFzIGJlZW4gYWRkZWQgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YC4gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBub3cgdXNlcyBgR0VOX0JJTkFSWV9STVdjY2AgZm9yIGJpdCB0ZXN0aW5nIGd1ZXN0LWNvbnRyb2xsZWQgbWVtb3J5LCBpbnN0ZWFkIG9mIHRoZSBvbGQgbWV0aG9kLgoKVGhlIGludHJvZHVjdGlvbiBvZiBgZ3BjX2ludmFsaWRhdGVfc2VxYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AgYW5kIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYCBpcyBpbXBvcnRhbnQgZm9yIGRlY291cGxpbmcgdGhlIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2UgZnJvbSB0aGUgTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gVGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBsb2dpYyBmbGF3IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEd1ZXN0IFBhZ2UgQ2FjaGUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LgoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgZGVsdmUgZGVlcGVyOgoKKiAgIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGFkZGVkIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIChlLmcuLCBgaWYgKCFJU19BTElHTkVEKGRhdGEtJmd0O3UuZ3BhLCBzaXplb2YodTMyKSkpYCkgYXJlIHN0YW5kYXJkIGVycm9yIHJldHVybnMuCiogICBUaGUgYWRqdXN0bWVudHMgaW4gYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCBkZWFsIHdpdGggaGFuZGxpbmcgdW5hbGlnbmVkIGF0b21pYyBvcGVyYXRpb25zLCB1c2luZyBgYXRvbWljNjRfb3JgIHdoZW4gYWxpZ25lZCBhbmQgYGF0b21pY19vcmAgd2l0aCBhcHByb3ByaWF0ZSBzaGlmdHMgd2hlbiB1bmFsaWduZWQuIFRoaXMgbG9va3Mgc2FmZS4KKiAgIFRoZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGNoYW5nZSB3aXRoIGBHRU5fQklOQVJZX1JNV2NjYCBpcyBhIGJpdCB0ZXN0IGFuZCBzZXQgb24gZ3Vlc3QgbWVtb3J5LiBUaGUgZ3Vlc3Qgb3ducyB0aGlzIG1lbW9yeSwgc28gdGhpcyBpcyBleHBlY3RlZC4KKiAgIFRoZSBzZXF1ZW5jZSBjb3VudGVyIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgIGFkZHJlc3NlcyB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVzZSBvZiBtZW1vcnkgcmVhZCBmcm9tIGd1ZXN0IHNwYWNlLgoKU3BlY2lmaWNhbGx5LCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgdGhlIHJlYWQgb2YgYG9uZXNob3RgIGludG8gdGhlIHN0YWNrIGFuZCBwb3RlbnRpYWxseSBpdHMgc3Vic2VxdWVudCB1c2Ugd2FycmFudHMgZnVydGhlciBleGFtaW5hdGlvbi4gVGhlcmUgaXMgYSBzaXplIGRpc3Bhcml0eSBjaGVjayBiYXNlZCBvbiAzMi1iaXQgdnMgNjQtYml0IGd1ZXN0LCBhcyBpdCBtYXkgcmVhZCBkaWZmZXJlbnQgc2l6ZWQgc3RydWN0cyBmcm9tIGd1ZXN0IG1lbW9yeS4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bGx5IGNoZWNraW5nIHRoZSBgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXJgIGFuZCBgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lcmAsIHRoZXkgYXJlIHRoZSBzYW1lIHNpemUuIFRoZXJlIGFyZSBjb21waWxlLXRpbWUgY2hlY2tzIGZvciB0aGlzLCBhbmQgdGhlIGNvZGUgYXBwZWFycyB0byBiZSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGRpZmZlcmluZyBndWVzdCBhcmNoaXRlY3R1cmVzICgzMiB2cyA2NCBiaXQpLiBUaGUgc3RydWN0dXJlIGNvbnRhaW5zIGEgdGltZW91dCBhbmQgZmxhZ3MsIHdoaWNoIGFyZSB1c2VkIGluIGBrdm1feGVuX3N0YXJ0X3RpbWVyYCwgYWZ0ZXIgdGhlIHJlYWQuIEFsbCBvZiB0aGUgZmllbGRzIGFyZSB1c2VkLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkkmIzM5O3ZlIGFsc28gY2hlY2tlZCBga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSlgLCB3aGljaCBpcyBqdXN0IGEgbWFjcm8gcmVwbGFjZW1lbnQuIFRoZSBjaGFuZ2VzIHRvIGBrdm1feGVuX3NjaGVkb3BfcG9sbGAsIHdoaWNoIGlzIGNoZWNraW5nIGFuZCBoYW5kbGluZyB0aGUgMzIvNjQgYml0IGRpZmZlcmVuY2VzIG9mIGEgc3RydWN0dXJlLCBhcmUgY29ycmVjdC4KCkluIHN1bW1hcnksIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFRoZXJlJiMzOTtzIG5vdGhpbmcgbmV3IGhlcmUgdGhhdCBJIGNhbiBzZWUgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIG9wZW4gdXAgc2VjdXJpdHkgaG9sZXMuCgpJIHdpbGwgdGhlcmVmb3JlIG1hcmsgdGhpcyBwYXRjaCBhcyBzYWZlLCB3aXRoIG5vIG5lZWQgZm9yIEtNU0FOIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBmaXhpbmcgYWxpZ25tZW50IGlzc3VlcywgYXRvbWljIG9wZXJhdGlvbnMgb24gZ3Vlc3QgbWVtb3J5LCBhbmQgYSBzZXF1ZW5jZSBjb3VudGVyIGZvciBHdWVzdCBQYWdlIENhY2hlIChHUEMpIGluIEtWTSBYZW4gZW11bGF0aW9uLiBJdCByZXBsYWNlcyBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlYCB3aXRoIGEgbWFjcm8gYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYCwgaGFuZGxlcyB1bmFsaWduZWQgYXRvbWljIG9wZXJhdGlvbnMgaW4gYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCwgdXNlcyBgYnRzbGAgZm9yIDMyLWJpdCBhbGlnbmVkIGd1ZXN0LWNvbnRyb2xsZWQgbWVtb3J5IGluIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGFuZCBpbnRyb2R1Y2VzIGBncGNfaW52YWxpZGF0ZV9zZXFgIHRvIHNlcGFyYXRlIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2UgZnJvbSBNTVUgaW52YWxpZGF0aW9uIHNlcXVlbmNlLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgc3VjaCBhcyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGFsaWdubWVudCBpc3N1ZXMsIGF0b21pYyBvcGVyYXRpb25zIG9uIGd1ZXN0IG1lbW9yeSwgYW5kIGEgc2VxdWVuY2UgY291bnRlciBmb3IgR3Vlc3QgUGFnZSBDYWNoZSAoR1BDKSBpbiBLVk0gWGVuIGVtdWxhdGlvbi4gSXQgcmVwbGFjZXMgYElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZWAgd2l0aCBhIG1hY3JvIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAsIGhhbmRsZXMgdW5hbGlnbmVkIGF0b21pYyBvcGVyYXRpb25zIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIHVzZXMgYGJ0c2xgIGZvciAzMi1iaXQgYWxpZ25lZCBndWVzdC1jb250cm9sbGVkIG1lbW9yeSBpbiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBhbmQgaW50cm9kdWNlcyBgZ3BjX2ludmFsaWRhdGVfc2VxYCB0byBzZXBhcmF0ZSBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGZyb20gTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6MTcuMTMyMzU1Mjg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NjIzMTUwNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9oeXBlcmNhbGxcIixcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1feGVuX3NldHVwX2V2dGNoblwiLFxuICAgIFwia3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRcIixcbiAgICBcImt2bV94ZW5faHZtX3NldF9hdHRyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBmaXhpbmcgYWxpZ25tZW50IGlzc3VlcywgYXRvbWljIG9wZXJhdGlvbnMgb24gZ3Vlc3QgbWVtb3J5LCBhbmQgYSBzZXF1ZW5jZSBjb3VudGVyIGZvciBHdWVzdCBQYWdlIENhY2hlIChHUEMpIGluIEtWTSBYZW4gZW11bGF0aW9uLiBJdCByZXBsYWNlcyBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlYCB3aXRoIGEgbWFjcm8gYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYCwgaGFuZGxlcyB1bmFsaWduZWQgYXRvbWljIG9wZXJhdGlvbnMgaW4gYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCwgdXNlcyBgYnRzbGAgZm9yIDMyLWJpdCBhbGlnbmVkIGd1ZXN0LWNvbnRyb2xsZWQgbWVtb3J5IGluIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGFuZCBpbnRyb2R1Y2VzIGBncGNfaW52YWxpZGF0ZV9zZXFgIHRvIHNlcGFyYXRlIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2UgZnJvbSBNTVUgaW52YWxpZGF0aW9uIHNlcXVlbmNlLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgc3VjaCBhcyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIDMyLWJpdC82NC1iaXQgc2hhcmVkIGluZm8gaGFuZGxpbmcsIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnksIGFuZCBwZm5jYWNoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUgYW5kIFhlbiBlbXVsYXRpb24sIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyMzoxNy4xMzIzNjEzMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2Njk4MTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg5NzNlMDhiZDY4ZjhkOTVlMzM0ZWQ1ZDZiZGM5OTczNGJlYzRkZjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTc6MjM6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXFxuaW5kZXggNjk0YjMxYzFmY2M5YS4uNDg5ODcyMWJjZmRkOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5AQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjX3NlY19oaSkgIT0gMHhjMGMpO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHtcXG4gXFx0XFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXFx1MDAzZWtodmE7XFxuIFxcbiBcXHRcXHR3Y19zZWNfaGkgPSBcXHUwMDI2c2hpbmZvLVxcdTAwM2V3Y19zZWNfaGk7XFxuQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XFxuIFxcdFxcdCAgICAgc2l6ZW9mKHZ4LVxcdTAwM2VydW5zdGF0ZV90aW1lcykpO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXFx1MDAzZWt2bSkpIHtcXG4gXFx0XFx0dXNlcl9sZW4gPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XFxuIFxcdFxcdHRpbWVzX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XFxuQEAgLTY2MSwyOCArNjYxLDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBOb3cgZ3BjLVxcdTAwM2VraHZhIGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3MgZm9yIHRoZSB2Y3B1X2luZm8gKi9cXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXFx1MDAzZWt2bSkpIHtcXG4gXFx0XFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXFx1MDAzZWtodmE7XFxuK1xcdFxcdHZvaWQgKnZpX3BlbmRpbmdfc2VsID0gXFx1MDAyNnZpLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWw7XFxuIFxcbi1cXHRcXHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXFxcIm9ycSAlMCwgJTFcXFxcblxcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwibm90cSAlMFxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIExPQ0tfUFJFRklYIFxcXCJhbmRxICUwLCAlMlxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIDogXFxcIj1yXFxcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCIrbVxcXCIgKHZpLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcIittXFxcIiAodi1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIjBcXFwiIChldnRjaG5fcGVuZGluZ19zZWwpKTtcXG4rXFx0XFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xcbitcXHRcXHRcXHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCxcXG4rXFx0XFx0XFx0ICogd2hlcmUgZXZ0Y2huX3BlbmRpbmdfc2VsIGlzIDMyIGJpdHMgd2lkZSBhbmQgdGhpc1xcbitcXHRcXHRcXHQgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZVxcbitcXHRcXHRcXHQgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb25cXG4rXFx0XFx0XFx0ICogSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCBcXHUwMDNlXFx1MDAzZSAzMixcXG4rXFx0XFx0XFx0XFx0ICB2aV9wZW5kaW5nX3NlbCArIDQpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRhdG9taWM2NF9hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVxcdTAwMjZ2LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR1MzIgZXZ0Y2huX3BlbmRpbmdfc2VsMzIgPSBldnRjaG5fcGVuZGluZ19zZWw7XFxuIFxcdFxcdHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2aSA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFxuLVxcdFxcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcXFwib3JsICUwLCAlMVxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJub3RsICUwXFxcXG5cXFwiXFxuLVxcdFxcdFxcdCAgICAgTE9DS19QUkVGSVggXFxcImFuZGwgJTAsICUyXFxcXG5cXFwiXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwiPXJcXFwiIChldnRjaG5fcGVuZGluZ19zZWwzMiksXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiK21cXFwiICh2aS1cXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSxcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCIrbVxcXCIgKHYtXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCIwXFxcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTtcXG4rXFx0XFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcXHUwMDI2dmktXFx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XFxuK1xcdFxcdGF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVxcdTAwMjZ2LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbiBcXHR9XFxuIFxcbkBAIC03MTMsNiArNzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XFxuIFxcdFxcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLVxcdTAwM2VzcmN1IG11c3QgYmVcXG4rXFx0ICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb21cXG4rXFx0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcXG4rXFx0ICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUncyBTUkNVIGxvY2suXFxuK1xcdCAqIFRha2luZyBTUkNVIGRvZXMgbm90IHNsZWVwLCBzbyBpdCBpcyBzYWZlIGV2ZW4gaW4gdGhlIGF0b21pYyBjYXNlXFxuK1xcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRndWFyZChzcmN1KShcXHUwMDI2di1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG4rXFxuIFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0d2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbiBcXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5AQCAtOTI2LDYgKzk0MCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0ciA9IC1FTlhJTztcXG4rXFx0XFx0XFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXFx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtOTM1LDYgKzk1MywxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0ciA9IC1FTlhJTztcXG4rXFx0XFx0XFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXFx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLVxcdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcXG4gXFx0XFx0fVxcbkBAIC05NzgsNyArMTAwMCw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuIFxcdFxcdCAqIGFkZHJlc3MsIHRoYXQncyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxcbiBcXHRcXHQgKiB3aWxsIGNvcGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxcbitcXHRcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdFxcdHN6ID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHN6ID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvKTtcXG5AQCAtMTQyMiwxNiArMTQ0NCwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi1cXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcXG4ge1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcXG4gXFx0XFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUztcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxcbi1cXHRcXHRcXHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sXFxuK1xcdFxcdFxcdCAgICAgICBpbnQgbnJfcG9ydHMsIGV2dGNobl9wb3J0X3QgKnBvcnRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcXG5AQCAtMTQ0Niw3ICsxNDczLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxcbiBcXHRcXHRnb3RvIG91dF9yY3U7XFxuIFxcbiBcXHRyZXQgPSBmYWxzZTtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xcbiBcXHRcXHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFx0XFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZztcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTQ2OCw5ICsxNDk1LDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbitzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXFxuIFxcdFxcdFxcdFxcdCB1NjQgcGFyYW0sIHU2NCAqcilcXG4ge1xcbitcXHRib29sIGhhc182NGJpdF9zaGluZm8gPSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0c3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDtcXG4gXFx0ZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7XFxuIFxcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XFxuQEAgLTE0ODAsNyArMTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcXG4gXFx0ICAgICEodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLmZsYWdzIFxcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiAhbG9uZ21vZGUpIHtcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiAhaXNfNjRiaXQpIHtcXG4gXFx0XFx0c3RydWN0IGNvbXBhdF9zY2hlZF9wb2xsIHNwMzI7XFxuIFxcbiBcXHRcXHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cXG5AQCAtMTUyOSw3ICsxNTU3LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSsrKSB7XFxuLVxcdFxcdGlmIChwb3J0c1tpXSBcXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQodmNwdS1cXHUwMDNla3ZtKSkge1xcbitcXHRcXHRpZiAocG9ydHNbaV0gXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7XFxuIFxcdFxcdFxcdCpyID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG5AQCAtMTU0Miw3ICsxNTcwLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbiBcXG4gXFx0c2V0X2JpdCh2Y3B1LVxcdTAwM2V2Y3B1X2lkeCwgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnhlbi5wb2xsX21hc2spO1xcbiBcXG4tXFx0aWYgKCF3YWl0X3BlbmRpbmdfZXZlbnQodmNwdSwgc2NoZWRfcG9sbC5ucl9wb3J0cywgcG9ydHMpKSB7XFxuK1xcdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIGhhc182NGJpdF9zaGluZm8sIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xcbiBcXHRcXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xcbiBcXG4gXFx0XFx0aWYgKHNjaGVkX3BvbGwudGltZW91dClcXG5AQCAtMTU3NywxMiArMTYwNSwxMiBAQCBzdGF0aWMgdm9pZCBjYW5jZWxfZXZ0Y2huX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbitzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCxcXG4gXFx0XFx0XFx0XFx0ICAgaW50IGNtZCwgdTY0IHBhcmFtLCB1NjQgKnIpXFxuIHtcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XFxuLVxcdFxcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxcbitcXHRcXHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRjYXNlIFNDSEVET1BfeWllbGQ6XFxuQEAgLTE2MDEsNyArMTYyOSw3IEBAIHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7XFxuICAgICB1aW50MzJfdCBmbGFncztcXG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcXG4gXFxuLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXFxuIFxcdFxcdFxcdFxcdCAgaW50IHZjcHVfaWQsIHU2NCBwYXJhbSwgdTY0ICpyKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIG9uZXNob3Q7XFxuQEAgLTE2MzMsNyArMTY2MSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXFxuIFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cXG4gXFx0XFx0XFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSk7XFxuIFxcbi1cXHRcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgXFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcXG4rXFx0XFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFxcdTAwMjZvbmVzaG90LCBpc182NGJpdCA/IHNpemVvZihvbmVzaG90KSA6XFxuIFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIpLCBcXHUwMDI2ZSkpIHtcXG4gXFx0XFx0XFx0KnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMTY3Myw3ICsxNzAxLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCB0aW1lb3V0LFxcbiBcXG4gaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRib29sIGxvbmdtb2RlO1xcbitcXHRib29sIGlzXzY0Yml0O1xcbiBcXHR1NjQgaW5wdXQsIHBhcmFtc1s2XSwgciA9IC1FTk9TWVM7XFxuIFxcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xcbiBcXHR1OCBjcGw7XFxuQEAgLTE2ODMsOCArMTcxMSw4IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXFxuIFxcdFxcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xcbiBcXG4tXFx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xcbi1cXHRpZiAoIWxvbmdtb2RlKSB7XFxuK1xcdGlzXzY0Yml0ID0gaXNfNjRfYml0X2h5cGVyY2FsbCh2Y3B1KTtcXG4rXFx0aWYgKCFpc182NGJpdCkge1xcbiBcXHRcXHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcXG4gXFx0XFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xcbiBcXHRcXHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XFxuQEAgLTE3MzAsMTcgKzE3NTgsMTcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQodmNwdSwgcGFyYW1zWzFdLCBcXHUwMDI2cik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIF9fSFlQRVJWSVNPUl9zY2hlZF9vcDpcXG4tXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSxcXG4rXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHBhcmFtc1sxXSwgXFx1MDAyNnIpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcXG4tXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXFxuK1xcdFxcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRwYXJhbXNbMl0sIFxcdTAwMjZyKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgX19IWVBFUlZJU09SX3NldF90aW1lcl9vcDoge1xcbiBcXHRcXHR1NjQgdGltZW91dCA9IHBhcmFtc1swXTtcXG4gXFx0XFx0LyogSW4gMzItYml0IG1vZGUsIHRoZSA2NC1iaXQgdGltZW91dCBpcyBpbiB0d28gMzItYml0IHBhcmFtcy4gKi9cXG4tXFx0XFx0aWYgKCFsb25nbW9kZSlcXG4rXFx0XFx0aWYgKCFpc182NGJpdClcXG4gXFx0XFx0XFx0dGltZW91dCB8PSBwYXJhbXNbMV0gXFx1MDAzY1xcdTAwM2MgMzI7XFxuIFxcdFxcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcCh2Y3B1LCB0aW1lb3V0LCBcXHUwMDI2cik7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xNzU1LDcgKzE3ODMsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBoYW5kbGVfaW5fdXNlcnNwYWNlOlxcbiBcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWEVOO1xcbiBcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xcbi1cXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gbG9uZ21vZGU7XFxuK1xcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBpc182NGJpdDtcXG4gXFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XFxuIFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNleGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDtcXG4gXFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5wYXJhbXNbMF0gPSBwYXJhbXNbMF07XFxuQEAgLTE3OTUsOCArMTgyMyw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXFxuIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcXG4rXFx0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cywgdmlfcGVuZGluZ19zZWxfb2ZzO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdHVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IHBvcnRfd29yZF9iaXQ7XFxuIFxcdGJvb2wga2lja192Y3B1ID0gZmFsc2U7XFxuQEAgLTE4MTIsNyArMTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdFxcdFdSSVRFX09OQ0UoeGUtXFx1MDAzZXZjcHVfaWR4LCB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh4ZS1cXHUwMDNlcG9ydCBcXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcXG4rXFx0aWYgKHhlLVxcdTAwM2Vwb3J0IFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChoYXNfNjRiaXRfc2hpbmZvKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyYyA9IC1FV09VTERCTE9DSztcXG5AQCAtMTgyMywxNiArMTg1MiwyMyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKVxcbiBcXHRcXHRnb3RvIG91dF9yY3U7XFxuIFxcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XFxuK1xcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XFxuIFxcdFxcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVxcdTAwM2VraHZhO1xcbiBcXHRcXHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZzaGluZm8tXFx1MDAzZWV2dGNobl9wZW5kaW5nO1xcbiBcXHRcXHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZzaGluZm8tXFx1MDAzZWV2dGNobl9tYXNrO1xcbiBcXHRcXHRwb3J0X3dvcmRfYml0ID0geGUtXFx1MDAzZXBvcnQgLyA2NDtcXG4rXFxuK1xcdFxcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFx0XFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZztcXG4gXFx0XFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fbWFzaztcXG4gXFx0XFx0cG9ydF93b3JkX2JpdCA9IHhlLVxcdTAwM2Vwb3J0IC8gMzI7XFxuK1xcbitcXHRcXHR2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcXG4rXFxuK1xcdFxcdC8qIHRlc3RfYW5kX3NldF9iaXQoKSBuZWVkcyA2NC1iaXQgYWxpZ25tZW50LCBidXQgdGhhdCdzIE9LICovXFxuK1xcdFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvLCBldnRjaG5fcGVuZGluZykgXFx1MDAyNiA3KTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtMTg0OCw2ICsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xcbiBcXHRcXHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cXHUwMDNlcG9ydCk7XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdGJvb2wgb2xkO1xcbitcXG4gXFx0XFx0cmMgPSAxOyAvKiBEZWxpdmVyZWQgdG8gdGhlIGJpdG1hcCBpbiBzaGFyZWRfaW5mby4gKi9cXG4gXFx0XFx0LyogTm93IHN3aXRjaCB0byB0aGUgdkNQVSdzIHZjcHVfaW5mbyB0byBzZXQgdGhlIGluZGV4IGFuZCBwZW5kaW5nX3NlbCAqL1xcbiBcXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5AQCAtMTg2NCwxOSArMTkwMiwyOSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9yY3U7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcXG4tXFx0XFx0XFx0c3RydWN0IHZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVxcdTAwM2VraHZhO1xcbi1cXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXFx1MDAyNnZjcHVfaW5mby1cXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSkge1xcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKHZjcHVfaW5mby1cXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcXG4tXFx0XFx0XFx0XFx0a2lja192Y3B1ID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVxcdTAwM2VraHZhO1xcbi1cXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2dmNwdV9pbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpKSB7XFxuLVxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbi1cXHRcXHRcXHRcXHRraWNrX3ZjcHUgPSB0cnVlO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEV4cGxpY2l0bHkgdXNlIGEgMzItYml0IGJ0c2wgaW5zdGVhZCBvZiB0ZXN0X2FuZF9zZXRfYml0KCksXFxuK1xcdFxcdCAqIHdoaWNoIHdvdWxkIHVzZSBidHNxIG9uIHg4Ni02NC4gVGhlIHZjcHVfaW5mbyBpcyBndWVzdC1cXG4rXFx0XFx0ICogY29udHJvbGxlZCBhbmQgb25seSByZXF1aXJlZCB0byBiZSAzMi1iaXQgYWxpZ25lZCwgc28gYVxcbitcXHRcXHQgKiA2NC1iaXQgYWNjZXNzIGNvdWxkIGdlbmVyYXRlIGEgc3BsaXQtbG9jayAjQUMuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIE5vdGUsIHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBvblxcbitcXHRcXHQgKiBwZW5kaW5nX2JpdHMgYWJvdmU6IHRoYXQgaXMgaW4gdGhlIHBlci1WTSBzaGFyZWRfaW5mbywgd2hpY2hcXG4rXFx0XFx0ICogaXMgcGFnZSBhbGlnbmVkLCBzbyB0aGUgYWNjZXNzIGlzIGd1YXJhbnRlZWQgdG8gYmUgNjQtYml0XFxuK1xcdFxcdCAqIGFsaWduZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRvbGQgPSBHRU5fQklOQVJZX1JNV2NjKExPQ0tfUFJFRklYIFxcXCJidHNsXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgICoodTMyICopKGdwYy1cXHUwMDNla2h2YSArIHZpX3BlbmRpbmdfc2VsX29mcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjLCBcXFwiSXJcXFwiLCBwb3J0X3dvcmRfYml0KTtcXG4rXFx0XFx0aWYgKCFvbGQpIHtcXG4rXFx0XFx0XFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXFx1MDAzZWtodmE7XFxuK1xcbitcXHRcXHRcXHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cXG4rXFx0XFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykgIT1cXG4rXFx0XFx0XFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XFxuK1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbitcXHRcXHRcXHRraWNrX3ZjcHUgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBGb3IgdGhlIHBlci12Q1BVIGxhcGljIHZlY3RvciwgZGVsaXZlciBpdCBhcyBNU0kuICovXFxuQEAgLTE5NzQsNyArMjAyMiw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2YgbWF4X2V2dGNobl9wb3J0KCkuXFxuK1xcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxcbiBcXHQgKiBVc2Vyc3BhY2UgY2FuIGNvbmZpZ3VyZSB3aGF0IGV2ZXIgdGFyZ2V0cyBpdCBsaWtlczsgZXZlbnRzIGp1c3Qgd29uJ3RcXG4gXFx0ICogYmUgZGVsaXZlcmVkIGlmL3doaWxlIHRoZSB0YXJnZXQgaXMgaW52YWxpZCwganVzdCBsaWtlIHVzZXJzcGFjZSBjYW5cXG4gXFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cXG5AQCAtMTk4Myw4ICsyMDMxLDggQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcXG4gXFx0ICogd2l0aG91dCBpbXBvc2luZyBhbiBvcmRlcmluZyBkZXBlbmRlbmN5IG9uIHVzZXJzcGFjZS4gIEluIHRoaXNcXG4gXFx0ICogcGFydGljdWxhciBjYXNlLCB0aGUgcHJvYmxlbWF0aWMgb3JkZXJpbmcgd291bGQgYmUgd2l0aCBzZXR0aW5nIHRoZVxcbi1cXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XFxuLVxcdCAqIGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy5cXG4rXFx0ICogWGVuICdsb25nIG1vZGUnIGZsYWcsIHdoaWNoIGNoYW5nZXMga3ZtX21heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93XFxuK1xcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxcbiBcXHQgKi9cXG4gXFxuIFxcdC8qIFdlIG9ubHkgc3VwcG9ydCAyIGxldmVsIGV2ZW50IGNoYW5uZWxzIGZvciBub3cgKi9cXG5AQCAtMjAyMSw3ICsyMDY5LDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcXG4gXFx0c3RydWN0IGt2bV94ZW5fZXZ0Y2huIGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIXV4ZS1cXHUwMDNlcG9ydCB8fCB1eGUtXFx1MDAzZXBvcnQgXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuK1xcdGlmICghdXhlLVxcdTAwM2Vwb3J0IHx8IHV4ZS1cXHUwMDNlcG9ydCBcXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xcbkBAIC0yMTMxLDcgKzIxNzksNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXG4gXFx0Y2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOlxcbiBcXHRcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQpIHtcXG4tXFx0XFx0XFx0aWYgKGRhdGEtXFx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxcbitcXHRcXHRcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi9cXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0ZXZlbnRmZCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGRhdGEtXFx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIuZXZlbnRmZC5mZCk7XFxuQEAgLTIyNDksNyArMjI5Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhXFxuIFxcdGlmIChkYXRhLVxcdTAwM2V1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9SRVNFVClcXG4gXFx0XFx0cmV0dXJuIGt2bV94ZW5fZXZlbnRmZF9yZXNldChrdm0pO1xcbiBcXG4tXFx0aWYgKCFwb3J0IHx8IHBvcnQgXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuK1xcdGlmICghcG9ydCB8fCBwb3J0IFxcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fREVBU1NJR04pXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaFxcbmluZGV4IDU5ZTYxMjhhN2JkM2MuLjNlOGM5MzA2ZWI4OTYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3hlbi5oXFxuQEAgLTI0OCw2ICsyNDgsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XFxuICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBldnRjaG5fcGVuZGluZykpXFxuK1xcbisvKiBMYXRjaGVkIFZNLXdpZGUgbW9kZTsgdGhlIEtWTSBlcXVpdmFsZW50IG9mIFhlbidzICFoYXNfMzJiaXRfc2hpbmZvKCkuICovXFxuKyNkZWZpbmUga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkgXFxcXFxcbitcXHQoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IFJFQURfT05DRSgoa3ZtKS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSlcXG4rXFxuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcXG4gICAgIGludCBzdGF0ZTtcXG4gICAgIHVpbnQ2NF90IHN0YXRlX2VudHJ5X3RpbWU7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IGFiOGNmYWVjODJkMzEuLmQ3NDA2YzEwZTA5MGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTg1NCw2ICs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHtcXG4gXFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQ7XFxuIFxcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX2VuZDtcXG4gXFxuK1xcdHVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxO1xcbitcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzO1xcbiBcXHR1NjQgbWFudWFsX2RpcnR5X2xvZ19wcm90ZWN0O1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi5kMjQ3Zjc0MWQxZTNmIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTgxMiw2ICs4MTIsMTYgQEAgc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4gXFxuIFxcdC8qIFBhaXJzIHdpdGggdGhlIGluY3JlbWVudCBpbiByYW5nZV9zdGFydCgpLiAqL1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcXG4rXFx0a3ZtLVxcdTAwM2VncGNfaW52YWxpZGF0ZV9zZXErKztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFzIHdpdGggdGhlIE1NVSBzZXF1ZW5jZSBjb3VudGVyIGFuZCBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzcywgdGhlXFxuK1xcdCAqIEdQQyBzZXF1ZW5jZSBpbmNyZWFzZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIGNvdW50XFxuK1xcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxcbitcXHQgKiBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoKS5cXG4rXFx0ICovXFxuK1xcdHNtcF93bWIoKTtcXG4rXFxuIFxcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcXG4gXFx0XFx0LS1rdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xcbiBcXHR3YWtlID0gIWt2bS1cXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXFxuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jXFxuKysrIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xcbkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlc1xcbkBAIC0xMzYsMjAgKzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xcbiBcXHQgKiBOb3RlLCBpdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudFxcbiBcXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cXHUwMDNlbG9jay4gIEl0IGlzIGd1YXJhbnRlZWQgdG9cXG4gXFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVxcdTAwM2Vsb2NrLCBhbmRcXG4tXFx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cXG4rXFx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBncGNfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cXG4gXFx0ICovXFxuIFxcdGlmIChrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxcbi1cXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxcbi1cXHQgKiBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZVxcbitcXHQgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxcbitcXHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcXG4gXFx0ICogb2xkIChub24temVybykgdmFsdWUgb2YgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgb3IgdGhlXFxuLVxcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cXG4rXFx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxcbiBcXHQgKi9cXG4gXFx0c21wX3JtYigpO1xcbi1cXHRyZXR1cm4ga3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcXG4rXFx0cmV0dXJuIGt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XFxuIH1cXG4gXFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuIFxcdHZvaWQgKm9sZF9raHZhID0gKHZvaWQgKilQQUdFX0FMSUdOX0RPV04oKHVpbnRwdHJfdClncGMtXFx1MDAzZWtodmEpO1xcbiBcXHRrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xcbiBcXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4rXFx0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFxuIFxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0Z3BjLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRtbXVfc2VxID0gZ3BjLVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0XFx0Z3BjX3NlcSA9IGdwYy1cXHUwMDNla3ZtLVxcdTAwM2VncGNfaW52YWxpZGF0ZV9zZXE7XFxuIFxcdFxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0XFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGdwYy1cXHUwMDNldmFsaWQpO1xcbi1cXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVxcdTAwM2Vrdm0sIG1tdV9zZXEpKTtcXG4rXFx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cXHUwMDNla3ZtLCBncGNfc2VxKSk7XFxuIFxcbiBcXHRncGMtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG4gXFx0Z3BjLVxcdTAwM2VwZm4gPSBuZXdfcGZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyMzoxNy42OTk5MTQ0NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDI0NjY4MzExNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJrdm1feGVuX2h5cGVyY2FsbFwiLFxuICAgIFwia3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RcIixcbiAgICBcImt2bV94ZW5fc2V0dXBfZXZ0Y2huXCIsXG4gICAgXCJrdm1feGVuX2h2bV9ldnRjaG5fc2VuZFwiLFxuICAgIFwia3ZtX3hlbl9odm1fc2V0X2F0dHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gWGVuIGVtdWxhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyAzMi1iaXQvNjQtYml0IHNoYXJlZCBpbmZvIGhhbmRsaW5nLCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5LCBhbmQgcGZuY2FjaGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBjb2RlIGFuZCBYZW4gZW11bGF0aW9uLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIGd1ZXN0IGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk3M2UwOGJkNjhmOGQ5NWUzMzRlZDVkNmJkYzk5NzM0YmVjNGRmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE3OjIzOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSkge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFxuIFx0XHR3Y19zZWNfaGkgPSBcdTAwMjZzaGluZm8tXHUwMDNld2Nfc2VjX2hpO1xuQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuIFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCB0aW1lKSAhPVxuIFx0XHQgICAgIHNpemVvZih2eC1cdTAwM2VydW5zdGF0ZV90aW1lcykpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHR1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbiBcdFx0dGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyxcbiBcdFx0XHRcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XG5AQCAtNjYxLDI4ICs2NjEsMzIgQEAgdm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHR9XG4gXG4gXHQvKiBOb3cgZ3BjLVx1MDAzZWtodmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqL1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuK1x0XHR2b2lkICp2aV9wZW5kaW5nX3NlbCA9IFx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbDtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwib3JxICUwLCAlMVxcblwiXG4tXHRcdFx0ICAgICBcIm5vdHEgJTBcXG5cIlxuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCJhbmRxICUwLCAlMlxcblwiXG4tXHRcdFx0ICAgICA6IFwiPXJcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcbi1cdFx0XHQgICAgICAgXCIrbVwiICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcIjBcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7XG4rXHRcdGlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXZpX3BlbmRpbmdfc2VsLCBzaXplb2YodTY0KSkpIHtcbitcdFx0XHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCxcbitcdFx0XHQgKiB3aGVyZSBldnRjaG5fcGVuZGluZ19zZWwgaXMgMzIgYml0cyB3aWRlIGFuZCB0aGlzXG4rXHRcdFx0ICogYnJhbmNoIGlzIHVucmVhY2hhYmxlIGFueXdheSAodGhpcyBpcyBpbnNpZGVcbitcdFx0XHQgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb25cbitcdFx0XHQgKiBJU19FTkFCTEVEKENPTkZJR182NEJJVCkpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCBcdTAwM2VcdTAwM2UgMzIsXG4rXHRcdFx0XHQgIHZpX3BlbmRpbmdfc2VsICsgNCk7XG4rXHRcdH1cbitcbitcdFx0YXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHUzMiBldnRjaG5fcGVuZGluZ19zZWwzMiA9IGV2dGNobl9wZW5kaW5nX3NlbDtcbiBcdFx0c3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4tXHRcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcIm9ybCAlMCwgJTFcXG5cIlxuLVx0XHRcdCAgICAgXCJub3RsICUwXFxuXCJcbi1cdFx0XHQgICAgIExPQ0tfUFJFRklYIFwiYW5kbCAlMCwgJTJcXG5cIlxuLVx0XHRcdCAgICAgOiBcIj1yXCIgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSxcbi1cdFx0XHQgICAgICAgXCIrbVwiICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcIjBcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTtcbitcdFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpO1xuK1x0XHRhdG9taWNfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH1cbiBcbkBAIC03MTMsNiArNzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJjKSAhPVxuIFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4gXG4rXHQvKlxuK1x0ICoga3ZtX2dwY19jaGVjaygpIGNoZWNrcyB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uLCBzbyBrdm0tXHUwMDNlc3JjdSBtdXN0IGJlXG4rXHQgKiBoZWxkLiBNb3N0IGNhbGxlcnMgaG9sZCBpdCBhbHJlYWR5LCBidXQgdGhpcyBpcyBhbHNvIHJlYWNoZWQgZnJvbVxuK1x0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcbitcdCAqIHdoZXJlIHZjcHVfZW50ZXJfZ3Vlc3QoKSBoYXMgYWxyZWFkeSBkcm9wcGVkIHRoZSB2Q1BVJ3MgU1JDVSBsb2NrLlxuK1x0ICogVGFraW5nIFNSQ1UgZG9lcyBub3Qgc2xlZXAsIHNvIGl0IGlzIHNhZmUgZXZlbiBpbiB0aGUgYXRvbWljIGNhc2VcbitcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXG4rXHQgKi9cbitcdGd1YXJkKHNyY3UpKFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuK1xuIFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHdoaWxlICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHtcbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTkyNiw2ICs5NDAsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRyID0gLUVOWElPO1xuK1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXG4rXHRcdFx0XHRicmVhaztcbitcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0ICAgICBkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTkzNSw2ICs5NTMsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRyID0gLUVOWElPO1xuK1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXG4rXHRcdFx0XHRicmVhaztcbitcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXG4gXHRcdFx0XHRcdFx0IGRhdGEtXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH1cbkBAIC05NzgsNyArMTAwMCw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdCAqIGFkZHJlc3MsIHRoYXQncyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxuIFx0XHQgKiB3aWxsIGNvcGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4rXHRcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRcdHN6ID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xuIFx0XHRlbHNlXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pO1xuQEAgLTE0MjIsMTYgKzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVx1MDAzZXhlbi51LmhjYWxsLnJlc3VsdCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4rc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxuK1x0aWYgKGhhc182NGJpdF9zaGluZm8pXG4gXHRcdHJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4tXHRcdFx0ICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKVxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpO1xuK31cbitcbitzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sXG4rXHRcdFx0ICAgICAgIGludCBucl9wb3J0cywgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbkBAIC0xNDQ2LDcgKzE0NzMsNyBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbiBcdHJldCA9IGZhbHNlO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuK1x0aWYgKGhhc182NGJpdF9zaGluZm8pIHtcbiBcdFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcdFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XG4gXHR9IGVsc2Uge1xuQEAgLTE0NjgsOSArMTQ5NSwxMCBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LFxuIFx0XHRcdFx0IHU2NCBwYXJhbSwgdTY0ICpyKVxuIHtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSk7XG4gXHRzdHJ1Y3Qgc2NoZWRfcG9sbCBzY2hlZF9wb2xsO1xuIFx0ZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuQEAgLTE0ODAsNyArMTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiBcdCAgICAhKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgXHUwMDI2IEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2ICFsb25nbW9kZSkge1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWlzXzY0Yml0KSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyO1xuIFxuIFx0XHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cbkBAIC0xNTI5LDcgKzE1NTcsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpKyspIHtcbi1cdFx0aWYgKHBvcnRzW2ldIFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHRpZiAocG9ydHNbaV0gXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHtcbiBcdFx0XHQqciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0xNTQyLDcgKzE1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXG4gXHRzZXRfYml0KHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnBvbGxfbWFzayk7XG4gXG4tXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbitcdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIGhhc182NGJpdF9zaGluZm8sIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuIFxuIFx0XHRpZiAoc2NoZWRfcG9sbC50aW1lb3V0KVxuQEAgLTE1NzcsMTIgKzE2MDUsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuK1x0XHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNDSEVET1BfeWllbGQ6XG5AQCAtMTYwMSw3ICsxNjI5LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbiAgICAgdWludDMyX3QgZmxhZ3M7XG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2MzMsNyArMTY2MSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cbiBcdFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcbiBcbi1cdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcbitcdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFx1MDAyNmUpKSB7XG4gXHRcdFx0KnIgPSAtRUZBVUxUO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTE2NzMsNyArMTcwMSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4rXHRib29sIGlzXzY0Yml0O1xuIFx0dTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTO1xuIFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4gXHR1OCBjcGw7XG5AQCAtMTY4Myw4ICsxNzExLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xuIFxuLVx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuLVx0aWYgKCFsb25nbW9kZSkge1xuK1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuK1x0aWYgKCFpc182NGJpdCkge1xuIFx0XHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xuIFx0XHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XG5AQCAtMTczMCwxNyArMTc1OCwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6XG4tXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuIFx0XHRcdFx0XHRcdHBhcmFtc1syXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XG4gXHRcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xuIFx0XHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xuLVx0XHRpZiAoIWxvbmdtb2RlKVxuK1x0XHRpZiAoIWlzXzY0Yml0KVxuIFx0XHRcdHRpbWVvdXQgfD0gcGFyYW1zWzFdIFx1MDAzY1x1MDAzYyAzMjtcbiBcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbkBAIC0xNzU1LDcgKzE3ODMsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbitcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gaXNfNjRiaXQ7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwucGFyYW1zWzBdID0gcGFyYW1zWzBdO1xuQEAgLTE3OTUsOCArMTgyMyw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuK1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MTIsNyArMTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFdSSVRFX09OQ0UoeGUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNldmNwdV9pZHgpO1xuIFx0fVxuIFxuLVx0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4MjMsMTYgKzE4NTIsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0XHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fbWFzaztcbiBcdFx0cG9ydF93b3JkX2JpdCA9IHhlLVx1MDAzZXBvcnQgLyA2NDtcbitcbitcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4rXG4rXHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuK1xuK1x0XHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xuK1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg0OCw2ICsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xuIFx0XHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cdTAwM2Vwb3J0KTtcbiBcdH0gZWxzZSB7XG4rXHRcdGJvb2wgb2xkO1xuK1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJ3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC0xODY0LDE5ICsxOTAyLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbitcdFx0LypcbitcdFx0ICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSxcbitcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuK1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4rXHRcdCAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy5cbitcdFx0ICpcbitcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4rXHRcdCAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaFxuK1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbitcdFx0ICogYWxpZ25lZC5cbitcdFx0ICovXG4rXHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCJidHNsXCIsXG4rXHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuK1x0XHRcdFx0ICAgICAgIGMsIFwiSXJcIiwgcG9ydF93b3JkX2JpdCk7XG4rXHRcdGlmICghb2xkKSB7XG4rXHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbitcbitcdFx0XHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cbitcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuK1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuK1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5NzQsNyArMjAyMiw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHQvKlxuLVx0ICogRG9uJ3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbitcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxuIFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0xOTgzLDggKzIwMzEsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4rXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbitcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjAyMSw3ICsyMDY5LDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcbiBcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIxMzEsNyArMjE3OSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHRjYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46XG4gXHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7XG4tXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0XHRcdGdvdG8gb3V0X25vZXZlbnRmZDsgLyogLUVJTlZBTCAqL1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIuZXZlbnRmZC5mZCk7XG5AQCAtMjI0OSw3ICsyMjk3LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGFcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKVxuIFx0XHRyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7XG4gXG4tXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuK1x0aWYgKCFwb3J0IHx8IHBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fREVBU1NJR04pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5oIGIvYXJjaC94ODYva3ZtL3hlbi5oXG5pbmRleCA1OWU2MTI4YTdiZDNjLi4zZThjOTMwNmViODk2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmhcbkBAIC0yNDgsNiArMjQ4LDExIEBAIHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8ge1xuICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqXHRcdFx0XHRcXFxuIFx0XHRcdFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIFxcXG4gXHRcdFx0XHRcdFx0ICAgZXZ0Y2huX3BlbmRpbmcpKVxuK1xuKy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJ3MgIWhhc18zMmJpdF9zaGluZm8oKS4gKi9cbisjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXG4rXHQoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UoKGt2bSktXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSlcbitcbiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7XG4gICAgIGludCBzdGF0ZTtcbiAgICAgdWludDY0X3Qgc3RhdGVfZW50cnlfdGltZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLmQ3NDA2YzEwZTA5MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTg1NCw2ICs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kO1xuIFxuK1x0dW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7XG4rXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7XG4gXHR1NjQgbWFudWFsX2RpcnR5X2xvZ19wcm90ZWN0O1xuIFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmQyNDdmNzQxZDFlM2YgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDYgKzgxMiwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4rXHRrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxKys7XG4rXG4rXHQvKlxuK1x0ICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGVcbitcdCAqIEdQQyBzZXF1ZW5jZSBpbmNyZWFzZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIGNvdW50XG4rXHQgKiBnb2VzIHRvIHplcm8uICBQYWlycyB3aXRoIHRoZSBzbXBfcm1iKCkgaW5cbitcdCAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLlxuK1x0ICovXG4rXHRzbXBfd21iKCk7XG4rXG4gXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHR3YWtlID0gIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpXG4rc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbitcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4gXHQgKi9cbiBcdGlmIChrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxuLVx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbi1cdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4rXHQgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuK1x0ICoga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4gXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcbi1cdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbitcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbitcdHJldHVybiBrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XG4gfVxuIFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdHZvaWQgKm9sZF9raHZhID0gKHZvaWQgKilQQUdFX0FMSUdOX0RPV04oKHVpbnRwdHJfdClncGMtXHUwMDNla2h2YSk7XG4gXHRrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuIFx0dm9pZCAqbmV3X2todmEgPSBOVUxMO1xuLVx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuK1x0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdGdwY19zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBncGNfc2VxKSk7XG4gXG4gXHRncGMtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0Z3BjLVx1MDAzZXBmbiA9IG5ld19wZm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyMzoxNy42OTk5MTU3MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDQ1MDAxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBYZW4gRW11bGF0aW9uIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBxdWl0ZSBhIGZldyBmaWxlczogYGFyY2gveDg2L2t2bS94ZW4uY2AsIGBhcmNoL3g4Ni9rdm0veGVuLmhgLCBgaW5jbHVkZS9saW51eC9rdm1faG9zdC5oYCwgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBmb2N1c2VkIG9uIEtWTSdzIFhlbiBlbXVsYXRpb24gbGF5ZXIsIHdoaWNoIHBpcXVlcyBteSBpbnRlcmVzdC5cblxuVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGEgZmV3IGtleSBjaGFuZ2VzLiBGaXJzdCwgdGhlcmUncyB0aGlzIG5ldyBmdW5jdGlvbiwgYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYCwgd2hpY2ggc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSBvbGRlciBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlYCBsb2dpYy4gVGhhdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgcmVmYWN0b3IgZm9yIGNsYXJpdHkgb3IgcG90ZW50aWFsIGZ1dHVyZSBmbGV4aWJpbGl0eS4gVGhlbiwgdGhleSdyZSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucyBmb3IgYGV2dGNobl9wZW5kaW5nX3NlbGAgaW4gYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKClgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiDigJMgd2UncmUgdGFsa2luZyBhYm91dCBjb25jdXJyZW5jeSBhbmQgaW50ZXItVk0gY29tbXVuaWNhdGlvbiwgc28gdGhhdCdzIGEgd2VsY29tZSBjaGFuZ2UuIFRoZSBhZGRpdGlvbiBvZiBgZ3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7YCBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoKWAgc3VnZ2VzdHMgdGhleSdyZSBsaWtlbHkgYWRkaW5nIHByb3BlciBzeW5jaHJvbml6YXRpb24uXG5cblRoZXJlIGFyZSBhbGlnbm1lbnQgY2hlY2tzIGFkZGVkIHdpdGhpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyKClgLCBhbHdheXMgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlIGFuZCBpdCBjaGFuZ2VzIGBtYXhfZXZ0Y2huX3BvcnQoKWAgdG8gdGFrZSBhIGJvb2xlYW4gYGhhc182NGJpdF9zaGluZm9gIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHN0cnVjdCBwb2ludGVyLCB3aGljaCBpcyBuaWNlIGFuZCBjb25jaXNlLiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoKWAgbm93IHVzZXMgYEdFTl9CSU5BUllfUk1XY2NgIGZvciBiaXQgc2V0dGluZy4gVGhpcyBpcyBpbnRlcmVzdGluZzogYSBsb3cgbGV2ZWwgY2hhbmdlIHRoYXQgY291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSBidXQgaXMgYWxzbyBhIHBvc3NpYmxlIHNvdXJjZSBvZiBlcnJvcnMuIExhc3RseSwgd2Ugc2VlIGEgbmV3IGBncGNfaW52YWxpZGF0ZV9zZXFgIGZpZWxkIGluIGBzdHJ1Y3Qga3ZtYCwgYW5kIHRoZXkndmUgdXBkYXRlZCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpYCBhbmQgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpYCB0byB1c2UgaXQsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gTU1VIGludmFsaWRhdGlvbi5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgZGVmaW5pdGUgY2hhbmdlIGluIEtWTSBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBYZW4gZW11bGF0aW9uLCBzbyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgZ29vZCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbnZvbHZlZCwgYW5kIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scywgb2YgY291cnNlLiBHaXZlbiB0aGUgZmlsZXMgdG91Y2hlZCwgYEtWTWAgYW5kIGBLVk1fWEVOYCBhcmUgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBiZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIExldCdzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGBLVk1fWEVOYCBpcyBpbmRlZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgxOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjIzOjI2LjE0NDkyMTA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTIwMzk3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9YRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTkzPWNvbmZpZyBLVk1fSFlQRVJWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyMzoyOC4zNTY5NzEzMTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk1MTQ4NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBLVk1fWEVOIENvbmZpZ3VyYXRpb24gYW5kIEl0cyBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNsdWUgcG9pbnRzIHVzIHRvd2FyZHMgYEtWTV9YRU5gIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggS1ZNLCBhIG5hdHVyYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIHRoZSBjb3JlIEtWTSBjb2RlIGl0c2VsZi4gTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IHR1cm5zIHRvIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC4gVGhpcyBmaWxlIGFsbW9zdCBjZXJ0YWlubHkgaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgaG93IEtWTSBtYW5hZ2VzIHBoeXNpY2FsIHBhZ2UgbnVtYmVycywgYW5kIHRoZSBcIlhFTlwiIHBhcnQgb2YgdGhlIGNvbmZpZyBtaWdodCBpbmZsdWVuY2UgaG93IHRoZXNlIHBhZ2VzIGFyZSBoYW5kbGVkIG9yIGNhY2hlZCwgcGVyaGFwcyB3aXRoIHNwZWNpZmljIGhvb2tzIG9yIGNvbXBhdGliaWxpdHkgbGF5ZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIHJlcXVpcmVzIGV4YW1pbmluZyB0aGUgbG9naWMgd2l0aGluIHRoaXMgYHBmbmNhY2hlLmNgIGZpbGUgYW5kIHNlZWluZyBob3cgYEtWTV9YRU5gIGlzIHVzZWQgYXMgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIG9yIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBsb29rIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MsIGZ1bmN0aW9uIGNhbGxzLCBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgaW5mbHVlbmNlZCBieSB0aGlzIHNldHRpbmcgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBJIGV4cGVjdCBpdCBpcyBhZmZlY3RpbmcgdGhlIEtWTSBjb2RlIGluIHJlZ2FyZCB0byB0aGUgWGVuIGh5cGVydmlzb3IsIHBlcmhhcHMgZm9yIHBhZ2Ugb3IgSS9PIGNhY2hlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTU2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6MzIuNDUyMTIyODAyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTE0MjAwODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cXHRib29sIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnPTE2PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzoxODpjb25maWcgS1ZNXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzAtXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjMxOmNvbmZpZyBLVk1fTUlQU19ERUJVR19DT1AwX0NPVU5URVJTXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIk1haW50YWluIGNvdW50ZXJzIGZvciBDT1AwIGFjY2Vzc2VzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNy1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyOTpjb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMwLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM4OmNvbmZpZyBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00NC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDU6Y29uZmlnIEtWTV9CT09LM1NfMzJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc18zMiBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI1LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI3LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjk6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJEZXRhaWxlZCB0aW1pbmcgZm9yIHRoZSBQOSBlbnRyeSBwb2ludFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QOF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVxcdGJvb2wgXFxcIkRldGFpbGVkIHRpbWluZyBmb3IgaHlwZXJ2aXNvciByZWFsLW1vZGUgY29kZSAoZm9yIFBPV0VSOClcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU2LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QTVVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJIeXBlcnZpc29yIFBlcmYgZXZlbnRzIGZvciBLVk0gQm9vazNzLUhWXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4My1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg0OmNvbmZpZyBLVk1fQk9PS0VfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg2LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgZXhpdCB0aW1pbmdcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTg6Y29uZmlnIEtWTV9FNTAwVjJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk5LVxcdGJvb2wgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMi1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjEzOmNvbmZpZyBLVk1fRTUwME1DXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cXHRib29sIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBFNTAwTUMvRTU1MDAvRTY1MDAgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjMwLVxcdGJvb2wgXFxcIktWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNDE6Y29uZmlnIEtWTV9YSUNTXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJLVk0gaW4ta2VybmVsIFhJQ1MgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1MC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjUxOmNvbmZpZyBLVk1fWElWRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcXFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1xcXCJcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiS1ZNIEd1ZXN0IHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTgyNj1zb3VyY2UgXFxcImFyY2gveDg2L3hlbi9LY29uZmlnXFxcIlxcbmFyY2gveDg2L0tjb25maWctODI3LVxcbmFyY2gveDg2L0tjb25maWc6ODI4OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTgyOS1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTMtXFxudmlydC9rdm0vS2NvbmZpZzo0OmNvbmZpZyBLVk1fQ09NTU9OXFxudmlydC9rdm0vS2NvbmZpZy01LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTM5PWNvbmZpZyBORUVEX0tWTV9ESVJUWV9SSU5HX1dJVEhfQklUTUFQXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxcbnZpcnQva3ZtL0tjb25maWc6NDM6Y29uZmlnIEtWTV9NTUlPXFxudmlydC9rdm0vS2NvbmZpZy00NC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNDUtXFxudmlydC9rdm0vS2NvbmZpZzo0Njpjb25maWcgS1ZNX0FTWU5DX1BGXFxudmlydC9rdm0vS2NvbmZpZy00Ny0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy00OS0jIFRvZ2dsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaXJlY3Qgbm90aWZpY2F0aW9uIGFuZCBiYXRjaCBqb2JcXG52aXJ0L2t2bS9LY29uZmlnOjUwOmNvbmZpZyBLVk1fQVNZTkNfUEZfU1lOQ1xcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9NTk9Y29uZmlnIEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjEtXFxudmlydC9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX1ZGSU9cXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTY1PWNvbmZpZyBIQVZFX0tWTV9JTlZBTElEX1dBS0VVUFNcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjctXFxudmlydC9rdm0vS2NvbmZpZzo2ODpjb25maWcgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNzAtXFxudmlydC9rdm0vS2NvbmZpZzo3MTpjb25maWcgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTczLVxcbnZpcnQva3ZtL0tjb25maWc6NzQ6Y29uZmlnIEtWTV9DT01QQVRcXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTkxPWNvbmZpZyBIQVZFX0tWTV9QTV9OT1RJRklFUlxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy05My1cXG52aXJ0L2t2bS9LY29uZmlnOjk0OmNvbmZpZyBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTk2LVxcbnZpcnQva3ZtL0tjb25maWc6OTc6Y29uZmlnIEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy05OS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy0xMDItXFxudmlydC9rdm0vS2NvbmZpZzoxMDM6Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6MzQuODAzNTUyMzMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ2NzI5MTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbiBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgY29yZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEtWTSBhbmQgS1ZNLVhlbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGVzZSB0d28gYXJlIGludGVydHdpbmVkLiBUaGUgcHJpbWFyeSBpbmRpY2F0b3IgaGVyZSBpcyB0aGUgY29uZmlnIHN5bWJvbHMsIGBLVk1gIGFuZCBgS1ZNX1hFTmAuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuXG5cbkFscmlnaHQsIGhlcmUncyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdHdlYWtlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb246IGBrdm1feGVuX3NoYXJlZF9pbmZvX2luaXRgLCBga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3RgLCBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZWAsIGBtYXhfZXZ0Y2huX3BvcnRgLCBgd2FpdF9wZW5kaW5nX2V2ZW50YCwgYGt2bV94ZW5fc2NoZWRvcF9wb2xsYCwgYGt2bV94ZW5faGNhbGxfc2NoZWRfb3BgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYGt2bV94ZW5faHlwZXJjYWxsYCwgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCwgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCwgYGt2bV94ZW5fZXZlbnRmZF9hc3NpZ25gLCBga3ZtX3hlbl9zZXRhdHRyX2V2dGNobmAsIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAsIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAuIFF1aXRlIGEgZmV3IVxuXG5JIG5lZWQgdG8gaG9tZSBpbiBvbiB0aGUgbW9yZSBjcml0aWNhbCBpbnRlZ3JhdGlvbiBwb2ludHMsIHNvIEknbGwgZm9jdXMgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCwgYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCwgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBrdm1feGVuX2h5cGVyY2FsbGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX3NldHVwX2V2dGNobmAsIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAsIGBrdm1feGVuX2V2ZW50ZmRfYXNzaWduYCwgYGt2bV94ZW5fc2V0YXR0cl9ldnRjaG5gLCBhbmQgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgaGVhcnQgb2YgdGhlIGludGVyYWN0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGV2ZW50IGluamVjdGlvbiwgaW50ZXJydXB0cywgdkNQVSBhdHRyaWJ1dGVzLCBoeXBlcmNhbGxzLCBldmVudCBjaGFubmVscywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5SaWdodCwgSSBzaG91bGQgZmlyc3QgZGV0ZXJtaW5lIGlmIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AgaXMgc3RhdGljIG9yIG5vdC4gS25vd2luZyB0aGF0IHdpbGwgc2hlZCBsaWdodCBvbiBpdHMgc2NvcGUgYW5kIHRoZSBuYXR1cmUgb2YgaXRzIGludGVyYWN0aW9ucy4gVGhpcyBzaG91bGQgc2V0IGEgY29udGV4dCBmb3IgbXkgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6NDMuMjcwODQ2NzIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDQ1MjEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTExNjkyPXN0YXRpYyBpbnQgdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE2LVxcdFxcdGlmIChrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3MTc6XFx0XFx0XFx0a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHModmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTYxOD12b2lkIGt2bV94ZW5faW5qZWN0X3ZjcHVfdmVjdG9yKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy02MzgtICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjYzOTp2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjQwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0yMD1pbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjE6dm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0yMi12b2lkIGt2bV94ZW5faW5qZWN0X3ZjcHVfdmVjdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MTUzPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTU3LVxcbmFyY2gveDg2L2t2bS94ZW4uaDoxNTg6c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTU5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6NDUuNjE1MzczMDkzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5MjEwNDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgc29tZXRoaW5nLiBUaGVzZSBmdW5jdGlvbnMsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBhbmQgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYC4uLiBub25lIG9mIHRoZW0gYXJlIGRlY2xhcmVkIHN0YXRpYy4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGl0IG1lYW5zIHRoZXkgYXJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zLCBpdCdzIHByZXR0eSBjbGVhciB0aGVzZSBhcmUgaW50ZWdyYWwgdG8gdGhlIEtWTS1YZW4gaW50ZWdyYXRpb24gbGF5ZXIsIGRlYWxpbmcgd2l0aCB0aGluZ3MgbGlrZSBldmVudCBpbmplY3Rpb24sIGludGVycnVwdCBoYW5kbGluZywgYXR0cmlidXRlIHNldHRpbmcgb24gdkNQVXMsIGh5cGVyY2FsbHMgYW5kIGV2ZW50IGNoYW5uZWwgbWFuYWdlbWVudC4gVGhlIGxhY2sgb2YgYHN0YXRpY2Agc3VnZ2VzdHMgdGhleSBhcmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgbGlrZWx5IGJ5IHRoZSBYZW4gc2lkZSwgcmlnaHQ/IEknZCBleHBlY3QgaW50ZXJuYWwgZnVuY3Rpb25zIGluIHRoYXQgc2NlbmFyaW8uIE1ha2VzIG1lIHdvbmRlciB3aGF0IHRoZSBkZXNpZ24gcmF0aW9uYWxlIHdhcyBoZXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIHRoZWlyIHVzZS4gTXkgbmV4dCBzdGVwPyBMZXQncyB0YWtlIGEgbG9vayBhdCBga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbmAgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoaXMgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwODksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6NTAuNDA3NDgwMjUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAzOTk2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fZXZlbnRmZF9hc3NpZ25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jPTIxMTQ9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0yMTYwLSAqL1xcbmFyY2gveDg2L2t2bS94ZW4uYzoyMTYxOnN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIxNjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0yMjkzPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMDktXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIzMTA6XFx0cmV0dXJuIGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oa3ZtLCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMxMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjIzOjUyLjcxMTQ4MjEzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI4OTMyOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0tWGVuIGludGVyYWN0aW9uLCBhbmQgSSdtIHNlZWluZyB0aGF0IGBrdm1feGVuX2V2ZW50ZmRfYXNzaWduYCBhbmQgYGt2bV94ZW5fc2V0YXR0cl9ldnRjaG5gIGFyZSBib3RoIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZS4gU3RhdGljIHN1Z2dlc3RzIHRoZXkncmUgbGlrZWx5IGludGVybmFsIGZ1bmN0aW9ucywgY29uZmluZWQgdG8gdGhlaXIgc3BlY2lmaWMgc291cmNlIGZpbGUgYW5kIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBJdCBpbXBsaWVzIGEgZGVncmVlIG9mIGVuY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGdvb2QgZm9yIG1vZHVsYXJpdHksIGFsdGhvdWdoIGl0IGFsc28gbWFrZXMgZXh0ZXJuYWwgYWNjZXNzIHRvIHRoZXNlIGZ1bmN0aW9ucyBpbXBvc3NpYmxlLCB3aGljaCBtaWdodCBvciBtaWdodCBub3QgYmUgYSBwcm9ibGVtIGRlcGVuZGluZyBvbiB0aGUgdXNlIGNhc2UuIE5vdywgZ2l2ZW4gdGhhdCBjb250ZXh0LCB0aGUgbmV4dCBsb2dpY2FsIGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uLCBpcyBga3ZtX3hlbl9odm1fc2V0X2F0dHJgLiBMZXQncyBzZWUgaG93IHRoYXQgb25lIGlzIGltcGxlbWVudGVkIGFuZCBpZiBpdCBtYWtlcyB1c2Ugb2YgZWl0aGVyIG9mIHRoZXNlIHR3byBzdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc4OSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjIzOjU2LjA0MDQyNjY0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzQ3Mzk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxMy1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUxNDpcXHRcXHRyID0ga3ZtX3hlbl9odm1fc2V0X2F0dHIoa3ZtLCBcXHUwMDI2eGhhKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxNS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz03MDE9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03NTktXFxuYXJjaC94ODYva3ZtL3hlbi5jOjc2MDppbnQga3ZtX3hlbl9odm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0yND1pbnQga3ZtX3hlbl92Y3B1X2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjU6aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0yNi1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjIzOjU4LjIxNzkwNTM4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIwMzIwODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0vWGVuIEhWTSBBdHRyaWJ1dGUgU2V0dGluZyoqXG5cbkFscmlnaHQsIHNvIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgaXNuJ3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gbW9yZSBkZXRhaWwuIFRoYXQgbWVhbnMgaXTigJlzIG5vdCBhcyBzaW1wbGUgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBmdW5jdGlvbidzIGR5bmFtaWMgbmF0dXJlIGlzIG1ha2luZyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgTU1VIGludmFsaWRhdGlvbiBzY2VuYXJpb3MuIFRoZSBub24tc3RhdGljIG5hdHVyZSBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGFzc3VtcHRpb25zIEkgY2FuIG1ha2UuXG5cbkxldCBtZSB0dXJuIG15IGF0dGVudGlvbiB0byBob3cgdGhpcyBpbXBhY3RzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBleHBsb3JlIGlzIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSSB3YW50IHRvIHNlZSBob3cgbWVtb3J5IHJhbmdlcyBhcmUgaW52YWxpZGF0ZWQgd2hlbiB0aGVzZSBIVk0gYXR0cmlidXRlcyBjaGFuZ2UsIHdoaWNoIG1pZ2h0IHVudmVpbCBjbHVlcyBhcyB0byB3aHkgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyBub24tc3RhdGljLiBQZXJoYXBzIHRoZSBkeW5hbWlzbSBhcmlzZXMgZnJvbSBoYW5kbGluZyBhIG5vbi1jb25zdGFudCBudW1iZXIgb3IgdHlwZSBvZiBNTVUgZW50cmllcy4gSSBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgdHdvIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUwMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjAyLjEzODIzMDc5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5Mjk4NDQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9NzcxPXZvaWQga3ZtX21tdV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTc5Ni1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjc5NzpzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzk4LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz04ODg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGt2bV9tbXVfbm90aWZpZXJfb3BzID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg5LVxcdC5pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0XFx0PSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQsXFxudmlydC9rdm0va3ZtX21haW4uYzo4OTA6XFx0LmludmFsaWRhdGVfcmFuZ2VfZW5kXFx0PSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODkxLVxcdC5jbGVhcl9mbHVzaF95b3VuZ1xcdD0ga3ZtX21tdV9ub3RpZmllcl9jbGVhcl9mbHVzaF95b3VuZyxcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9MTI3PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdwY19zZXEpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE0Ni1cXHQgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MTQ3OlxcdCAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTQ4LVxcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNDowNC4zMzEyMzg1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDkxMDY1NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtWTS9YZW4gSW50ZXJhY3Rpb24qKlxuXG5IbW0sIHRoaXMgZmVlbHMuLi4gKnN0YXRpYyouIFRoZXJlJ3MgYSBjZXJ0YWluIHJpZ2lkaXR5IGhlcmUgdGhhdCdzIG1ha2luZyBtZSB1bmVhc3kuIEl0J3MgbGlrZSBzdGFyaW5nIGF0IGEgc2luZ2xlIHBvaW50LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgdGhlIGR5bmFtaWMgaW50ZXJwbGF5LiBUaW1lIHRvIGRyaWxsIGRvd24uIExldCdzIHNlZS4uLiB3aGF0J3MgdGhlIGZpcnN0IG9idmlvdXMgcGxhY2UgdG8gbG9vayB3aGVuIGRlYWxpbmcgd2l0aCBLVk0gYW5kIFhlbiBpbnRlZ3JhdGlvbiwgZXNwZWNpYWxseSBpZiBzb21ldGhpbmcgZmVlbHMgc3RhbGxlZD8gUmlnaHQsIGBrdm1feGVuX3NldHVwX2V2dGNobmAuIFRoYXQgZXZlbnQgY2hhbm5lbCBzZXR1cCBpcyBhIGNyaXRpY2FsIGhhbmRzaGFrZSBwb2ludCBiZXR3ZWVuIHRoZSBoeXBlcnZpc29ycy4gVGhhdCdzIGdvdCB0byBiZSB0aGUgZmlyc3QgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbi4gSWYgdGhpbmdzIGFyZSBzdGF0aWMsIHRoaXMgaXMgdGhlIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIGluaXRpYWxseS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGlmIHRoZXJlJ3MgYW4gaXNzdWUgZHVyaW5nIHRoYXQgc3RhZ2UsIGV2ZXJ5dGhpbmcgZnVydGhlciBkb3duIHRoZSBsaW5lIHdpbGwgYmUgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQ5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjQ6MDkuODIyMzA2OTQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTg5OTk2MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fc2V0dXBfZXZ0Y2huXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pcnEuYz0yOTY9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzQ3LVxcdGNhc2UgS1ZNX0lSUV9ST1VUSU5HX1hFTl9FVlRDSE46XFxuYXJjaC94ODYva3ZtL2lycS5jOjM0ODpcXHRcXHRyZXR1cm4ga3ZtX3hlbl9zZXR1cF9ldnRjaG4oa3ZtLCBlLCB1ZSk7XFxuYXJjaC94ODYva3ZtL2lycS5jLTM0OS0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0yMDA0PXN0YXRpYyBpbnQgZXZ0Y2huX3NldF9mbihzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIwMTYtICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIwMTc6aW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjAxOC1cXHRcXHRcXHQgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MzQ9aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsXFxuYXJjaC94ODYva3ZtL3hlbi5oLTM1LVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uaDozNjppbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS94ZW4uaC0zNy1cXHRcXHRcXHQgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjEyLjQxMjMwNzk5MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ3MjM4NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbiBQb2ludHMqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCdzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIHBpY3R1cmU7IHRoZXJlJ3MgYSBkeW5hbWljIGludGVycGxheSBoYXBwZW5pbmcuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG1lY2hhbmlzbXMgd2hlcmUgS1ZNIGFuZCBYZW4gYXJlIGludGVyYWN0aW5nLiBUaGUga2V5IHN5bWJvbHMganVtcGluZyBvdXQgYXQgbWUgYXJlIHRoZXNlOiBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYGt2bV94ZW5faHlwZXJjYWxsYCwgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCwgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCwgYW5kIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBoZWFydCBvZiBob3cgZXZlbnRzLCBhdHRyaWJ1dGVzLCBoeXBlcmNhbGxzLCBhbmQgZXZlbnQgY2hhbm5lbCBtYW5hZ2VtZW50IGFyZSBiZWluZyBoYW5kbGVkIGluIHRoaXMgaHlicmlkIGVudmlyb25tZW50LlxuXG5Ob3csIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCB3ZSdyZSBkZWFsaW5nIHdpdGggYEtWTWAgYW5kIGBLVk1fWEVOYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBgS1ZNX1hFTmAgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHNldCBmb3IgdGhpcyBpbnRlZ3JhdGlvbiB0byBvY2N1cj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBhcmNoL3g4Ni9rdm0veGVuLmNgIGlzIGluZGVlZCBjb21waWxlZCBhbmQgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIG9ubHkgaWYgYENPTkZJR19LVk1fWEVOYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBjcnVjaWFsIGNoZWNrIHRvIGVuc3VyZSB3ZSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkIGhlcmUuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gdGhhdCBgS1ZNX1hFTmAgaXNuJ3QgYWNjaWRlbnRhbGx5IGRlcGVuZGVudCBvbiBhbm90aGVyIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTA5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjE4LjA1OTU1MDYyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MTg3MjU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZW5cXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS94ZW4udHh0PTYxPW9mIFVFRkkgcnVudGltZSBzZXJ2aWNlcyBpbXBsZW1lbnRlZCB2aWEgaHlwZXJjYWxscywgc2VlXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS94ZW4udHh0OjYyOmh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9oeXBlcmNhbGwveDg2XzY0L2luY2x1ZGUscHVibGljLHBsYXRmb3JtLmguaHRtbC5cXG4tLVxcbk1BSU5UQUlORVJTPTE0NTc1PU06XFx0RGF2aWQgV29vZGhvdXNlIFxcdTAwM2Nkd213MkBpbmZyYWRlYWQub3JnXFx1MDAzZVxcbk1BSU5UQUlORVJTOjE0NTc2Ok06XFx0UGF1bCBEdXJyYW50IFxcdTAwM2NwYXVsQHhlbi5vcmdcXHUwMDNlXFxuTUFJTlRBSU5FUlMtMTQ1NzctTTpcXHRTZWFuIENocmlzdG9waGVyc29uIFxcdTAwM2NzZWFuamNAZ29vZ2xlLmNvbVxcdTAwM2VcXG4tLVxcbk1BSU5UQUlORVJTPTI5NDUwPU06XFx0V2VpIExpdSBcXHUwMDNjd2VpLmxpdUBrZXJuZWwub3JnXFx1MDAzZVxcbk1BSU5UQUlORVJTOjI5NDUxOk06XFx0UGF1bCBEdXJyYW50IFxcdTAwM2NwYXVsQHhlbi5vcmdcXHUwMDNlXFxuTUFJTlRBSU5FUlMtMjk0NTItTDpcXHR4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2NwdWlkLmgtMjYtICogQXV0aG9yczpcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vY3B1aWQuaDoyNzogKiAgICBLZWlyIEZyYXNlciBcXHUwMDNja2VpckB4ZW4ub3JnXFx1MDAzZVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9jcHVpZC5oLTI4LSAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTEzPWt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxNDprdm0tJChDT05GSUdfS1ZNX1hFTilcXHQrPSB4ZW4ub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xNS1rdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbi0tXFxuYXJjaC94ODYvcGNpL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1BDSV9PTFBDKVxcdFxcdCs9IG9scGMub1xcbmFyY2gveDg2L3BjaS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19QQ0lfWEVOKVxcdFxcdCs9IHhlbi5vXFxuYXJjaC94ODYvcGNpL01ha2VmaWxlLTktXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTAtICpcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6OTE6ICogICAgICBBdWcuMjIsIDIwMDQgICAgRGF2aWQgQnJvbmF1Z2ggXFx1MDAzY2Ricm9uYXVnaEBsaW51eGJveGVuLm9yZ1xcdTAwM2VcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTItICogICAgICAgICAgICAgIC12MC42LjIgQWRkIGNoZWNrIG9uIEFDUEkgZGF0YSAobnVtX3NpZnIpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTUtICpcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6OTY6ICogICAgICBBdWcuMjEsIDIwMDQgICAgRGF2aWQgQnJvbmF1Z2ggXFx1MDAzY2Ricm9uYXVnaEBsaW51eGJveGVuLm9yZ1xcdTAwM2VcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTctICogICAgICAgICAgICAgIC12MC42LjEgRml4IGEgc2lsbHkgZXJyb3Igd2l0aCBzdGF0dXMgY2hlY2tpbmdcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTgtICpcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6OTk6ICogICAgICBBdWcuMjAsIDIwMDQgICAgRGF2aWQgQnJvbmF1Z2ggXFx1MDAzY2Ricm9uYXVnaEBsaW51eGJveGVuLm9yZ1xcdTAwM2VcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtMTAwLSAqICAgICAgICAgICAgICAtIHYwLjYgIENvcnJlY3QgYnJpZ2h0bmVzcyBjb250cm9scyB0byByZWZsZWN0IHJlYWxpdHlcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYz0xNDA9TU9EVUxFX0FVVEhPUihcXFwiSGlyb3NoaSBNaXVyYSBcXHUwMDNjbWl1cmFAZGEtY2hhLm9yZ1xcdTAwM2VcXFwiKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6MTQxOk1PRFVMRV9BVVRIT1IoXFxcIkRhdmlkIEJyb25hdWdoIFxcdTAwM2NkYnJvbmF1Z2hAbGludXhib3hlbi5vcmdcXHUwMDNlXFxcIik7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jLTE0Mi1NT0RVTEVfQVVUSE9SKFxcXCJIYXJhbGQgV2VsdGUgXFx1MDAzY2xhZm9yZ2VAZ251bW9ua3Mub3JnXFx1MDAzZVxcXCIpO1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0hWQ19JUlEpXFx0XFx0Kz0gaHZjX2lycS5vXFxuZHJpdmVycy90dHkvaHZjL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0hWQ19YRU4pXFx0XFx0Kz0gaHZjX3hlbi5vXFxuZHJpdmVycy90dHkvaHZjL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19IVkNfSVVDVilcXHRcXHQrPSBodmNfaXVjdi5vXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnPTIzMj1jb25maWcgWEVOX1BWQ0FMTFNfRlJPTlRFTkRcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWctMjM3LVxcdCAgRXhwZXJpbWVudGFsIGZyb250ZW5kIGZvciB0aGUgWGVuIFBWIENhbGxzIHByb3RvY29sXFxuZHJpdmVycy94ZW4vS2NvbmZpZzoyMzg6XFx0ICAoaHR0cHM6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9taXNjL3B2Y2FsbHMuaHRtbCkuIEl0XFxuZHJpdmVycy94ZW4vS2NvbmZpZy0yMzktXFx0ICBzZW5kcyBhIHNtYWxsIHNldCBvZiBQT1NJWCBjYWxscyB0byB0aGUgYmFja2VuZCwgd2hpY2hcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWc9MjQyPWNvbmZpZyBYRU5fUFZDQUxMU19CQUNLRU5EXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnLTI0Ni1cXHQgIEV4cGVyaW1lbnRhbCBiYWNrZW5kIGZvciB0aGUgWGVuIFBWIENhbGxzIHByb3RvY29sXFxuZHJpdmVycy94ZW4vS2NvbmZpZzoyNDc6XFx0ICAoaHR0cHM6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9taXNjL3B2Y2FsbHMuaHRtbCkuIEl0XFxuZHJpdmVycy94ZW4vS2NvbmZpZy0yNDgtXFx0ICBhbGxvd3MgUFYgQ2FsbHMgZnJvbnRlbmRzIHRvIHNlbmQgUE9TSVggY2FsbHMgdG8gdGhlIGJhY2tlbmQsXFxuLS1cXG5kcml2ZXJzL3hlbi9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEVOX1BWSFZNX0dVRVNUKVxcdFxcdCs9IHBsYXRmb3JtLXBjaS5vXFxuZHJpdmVycy94ZW4vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1NXSU9UTEJfWEVOKVxcdFxcdCs9IHN3aW90bGIteGVuLm9cXG5kcml2ZXJzL3hlbi9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfWEVOX01DRV9MT0cpXFx0XFx0Kz0gbWNlbG9nLm9cXG4tLVxcbmRyaXZlcnMveGVuL2FjcGkuYz0zOT1zdGF0aWMgaW50IHhlbl9hY3BpX25vdGlmeV9oeXBlcnZpc29yX3N0YXRlKHU4IHNsZWVwX3N0YXRlLFxcbi0tXFxuZHJpdmVycy94ZW4vYWNwaS5jLTU3LVxcdFxcdCBcXFwiVXNpbmcgbW9yZSB0aGFuICV1IGJpdHMgb2Ygc2xlZXAgY29udHJvbCB2YWx1ZXMgJSN4LyUjeCFcXFwiXFxuZHJpdmVycy94ZW4vYWNwaS5jOjU4OlxcdFxcdCBcXFwiRW1haWwgeGVuLWRldmVsQGxpc3RzLnhlbi5vcmcgLSBUaGFuayB5b3UuXFxcXG5cXFwiLCBcXFxcXFxuZHJpdmVycy94ZW4vYWNwaS5jLTU5LVxcdFxcdCBiaXRzLCB2YWxfYSwgdmFsX2IpKVxcbi0tXFxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvLzlwZnMuaC0xNC0gKiBTZWUgZG9jcy9taXNjLzlwZnMubWFya2Rvd24gaW4geGVuLmdpdCBmb3IgdGhlIGZ1bGwgc3BlY2lmaWNhdGlvbjpcXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vOXBmcy5oOjE1OiAqIGh0dHBzOi8veGVuYml0cy54ZW4ub3JnL2RvY3MvdW5zdGFibGUvbWlzYy85cGZzLmh0bWxcXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vOXBmcy5oLTE2LSAqL1xcbi0tXFxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvL3B2Y2FsbHMuaC0xNC0gKiBTZWUgZG9jcy9taXNjL3B2Y2FsbHMubWFya2Rvd24gaW4geGVuLmdpdCBmb3IgdGhlIGZ1bGwgc3BlY2lmaWNhdGlvbjpcXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vcHZjYWxscy5oOjE1OiAqIGh0dHBzOi8veGVuYml0cy54ZW4ub3JnL2RvY3MvdW5zdGFibGUvbWlzYy9wdmNhbGxzLmh0bWxcXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vcHZjYWxscy5oLTE2LSAqL1xcbi0tXFxubmV0LzlwL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX05FVF85UF9GRCkgKz0gOXBuZXRfZmQub1xcbm5ldC85cC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfOVBfWEVOKSArPSA5cG5ldF94ZW4ub1xcbm5ldC85cC9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfOVBfVklSVElPKSArPSA5cG5ldF92aXJ0aW8ub1xcbi0tXFxubmV0LzlwL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX05FVF85UF9VU0JHKSArPSA5cG5ldF91c2JnLm9cXG4tLVxcbm5ldC85cC9NYWtlZmlsZS0yMi05cG5ldF94ZW4tb2JqcyA6PSBcXFxcXFxubmV0LzlwL01ha2VmaWxlOjIzOlxcdHRyYW5zX3hlbi5vIFxcXFxcXG5uZXQvOXAvTWFrZWZpbGUtMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjIwLjYzMTQyOTU4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQwOTkyMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBYZW4gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBSaWdodCwgaXQgc2hvd3MgYGt2bS0kKENPTkZJR19LVk1fWEVOKSArPSB4ZW4ub2AuIFRoYXQgY29uZmlybXMgaXQsIGBLVk1fWEVOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiByZWxhdGVkIHRvIFhlbi4gQW5kIG9mIGNvdXJzZSwgYEtWTWAgaXMgdGhlIG1haW4gS1ZNIGNvbmZpZy5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi4gSSB0aGluayBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgIG1pZ2h0IGJlIHByb21pc2luZy4gSXTigJlzIGNhbGxlZCBmcm9tIGB2Y3B1X3J1bmAgdGhyb3VnaCBga3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHNgLiBgdmNwdV9ydW5gIGlzIGFic29sdXRlbHkgYSBob3QgcGF0aCBpbiBhbnkgS1ZNIHN5c3RlbSwgc28gdGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBIbW0sIGFjdHVhbGx5LCBgdmNwdV9ydW5gICppcyogdGhlIGhvdCBwYXRoLCBmdWxsIHN0b3AuIExldCdzIGRpZyBpbnRvIGBrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50c2Agc3BlY2lmaWNhbGx5LiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBiZXR0ZXIgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzIxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjI0Ljk3MjQyNDQzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4ODUyNDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9MTE1Njk9Ym9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTYwOS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE2MTA6XFx0aWYgKGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzKHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTYxMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTY5Mj1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxNS1cXHRcXHRrdm1fY2xlYXJfcmVxdWVzdChLVk1fUkVRX1VOQkxPQ0ssIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTcxNjpcXHRcXHRpZiAoa3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHModmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE3LVxcdFxcdFxcdGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmgtOTEtXFxuYXJjaC94ODYva3ZtL3hlbi5oOjkyOnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3hlbi5oLTkzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0xNTg9c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaC0xNjEtXFxuYXJjaC94ODYva3ZtL3hlbi5oOjE2MjpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ZW4uaC0xNjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNDoyNy4yNjA5NTkwMTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMxNDQ5Mzg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgS1ZNL1hlbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGdldCBhIGdvb2QgZGlzdHJpYnV0aW9uIG9mIHRlc3QgY292ZXJhZ2UsIHNwZWNpZmljYWxseSBhdm9pZGluZyBjb21tb24sIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBJIGtub3cgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBmcm9tIGB2Y3B1X3J1bmAsIHdoaWNoIGlzIGEgdG90YWwgaG90IHBhdGguIExpc3RpbmcgdGhhdCB3b3VsZG4ndCBiZSB2ZXJ5IGluZm9ybWF0aXZlLlxuXG5MZXQncyBzZWUuLi4gd2hhdCBhYm91dCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgPyBJdCdzIGNhbGxlZCBpbmRpcmVjdGx5IGZyb20gYGt2bV92Y3B1X2hhc19ldmVudHNgIGFuZCBga3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWRgLCBzbyBpdCdzIGFsc28gYSBob3QgcGF0aC4gTm90IGlkZWFsLlxuXG5IbW0sIGhvdyBhYm91dCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYD8gQWgsIHRoYXQncyBhbiBpb2N0bCBoYW5kbGVyISBUaGF0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZm9jdXMuIFdlIGFyZSBsb29raW5nIGZvciBnb29kIGZvY3VzIHN5bWJvbHMsIHNvIHdlJ3JlIG1ha2luZyBwcm9ncmVzcy5cblxuYGt2bV94ZW5faHlwZXJjYWxsYC4uLiB0aGF0J3MgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGh5cGVyY2FsbHMuIERlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC5cblxuVGhlbiwgdGhlcmUncyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgIGFuZCBga3ZtX3hlbl9zZXRfZXZ0Y2huYC5cblxuQW5kIGBrdm1feGVuX3NldHVwX2V2dGNobmAgaXMgY2FsbGVkIGZyb20gYGt2bV9zZXRfcm91dGluZ19lbnRyeWAuIFRoYXQgc2VlbXMgbGlrZSBhIHN0cm9uZyBmb2N1cyBzeW1ib2wuXG5cbmBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAgaXMgY2FsbGVkIGZyb20gYGt2bV94ZW5faHZtX3NldF9hdHRyYCBhbmQgYGt2bV94ZW5faHlwZXJjYWxsYCDigJMgYW5vdGhlciBnb29kIGZvY3VzIHN5bWJvbC5cblxuQW5kIGZpbmFsbHksIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgaXMgYW4gaW9jdGwgaGFuZGxlci4gQW5vdGhlciBzdHJvbmcgY2FuZGlkYXRlLlxuXG5SaWdodCwgc28sIEkgd2FudCB0byBleHBsb3JlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjQ6MzMuNTc1NDU3Mzk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQwODk3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pcnEuYz0yNDE9aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjY5LVxcbmFyY2gveDg2L2t2bS9pcnEuYzoyNzA6XFx0XFx0cmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFxcdTAwMjZlLVxcdTAwM2V4ZW5fZXZ0Y2huLCBrdm0pO1xcbmFyY2gveDg2L2t2bS9pcnEuYy0yNzEtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTI1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEzOS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQwOlxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0MS1cXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTgwMj1zdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE4MjItICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE4MjM6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTgyNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTk0OT1zdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk1My1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk1NDpcXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTU1LVxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk4Ny1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk4ODpcXHRcXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTg5LVxcdFxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MzM9dm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ZW4uaDozNDppbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmgtMzUtXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm0gKmt2bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjM1LjgxNjM2MDE5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE1NzYzOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLVk0tWGVuIEV2ZW50IENoYW5uZWwgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBgeGVuX3RpbWVyX2NhbGxiYWNrYCwgYW5kIGBrdm1feGVuX3NldF9ldnRjaG5gLiBUaGF0J3MgYSBzb2xpZCwgZm9jdXNlZCBzeW1ib2wgdG8gc3RhcnQgd2l0aC4gSXQncyB1c2VkIGluIGRpZmZlcmVudCBjb250ZXh0cyBidXQgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcuXG5cblNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2YgZXZlbnQgY2hhbm5lbCBtYW5pcHVsYXRpb24sIGxldCdzIGRyaWxsIGRvd24gZGVlcGVyLCBhbmQgdGFrZSBhIGxvb2sgYXQgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYC4gSSdtIGN1cmlvdXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGludGVycnVwdCBpdHNlbGYgaXMgc2VudCB0byB0aGUgaHlwZXJ2aXNvci4gVGhpcyBjb3VsZCBnaXZlIG1vcmUgY29udGV4dCBhYm91dCBob3cgdGhlIGZhc3QgcGF0aCB0aWVzIGluIHdpdGggdGhlIG92ZXJhbGwgaW50ZXJydXB0IGluamVjdGlvbiBtZWNoYW5pc20gaW4gdGhlIEtWTS9YZW4gSFZNIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc3NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjM5LjczMjEyNzMwNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1OTQ0NTgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2h2bV9ldnRjaG5fc2VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUyMi1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUyMzpcXHRcXHRyID0ga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoa3ZtLCBcXHUwMDI2dXhlKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUyNC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0yMDE3PWludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA2Ni0gKi9cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjA2NzppbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKnV4ZSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA2OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MjY9aW50IGt2bV94ZW5faHZtX2dldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xcbmFyY2gveDg2L2t2bS94ZW4uaDoyNzppbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKmV2dCk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTI4LWludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNDo0MS44OTE1Nzc0NzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzY3NjIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBDb2RlKipcblxuUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIGluIGBrdm1fYXJjaF92bV9pb2N0bGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGEgd2VsbC1kZWZpbmVkIGVudHJ5IHBvaW50IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBLVk0gdmlydHVhbCBtYWNoaW5lIGZyb20gdGhlIG91dHNpZGUuIFwiR29vZCBmb2N1cyBzeW1ib2wsXCIgeWVhaCwgdGhhdCBpbW1lZGlhdGVseSBwb2ludHMgbWUgdG8gdGhlIGFyZWEgSSdtIGludGVyZXN0ZWQgaW4uIE5vdywgd2hhdCdzIGdvaW5nIG9uICpzcGVjaWZpY2FsbHkqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAuIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gc2V0dGluZyBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gWGVuLUhWTSBndWVzdHMgd2l0aGluIEtWTS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBjb25maWd1cmVkLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb25maWd1cmF0aW9uIHRoZSBzeXN0ZW0gaXMgdGFyZ2V0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUyMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjQ1LjIxNTI1NjE1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3OTg2MjQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxMy1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUxNDpcXHRcXHRyID0ga3ZtX3hlbl9odm1fc2V0X2F0dHIoa3ZtLCBcXHUwMDI2eGhhKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxNS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz03MDE9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03NTktXFxuYXJjaC94ODYva3ZtL3hlbi5jOjc2MDppbnQga3ZtX3hlbl9odm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0yND1pbnQga3ZtX3hlbl92Y3B1X2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjU6aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0yNi1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjQ3LjM5NTEyMzY0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk0Mzk0MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIENhbGwqKlxuXG5BbHJpZ2h0LCB0aGF0J3MgaW50ZXJlc3RpbmcuIFRoZSBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLCB3aGljaCBpbW1lZGlhdGVseSBwcm92aWRlcyBhIHByZXR0eSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhhdCdzIGEgZ29vZCwgc3BlY2lmaWMgc3ltYm9sIHRvIGZvY3VzIG9uLiBJdCBkaXJlY3RzIHVzIHRvd2FyZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFZpcnR1YWwgTWFjaGluZSBJL08gY29udHJvbCBsYXllciwgd2hpY2ggaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSB0eXBlIG9mIGlzc3VlIHdlJ3JlIGxpa2VseSBjaGFzaW5nLiBOb3csIGJhc2VkIG9uIHdoZXJlIHRoaXMgaXMgdHJpZ2dlcmVkIGZyb20sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyB3ZSBjYWxsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLiBJJ20gZ29pbmcgdG8gbG9vayBkZWVwZXIgaW50byB0aGF0IHJvdXRpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjQ6NTAuNTg5NTIxMTg1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwNjEzNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NjE4OT1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYxMS1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjYxMjpcXHRcXHRyID0ga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHZjcHUsIFxcdTAwMjZ4dmEpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NjEzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTg2NT1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy05MTktXFxuYXJjaC94ODYva3ZtL3hlbi5jOjkyMDppbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbmFyY2gveDg2L2t2bS94ZW4uYy05MjEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oPTIyPXZvaWQga3ZtX3hlbl9pbmplY3RfdmNwdV92ZWN0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjM6aW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTI0LWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNDo1Mi45MDAxMzkzNTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzNjQ2NTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIEh5cGVyY2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC4gVGhhdCdzIGEgc29saWQgZW50cnkgcG9pbnQ7IGdvb2QsIGZvY3VzZWQgcGxhY2UgdG8gYmVnaW4gdHJhY2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGhlIHN0YW5kYXJkIHBhdGggZm9yIGEgbG90IG9mIEtWTSBpbnRlcmFjdGlvbiwgc28gaXQncyB0aGUgbmF0dXJhbCBmaXJzdCBzdGVwIHRvIGxvb2sgYXQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgcmVhY2hpbmcgdGhlIFhlbiBoeXBlcmNhbGwuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBga3ZtX3hlbl9oeXBlcmNhbGxgLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgdGhhdCBsZWQgdG8gdGhpcyBwYXRoLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmUgYmVoaW5kIGl0cyBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5PyBJIHdvbmRlciBob3cgbWFueSBkaWZmZXJlbnQgaHlwZXJjYWxscyB3ZSdsbCBmaW5kIGhlcmUsIG9yIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBzd2l0Y2hib2FyZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgS1ZNIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2l0aW9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODY4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjQ6NTguMzM2NjA5MzE2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgxNzA4OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5faHlwZXJjYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz0xMzc2PXN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3JfcHcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSxcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNDEwLVxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNDExOlxcdFxcdGlmIChrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKGt2bSkpIHtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTQxMi1cXHRcXHRcXHQvKiBvcmwgJDB4ODAwMDAwMDAsICVlYXggKi9cXG4tLVxcbmFyY2gveDg2L2t2bS90cmFjZS5oPTExND1UUkFDRV9FVkVOVChrdm1faHZfaHlwZXJjYWxsX2RvbmUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaC0xMzEtICovXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTMyOlRSQUNFX0VWRU5UKGt2bV94ZW5faHlwZXJjYWxsLFxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMy1cXHQgICAgVFBfUFJPVE8odTggY3BsLCB1bnNpZ25lZCBsb25nIG5yLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwNTA0PWludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDUwNS17XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTA2OlxcdGlmIChrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTA3OlxcdFxcdHJldHVybiBrdm1feGVuX2h5cGVyY2FsbCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1MDgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTI5OD1pbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEzMjgtXFx0ICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjEzMjk6XFx0aWYgKGt2bV94ZW5faHlwZXJjYWxsX2VuYWJsZWQoa3ZtKSkge1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xMzMwLVxcdFxcdHU4IGluc3RydWN0aW9uc1szMl07XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTM4ND1pbnQga3ZtX3hlbl9odm1fY29uZmlnKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2NvbmZpZyAqeGhjKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0MzAtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE0MzE6c3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQzMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQzNi1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQzNzpzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0Mzgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0NDMtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE0NDQ6XFx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5yZXN1bHQpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xNDQ1LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xNjg3PXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzAxLVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzAyOmludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MDMte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MzgtXFx0Y3BsID0ga3ZtX3g4Nl9jYWxsKGdldF9jcGwpKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzM5OlxcdHRyYWNlX2t2bV94ZW5faHlwZXJjYWxsKGNwbCwgaW5wdXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLCBwYXJhbXNbMl0sXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3NDAtXFx0XFx0XFx0XFx0cGFyYW1zWzNdLCBwYXJhbXNbNF0sIHBhcmFtc1s1XSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc4MC1cXHRpZiAoaGFuZGxlZClcXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTc4MTpcXHRcXHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCByKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc4Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzk2LVxcdHZjcHUtXFx1MDAzZWFyY2guY29tcGxldGVfdXNlcnNwYWNlX2lvID1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTc5NzpcXHRcXHRrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2U7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9Njc9c3RhdGljIGlubGluZSBib29sIGt2bV94ZW5faXNfaHlwZXJjYWxsX3BhZ2VfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIG1zcilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaC03NC1cXG5hcmNoL3g4Ni9rdm0veGVuLmg6NzU6c3RhdGljIGlubGluZSBib29sIGt2bV94ZW5faHlwZXJjYWxsX2VuYWJsZWQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS94ZW4uaC03Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MTAzPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX3BlbmRpbmdfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ZW4uaC0xMDQte1xcbmFyY2gveDg2L2t2bS94ZW4uaDoxMDU6XFx0aWYgKGt2bV94ZW5faHlwZXJjYWxsX2VuYWJsZWQodmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNiBrdm1feGVuX3RpbWVyX2VuYWJsZWQodmNwdSkpXFxuYXJjaC94ODYva3ZtL3hlbi5oLTEwNi1cXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnRpbWVyX3BlbmRpbmcpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oPTE0Mz1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3hlbl9pc19oeXBlcmNhbGxfcGFnZV9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgbXNyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oLTE0Ny1cXG5hcmNoL3g4Ni9rdm0veGVuLmg6MTQ4OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTQ5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0xODE9c3RhdGljIGlubGluZSBib29sIGt2bV94ZW5faXNfdHNjX2xlYWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZnVuY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTg2LVxcbmFyY2gveDg2L2t2bS94ZW4uaDoxODc6aW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTE4OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6MDAuNjE4MzIyNzI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzgwNzg3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0tWGVuIEh5cGVyY2FsbCBQYXRoKipcblxuT2theSwgc28gYGt2bV94ZW5faHlwZXJjYWxsYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIFhlbiBoeXBlcmNhbGxzIHdoZW4gdGhleSdyZSBjb21pbmcgZnJvbSB0aGUgS1ZNIGVtdWxhdGlvbiBsYXllci4gVGhhdCBtYWtlcyBzZW5zZSwgYGt2bV9lbXVsYXRlX2h5cGVyY2FsbGAgaXMgdGhlIGludGVybWVkaWFyeSwgY2FsbGVkIHdoZW5ldmVyIGEgZ3Vlc3QgbWFrZXMgYSBoeXBlcmNhbGwgaW5zdHJ1Y3Rpb24uIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsLCBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYSwgYSBkZWZpbml0ZSBcImhvdCBwYXRoXCIgZm9yIFhlbiBndWVzdHMuIEZvY3VzaW5nIG9uIGBrdm1feGVuX2h5cGVyY2FsbGAgaXRzZWxmIGlzIGEgZ29vZCBzdHJhdGVneSB0byB1bmRlcnN0YW5kIHRoZSBmbG93LlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgY2hlY2sgb3V0IGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBpbiB0aGlzIGNvbnRleHQ7IEkgc3VzcGVjdCBpdCBwbGF5cyBhIHNpZ25pZmljYW50IHJvbGUgaW4gdGhlIG92ZXJhbGwgWGVuIGh5cGVyY2FsbCBlbXVsYXRpb24gcHJvY2VzcywgYW5kIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBsb29rIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTcwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6MDQuODU2NDA0ODMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY5MDA1MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ZW4uYz02Mzk9dm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzAwLVxcbmFyY2gveDg2L2t2bS94ZW4uYzo3MDE6aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzAyLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0xOD1leHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2VfZGVmZXJyZWQga3ZtX3hlbl9lbmFibGVkO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0xOS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjA6aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTIxLXZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD00MD1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3hlbl9zd19lbmFibGVfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oLTQ4LVxcdCAgICB2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUuYWN0aXZlIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3hlbi5oOjQ5OlxcdCAgICB2Y3B1LVxcdTAwM2VhcmNoLnhlbi51cGNhbGxfdmVjdG9yIFxcdTAwMjZcXHUwMDI2IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ZW4uaC01MC1cXHRcXHRrdm1feGVuX2luamVjdF92Y3B1X3ZlY3Rvcih2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD04Mj1zdGF0aWMgaW5saW5lIGludCBrdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oLTg2LVxcdCAgICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLnVwY2FsbF92ZWN0b3IpXFxuYXJjaC94ODYva3ZtL3hlbi5oOjg3OlxcdFxcdHJldHVybiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmgtODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjA3LjEyNTQxNTU0NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTY2MTcxNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTS9YZW4gUGVyZm9ybWFuY2UgSG90c3BvdHMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IHRoZSBLVk0vWGVuIGludGVncmF0aW9uIGNvZGUgdG8gdW5kZXJzdGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBzZWUgdGhhdCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGlzIGNhbGxlZCBkZWVwbHkgd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMsIGZyb20gYGt2bV94ZW5faGFzX2ludGVycnVwdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2hhc19ldmVudHNgIGFuZCBga3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWRgLiBJdCdzIGRlZmluaXRlbHkgYSBob3QgcGF0aCwgc28gSSdsbCBleGNsdWRlIGl0IGZyb20gdGhlIHN5bWJvbHMgSSdtIGZvY3VzaW5nIG9uIHRvIGtlZXAgbXkgYW5hbHlzaXMgYWNjdXJhdGUuIEkgYWxzbyBuZWVkIHRvIGlnbm9yZSBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgIHNpbmNlIGl0J3MgYWxzbyBvbiB0aGUgY3JpdGljYWwgcGF0aCwgY2FsbGVkIGZyb20gYHZjcHVfcnVuYC5cblxuU28sIHRoYXQgbGVhdmVzIGEgbGlzdCBvZiBpbnRlcmVzdGluZyBmdW5jdGlvbnM6IGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBhbmQgYGt2bV94ZW5faHZtX3NldF9hdHRyYC4gSSdsbCB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGVzZS5cblxuTm93LCB3aGF0IGFib3V0IHRob3NlIHN0YXRpYyBmdW5jdGlvbnM/IEhtbSwgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAuIFRoZXkgKmFyZSogc3RhdGljLCBidXQgdGhleSBjb3VsZCBzdGlsbCBiZSBpbXBvcnRhbnQuIEknbGwgZmxhZyB0aGVtIGZvciBsYXRlciByZXZpZXcsIGVzcGVjaWFsbHkgaWYgdGhlIG1vcmUgb2J2aW91cyBmdW5jdGlvbnMgZG9uJ3QgeWllbGQgc3VmZmljaWVudCBpbmZvcm1hdGlvbi5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExvb2tzIGxpa2UgYEtWTWAgYW5kIGBLVk1fWEVOYC4gV2FpdCwgYEtWTV9YRU5gIGlzIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFJpZ2h0LCBpdCdzIHNwZWNpZmljIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBhcyBJIHdvdWxkIGV4cGVjdC4gTGV0J3Mgc2VlLi4uYW55IG90aGVyIGNvbmZpZ3MgaW52b2x2ZWQgaGVyZT8gTm8sIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgY29uZmluZWQgdG8gYGFyY2gveDg2L2t2bS94ZW4uY2AgYW5kIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC4gQW5kLCBvZiBjb3Vyc2UsIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBhY3RpdmUuIEdvb2QuIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUgaW50byB0aGVzZSBhcmVhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6MTYuMDkxNTg5NzMxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTExNDIxOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBmbmNhY2hlXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL01ha2VmaWxlLmt2bT0xMz1rdm0tJChDT05GSUdfSEFWRV9LVk1fRElSVFlfUklORykgKz0gJChLVk0pL2RpcnR5X3Jpbmcub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bToxNDprdm0tJChDT05GSUdfSEFWRV9LVk1fUEZOQ0FDSEUpICs9ICQoS1ZNKS9wZm5jYWNoZS5vXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtLTE1LWt2bS0kKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpICs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjE5LjAwMzAxOTI4NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMwNzk5NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKktWTSBQRk4gQ2FjaGUgRXhhbWluYXRpb24qKlxuXG5BbHJpZ2h0LCAqQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKi4uLiB0aGF0J3MgdGhlIGZsYWcgd2UgbmVlZCB0byBiZSBsb29raW5nIGF0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiT2theSwgZG9lcyBvdXIgYnVpbGQgc3lzdGVtIGFjdHVhbGx5ICpkZWZpbmUqIGBIQVZFX0tWTV9QRk5DQUNIRWA/IFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIEl0J3MgdGhlIG1vc3QgYmFzaWMgY2hlY2ssIHJlYWxseS4gVGhlIGNvbmZpZyBzeW1ib2wgZGljdGF0ZXMgdGhhdCBjZXJ0YWluIGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudCwgYnV0IGRvIHdlIGFjdHVhbGx5IGhhdmUgdGhlIGNvbXBpbGVyIHN1cHBvcnQgdG8gdXRpbGl6ZSBpdD9cIi4gTGV0J3MgZGVsdmUgaW50byB0aGF0IGFzcGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4MjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNToyMi4wMzM4MzA0MTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDQ3MDk5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhBVkVfS1ZNX1BGTkNBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9ND1jb25maWcgS1ZNX0NPTU1PTlxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMC1cXG52aXJ0L2t2bS9LY29uZmlnOjExOmNvbmZpZyBIQVZFX0tWTV9QRk5DQUNIRVxcbnZpcnQva3ZtL0tjb25maWctMTItICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6MjQuMTc4NTQ2ODAzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjg4MjU3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBIQVZFX0tWTV9QRk5DQUNIRWAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkndmUgc3R1bWJsZWQgdXBvbiBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBJdCdzIGEgaGlkZGVuIGNvbmZpZyBvcHRpb24sIG1lYW5pbmcgaXQncyBub3Qgc29tZXRoaW5nIHlvdSdkIHR5cGljYWxseSBmaW5kIHRocm91Z2ggYSBzdGFuZGFyZCBgbWFrZSBtZW51Y29uZmlnYCBvciBzaW1pbGFyIGludGVyZmFjZS4gSXQncyBhbHNvIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXMgd2hhdCdzICpzZWxlY3RpbmcqIHRoaXMgdGhpbmc/IEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWUgd2hlcmUgdGhpcyBvcHRpb24gaXMgYmVpbmcgcHVsbGVkIGluLiBHb3R0YSB0cmFjZSB0aGUgY29uZmlnIGhpZXJhcmNoeSB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3QuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIGFyZSB0ZWxsaW5nIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjA5OSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjI3LjM0NzM3NTY1OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNzU1ODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTI1LVxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjY6XFx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjctXFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjI5LjQ1NDk0MjczN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU2MzQyNzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFhlbiBFbXVsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBLVk1fWDg2YCwgd2hpY2ggbWVhbnMgYEtWTWAgYW5kIGBLVk1fWEVOYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGJlZW4gY2hhbmdlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5J3JlIGV4cG9zZWQuIEkndmUgcmUtZXhhbWluZWQgdGhlIGZvY3VzIHN5bWJvbHM6IGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBhbmQgYGt2bV94ZW5faHZtX3NldF9hdHRyYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueS4gSSBjaGVja2VkIGZvciBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBtYWNyb3MgYW5kIHN0YXRpYyBpbmxpbmVzIGFyZW4ndCBjcml0aWNhbCBpbiB0aGUgc2FtZSB3YXksIGJ1dCBJIG1hZGUgc3VyZSB0byBub3RlIHRoZW0uXG5cbkkgdGhlbiB2ZXJpZmllZCByZWFjaGFiaWxpdHkuIEkgc2VlIHRoYXQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCB3aXRoaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCAodHJpZ2dlcmVkIGJ5IGBLVk1fWEVOX0hWTV9FVlRDSE5fU0VORGApLiBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9zZXRfcm91dGluZ19lbnRyeWAgKHRyaWdnZXJlZCBieSBgS1ZNX1NFVF9HU0lfUk9VVElOR2ApLiBga3ZtX3hlbl9odm1fc2V0X2F0dHJgIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9hcmNoX3ZtX2lvY3RsYCAodHJpZ2dlcmVkIGJ5IGBLVk1fWEVOX0hWTV9TRVRfQVRUUmApLiBBbmQgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgaXMgZXhwb3NlZCB0aHJvdWdoIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCAodHJpZ2dlcmVkIGJ5IGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgKS4gRmluYWxseSwgYGt2bV94ZW5faHlwZXJjYWxsYCBpcyBleHBvc2VkIHRvIHRoZSBndWVzdCBleGVjdXRpb24uXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIHRvdWNoZXMgZnVuZGFtZW50YWwgYXNwZWN0cyBvZiBYZW4gZW11bGF0aW9uIHdpdGhpbiBLVk0uIEl0IGFkZHJlc3NlcyAzMi1iaXQvNjQtYml0IHNoYXJlZCBpbmZvIGhhbmRsaW5nLCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5LCBhbmQgcGZuY2FjaGUgaW52YWxpZGF0aW9uIOKAkyBjb3JlIGZ1bmN0aW9uYWxpdGllcy4gVGhlc2UgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCB1c2Vyc3BhY2UgYW5kIGd1ZXN0IGV4ZWN1dGlvbiwgc28gdGhpcyBwYXRjaCBuZWVkcyB0aG9yb3VnaCByZXZpZXcuXG5cbk15IGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMgaXMgY29tcGxldGUuIE5vdywgdGltZSB0byBldmFsdWF0ZSB0aGlzIGZ1cnRoZXIgYW5kIHJlcG9ydCBiYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQzMywiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6NDAuMDE4MzczMTQ1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MzY3OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9YRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1feGVuX3ZjcHVfc2V0X2F0dHJcIixcbiAgICBcImt2bV94ZW5faHlwZXJjYWxsXCIsXG4gICAgXCJrdm1feGVuX3NldF9ldnRjaG5fZmFzdFwiLFxuICAgIFwia3ZtX3hlbl9zZXR1cF9ldnRjaG5cIixcbiAgICBcImt2bV94ZW5faHZtX2V2dGNobl9zZW5kXCIsXG4gICAgXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIDMyLWJpdC82NC1iaXQgc2hhcmVkIGluZm8gaGFuZGxpbmcsIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnksIGFuZCBwZm5jYWNoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUgYW5kIFhlbiBlbXVsYXRpb24sIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9oeXBlcmNhbGxcIixcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1feGVuX3NldHVwX2V2dGNoblwiLFxuICAgIFwia3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRcIixcbiAgICBcImt2bV94ZW5faHZtX3NldF9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBlbXVsYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgMzItYml0LzY0LWJpdCBzaGFyZWQgaW5mbyBoYW5kbGluZywgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSwgYW5kIHBmbmNhY2hlIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZSBhbmQgWGVuIGVtdWxhdGlvbiwgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGFuZCBndWVzdCBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjQwLjE2Njc1MTA5MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1ODg3Mzg5MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNTo0MC4xNjc2MDE4ODFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQ1ODc4ODI0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhbGlnbm1lbnQgaXNzdWVzLCBhdG9taWMgb3BlcmF0aW9ucyBvbiBndWVzdCBtZW1vcnksIGFuZCBhIHNlcXVlbmNlIGNvdW50ZXIgZm9yIEd1ZXN0IFBhZ2UgQ2FjaGUgKEdQQykgaW4gS1ZNIFhlbiBlbXVsYXRpb24uIEl0IHJlcGxhY2VzIGBJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGVgIHdpdGggYSBtYWNybyBga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSlgLCBoYW5kbGVzIHVuYWxpZ25lZCBhdG9taWMgb3BlcmF0aW9ucyBpbiBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCB1c2VzIGBidHNsYCBmb3IgMzItYml0IGFsaWduZWQgZ3Vlc3QtY29udHJvbGxlZCBtZW1vcnkgaW4gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYW5kIGludHJvZHVjZXMgYGdwY19pbnZhbGlkYXRlX3NlcWAgdG8gc2VwYXJhdGUgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBmcm9tIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk3M2UwOGJkNjhmOGQ5NWUzMzRlZDVkNmJkYzk5NzM0YmVjNGRmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE3OjIzOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSkge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFxuIFx0XHR3Y19zZWNfaGkgPSBcdTAwMjZzaGluZm8tXHUwMDNld2Nfc2VjX2hpO1xuQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuIFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCB0aW1lKSAhPVxuIFx0XHQgICAgIHNpemVvZih2eC1cdTAwM2VydW5zdGF0ZV90aW1lcykpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHR1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbiBcdFx0dGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyxcbiBcdFx0XHRcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XG5AQCAtNjYxLDI4ICs2NjEsMzIgQEAgdm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHR9XG4gXG4gXHQvKiBOb3cgZ3BjLVx1MDAzZWtodmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqL1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuK1x0XHR2b2lkICp2aV9wZW5kaW5nX3NlbCA9IFx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbDtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwib3JxICUwLCAlMVxcblwiXG4tXHRcdFx0ICAgICBcIm5vdHEgJTBcXG5cIlxuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCJhbmRxICUwLCAlMlxcblwiXG4tXHRcdFx0ICAgICA6IFwiPXJcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcbi1cdFx0XHQgICAgICAgXCIrbVwiICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcIjBcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7XG4rXHRcdGlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXZpX3BlbmRpbmdfc2VsLCBzaXplb2YodTY0KSkpIHtcbitcdFx0XHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCxcbitcdFx0XHQgKiB3aGVyZSBldnRjaG5fcGVuZGluZ19zZWwgaXMgMzIgYml0cyB3aWRlIGFuZCB0aGlzXG4rXHRcdFx0ICogYnJhbmNoIGlzIHVucmVhY2hhYmxlIGFueXdheSAodGhpcyBpcyBpbnNpZGVcbitcdFx0XHQgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb25cbitcdFx0XHQgKiBJU19FTkFCTEVEKENPTkZJR182NEJJVCkpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCBcdTAwM2VcdTAwM2UgMzIsXG4rXHRcdFx0XHQgIHZpX3BlbmRpbmdfc2VsICsgNCk7XG4rXHRcdH1cbitcbitcdFx0YXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHUzMiBldnRjaG5fcGVuZGluZ19zZWwzMiA9IGV2dGNobl9wZW5kaW5nX3NlbDtcbiBcdFx0c3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4tXHRcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcIm9ybCAlMCwgJTFcXG5cIlxuLVx0XHRcdCAgICAgXCJub3RsICUwXFxuXCJcbi1cdFx0XHQgICAgIExPQ0tfUFJFRklYIFwiYW5kbCAlMCwgJTJcXG5cIlxuLVx0XHRcdCAgICAgOiBcIj1yXCIgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSxcbi1cdFx0XHQgICAgICAgXCIrbVwiICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcIjBcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTtcbitcdFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpO1xuK1x0XHRhdG9taWNfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH1cbiBcbkBAIC03MTMsNiArNzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJjKSAhPVxuIFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4gXG4rXHQvKlxuK1x0ICoga3ZtX2dwY19jaGVjaygpIGNoZWNrcyB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uLCBzbyBrdm0tXHUwMDNlc3JjdSBtdXN0IGJlXG4rXHQgKiBoZWxkLiBNb3N0IGNhbGxlcnMgaG9sZCBpdCBhbHJlYWR5LCBidXQgdGhpcyBpcyBhbHNvIHJlYWNoZWQgZnJvbVxuK1x0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcbitcdCAqIHdoZXJlIHZjcHVfZW50ZXJfZ3Vlc3QoKSBoYXMgYWxyZWFkeSBkcm9wcGVkIHRoZSB2Q1BVJ3MgU1JDVSBsb2NrLlxuK1x0ICogVGFraW5nIFNSQ1UgZG9lcyBub3Qgc2xlZXAsIHNvIGl0IGlzIHNhZmUgZXZlbiBpbiB0aGUgYXRvbWljIGNhc2VcbitcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXG4rXHQgKi9cbitcdGd1YXJkKHNyY3UpKFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuK1xuIFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHdoaWxlICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHtcbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTkyNiw2ICs5NDAsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRyID0gLUVOWElPO1xuK1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXG4rXHRcdFx0XHRicmVhaztcbitcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0ICAgICBkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTkzNSw2ICs5NTMsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRyID0gLUVOWElPO1xuK1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXG4rXHRcdFx0XHRicmVhaztcbitcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXG4gXHRcdFx0XHRcdFx0IGRhdGEtXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH1cbkBAIC05NzgsNyArMTAwMCw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdCAqIGFkZHJlc3MsIHRoYXQncyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxuIFx0XHQgKiB3aWxsIGNvcGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4rXHRcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRcdHN6ID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xuIFx0XHRlbHNlXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pO1xuQEAgLTE0MjIsMTYgKzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVx1MDAzZXhlbi51LmhjYWxsLnJlc3VsdCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4rc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxuK1x0aWYgKGhhc182NGJpdF9zaGluZm8pXG4gXHRcdHJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4tXHRcdFx0ICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKVxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpO1xuK31cbitcbitzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sXG4rXHRcdFx0ICAgICAgIGludCBucl9wb3J0cywgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbkBAIC0xNDQ2LDcgKzE0NzMsNyBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbiBcdHJldCA9IGZhbHNlO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuK1x0aWYgKGhhc182NGJpdF9zaGluZm8pIHtcbiBcdFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcdFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XG4gXHR9IGVsc2Uge1xuQEAgLTE0NjgsOSArMTQ5NSwxMCBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LFxuIFx0XHRcdFx0IHU2NCBwYXJhbSwgdTY0ICpyKVxuIHtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSk7XG4gXHRzdHJ1Y3Qgc2NoZWRfcG9sbCBzY2hlZF9wb2xsO1xuIFx0ZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuQEAgLTE0ODAsNyArMTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiBcdCAgICAhKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgXHUwMDI2IEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2ICFsb25nbW9kZSkge1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWlzXzY0Yml0KSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyO1xuIFxuIFx0XHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cbkBAIC0xNTI5LDcgKzE1NTcsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpKyspIHtcbi1cdFx0aWYgKHBvcnRzW2ldIFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHRpZiAocG9ydHNbaV0gXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHtcbiBcdFx0XHQqciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0xNTQyLDcgKzE1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXG4gXHRzZXRfYml0KHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnBvbGxfbWFzayk7XG4gXG4tXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbitcdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIGhhc182NGJpdF9zaGluZm8sIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuIFxuIFx0XHRpZiAoc2NoZWRfcG9sbC50aW1lb3V0KVxuQEAgLTE1NzcsMTIgKzE2MDUsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuK1x0XHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNDSEVET1BfeWllbGQ6XG5AQCAtMTYwMSw3ICsxNjI5LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbiAgICAgdWludDMyX3QgZmxhZ3M7XG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2MzMsNyArMTY2MSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cbiBcdFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcbiBcbi1cdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcbitcdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFx1MDAyNmUpKSB7XG4gXHRcdFx0KnIgPSAtRUZBVUxUO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTE2NzMsNyArMTcwMSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4rXHRib29sIGlzXzY0Yml0O1xuIFx0dTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTO1xuIFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4gXHR1OCBjcGw7XG5AQCAtMTY4Myw4ICsxNzExLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xuIFxuLVx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuLVx0aWYgKCFsb25nbW9kZSkge1xuK1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuK1x0aWYgKCFpc182NGJpdCkge1xuIFx0XHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xuIFx0XHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XG5AQCAtMTczMCwxNyArMTc1OCwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6XG4tXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuIFx0XHRcdFx0XHRcdHBhcmFtc1syXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XG4gXHRcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xuIFx0XHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xuLVx0XHRpZiAoIWxvbmdtb2RlKVxuK1x0XHRpZiAoIWlzXzY0Yml0KVxuIFx0XHRcdHRpbWVvdXQgfD0gcGFyYW1zWzFdIFx1MDAzY1x1MDAzYyAzMjtcbiBcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbkBAIC0xNzU1LDcgKzE3ODMsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbitcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gaXNfNjRiaXQ7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwucGFyYW1zWzBdID0gcGFyYW1zWzBdO1xuQEAgLTE3OTUsOCArMTgyMyw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuK1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MTIsNyArMTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFdSSVRFX09OQ0UoeGUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNldmNwdV9pZHgpO1xuIFx0fVxuIFxuLVx0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4MjMsMTYgKzE4NTIsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0XHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fbWFzaztcbiBcdFx0cG9ydF93b3JkX2JpdCA9IHhlLVx1MDAzZXBvcnQgLyA2NDtcbitcbitcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4rXG4rXHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuK1xuK1x0XHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xuK1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg0OCw2ICsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xuIFx0XHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cdTAwM2Vwb3J0KTtcbiBcdH0gZWxzZSB7XG4rXHRcdGJvb2wgb2xkO1xuK1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJ3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC0xODY0LDE5ICsxOTAyLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbitcdFx0LypcbitcdFx0ICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSxcbitcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuK1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4rXHRcdCAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy5cbitcdFx0ICpcbitcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4rXHRcdCAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaFxuK1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbitcdFx0ICogYWxpZ25lZC5cbitcdFx0ICovXG4rXHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCJidHNsXCIsXG4rXHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuK1x0XHRcdFx0ICAgICAgIGMsIFwiSXJcIiwgcG9ydF93b3JkX2JpdCk7XG4rXHRcdGlmICghb2xkKSB7XG4rXHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbitcbitcdFx0XHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cbitcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuK1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuK1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5NzQsNyArMjAyMiw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHQvKlxuLVx0ICogRG9uJ3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbitcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxuIFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0xOTgzLDggKzIwMzEsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4rXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbitcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjAyMSw3ICsyMDY5LDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcbiBcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIxMzEsNyArMjE3OSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHRjYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46XG4gXHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7XG4tXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0XHRcdGdvdG8gb3V0X25vZXZlbnRmZDsgLyogLUVJTlZBTCAqL1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIuZXZlbnRmZC5mZCk7XG5AQCAtMjI0OSw3ICsyMjk3LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGFcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKVxuIFx0XHRyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7XG4gXG4tXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuK1x0aWYgKCFwb3J0IHx8IHBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fREVBU1NJR04pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5oIGIvYXJjaC94ODYva3ZtL3hlbi5oXG5pbmRleCA1OWU2MTI4YTdiZDNjLi4zZThjOTMwNmViODk2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmhcbkBAIC0yNDgsNiArMjQ4LDExIEBAIHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8ge1xuICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqXHRcdFx0XHRcXFxuIFx0XHRcdFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIFxcXG4gXHRcdFx0XHRcdFx0ICAgZXZ0Y2huX3BlbmRpbmcpKVxuK1xuKy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJ3MgIWhhc18zMmJpdF9zaGluZm8oKS4gKi9cbisjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXG4rXHQoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UoKGt2bSktXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSlcbitcbiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7XG4gICAgIGludCBzdGF0ZTtcbiAgICAgdWludDY0X3Qgc3RhdGVfZW50cnlfdGltZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLmQ3NDA2YzEwZTA5MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTg1NCw2ICs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kO1xuIFxuK1x0dW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7XG4rXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7XG4gXHR1NjQgbWFudWFsX2RpcnR5X2xvZ19wcm90ZWN0O1xuIFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmQyNDdmNzQxZDFlM2YgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDYgKzgxMiwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4rXHRrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxKys7XG4rXG4rXHQvKlxuK1x0ICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGVcbitcdCAqIEdQQyBzZXF1ZW5jZSBpbmNyZWFzZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIGNvdW50XG4rXHQgKiBnb2VzIHRvIHplcm8uICBQYWlycyB3aXRoIHRoZSBzbXBfcm1iKCkgaW5cbitcdCAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLlxuK1x0ICovXG4rXHRzbXBfd21iKCk7XG4rXG4gXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHR3YWtlID0gIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpXG4rc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbitcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4gXHQgKi9cbiBcdGlmIChrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxuLVx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbi1cdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4rXHQgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuK1x0ICoga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4gXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcbi1cdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbitcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbitcdHJldHVybiBrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XG4gfVxuIFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdHZvaWQgKm9sZF9raHZhID0gKHZvaWQgKilQQUdFX0FMSUdOX0RPV04oKHVpbnRwdHJfdClncGMtXHUwMDNla2h2YSk7XG4gXHRrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuIFx0dm9pZCAqbmV3X2todmEgPSBOVUxMO1xuLVx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuK1x0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdGdwY19zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBncGNfc2VxKSk7XG4gXG4gXHRncGMtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0Z3BjLVx1MDAzZXBmbiA9IG5ld19wZm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNTo0MC4xNjc2MDM5OTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ1ODc4NTE3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNLVhlbiBQYXRjaCBBbmFseXNpczogU2FmZXR5IEZpcnN0KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIEtWTS1YZW4gcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBsZWFucyB0b3dhcmRzIGEgbG93LXJpc2sgcHJvZmlsZSwgZm9jdXNpbmcgb24gYWxpZ25tZW50IGZpeGVzLCBhdG9taWMgb3BlcmF0aW9uIGhhbmRsaW5nIG9uIGd1ZXN0IG1lbW9yeSwgYW5kIGEgR1BDIHNlcXVlbmNlIGNvdW50ZXIuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGBhcmNoL3g4Ni9rdm0veGVuLmNgLCBgYXJjaC94ODYva3ZtL3hlbi5oYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgYW5kIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC5cblxuVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AgcmV2b2x2ZXMgYXJvdW5kIGFkYXB0aW5nIHRvIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIHRoZSBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlYCBjaGVjayB3aXRoIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAuIFRoaXMgaW52b2x2ZXMgaW50cm9kdWNpbmcgYGt2bV9tYXhfZXZ0Y2huX3BvcnRgIGFuZCBgbWF4X2V2dGNobl9wb3J0YCB3aGljaCBkZXBlbmQgb24gYGhhc182NGJpdF9zaGluZm9gLiBGdXJ0aGVybW9yZSwgaXQncyBtb2RpZnlpbmcgaG93IHBlbmRpbmcgZXZlbnRzIGFyZSBpbmplY3RlZCBmb3IgNjQtYml0IGFsaWdubWVudCBhbmQgYXRvbWljIG9wZXJhdGlvbiBoYW5kbGluZy4gVGhlIHBhdGNoIGFsc28gYWRkcyBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGZvciBgZ3BhYCBhbmQgYGh2YWAuIFRoZSBgZ3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7YCBoYXMgYmVlbiBhZGRlZCBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIG5vdyB1c2VzIGBHRU5fQklOQVJZX1JNV2NjYCBmb3IgYml0IHRlc3RpbmcgZ3Vlc3QtY29udHJvbGxlZCBtZW1vcnksIGluc3RlYWQgb2YgdGhlIG9sZCBtZXRob2QuXG5cblRoZSBpbnRyb2R1Y3Rpb24gb2YgYGdwY19pbnZhbGlkYXRlX3NlcWAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AgaXMgaW1wb3J0YW50IGZvciBkZWNvdXBsaW5nIHRoZSBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGZyb20gdGhlIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIFRoaXMgaXMgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbG9naWMgZmxhdyByZWxhdGVkIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBHdWVzdCBQYWdlIENhY2hlIGFuZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBkZWx2ZSBkZWVwZXI6XG5cbiogICBUaGUgYWxpZ25tZW50IGNoZWNrcyBhZGRlZCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCAoZS5nLiwgYGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpYCkgYXJlIHN0YW5kYXJkIGVycm9yIHJldHVybnMuXG4qICAgVGhlIGFkanVzdG1lbnRzIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AgZGVhbCB3aXRoIGhhbmRsaW5nIHVuYWxpZ25lZCBhdG9taWMgb3BlcmF0aW9ucywgdXNpbmcgYGF0b21pYzY0X29yYCB3aGVuIGFsaWduZWQgYW5kIGBhdG9taWNfb3JgIHdpdGggYXBwcm9wcmlhdGUgc2hpZnRzIHdoZW4gdW5hbGlnbmVkLiBUaGlzIGxvb2tzIHNhZmUuXG4qICAgVGhlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgY2hhbmdlIHdpdGggYEdFTl9CSU5BUllfUk1XY2NgIGlzIGEgYml0IHRlc3QgYW5kIHNldCBvbiBndWVzdCBtZW1vcnkuIFRoZSBndWVzdCBvd25zIHRoaXMgbWVtb3J5LCBzbyB0aGlzIGlzIGV4cGVjdGVkLlxuKiAgIFRoZSBzZXF1ZW5jZSBjb3VudGVyIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgIGFkZHJlc3NlcyB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIG1lbW9yeSByZWFkIGZyb20gZ3Vlc3Qgc3BhY2UuXG5cblNwZWNpZmljYWxseSwgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIHRoZSByZWFkIG9mIGBvbmVzaG90YCBpbnRvIHRoZSBzdGFjayBhbmQgcG90ZW50aWFsbHkgaXRzIHN1YnNlcXVlbnQgdXNlIHdhcnJhbnRzIGZ1cnRoZXIgZXhhbWluYXRpb24uIFRoZXJlIGlzIGEgc2l6ZSBkaXNwYXJpdHkgY2hlY2sgYmFzZWQgb24gMzItYml0IHZzIDY0LWJpdCBndWVzdCwgYXMgaXQgbWF5IHJlYWQgZGlmZmVyZW50IHNpemVkIHN0cnVjdHMgZnJvbSBndWVzdCBtZW1vcnkuIEhvd2V2ZXIsIGFmdGVyIGNhcmVmdWxseSBjaGVja2luZyB0aGUgYGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyYCBhbmQgYHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXJgLCB0aGV5IGFyZSB0aGUgc2FtZSBzaXplLiBUaGVyZSBhcmUgY29tcGlsZS10aW1lIGNoZWNrcyBmb3IgdGhpcywgYW5kIHRoZSBjb2RlIGFwcGVhcnMgdG8gYmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBkaWZmZXJpbmcgZ3Vlc3QgYXJjaGl0ZWN0dXJlcyAoMzIgdnMgNjQgYml0KS4gVGhlIHN0cnVjdHVyZSBjb250YWlucyBhIHRpbWVvdXQgYW5kIGZsYWdzLCB3aGljaCBhcmUgdXNlZCBpbiBga3ZtX3hlbl9zdGFydF90aW1lcmAsIGFmdGVyIHRoZSByZWFkLiBBbGwgb2YgdGhlIGZpZWxkcyBhcmUgdXNlZCwgc28gdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkkndmUgYWxzbyBjaGVja2VkIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAsIHdoaWNoIGlzIGp1c3QgYSBtYWNybyByZXBsYWNlbWVudC4gVGhlIGNoYW5nZXMgdG8gYGt2bV94ZW5fc2NoZWRvcF9wb2xsYCwgd2hpY2ggaXMgY2hlY2tpbmcgYW5kIGhhbmRsaW5nIHRoZSAzMi82NCBiaXQgZGlmZmVyZW5jZXMgb2YgYSBzdHJ1Y3R1cmUsIGFyZSBjb3JyZWN0LlxuXG5JbiBzdW1tYXJ5LCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBUaGVyZSdzIG5vdGhpbmcgbmV3IGhlcmUgdGhhdCBJIGNhbiBzZWUgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIG9wZW4gdXAgc2VjdXJpdHkgaG9sZXMuXG5cbkkgd2lsbCB0aGVyZWZvcmUgbWFyayB0aGlzIHBhdGNoIGFzIHNhZmUsIHdpdGggbm8gbmVlZCBmb3IgS01TQU4gYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE1LCJPdXRwdXRUb2tlbnMiOjI1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNjowNC43NTU0NTk1MTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhbGlnbm1lbnQgaXNzdWVzLCBhdG9taWMgb3BlcmF0aW9ucyBvbiBndWVzdCBtZW1vcnksIGFuZCBhIHNlcXVlbmNlIGNvdW50ZXIgZm9yIEd1ZXN0IFBhZ2UgQ2FjaGUgKEdQQykgaW4gS1ZNIFhlbiBlbXVsYXRpb24uIEl0IHJlcGxhY2VzIGBJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGVgIHdpdGggYSBtYWNybyBga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSlgLCBoYW5kbGVzIHVuYWxpZ25lZCBhdG9taWMgb3BlcmF0aW9ucyBpbiBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCB1c2VzIGBidHNsYCBmb3IgMzItYml0IGFsaWduZWQgZ3Vlc3QtY29udHJvbGxlZCBtZW1vcnkgaW4gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYW5kIGludHJvZHVjZXMgYGdwY19pbnZhbGlkYXRlX3NlcWAgdG8gc2VwYXJhdGUgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBmcm9tIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGFsaWdubWVudCBpc3N1ZXMsIGF0b21pYyBvcGVyYXRpb25zIG9uIGd1ZXN0IG1lbW9yeSwgYW5kIGEgc2VxdWVuY2UgY291bnRlciBmb3IgR3Vlc3QgUGFnZSBDYWNoZSAoR1BDKSBpbiBLVk0gWGVuIGVtdWxhdGlvbi4gSXQgcmVwbGFjZXMgYElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZWAgd2l0aCBhIG1hY3JvIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAsIGhhbmRsZXMgdW5hbGlnbmVkIGF0b21pYyBvcGVyYXRpb25zIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIHVzZXMgYGJ0c2xgIGZvciAzMi1iaXQgYWxpZ25lZCBndWVzdC1jb250cm9sbGVkIG1lbW9yeSBpbiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBhbmQgaW50cm9kdWNlcyBgZ3BjX2ludmFsaWRhdGVfc2VxYCB0byBzZXBhcmF0ZSBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGZyb20gTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsvw2z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 16:32:49 +0000 UTC FinishedAt: 2026-08-12 17:26:06 +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", "KVM_XEN" ], "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", "KVM_XEN" ], "series_id": "9dfd5081-ff52-4d59-bde4-bacb7fe02a8d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_xen_vcpu_set_attr", "kvm_xen_hypercall", "kvm_xen_set_evtchn_fast", "kvm_xen_setup_evtchn", "kvm_xen_hvm_evtchn_send", "kvm_xen_hvm_set_attr" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHlwZXJjYWxsJiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0X2V2dGNobl9mYXN0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0dXBfZXZ0Y2huJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX2V2dGNobl9zZW5kJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGFsaWdubWVudCBpc3N1ZXMsIGF0b21pYyBvcGVyYXRpb25zIG9uIGd1ZXN0IG1lbW9yeSwgYW5kIGEgc2VxdWVuY2UgY291bnRlciBmb3IgR3Vlc3QgUGFnZSBDYWNoZSAoR1BDKSBpbiBLVk0gWGVuIGVtdWxhdGlvbi4gSXQgcmVwbGFjZXMgYElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZWAgd2l0aCBhIG1hY3JvIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAsIGhhbmRsZXMgdW5hbGlnbmVkIGF0b21pYyBvcGVyYXRpb25zIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIHVzZXMgYGJ0c2xgIGZvciAzMi1iaXQgYWxpZ25lZCBndWVzdC1jb250cm9sbGVkIG1lbW9yeSBpbiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBhbmQgaW50cm9kdWNlcyBgZ3BjX2ludmFsaWRhdGVfc2VxYCB0byBzZXBhcmF0ZSBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGZyb20gTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBlbXVsYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgMzItYml0LzY0LWJpdCBzaGFyZWQgaW5mbyBoYW5kbGluZywgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSwgYW5kIHBmbmNhY2hlIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZSBhbmQgWGVuIGVtdWxhdGlvbiwgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4OTczZTA4YmQ2OGY4ZDk1ZTMzNGVkNWQ2YmRjOTk3MzRiZWM0ZGYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTc6MjM6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC03Miw3ICYjNDM7NzIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3YykgIT0gMHhjMDApO1xuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2Nfc2VjX2hpKSAhPSAweGMwYyk7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4mIzQzO1x0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4gXHRcdHdjX3NlY19oaSA9IFx1MDAyNnNoaW5mby1cdTAwM2V3Y19zZWNfaGk7XG5AQCAtMzkwLDcgJiM0MzszOTAsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuIFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCB0aW1lKSAhPVxuIFx0XHQgICAgIHNpemVvZih2eC1cdTAwM2VydW5zdGF0ZV90aW1lcykpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4mIzQzO1x0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2LVx1MDAzZWt2bSkpIHtcbiBcdFx0dXNlcl9sZW4gPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XG4gXHRcdHRpbWVzX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sXG4gXHRcdFx0XHQgICAgIHN0YXRlX2VudHJ5X3RpbWUpO1xuQEAgLTY2MSwyOCAmIzQzOzY2MSwzMiBAQCB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdH1cbiBcbiBcdC8qIE5vdyBncGMtXHUwMDNla2h2YSBpcyBhIHZhbGlkIGtlcm5lbCBhZGRyZXNzIGZvciB0aGUgdmNwdV9pbmZvICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuJiM0MztcdFx0dm9pZCAqdmlfcGVuZGluZ19zZWwgPSBcdTAwMjZ2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWw7XG4gXG4tXHRcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcJiMzNDtvcnEgJTAsICUxXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICBcJiMzNDtub3RxICUwXFxuXCYjMzQ7XG4tXHRcdFx0ICAgICBMT0NLX1BSRUZJWCBcJiMzNDthbmRxICUwLCAlMlxcblwmIzM0O1xuLVx0XHRcdCAgICAgOiBcJiMzNDs9clwmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcbi1cdFx0XHQgICAgICAgXCYjMzQ7JiM0MzttXCYjMzQ7ICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcJiMzNDsmIzQzO21cJiMzNDsgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcJiMzNDswXCYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpKTtcbiYjNDM7XHRcdGlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXZpX3BlbmRpbmdfc2VsLCBzaXplb2YodTY0KSkpIHtcbiYjNDM7XHRcdFx0YXRvbWljNjRfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LFxuJiM0MztcdFx0XHQgKiB3aGVyZSBldnRjaG5fcGVuZGluZ19zZWwgaXMgMzIgYml0cyB3aWRlIGFuZCB0aGlzXG4mIzQzO1x0XHRcdCAqIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBhbnl3YXkgKHRoaXMgaXMgaW5zaWRlXG4mIzQzO1x0XHRcdCAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvblxuJiM0MztcdFx0XHQgKiBJU19FTkFCTEVEKENPTkZJR182NEJJVCkpLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0YXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsIFx1MDAzZVx1MDAzZSAzMixcbiYjNDM7XHRcdFx0XHQgIHZpX3BlbmRpbmdfc2VsICYjNDM7IDQpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGF0b21pYzY0X2FuZG5vdChldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopXHUwMDI2di1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xuIFx0XHRXUklURV9PTkNFKHZpLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4gXHR9IGVsc2Uge1xuLVx0XHR1MzIgZXZ0Y2huX3BlbmRpbmdfc2VsMzIgPSBldnRjaG5fcGVuZGluZ19zZWw7XG4gXHRcdHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuIFxuLVx0XHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXCYjMzQ7b3JsICUwLCAlMVxcblwmIzM0O1xuLVx0XHRcdCAgICAgXCYjMzQ7bm90bCAlMFxcblwmIzM0O1xuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCYjMzQ7YW5kbCAlMCwgJTJcXG5cJiMzNDtcbi1cdFx0XHQgICAgIDogXCYjMzQ7PXJcJiMzNDsgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSxcbi1cdFx0XHQgICAgICAgXCYjMzQ7JiM0MzttXCYjMzQ7ICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcJiMzNDsmIzQzO21cJiMzNDsgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcJiMzNDswXCYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwzMikpO1xuJiM0MztcdFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpO1xuJiM0MztcdFx0YXRvbWljX2FuZG5vdChldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopXHUwMDI2di1cdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xuIFx0XHRXUklURV9PTkNFKHZpLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4gXHR9XG4gXG5AQCAtNzEzLDYgJiM0Mzs3MTcsMTYgQEAgaW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XG4gXHRcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLVx1MDAzZXNyY3UgbXVzdCBiZVxuJiM0MztcdCAqIGhlbGQuIE1vc3QgY2FsbGVycyBob2xkIGl0IGFscmVhZHksIGJ1dCB0aGlzIGlzIGFsc28gcmVhY2hlZCBmcm9tXG4mIzQzO1x0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcbiYjNDM7XHQgKiB3aGVyZSB2Y3B1X2VudGVyX2d1ZXN0KCkgaGFzIGFscmVhZHkgZHJvcHBlZCB0aGUgdkNQVSYjMzk7cyBTUkNVIGxvY2suXG4mIzQzO1x0ICogVGFraW5nIFNSQ1UgZG9lcyBub3Qgc2xlZXAsIHNvIGl0IGlzIHNhZmUgZXZlbiBpbiB0aGUgYXRvbWljIGNhc2VcbiYjNDM7XHQgKiB3aGljaCBpcyBoYW5kbGVkIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGd1YXJkKHNyY3UpKFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuJiM0MztcbiBcdHJlYWRfbG9ja19pcnFzYXZlKFx1MDAyNmdwYy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHR3aGlsZSAoIWt2bV9ncGNfY2hlY2soZ3BjLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpKSB7XG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC05MjYsNiAmIzQzOzk0MCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHRyID0gLUVOWElPO1xuJiM0MztcdFx0XHRpZiAoIUlTX0FMSUdORUQoZGF0YS1cdTAwM2V1LmdwYSwgc2l6ZW9mKHUzMikpKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0ICAgICBkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTkzNSw2ICYjNDM7OTUzLDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdHIgPSAtRU5YSU87XG4mIzQzO1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0XHQgZGF0YS1cdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbiBcdFx0fVxuQEAgLTk3OCw3ICYjNDM7MTAwMCw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdCAqIGFkZHJlc3MsIHRoYXQmIzM5O3MgYWN0dWFsbHkgT0suIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KClcbiBcdFx0ICogd2lsbCBjb3BlLlxuIFx0XHQgKi9cbi1cdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxuJiM0MztcdFx0aWYgKGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzeiA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyk7XG5AQCAtMTQyMiwxNiAmIzQzOzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVx1MDAzZXhlbi51LmhjYWxsLnJlc3VsdCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChib29sIGhhc182NGJpdF9zaGluZm8pXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSlcbiYjNDM7XHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcbiBcdFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIENPTVBBVF9FVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gfVxuIFxuLXN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcbi1cdFx0XHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbyxcbiYjNDM7XHRcdFx0ICAgICAgIGludCBucl9wb3J0cywgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbkBAIC0xNDQ2LDcgJiM0MzsxNDczLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxuIFx0XHRnb3RvIG91dF9yY3U7XG4gXG4gXHRyZXQgPSBmYWxzZTtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbiYjNDM7XHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdH0gZWxzZSB7XG5AQCAtMTQ2OCw5ICYjNDM7MTQ5NSwxMCBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4mIzQzO3N0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCxcbiBcdFx0XHRcdCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4mIzQzO1x0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXHUwMDNla3ZtKTtcbiBcdHN0cnVjdCBzY2hlZF9wb2xsIHNjaGVkX3BvbGw7XG4gXHRldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0cztcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtMTQ4MCw3ICYjNDM7MTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiBcdCAgICAhKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgXHUwMDI2IEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2ICFsb25nbW9kZSkge1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2ICFpc182NGJpdCkge1xuIFx0XHRzdHJ1Y3QgY29tcGF0X3NjaGVkX3BvbGwgc3AzMjtcbiBcbiBcdFx0LyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGNvbXBhdCBzdHJ1Y3QgZGVmaW5pdGlvbiBpcyBjb3JyZWN0ICovXG5AQCAtMTUyOSw3ICYjNDM7MTU1Nyw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiBcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNjaGVkX3BvbGwubnJfcG9ydHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChwb3J0c1tpXSBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdGlmIChwb3J0c1tpXSBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChoYXNfNjRiaXRfc2hpbmZvKSkge1xuIFx0XHRcdCpyID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuQEAgLTE1NDIsNyAmIzQzOzE1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXG4gXHRzZXRfYml0KHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnBvbGxfbWFzayk7XG4gXG4tXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbiYjNDM7XHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbiBcdFx0a3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTtcbiBcbiBcdFx0aWYgKHNjaGVkX3BvbGwudGltZW91dClcbkBAIC0xNTc3LDEyICYjNDM7MTYwNSwxMiBAQCBzdGF0aWMgdm9pZCBjYW5jZWxfZXZ0Y2huX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuJiM0MztcdFx0aWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBTQ0hFRE9QX3lpZWxkOlxuQEAgLTE2MDEsNyAmIzQzOzE2MjksNyBAQCBzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIge1xuICAgICB1aW50MzJfdCBmbGFncztcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4mIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2MzMsNyAmIzQzOzE2NjEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuIFx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9XG4gXHRcdFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSk7XG4gXG4tXHRcdGlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIHBhcmFtLCBcdTAwMjZvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6XG4mIzQzO1x0XHRpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgXHUwMDI2b25lc2hvdCwgaXNfNjRiaXQgPyBzaXplb2Yob25lc2hvdCkgOlxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyKSwgXHUwMDI2ZSkpIHtcbiBcdFx0XHQqciA9IC1FRkFVTFQ7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtMTY3Myw3ICYjNDM7MTcwMSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4mIzQzO1x0Ym9vbCBpc182NGJpdDtcbiBcdHU2NCBpbnB1dCwgcGFyYW1zWzZdLCByID0gLUVOT1NZUztcbiBcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xuIFx0dTggY3BsO1xuQEAgLTE2ODMsOCAmIzQzOzE3MTEsOCBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7XG4gXG4tXHRsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7XG4tXHRpZiAoIWxvbmdtb2RlKSB7XG4mIzQzO1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuJiM0MztcdGlmICghaXNfNjRiaXQpIHtcbiBcdFx0aW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7XG4gXHRcdHBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpO1xuQEAgLTE3MzAsMTcgJiM0MzsxNzU4LDE3IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQodmNwdSwgcGFyYW1zWzFdLCBcdTAwMjZyKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIF9fSFlQRVJWSVNPUl9zY2hlZF9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSxcbiYjNDM7XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4mIzQzO1x0XHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSxcbiBcdFx0XHRcdFx0XHRwYXJhbXNbMl0sIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgX19IWVBFUlZJU09SX3NldF90aW1lcl9vcDoge1xuIFx0XHR1NjQgdGltZW91dCA9IHBhcmFtc1swXTtcbiBcdFx0LyogSW4gMzItYml0IG1vZGUsIHRoZSA2NC1iaXQgdGltZW91dCBpcyBpbiB0d28gMzItYml0IHBhcmFtcy4gKi9cbi1cdFx0aWYgKCFsb25nbW9kZSlcbiYjNDM7XHRcdGlmICghaXNfNjRiaXQpXG4gXHRcdFx0dGltZW91dCB8PSBwYXJhbXNbMV0gXHUwMDNjXHUwMDNjIDMyO1xuIFx0XHRoYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuQEAgLTE3NTUsNyAmIzQzOzE3ODMsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbiYjNDM7XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwuY3BsID0gY3BsO1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTtcbkBAIC0xNzk1LDggJiM0MzsxODIzLDkgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl9jaGVja19wb2xsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcG9ydClcbiBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlO1xuJiM0MztcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cywgdmlfcGVuZGluZ19zZWxfb2ZzO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBwb3J0X3dvcmRfYml0O1xuIFx0Ym9vbCBraWNrX3ZjcHUgPSBmYWxzZTtcbkBAIC0xODEyLDcgJiM0MzsxODQxLDcgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0V1JJVEVfT05DRSh4ZS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2V2Y3B1X2lkeCk7XG4gXHR9XG4gXG4tXHRpZiAoeGUtXHUwMDNlcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuJiM0MztcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4MjMsMTYgJiM0MzsxODUyLDIzIEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKVxuIFx0XHRnb3RvIG91dF9yY3U7XG4gXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4mIzQzO1x0aWYgKGhhc182NGJpdF9zaGluZm8pIHtcbiBcdFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcdFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XG4gXHRcdG1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9tYXNrO1xuIFx0XHRwb3J0X3dvcmRfYml0ID0geGUtXHUwMDNlcG9ydCAvIDY0O1xuJiM0MztcbiYjNDM7XHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcdFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XG4gXHRcdG1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9tYXNrO1xuIFx0XHRwb3J0X3dvcmRfYml0ID0geGUtXHUwMDNlcG9ydCAvIDMyO1xuJiM0MztcbiYjNDM7XHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRlc3RfYW5kX3NldF9iaXQoKSBuZWVkcyA2NC1iaXQgYWxpZ25tZW50LCBidXQgdGhhdCYjMzk7cyBPSyAqL1xuJiM0MztcdFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIGV2dGNobl9wZW5kaW5nKSBcdTAwMjYgNyk7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTE4NDgsNiAmIzQzOzE4ODQsOCBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRyYyA9IC1FTk9UQ09OTjsgLyogTWFza2VkICovXG4gXHRcdGt2bV94ZW5fY2hlY2tfcG9sbGVyKHZjcHUsIHhlLVx1MDAzZXBvcnQpO1xuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdGJvb2wgb2xkO1xuJiM0MztcbiBcdFx0cmMgPSAxOyAvKiBEZWxpdmVyZWQgdG8gdGhlIGJpdG1hcCBpbiBzaGFyZWRfaW5mby4gKi9cbiBcdFx0LyogTm93IHN3aXRjaCB0byB0aGUgdkNQVSYjMzk7cyB2Y3B1X2luZm8gdG8gc2V0IHRoZSBpbmRleCBhbmQgcGVuZGluZ19zZWwgKi9cbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTE4NjQsMTkgJiM0MzsxOTAyLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBFeHBsaWNpdGx5IHVzZSBhIDMyLWJpdCBidHNsIGluc3RlYWQgb2YgdGVzdF9hbmRfc2V0X2JpdCgpLFxuJiM0MztcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuJiM0MztcdFx0ICogY29udHJvbGxlZCBhbmQgb25seSByZXF1aXJlZCB0byBiZSAzMi1iaXQgYWxpZ25lZCwgc28gYVxuJiM0MztcdFx0ICogNjQtYml0IGFjY2VzcyBjb3VsZCBnZW5lcmF0ZSBhIHNwbGl0LWxvY2sgI0FDLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIE5vdGUsIHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBvblxuJiM0MztcdFx0ICogcGVuZGluZ19iaXRzIGFib3ZlOiB0aGF0IGlzIGluIHRoZSBwZXItVk0gc2hhcmVkX2luZm8sIHdoaWNoXG4mIzQzO1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbiYjNDM7XHRcdCAqIGFsaWduZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCYjMzQ7YnRzbFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgJiM0MzsgdmlfcGVuZGluZ19zZWxfb2ZzKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgYywgXCYjMzQ7SXJcJiMzNDssIHBvcnRfd29yZF9iaXQpO1xuJiM0MztcdFx0aWYgKCFvbGQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vIG5lZWQgZm9yIGNvbXBhdCBoYW5kbGluZyAqL1xuJiM0MztcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuJiM0MztcdFx0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpO1xuJiM0MztcbiYjNDM7XHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuJiM0MztcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuIFx0XHR9XG4gXG4gXHRcdC8qIEZvciB0aGUgcGVyLXZDUFUgbGFwaWMgdmVjdG9yLCBkZWxpdmVyIGl0IGFzIE1TSS4gKi9cbkBAIC0xOTc0LDcgJiM0MzsyMDIyLDcgQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcbiBcdC8qXG4tXHQgKiBEb24mIzM5O3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbiYjNDM7XHQgKiBEb24mIzM5O3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBrdm1fbWF4X2V2dGNobl9wb3J0KCkuXG4gXHQgKiBVc2Vyc3BhY2UgY2FuIGNvbmZpZ3VyZSB3aGF0IGV2ZXIgdGFyZ2V0cyBpdCBsaWtlczsgZXZlbnRzIGp1c3Qgd29uJiMzOTt0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0xOTgzLDggJiM0MzsyMDMxLDggQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqIGNhbiBiZSByZXN0b3JlZCAqaW5kZXBlbmRlbnRseSogb2Ygb3RoZXIgdGhpbmdzIGxpa2UgY3JlYXRpbmcgdkNQVXMsXG4gXHQgKiB3aXRob3V0IGltcG9zaW5nIGFuIG9yZGVyaW5nIGRlcGVuZGVuY3kgb24gdXNlcnNwYWNlLiAgSW4gdGhpc1xuIFx0ICogcGFydGljdWxhciBjYXNlLCB0aGUgcHJvYmxlbWF0aWMgb3JkZXJpbmcgd291bGQgYmUgd2l0aCBzZXR0aW5nIHRoZVxuLVx0ICogWGVuICYjMzk7bG9uZyBtb2RlJiMzOTsgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4mIzQzO1x0ICogWGVuICYjMzk7bG9uZyBtb2RlJiMzOTsgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbiYjNDM7XHQgKiA0MDk2IGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy5cbiBcdCAqL1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIwMjEsNyAmIzQzOzIwNjksNyBAQCBpbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKlxuIFx0c3RydWN0IGt2bV94ZW5fZXZ0Y2huIGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCF1eGUtXHUwMDNlcG9ydCB8fCB1eGUtXHUwMDNlcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuJiM0MztcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIxMzEsNyAmIzQzOzIxNzksNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0Y2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOlxuIFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCkge1xuLVx0XHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4mIzQzO1x0XHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxuIFx0XHRcdFx0Z290byBvdXRfbm9ldmVudGZkOyAvKiAtRUlOVkFMICovXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0ZXZlbnRmZCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5ldmVudGZkLmZkKTtcbkBAIC0yMjQ5LDcgJiM0MzsyMjk3LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGFcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKVxuIFx0XHRyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7XG4gXG4tXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuJiM0MztcdGlmICghcG9ydCB8fCBwb3J0IFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX0RFQVNTSUdOKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaFxuaW5kZXggNTllNjEyOGE3YmQzYy4uM2U4YzkzMDZlYjg5NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ZW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oXG5AQCAtMjQ4LDYgJiM0MzsyNDgsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XG4gI2RlZmluZSBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTICg4ICpcdFx0XHRcdFxcXG4gXHRcdFx0XHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcbiBcdFx0XHRcdFx0XHQgICBldnRjaG5fcGVuZGluZykpXG4mIzQzO1xuJiM0MzsvKiBMYXRjaGVkIFZNLXdpZGUgbW9kZTsgdGhlIEtWTSBlcXVpdmFsZW50IG9mIFhlbiYjMzk7cyAhaGFzXzMyYml0X3NoaW5mbygpLiAqL1xuJiM0MzsjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXG4mIzQzO1x0KElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgUkVBRF9PTkNFKChrdm0pLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkpXG4mIzQzO1xuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcbiAgICAgaW50IHN0YXRlO1xuICAgICB1aW50NjRfdCBzdGF0ZV9lbnRyeV90aW1lO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggYWI4Y2ZhZWM4MmQzMS4uZDc0MDZjMTBlMDkwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtODU0LDYgJiM0Mzs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kO1xuIFxuJiM0MztcdHVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxO1xuJiM0MztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcztcbiBcdHU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggNDVlNzg0NDYyZWM2ZS4uZDI0N2Y3NDFkMWUzZiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC04MTIsNiAmIzQzOzgxMiwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4mIzQzO1x0a3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGVcbiYjNDM7XHQgKiBHUEMgc2VxdWVuY2UgaW5jcmVhc2UgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB0aGUgaW52YWxpZGF0ZSBjb3VudFxuJiM0MztcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxuJiM0MztcdCAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF93bWIoKTtcbiYjNDM7XG4gXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHR3YWtlID0gIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyAmIzQzOzEyNCw3IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxuIHtcbiBcdC8qXG4gXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcbkBAIC0xMzYsMjAgJiM0MzsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgbW11X2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4mIzQzO1x0ICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4gXHQgKi9cbiBcdGlmIChrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxuLVx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbi1cdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4mIzQzO1x0ICogZ3BjX2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbiYjNDM7XHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcbiBcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxuLVx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuJiM0MztcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0dm9pZCAqb2xkX2todmEgPSAodm9pZCAqKVBBR0VfQUxJR05fRE9XTigodWludHB0cl90KWdwYy1cdTAwM2VraHZhKTtcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICYjNDM7MTgxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRncGMtXHUwMDNldmFsaWQgPSBmYWxzZTtcbiBcbiBcdGRvIHtcbi1cdFx0bW11X3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICYjNDM7MjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbiYjNDM7XHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgZ3BjX3NlcSkpO1xuIFxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiBcdGdwYy1cdTAwM2VwZm4gPSBuZXdfcGZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV94ZW5fdmNwdV9zZXRfYXR0ciYjMzQ7LAogICAgJiMzNDtrdm1feGVuX2h5cGVyY2FsbCYjMzQ7LAogICAgJiMzNDtrdm1feGVuX3NldF9ldnRjaG5fZmFzdCYjMzQ7LAogICAgJiMzNDtrdm1feGVuX3NldHVwX2V2dGNobiYjMzQ7LAogICAgJiMzNDtrdm1feGVuX2h2bV9ldnRjaG5fc2VuZCYjMzQ7LAogICAgJiMzNDtrdm1feGVuX2h2bV9zZXRfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gWGVuIGVtdWxhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyAzMi1iaXQvNjQtYml0IHNoYXJlZCBpbmZvIGhhbmRsaW5nLCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5LCBhbmQgcGZuY2FjaGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBjb2RlIGFuZCBYZW4gZW11bGF0aW9uLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIGd1ZXN0IGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5NzNlMDhiZDY4ZjhkOTVlMzM0ZWQ1ZDZiZGM5OTczNGJlYzRkZjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoyMzoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC03Miw3ICYjNDM7NzIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTsKIAlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAKIAkJd2Nfc2VjX2hpID0gJmFtcDtzaGluZm8tJmd0O3djX3NlY19oaTsKQEAgLTM5MCw3ICYjNDM7MzkwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYykKIAlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9CiAJCSAgICAgc2l6ZW9mKHZ4LSZndDtydW5zdGF0ZV90aW1lcykpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IHYtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi0mZ3Q7a3ZtKSkgewogCQl1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJdGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywKIAkJCQkgICAgIHN0YXRlX2VudHJ5X3RpbWUpOwpAQCAtNjYxLDI4ICYjNDM7NjYxLDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KQogCX0KIAogCS8qIE5vdyBncGMtJmd0O2todmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyB2LSZndDtrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtJmd0O2t2bSkpIHsKIAkJc3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiYjNDM7CQl2b2lkICp2aV9wZW5kaW5nX3NlbCA9ICZhbXA7dmktJmd0O2V2dGNobl9wZW5kaW5nX3NlbDsKIAotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggJiMzNDtvcnEgJTAsICUxXG4mIzM0OwotCQkJICAgICAmIzM0O25vdHEgJTBcbiYjMzQ7Ci0JCQkgICAgIExPQ0tfUFJFRklYICYjMzQ7YW5kcSAlMCwgJTJcbiYjMzQ7Ci0JCQkgICAgIDogJiMzNDs9ciYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7CiYjNDM7CQlpZiAoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl2aV9wZW5kaW5nX3NlbCwgc2l6ZW9mKHU2NCkpKSB7CiYjNDM7CQkJYXRvbWljNjRfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LAomIzQzOwkJCSAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXMKJiM0MzsJCQkgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZQomIzQzOwkJCSAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvbgomIzQzOwkJCSAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuCiYjNDM7CQkJICovCiYjNDM7CQkJYXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsICZndDsmZ3Q7IDMyLAomIzQzOwkJCQkgIHZpX3BlbmRpbmdfc2VsICYjNDM7IDQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKikmYW1wO3YtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7CiAJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiAJfSBlbHNlIHsKLQkJdTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsOwogCQlzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiAKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICYjMzQ7b3JsICUwLCAlMVxuJiMzNDsKLQkJCSAgICAgJiMzNDtub3RsICUwXG4mIzM0OwotCQkJICAgICBMT0NLX1BSRUZJWCAmIzM0O2FuZGwgJTAsICUyXG4mIzM0OwotCQkJICAgICA6ICYjMzQ7PXImIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTsKJiM0MzsJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopJmFtcDt2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKTsKJiM0MzsJCWF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKSZhbXA7di0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTsKIAkJV1JJVEVfT05DRSh2aS0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKIAl9CiAKQEAgLTcxMyw2ICYjNDM7NzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiAJQlVJTERfQlVHX09OKHNpemVvZihyYykgIT0KIAkJICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwogCiYjNDM7CS8qCiYjNDM7CSAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLSZndDtzcmN1IG11c3QgYmUKJiM0MzsJICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb20KJiM0MzsJICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSwKJiM0MzsJICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUmIzM5O3MgU1JDVSBsb2NrLgomIzQzOwkgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZQomIzQzOwkgKiB3aGljaCBpcyBoYW5kbGVkIGJlbG93LgomIzQzOwkgKi8KJiM0MzsJZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpOwomIzQzOwogCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiAJd2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkgewogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC05MjYsNiAmIzQzOzk0MCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJciA9IC1FTlhJTzsKJiM0MzsJCQlpZiAoIUlTX0FMSUdORUQoZGF0YS0mZ3Q7dS5ncGEsIHNpemVvZih1MzIpKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiAJCQlyID0ga3ZtX2dwY19hY3RpdmF0ZSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJICAgICBkYXRhLSZndDt1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfSBlbHNlIHsKQEAgLTkzNSw2ICYjNDM7OTUzLDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJCQkJYnJlYWs7CiAJCQl9CiAKJiM0MzsJCQlyID0gLUVOWElPOwomIzQzOwkJCWlmICghSVNfQUxJR05FRChkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHUzMikpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKIAkJCXIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJCSBkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfQpAQCAtOTc4LDcgJiM0MzsxMDAwLDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSkKIAkJICogYWRkcmVzcywgdGhhdCYjMzk7cyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKQogCQkgKiB3aWxsIGNvcGUuCiAJCSAqLwotCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpCiYjNDM7CQlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSkpCiAJCQlzeiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJZWxzZQogCQkJc3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pOwpAQCAtMTQyMiwxNiAmIzQzOzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi0mZ3Q7eGVuLnUuaGNhbGwucmVzdWx0KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pCiAJCXJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7CiAJZWxzZQogCQlyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUzsKIH0KIAotc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAotCQkJICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbywKJiM0MzsJCQkgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9ICZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGU7CkBAIC0xNDQ2LDcgJiM0MzsxNDczLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAogCQlnb3RvIG91dF9yY3U7CiAKIAlyZXQgPSBmYWxzZTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCX0gZWxzZSB7CkBAIC0xNDY4LDkgJiM0MzsxNDk1LDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsCiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSB1NjQgcGFyYW0sIHU2NCAqcikKIHsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSk7CiAJc3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDsKIAlldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0czsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwpAQCAtMTQ4MCw3ICYjNDM7MTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAkgICAgISh2Y3B1LSZndDtrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgJmFtcDsgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7ICFsb25nbW9kZSkgewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgIWlzXzY0Yml0KSB7CiAJCXN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyOwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqLwpAQCAtMTUyOSw3ICYjNDM7MTU1Nyw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHBvcnRzW2ldICZndDs9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQlpZiAocG9ydHNbaV0gJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7CiAJCQkqciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTU0Miw3ICYjNDM7MTU3MCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAogCXNldF9iaXQodmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ucG9sbF9tYXNrKTsKIAotCWlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkgewomIzQzOwlpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHsKIAkJa3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTsKIAogCQlpZiAoc2NoZWRfcG9sbC50aW1lb3V0KQpAQCAtMTU3NywxMiAmIzQzOzE2MDUsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSAgIGludCBjbWQsIHU2NCBwYXJhbSwgdTY0ICpyKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTQ0hFRE9QX3BvbGw6Ci0JCWlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKQomIzQzOwkJaWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZmFsbHRocm91Z2g7CiAJY2FzZSBTQ0hFRE9QX3lpZWxkOgpAQCAtMTYwMSw3ICYjNDM7MTYyOSw3IEBAIHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7CiAgICAgdWludDMyX3QgZmxhZ3M7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsCiAJCQkJICBpbnQgdmNwdV9pZCwgdTY0IHBhcmFtLCB1NjQgKnIpCiB7CiAJc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgb25lc2hvdDsKQEAgLTE2MzMsNyAmIzQzOzE2NjEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAogCQlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9CiAJCQkgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTsKIAotCQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6CiYjNDM7CQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBpc182NGJpdCA/IHNpemVvZihvbmVzaG90KSA6CiAJCQkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIpLCAmYW1wO2UpKSB7CiAJCQkqciA9IC1FRkFVTFQ7CiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2NzMsNyAmIzQzOzE3MDEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IHRpbWVvdXQsCiAKIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JYm9vbCBsb25nbW9kZTsKJiM0MzsJYm9vbCBpc182NGJpdDsKIAl1NjQgaW5wdXQsIHBhcmFtc1s2XSwgciA9IC1FTk9TWVM7CiAJYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAJdTggY3BsOwpAQCAtMTY4Myw4ICYjNDM7MTcxMSw4IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSkKIAkJcmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7CiAKLQlsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7Ci0JaWYgKCFsb25nbW9kZSkgewomIzQzOwlpc182NGJpdCA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7CiYjNDM7CWlmICghaXNfNjRiaXQpIHsKIAkJaW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7CiAJCXBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTsKIAkJcGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpOwpAQCAtMTczMCwxNyAmIzQzOzE3NTgsMTcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6Ci0JCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLAogCQkJCQkJIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDoKLQkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSwKIAkJCQkJCXBhcmFtc1syXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7CiAJCXU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdOwogCQkvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqLwotCQlpZiAoIWxvbmdtb2RlKQomIzQzOwkJaWYgKCFpc182NGJpdCkKIAkJCXRpbWVvdXQgfD0gcGFyYW1zWzFdICZsdDsmbHQ7IDMyOwogCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgJmFtcDtyKTsKIAkJYnJlYWs7CkBAIC0xNzU1LDcgJiM0MzsxNzgzLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGhhbmRsZV9pbl91c2Vyc3BhY2U6CiAJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMOwotCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTsKJiM0MzsJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0OwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuY3BsID0gY3BsOwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTsKQEAgLTE3OTUsOCAmIzQzOzE4MjMsOSBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gJmFtcDtrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZTsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cywgdmlfcGVuZGluZ19zZWxfb2ZzOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQl1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcG9ydF93b3JkX2JpdDsKIAlib29sIGtpY2tfdmNwdSA9IGZhbHNlOwpAQCAtMTgxMiw3ICYjNDM7MTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCVdSSVRFX09OQ0UoeGUtJmd0O3ZjcHVfaWR4LCB2Y3B1LSZndDt2Y3B1X2lkeCk7CiAJfQogCi0JaWYgKHhlLSZndDtwb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChrdm0pKQomIzQzOwlpZiAoeGUtJmd0O3BvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJjID0gLUVXT1VMREJMT0NLOwpAQCAtMTgyMywxNiAmIzQzOzE4NTIsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAlpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKQogCQlnb3RvIG91dF9yY3U7CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCQltYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fbWFzazsKIAkJcG9ydF93b3JkX2JpdCA9IHhlLSZndDtwb3J0IC8gNjQ7CiYjNDM7CiYjNDM7CQl2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKIAkJcGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmc7CiAJCW1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9tYXNrOwogCQlwb3J0X3dvcmRfYml0ID0geGUtJmd0O3BvcnQgLyAzMjsKJiM0MzsKJiM0MzsJCXZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpOwomIzQzOwomIzQzOwkJLyogdGVzdF9hbmRfc2V0X2JpdCgpIG5lZWRzIDY0LWJpdCBhbGlnbm1lbnQsIGJ1dCB0aGF0JiMzOTtzIE9LICovCiYjNDM7CQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpICZhbXA7IDcpOwogCX0KIAogCS8qCkBAIC0xODQ4LDYgJiM0MzsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJcmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqLwogCQlrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS0mZ3Q7cG9ydCk7CiAJfSBlbHNlIHsKJiM0MzsJCWJvb2wgb2xkOwomIzQzOwogCQlyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqLwogCQkvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJiMzOTtzIHZjcHVfaW5mbyB0byBzZXQgdGhlIGluZGV4IGFuZCBwZW5kaW5nX3NlbCAqLwogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC0xODY0LDE5ICYjNDM7MTkwMiwyOSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCQkJZ290byBvdXRfcmN1OwogCQl9CiAKLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7Ci0JCQlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtJmd0O2todmE7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgJmFtcDt2Y3B1X2luZm8tJmd0O2V2dGNobl9wZW5kaW5nX3NlbCkpIHsKLQkJCQlXUklURV9PTkNFKHZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKLQkJCQlraWNrX3ZjcHUgPSB0cnVlOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0X3dvcmRfYml0LAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyAqKSZhbXA7dmNwdV9pbmZvLSZndDtldnRjaG5fcGVuZGluZ19zZWwpKSB7Ci0JCQkJV1JJVEVfT05DRSh2Y3B1X2luZm8tJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7Ci0JCQkJa2lja192Y3B1ID0gdHJ1ZTsKLQkJCX0KJiM0MzsJCS8qCiYjNDM7CQkgKiBFeHBsaWNpdGx5IHVzZSBhIDMyLWJpdCBidHNsIGluc3RlYWQgb2YgdGVzdF9hbmRfc2V0X2JpdCgpLAomIzQzOwkJICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LQomIzQzOwkJICogY29udHJvbGxlZCBhbmQgb25seSByZXF1aXJlZCB0byBiZSAzMi1iaXQgYWxpZ25lZCwgc28gYQomIzQzOwkJICogNjQtYml0IGFjY2VzcyBjb3VsZCBnZW5lcmF0ZSBhIHNwbGl0LWxvY2sgI0FDLgomIzQzOwkJICoKJiM0MzsJCSAqIE5vdGUsIHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBvbgomIzQzOwkJICogcGVuZGluZ19iaXRzIGFib3ZlOiB0aGF0IGlzIGluIHRoZSBwZXItVk0gc2hhcmVkX2luZm8sIHdoaWNoCiYjNDM7CQkgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXQKJiM0MzsJCSAqIGFsaWduZWQuCiYjNDM7CQkgKi8KJiM0MzsJCW9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggJiMzNDtidHNsJiMzNDssCiYjNDM7CQkJCSAgICAgICAqKHUzMiAqKShncGMtJmd0O2todmEgJiM0MzsgdmlfcGVuZGluZ19zZWxfb2ZzKSwKJiM0MzsJCQkJICAgICAgIGMsICYjMzQ7SXImIzM0OywgcG9ydF93b3JkX2JpdCk7CiYjNDM7CQlpZiAoIW9sZCkgewomIzQzOwkJCXN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLSZndDtraHZhOwomIzQzOwomIzQzOwkJCS8qIE5vIG5lZWQgZm9yIGNvbXBhdCBoYW5kbGluZyAqLwomIzQzOwkJCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpICE9CiYjNDM7CQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwomIzQzOwomIzQzOwkJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiYjNDM7CQkJa2lja192Y3B1ID0gdHJ1ZTsKIAkJfQogCiAJCS8qIEZvciB0aGUgcGVyLXZDUFUgbGFwaWMgdmVjdG9yLCBkZWxpdmVyIGl0IGFzIE1TSS4gKi8KQEAgLTE5NzQsNyAmIzQzOzIwMjIsNyBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAogCS8qCi0JICogRG9uJiMzOTt0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2YgbWF4X2V2dGNobl9wb3J0KCkuCiYjNDM7CSAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKS4KIAkgKiBVc2Vyc3BhY2UgY2FuIGNvbmZpZ3VyZSB3aGF0IGV2ZXIgdGFyZ2V0cyBpdCBsaWtlczsgZXZlbnRzIGp1c3Qgd29uJiMzOTt0CiAJICogYmUgZGVsaXZlcmVkIGlmL3doaWxlIHRoZSB0YXJnZXQgaXMgaW52YWxpZCwganVzdCBsaWtlIHVzZXJzcGFjZSBjYW4KIAkgKiBjb25maWd1cmUgTVNJcyB3aGljaCB0YXJnZXQgbm9uLWV4aXN0ZW50IEFQSUNzLgpAQCAtMTk4Myw4ICYjNDM7MjAzMSw4IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sCiAJICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcywKIAkgKiB3aXRob3V0IGltcG9zaW5nIGFuIG9yZGVyaW5nIGRlcGVuZGVuY3kgb24gdXNlcnNwYWNlLiAgSW4gdGhpcwogCSAqIHBhcnRpY3VsYXIgY2FzZSwgdGhlIHByb2JsZW1hdGljIG9yZGVyaW5nIHdvdWxkIGJlIHdpdGggc2V0dGluZyB0aGUKLQkgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIG1heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93IDQwOTYKLQkgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuCiYjNDM7CSAqIFhlbiAmIzM5O2xvbmcgbW9kZSYjMzk7IGZsYWcsIHdoaWNoIGNoYW5nZXMga3ZtX21heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93CiYjNDM7CSAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLgogCSAqLwogCiAJLyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqLwpAQCAtMjAyMSw3ICYjNDM7MjA2OSw3IEBAIGludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqCiAJc3RydWN0IGt2bV94ZW5fZXZ0Y2huIGU7CiAJaW50IHJldDsKIAotCWlmICghdXhlLSZndDtwb3J0IHx8IHV4ZS0mZ3Q7cG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCF1eGUtJmd0O3BvcnQgfHwgdXhlLSZndDtwb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovCkBAIC0yMTMxLDcgJiM0MzsyMTc5LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwKIAogCWNhc2UgRVZUQ0hOU1RBVF9pbnRlcmRvbWFpbjoKIAkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7Ci0JCQlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CQkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJCQlnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi8KIAkJfSBlbHNlIHsKIAkJCWV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpOwpAQCAtMjI0OSw3ICYjNDM7MjI5Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhCiAJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKQogCQlyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7CiAKLQlpZiAoIXBvcnQgfHwgcG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCFwb3J0IHx8IHBvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkYXRhLSZndDt1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaAppbmRleCA1OWU2MTI4YTdiZDNjLi4zZThjOTMwNmViODk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oCkBAIC0yNDgsNiAmIzQzOzI0OCwxMSBAQCBzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvIHsKICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqCQkJCVwKIAkJCQkgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXAogCQkJCQkJICAgZXZ0Y2huX3BlbmRpbmcpKQomIzQzOwomIzQzOy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJiMzOTtzICFoYXNfMzJiaXRfc2hpbmZvKCkuICovCiYjNDM7I2RlZmluZSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSBcCiYjNDM7CShJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBSRUFEX09OQ0UoKGt2bSktJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkpCiYjNDM7CiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7CiAgICAgaW50IHN0YXRlOwogICAgIHVpbnQ2NF90IHN0YXRlX2VudHJ5X3RpbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uZDc0MDZjMTBlMDkwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODU0LDYgJiM0Mzs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydDsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7CiAKJiM0MzsJdW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwogCXU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA0NWU3ODQ0NjJlYzZlLi5kMjQ3Zjc0MWQxZTNmIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTgxMiw2ICYjNDM7ODEyLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAKIAkvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi8KIAlzcGluX2xvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7CiYjNDM7CWt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGUKJiM0MzsJICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnQKJiM0MzsJICogZ29lcyB0byB6ZXJvLiAgUGFpcnMgd2l0aCB0aGUgc21wX3JtYigpIGluCiYjNDM7CSAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3dtYigpOwomIzQzOwogCWlmICghV0FSTl9PTl9PTkNFKCFrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSkKIAkJLS1rdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50OwogCXdha2UgPSAha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCmluZGV4IDcyOGQyYzFiNDg4YTguLjM2NTk2ODZiOTdjMjQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuYwpAQCAtMTI0LDcgJiM0MzsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSkKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdwY19zZXEpCiB7CiAJLyoKIAkgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMKQEAgLTEzNiwyMCAmIzQzOzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfcwogCSAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50CiAJICogaXMgbm90IHByb3RlY3RlZCBieSBncGMtJmd0O2xvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvCiAJICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLSZndDtsb2NrLCBhbmQKLQkgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC4KJiM0MzsJICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiAJICovCiAJaWYgKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmUKLQkgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgotCSAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlCiYjNDM7CSAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluCiYjNDM7CSAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZQogCSAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZQotCSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KJiM0MzsJICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgogCSAqLwogCXNtcF9ybWIoKTsKLQlyZXR1cm4ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTsKJiM0MzsJcmV0dXJuIGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU4LDcgJiM0MzsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAl2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLSZndDtraHZhKTsKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCWdwYy0mZ3Q7dmFsaWQgPSBmYWxzZTsKIAogCWRvIHsKLQkJbW11X3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQlncGNfc2VxID0gZ3BjLSZndDtrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcTsKIAkJc21wX3JtYigpOwogCiAJCXdyaXRlX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwpAQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAkJICogYXR0ZW1wdGluZyB0byByZWZyZXNoLgogCQkgKi8KIAkJV0FSTl9PTl9PTkNFKGdwYy0mZ3Q7dmFsaWQpOwotCX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSkpOwomIzQzOwl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIGdwY19zZXEpKTsKIAogCWdwYy0mZ3Q7dmFsaWQgPSB0cnVlOwogCWdwYy0mZ3Q7cGZuID0gbmV3X3BmbjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIFhlbiBFbXVsYXRpb24gUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGZpbGVzOiBgYXJjaC94ODYva3ZtL3hlbi5jYCwgYGFyY2gveDg2L2t2bS94ZW4uaGAsIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLCBgdmlydC9rdm0va3ZtX21haW4uY2AsIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBmb2N1c2VkIG9uIEtWTSYjMzk7cyBYZW4gZW11bGF0aW9uIGxheWVyLCB3aGljaCBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpUaGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgYSBmZXcga2V5IGNoYW5nZXMuIEZpcnN0LCB0aGVyZSYjMzk7cyB0aGlzIG5ldyBmdW5jdGlvbiwgYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYCwgd2hpY2ggc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSBvbGRlciBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGVgIGxvZ2ljLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgcmVmYWN0b3IgZm9yIGNsYXJpdHkgb3IgcG90ZW50aWFsIGZ1dHVyZSBmbGV4aWJpbGl0eS4gVGhlbiwgdGhleSYjMzk7cmUgdXNpbmcgYXRvbWljIG9wZXJhdGlvbnMgZm9yIGBldnRjaG5fcGVuZGluZ19zZWxgIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cygpYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24g4oCTIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvbmN1cnJlbmN5IGFuZCBpbnRlci1WTSBjb21tdW5pY2F0aW9uLCBzbyB0aGF0JiMzOTtzIGEgd2VsY29tZSBjaGFuZ2UuIFRoZSBhZGRpdGlvbiBvZiBgZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpO2AgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KClgIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSBhZGRpbmcgcHJvcGVyIHN5bmNocm9uaXphdGlvbi4KClRoZXJlIGFyZSBhbGlnbm1lbnQgY2hlY2tzIGFkZGVkIHdpdGhpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyKClgLCBhbHdheXMgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlIGFuZCBpdCBjaGFuZ2VzIGBtYXhfZXZ0Y2huX3BvcnQoKWAgdG8gdGFrZSBhIGJvb2xlYW4gYGhhc182NGJpdF9zaGluZm9gIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHN0cnVjdCBwb2ludGVyLCB3aGljaCBpcyBuaWNlIGFuZCBjb25jaXNlLiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoKWAgbm93IHVzZXMgYEdFTl9CSU5BUllfUk1XY2NgIGZvciBiaXQgc2V0dGluZy4gVGhpcyBpcyBpbnRlcmVzdGluZzogYSBsb3cgbGV2ZWwgY2hhbmdlIHRoYXQgY291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSBidXQgaXMgYWxzbyBhIHBvc3NpYmxlIHNvdXJjZSBvZiBlcnJvcnMuIExhc3RseSwgd2Ugc2VlIGEgbmV3IGBncGNfaW52YWxpZGF0ZV9zZXFgIGZpZWxkIGluIGBzdHJ1Y3Qga3ZtYCwgYW5kIHRoZXkmIzM5O3ZlIHVwZGF0ZWQgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKWAgYW5kIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoKWAgdG8gdXNlIGl0LCB3aGljaCBpcyByZWxhdGVkIHRvIE1NVSBpbnZhbGlkYXRpb24uCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gS1ZNIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFhlbiBlbXVsYXRpb24sIHNvIGRlZmluaXRlbHkgd29ydGggc29tZSBnb29kIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbnZvbHZlZCwgYW5kIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scywgb2YgY291cnNlLiBHaXZlbiB0aGUgZmlsZXMgdG91Y2hlZCwgYEtWTWAgYW5kIGBLVk1fWEVOYCBhcmUgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBiZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBkaWcgaW50byBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdCBgS1ZNX1hFTmAgaXMgaW5kZWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1hFTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1NgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEtWTV9YRU4gQ29uZmlndXJhdGlvbiBhbmQgSXRzIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNsdWUgcG9pbnRzIHVzIHRvd2FyZHMgYEtWTV9YRU5gIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEtWTSwgYSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGhpbiB0aGUgY29yZSBLVk0gY29kZSBpdHNlbGYuIE15IGF0dGVudGlvbiBpbW1lZGlhdGVseSB0dXJucyB0byBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIFRoaXMgZmlsZSBhbG1vc3QgY2VydGFpbmx5IGhvbGRzIGNyaXRpY2FsIGluZm9ybWF0aW9uIGFib3V0IGhvdyBLVk0gbWFuYWdlcyBwaHlzaWNhbCBwYWdlIG51bWJlcnMsIGFuZCB0aGUgJiMzNDtYRU4mIzM0OyBwYXJ0IG9mIHRoZSBjb25maWcgbWlnaHQgaW5mbHVlbmNlIGhvdyB0aGVzZSBwYWdlcyBhcmUgaGFuZGxlZCBvciBjYWNoZWQsIHBlcmhhcHMgd2l0aCBzcGVjaWZpYyBob29rcyBvciBjb21wYXRpYmlsaXR5IGxheWVycy4gVW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiByZXF1aXJlcyBleGFtaW5pbmcgdGhlIGxvZ2ljIHdpdGhpbiB0aGlzIGBwZm5jYWNoZS5jYCBmaWxlIGFuZCBzZWVpbmcgaG93IGBLVk1fWEVOYCBpcyB1c2VkIGFzIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBvciBjb25kaXRpb24gd2l0aGluIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcywgZnVuY3Rpb24gY2FsbHMsIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBpbmZsdWVuY2VkIGJ5IHRoaXMgc2V0dGluZyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEkgZXhwZWN0IGl0IGlzIGFmZmVjdGluZyB0aGUgS1ZNIGNvZGUgaW4gcmVnYXJkIHRvIHRoZSBYZW4gaHlwZXJ2aXNvciwgcGVyaGFwcyBmb3IgcGFnZSBvciBJL08gY2FjaGUgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZz0xNj1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjE4OmNvbmZpZyBLVk1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZy0zMC1cbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzozMTpjb25maWcgS1ZNX01JUFNfREVCVUdfQ09QMF9DT1VOVEVSU1xuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtNYWludGFpbiBjb3VudGVycyBmb3IgQ09QMCBhY2Nlc3Nlc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMS1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI3LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI5OmNvbmZpZyBLVk1fQk9PSzNTXzMyX0hBTkRMRVJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMC1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzMtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM1LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNy1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQzLVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQ0LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQ1OmNvbmZpZyBLVk1fQk9PSzNTXzMyXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfMzIgcHJvY2Vzc29yc1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEyNS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMjctXHRib29sXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEyOTpjb25maWcgS1ZNX0JPT0szU19IVl9QOV9USU1JTkdcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O0RldGFpbGVkIHRpbWluZyBmb3IgdGhlIFA5IGVudHJ5IHBvaW50XCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0MS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDhfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtEZXRhaWxlZCB0aW1pbmcgZm9yIGh5cGVydmlzb3IgcmVhbC1tb2RlIGNvZGUgKGZvciBQT1dFUjgpXCYjMzQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BNVVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O0h5cGVydmlzb3IgUGVyZiBldmVudHMgZm9yIEtWTSBCb29rM3MtSFZcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTgzLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE4NDpjb25maWcgS1ZNX0JPT0tFX0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVx0Ym9vbFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4Ni1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7RGV0YWlsZWQgZXhpdCB0aW1pbmdcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE5ODpjb25maWcgS1ZNX0U1MDBWMlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5OS1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwMHYyIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjEyLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIxMzpjb25maWcgS1ZNX0U1MDBNQ1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cdGJvb2wgXCYjMzQ7S1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgRTUwME1DL0U1NTAwL0U2NTAwIHByb2Nlc3NvcnNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjI4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMzAtXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI0MTpjb25maWcgS1ZNX1hJQ1NcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNDItXHRib29sIFwmIzM0O0tWTSBpbi1rZXJuZWwgWElDUyBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUwLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjI1MTpjb25maWcgS1ZNX1hJVkVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21pY3Jvd2F0dC9LY29uZmlnXCYjMzQ7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc6MjQ6Y29uZmlnIEtWTV9HVUVTVFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtLVk0gR3Vlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9ODI2PXNvdXJjZSBcJiMzNDthcmNoL3g4Ni94ZW4vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYvS2NvbmZpZy04MjctXG5hcmNoL3g4Ni9LY29uZmlnOjgyODpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTgyOS1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTMtXG52aXJ0L2t2bS9LY29uZmlnOjQ6Y29uZmlnIEtWTV9DT01NT05cbnZpcnQva3ZtL0tjb25maWctNS0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL0tjb25maWc9Mzk9Y29uZmlnIE5FRURfS1ZNX0RJUlRZX1JJTkdfV0lUSF9CSVRNQVBcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxudmlydC9rdm0vS2NvbmZpZzo0Mzpjb25maWcgS1ZNX01NSU9cbnZpcnQva3ZtL0tjb25maWctNDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNDUtXG52aXJ0L2t2bS9LY29uZmlnOjQ2OmNvbmZpZyBLVk1fQVNZTkNfUEZcbnZpcnQva3ZtL0tjb25maWctNDctICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTQ5LSMgVG9nZ2xlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpcmVjdCBub3RpZmljYXRpb24gYW5kIGJhdGNoIGpvYlxudmlydC9rdm0vS2NvbmZpZzo1MDpjb25maWcgS1ZNX0FTWU5DX1BGX1NZTkNcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTU5PWNvbmZpZyBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4tLVxudmlydC9rdm0vS2NvbmZpZy02MS1cbnZpcnQva3ZtL0tjb25maWc6NjI6Y29uZmlnIEtWTV9WRklPXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXG4tLVxudmlydC9rdm0vS2NvbmZpZz02NT1jb25maWcgSEFWRV9LVk1fSU5WQUxJRF9XQUtFVVBTXG4tLVxudmlydC9rdm0vS2NvbmZpZy02Ny1cbnZpcnQva3ZtL0tjb25maWc6Njg6Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZy03MC1cbnZpcnQva3ZtL0tjb25maWc6NzE6Y29uZmlnIEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctNzMtXG52aXJ0L2t2bS9LY29uZmlnOjc0OmNvbmZpZyBLVk1fQ09NUEFUXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XG4tLVxudmlydC9rdm0vS2NvbmZpZz05MT1jb25maWcgSEFWRV9LVk1fUE1fTk9USUZJRVJcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTkzLVxudmlydC9rdm0vS2NvbmZpZzo5NDpjb25maWcgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctOTYtXG52aXJ0L2t2bS9LY29uZmlnOjk3OmNvbmZpZyBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTk5LVxudmlydC9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU1NQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbiBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIGRpZmZlcmVuY2VzIGJldHdlZW4gS1ZNIGFuZCBLVk0tWGVuIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoZXJlIHRoZXNlIHR3byBhcmUgaW50ZXJ0d2luZWQuIFRoZSBwcmltYXJ5IGluZGljYXRvciBoZXJlIGlzIHRoZSBjb25maWcgc3ltYm9scywgYEtWTWAgYW5kIGBLVk1fWEVOYC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuCgpBbHJpZ2h0LCBoZXJlJiMzOTtzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0d2Vha2VkIGluIHRoaXMgY29uZmlndXJhdGlvbjogYGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdGAsIGBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdGAsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxfY29tcGxldGVfdXNlcnNwYWNlYCwgYG1heF9ldnRjaG5fcG9ydGAsIGB3YWl0X3BlbmRpbmdfZXZlbnRgLCBga3ZtX3hlbl9zY2hlZG9wX3BvbGxgLCBga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcGAsIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbmAsIGBrdm1feGVuX3NldGF0dHJfZXZ0Y2huYCwgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCwgYW5kIGBodmFfdG9fcGZuX3JldHJ5YC4gUXVpdGUgYSBmZXchCgpJIG5lZWQgdG8gaG9tZSBpbiBvbiB0aGUgbW9yZSBjcml0aWNhbCBpbnRlZ3JhdGlvbiBwb2ludHMsIHNvIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbmAsIGBrdm1feGVuX3NldGF0dHJfZXZ0Y2huYCwgYW5kIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gVGhlc2Ugc2VlbSB0byByZXByZXNlbnQgdGhlIGhlYXJ0IG9mIHRoZSBpbnRlcmFjdGlvbiwgcGFydGljdWxhcmx5IGFyb3VuZCBldmVudCBpbmplY3Rpb24sIGludGVycnVwdHMsIHZDUFUgYXR0cmlidXRlcywgaHlwZXJjYWxscywgZXZlbnQgY2hhbm5lbHMsIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4KClJpZ2h0LCBJIHNob3VsZCBmaXJzdCBkZXRlcm1pbmUgaWYgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCBpcyBzdGF0aWMgb3Igbm90LiBLbm93aW5nIHRoYXQgd2lsbCBzaGVkIGxpZ2h0IG9uIGl0cyBzY29wZSBhbmQgdGhlIG5hdHVyZSBvZiBpdHMgaW50ZXJhY3Rpb25zLiBUaGlzIHNob3VsZCBzZXQgYSBjb250ZXh0IGZvciBteSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0xMTY5Mj1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTYtXHRcdGlmIChrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyh2Y3B1KSlcbmFyY2gveDg2L2t2bS94ODYuYzoxMTcxNzpcdFx0XHRrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxOC1cbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9NjE4PXZvaWQga3ZtX3hlbl9pbmplY3RfdmNwdV92ZWN0b3Ioc3RydWN0IGt2bV92Y3B1ICp2KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy02MzgtICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6NjM5OnZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxuYXJjaC94ODYva3ZtL3hlbi5jLTY0MC17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTIwPWludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3hlbi5oOjIxOnZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS94ZW4uaC0yMi12b2lkIGt2bV94ZW5faW5qZWN0X3ZjcHVfdmVjdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTE1Mz1zdGF0aWMgaW5saW5lIGludCBrdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaC0xNTctXG5hcmNoL3g4Ni9rdm0veGVuLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTU5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA4OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmcuIFRoZXNlIGZ1bmN0aW9ucywgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCwgYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCwgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBrdm1feGVuX2h5cGVyY2FsbGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX3NldHVwX2V2dGNobmAsIGFuZCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLi4uIG5vbmUgb2YgdGhlbSBhcmUgZGVjbGFyZWQgc3RhdGljLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgaXQgbWVhbnMgdGhleSBhcmUgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbnMsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGVzZSBhcmUgaW50ZWdyYWwgdG8gdGhlIEtWTS1YZW4gaW50ZWdyYXRpb24gbGF5ZXIsIGRlYWxpbmcgd2l0aCB0aGluZ3MgbGlrZSBldmVudCBpbmplY3Rpb24sIGludGVycnVwdCBoYW5kbGluZywgYXR0cmlidXRlIHNldHRpbmcgb24gdkNQVXMsIGh5cGVyY2FsbHMgYW5kIGV2ZW50IGNoYW5uZWwgbWFuYWdlbWVudC4gVGhlIGxhY2sgb2YgYHN0YXRpY2Agc3VnZ2VzdHMgdGhleSBhcmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgbGlrZWx5IGJ5IHRoZSBYZW4gc2lkZSwgcmlnaHQ/IEkmIzM5O2QgZXhwZWN0IGludGVybmFsIGZ1bmN0aW9ucyBpbiB0aGF0IHNjZW5hcmlvLiBNYWtlcyBtZSB3b25kZXIgd2hhdCB0aGUgZGVzaWduIHJhdGlvbmFsZSB3YXMgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlaXIgdXNlLiBNeSBuZXh0IHN0ZXA/IExldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbmAgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9ldmVudGZkX2Fzc2lnbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmM9MjExND1zdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF91cGRhdGUoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMTYwLSAqL1xuYXJjaC94ODYva3ZtL3hlbi5jOjIxNjE6c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS94ZW4uYy0yMTYyLVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjI5Mz1zdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMwOS1cbmFyY2gveDg2L2t2bS94ZW4uYzoyMzEwOlx0cmV0dXJuIGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oa3ZtLCBkYXRhKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0yMzExLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEtWTS1YZW4gaW50ZXJhY3Rpb24sIGFuZCBJJiMzOTttIHNlZWluZyB0aGF0IGBrdm1feGVuX2V2ZW50ZmRfYXNzaWduYCBhbmQgYGt2bV94ZW5fc2V0YXR0cl9ldnRjaG5gIGFyZSBib3RoIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIGRlc2lnbiBjaG9pY2UuIFN0YXRpYyBzdWdnZXN0cyB0aGV5JiMzOTtyZSBsaWtlbHkgaW50ZXJuYWwgZnVuY3Rpb25zLCBjb25maW5lZCB0byB0aGVpciBzcGVjaWZpYyBzb3VyY2UgZmlsZSBhbmQgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIEl0IGltcGxpZXMgYSBkZWdyZWUgb2YgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMgZ29vZCBmb3IgbW9kdWxhcml0eSwgYWx0aG91Z2ggaXQgYWxzbyBtYWtlcyBleHRlcm5hbCBhY2Nlc3MgdG8gdGhlc2UgZnVuY3Rpb25zIGltcG9zc2libGUsIHdoaWNoIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBhIHByb2JsZW0gZGVwZW5kaW5nIG9uIHRoZSB1c2UgY2FzZS4gTm93LCBnaXZlbiB0aGF0IGNvbnRleHQsIHRoZSBuZXh0IGxvZ2ljYWwgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUsIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCBpcyBga3ZtX3hlbl9odm1fc2V0X2F0dHJgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IG9uZSBpcyBpbXBsZW1lbnRlZCBhbmQgaWYgaXQgbWFrZXMgdXNlIG9mIGVpdGhlciBvZiB0aGVzZSB0d28gc3RhdGljIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTcyNTg9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03NTEzLVx0XHRcdGdvdG8gb3V0O1xuYXJjaC94ODYva3ZtL3g4Ni5jOjc1MTQ6XHRcdHIgPSBrdm1feGVuX2h2bV9zZXRfYXR0cihrdm0sIFx1MDAyNnhoYSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxNS1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTcwMT1pbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy03NTktXG5hcmNoL3g4Ni9rdm0veGVuLmM6NzYwOmludCBrdm1feGVuX2h2bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxuYXJjaC94ODYva3ZtL3hlbi5jLTc2MS17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTI0PWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5oOjI1OmludCBrdm1feGVuX2h2bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbmFyY2gveDg2L2t2bS94ZW4uaC0yNi1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTAyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEtWTS9YZW4gSFZNIEF0dHJpYnV0ZSBTZXR0aW5nKioKCkFscmlnaHQsIHNvIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgaXNuJiMzOTt0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIG1vcmUgZGV0YWlsLiBUaGF0IG1lYW5zIGl04oCZcyBub3QgYXMgc2ltcGxlIGFzIEkgaW5pdGlhbGx5IHRob3VnaHQuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgZnVuY3Rpb24mIzM5O3MgZHluYW1pYyBuYXR1cmUgaXMgbWFraW5nIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBNTVUgaW52YWxpZGF0aW9uIHNjZW5hcmlvcy4gVGhlIG5vbi1zdGF0aWMgbmF0dXJlIGRlZmluaXRlbHkgY2hhbmdlcyB0aGUgYXNzdW1wdGlvbnMgSSBjYW4gbWFrZS4KCkxldCBtZSB0dXJuIG15IGF0dGVudGlvbiB0byBob3cgdGhpcyBpbXBhY3RzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBleHBsb3JlIGlzIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSSB3YW50IHRvIHNlZSBob3cgbWVtb3J5IHJhbmdlcyBhcmUgaW52YWxpZGF0ZWQgd2hlbiB0aGVzZSBIVk0gYXR0cmlidXRlcyBjaGFuZ2UsIHdoaWNoIG1pZ2h0IHVudmVpbCBjbHVlcyBhcyB0byB3aHkgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyBub24tc3RhdGljLiBQZXJoYXBzIHRoZSBkeW5hbWlzbSBhcmlzZXMgZnJvbSBoYW5kbGluZyBhIG5vbi1jb25zdGFudCBudW1iZXIgb3IgdHlwZSBvZiBNTVUgZW50cmllcy4gSSBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgdHdvIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NzcxPXZvaWQga3ZtX21tdV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy03OTYtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjc5NzpzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxudmlydC9rdm0va3ZtX21haW4uYy03OTgtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9ODg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX29wcyBrdm1fbW11X25vdGlmaWVyX29wcyA9IHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg5LVx0LmludmFsaWRhdGVfcmFuZ2Vfc3RhcnRcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0LFxudmlydC9rdm0va3ZtX21haW4uYzo4OTA6XHQuaW52YWxpZGF0ZV9yYW5nZV9lbmRcdD0ga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODkxLVx0LmNsZWFyX2ZsdXNoX3lvdW5nXHQ9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE0Ni1cdCAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjE0NzpcdCAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZVxudmlydC9rdm0vcGZuY2FjaGUuYy0xNDgtXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtWTS9YZW4gSW50ZXJhY3Rpb24qKgoKSG1tLCB0aGlzIGZlZWxzLi4uICpzdGF0aWMqLiBUaGVyZSYjMzk7cyBhIGNlcnRhaW4gcmlnaWRpdHkgaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBtZSB1bmVhc3kuIEl0JiMzOTtzIGxpa2Ugc3RhcmluZyBhdCBhIHNpbmdsZSBwb2ludCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIHRoZSBkeW5hbWljIGludGVycGxheS4gVGltZSB0byBkcmlsbCBkb3duLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgdGhlIGZpcnN0IG9idmlvdXMgcGxhY2UgdG8gbG9vayB3aGVuIGRlYWxpbmcgd2l0aCBLVk0gYW5kIFhlbiBpbnRlZ3JhdGlvbiwgZXNwZWNpYWxseSBpZiBzb21ldGhpbmcgZmVlbHMgc3RhbGxlZD8gUmlnaHQsIGBrdm1feGVuX3NldHVwX2V2dGNobmAuIFRoYXQgZXZlbnQgY2hhbm5lbCBzZXR1cCBpcyBhIGNyaXRpY2FsIGhhbmRzaGFrZSBwb2ludCBiZXR3ZWVuIHRoZSBoeXBlcnZpc29ycy4gVGhhdCYjMzk7cyBnb3QgdG8gYmUgdGhlIGZpcnN0IHBvaW50IG9mIGludmVzdGlnYXRpb24uIElmIHRoaW5ncyBhcmUgc3RhdGljLCB0aGlzIGlzIHRoZSBhcmVhIEkgd2FudCB0byBmb2N1cyBvbiBpbml0aWFsbHkuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSBkdXJpbmcgdGhhdCBzdGFnZSwgZXZlcnl0aGluZyBmdXJ0aGVyIGRvd24gdGhlIGxpbmUgd2lsbCBiZSBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9zZXR1cF9ldnRjaG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lycS5jPTI5Nj1pbnQga3ZtX3NldF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzQ3LVx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfWEVOX0VWVENITjpcbmFyY2gveDg2L2t2bS9pcnEuYzozNDg6XHRcdHJldHVybiBrdm1feGVuX3NldHVwX2V2dGNobihrdm0sIGUsIHVlKTtcbmFyY2gveDg2L2t2bS9pcnEuYy0zNDktI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTIwMDQ9c3RhdGljIGludCBldnRjaG5fc2V0X2ZuKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTIwMTYtICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjAxNzppbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3hlbi5jLTIwMTgtXHRcdFx0IHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0zND1pbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSxcbmFyY2gveDg2L2t2bS94ZW4uaC0zNS1cdFx0XHQgICAgc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uaDozNjppbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3hlbi5oLTM3LVx0XHRcdCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MDkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtWTS1YZW4gSW50ZWdyYXRpb24gUG9pbnRzKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBwaWN0dXJlOyB0aGVyZSYjMzk7cyBhIGR5bmFtaWMgaW50ZXJwbGF5IGhhcHBlbmluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgbWVjaGFuaXNtcyB3aGVyZSBLVk0gYW5kIFhlbiBhcmUgaW50ZXJhY3RpbmcuIFRoZSBrZXkgc3ltYm9scyBqdW1waW5nIG91dCBhdCBtZSBhcmUgdGhlc2U6IGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBhbmQgYGt2bV94ZW5faHZtX3NldF9hdHRyYC4gVGhlc2Ugc2VlbSB0byByZXByZXNlbnQgdGhlIGhlYXJ0IG9mIGhvdyBldmVudHMsIGF0dHJpYnV0ZXMsIGh5cGVyY2FsbHMsIGFuZCBldmVudCBjaGFubmVsIG1hbmFnZW1lbnQgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBoeWJyaWQgZW52aXJvbm1lbnQuCgpOb3csIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBLVk1gIGFuZCBgS1ZNX1hFTmAuIFRoZSBxdWVzdGlvbiBpcywgaXMgYEtWTV9YRU5gIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBuZWVkcyB0byBiZSBzZXQgZm9yIHRoaXMgaW50ZWdyYXRpb24gdG8gb2NjdXI/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgYXJjaC94ODYva3ZtL3hlbi5jYCBpcyBpbmRlZWQgY29tcGlsZWQgYW5kIGluY2x1ZGVkIGluIHRoZSBidWlsZCBvbmx5IGlmIGBDT05GSUdfS1ZNX1hFTmAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgY2hlY2sgdG8gZW5zdXJlIHdlIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgaW52b2x2ZWQgaGVyZS4gVGhpcyB3aWxsIGhlbHAgY29uZmlybSB0aGF0IGBLVk1fWEVOYCBpc24mIzM5O3QgYWNjaWRlbnRhbGx5IGRlcGVuZGVudCBvbiBhbm90aGVyIGZsYWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hlblxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS94ZW4udHh0PTYxPW9mIFVFRkkgcnVudGltZSBzZXJ2aWNlcyBpbXBsZW1lbnRlZCB2aWEgaHlwZXJjYWxscywgc2VlXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3hlbi50eHQ6NjI6aHR0cDovL3hlbmJpdHMueGVuLm9yZy9kb2NzL3Vuc3RhYmxlL2h5cGVyY2FsbC94ODZfNjQvaW5jbHVkZSxwdWJsaWMscGxhdGZvcm0uaC5odG1sLlxuLS1cbk1BSU5UQUlORVJTPTE0NTc1PU06XHREYXZpZCBXb29kaG91c2UgXHUwMDNjZHdtdzJAaW5mcmFkZWFkLm9yZ1x1MDAzZVxuTUFJTlRBSU5FUlM6MTQ1NzY6TTpcdFBhdWwgRHVycmFudCBcdTAwM2NwYXVsQHhlbi5vcmdcdTAwM2Vcbk1BSU5UQUlORVJTLTE0NTc3LU06XHRTZWFuIENocmlzdG9waGVyc29uIFx1MDAzY3NlYW5qY0Bnb29nbGUuY29tXHUwMDNlXG4tLVxuTUFJTlRBSU5FUlM9Mjk0NTA9TTpcdFdlaSBMaXUgXHUwMDNjd2VpLmxpdUBrZXJuZWwub3JnXHUwMDNlXG5NQUlOVEFJTkVSUzoyOTQ1MTpNOlx0UGF1bCBEdXJyYW50IFx1MDAzY3BhdWxAeGVuLm9yZ1x1MDAzZVxuTUFJTlRBSU5FUlMtMjk0NTItTDpcdHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2NwdWlkLmgtMjYtICogQXV0aG9yczpcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9jcHVpZC5oOjI3OiAqICAgIEtlaXIgRnJhc2VyIFx1MDAzY2tlaXJAeGVuLm9yZ1x1MDAzZVxuYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2NwdWlkLmgtMjgtICovXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTEzPWt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSAmIzQzOz0gaHlwZXJ2Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxNDprdm0tJChDT05GSUdfS1ZNX1hFTilcdCYjNDM7PSB4ZW4ub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTE1LWt2bS0kKENPTkZJR19LVk1fU01NKVx0JiM0Mzs9IHNtbS5vXG4tLVxuYXJjaC94ODYvcGNpL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1BDSV9PTFBDKVx0XHQmIzQzOz0gb2xwYy5vXG5hcmNoL3g4Ni9wY2kvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfUENJX1hFTilcdFx0JiM0Mzs9IHhlbi5vXG5hcmNoL3g4Ni9wY2kvTWFrZWZpbGUtOS1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTAtICpcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYzo5MTogKiAgICAgIEF1Zy4yMiwgMjAwNCAgICBEYXZpZCBCcm9uYXVnaCBcdTAwM2NkYnJvbmF1Z2hAbGludXhib3hlbi5vcmdcdTAwM2VcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYy05Mi0gKiAgICAgICAgICAgICAgLXYwLjYuMiBBZGQgY2hlY2sgb24gQUNQSSBkYXRhIChudW1fc2lmcilcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTUtICpcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYzo5NjogKiAgICAgIEF1Zy4yMSwgMjAwNCAgICBEYXZpZCBCcm9uYXVnaCBcdTAwM2NkYnJvbmF1Z2hAbGludXhib3hlbi5vcmdcdTAwM2VcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYy05Ny0gKiAgICAgICAgICAgICAgLXYwLjYuMSBGaXggYSBzaWxseSBlcnJvciB3aXRoIHN0YXR1cyBjaGVja2luZ1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jLTk4LSAqXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6OTk6ICogICAgICBBdWcuMjAsIDIwMDQgICAgRGF2aWQgQnJvbmF1Z2ggXHUwMDNjZGJyb25hdWdoQGxpbnV4Ym94ZW4ub3JnXHUwMDNlXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtMTAwLSAqICAgICAgICAgICAgICAtIHYwLjYgIENvcnJlY3QgYnJpZ2h0bmVzcyBjb250cm9scyB0byByZWZsZWN0IHJlYWxpdHlcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM9MTQwPU1PRFVMRV9BVVRIT1IoXCYjMzQ7SGlyb3NoaSBNaXVyYSBcdTAwM2NtaXVyYUBkYS1jaGEub3JnXHUwMDNlXCYjMzQ7KTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYzoxNDE6TU9EVUxFX0FVVEhPUihcJiMzNDtEYXZpZCBCcm9uYXVnaCBcdTAwM2NkYnJvbmF1Z2hAbGludXhib3hlbi5vcmdcdTAwM2VcJiMzNDspO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jLTE0Mi1NT0RVTEVfQVVUSE9SKFwmIzM0O0hhcmFsZCBXZWx0ZSBcdTAwM2NsYWZvcmdlQGdudW1vbmtzLm9yZ1x1MDAzZVwmIzM0Oyk7XG4tLVxuZHJpdmVycy90dHkvaHZjL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0hWQ19JUlEpXHRcdCYjNDM7PSBodmNfaXJxLm9cbmRyaXZlcnMvdHR5L2h2Yy9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19IVkNfWEVOKVx0XHQmIzQzOz0gaHZjX3hlbi5vXG5kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0hWQ19JVUNWKVx0XHQmIzQzOz0gaHZjX2l1Y3Yub1xuLS1cbmRyaXZlcnMveGVuL0tjb25maWc9MjMyPWNvbmZpZyBYRU5fUFZDQUxMU19GUk9OVEVORFxuLS1cbmRyaXZlcnMveGVuL0tjb25maWctMjM3LVx0ICBFeHBlcmltZW50YWwgZnJvbnRlbmQgZm9yIHRoZSBYZW4gUFYgQ2FsbHMgcHJvdG9jb2xcbmRyaXZlcnMveGVuL0tjb25maWc6MjM4Olx0ICAoaHR0cHM6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9taXNjL3B2Y2FsbHMuaHRtbCkuIEl0XG5kcml2ZXJzL3hlbi9LY29uZmlnLTIzOS1cdCAgc2VuZHMgYSBzbWFsbCBzZXQgb2YgUE9TSVggY2FsbHMgdG8gdGhlIGJhY2tlbmQsIHdoaWNoXG4tLVxuZHJpdmVycy94ZW4vS2NvbmZpZz0yNDI9Y29uZmlnIFhFTl9QVkNBTExTX0JBQ0tFTkRcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnLTI0Ni1cdCAgRXhwZXJpbWVudGFsIGJhY2tlbmQgZm9yIHRoZSBYZW4gUFYgQ2FsbHMgcHJvdG9jb2xcbmRyaXZlcnMveGVuL0tjb25maWc6MjQ3Olx0ICAoaHR0cHM6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9taXNjL3B2Y2FsbHMuaHRtbCkuIEl0XG5kcml2ZXJzL3hlbi9LY29uZmlnLTI0OC1cdCAgYWxsb3dzIFBWIENhbGxzIGZyb250ZW5kcyB0byBzZW5kIFBPU0lYIGNhbGxzIHRvIHRoZSBiYWNrZW5kLFxuLS1cbmRyaXZlcnMveGVuL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19YRU5fUFZIVk1fR1VFU1QpXHRcdCYjNDM7PSBwbGF0Zm9ybS1wY2kub1xuZHJpdmVycy94ZW4vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1NXSU9UTEJfWEVOKVx0XHQmIzQzOz0gc3dpb3RsYi14ZW4ub1xuZHJpdmVycy94ZW4vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX1hFTl9NQ0VfTE9HKVx0XHQmIzQzOz0gbWNlbG9nLm9cbi0tXG5kcml2ZXJzL3hlbi9hY3BpLmM9Mzk9c3RhdGljIGludCB4ZW5fYWNwaV9ub3RpZnlfaHlwZXJ2aXNvcl9zdGF0ZSh1OCBzbGVlcF9zdGF0ZSxcbi0tXG5kcml2ZXJzL3hlbi9hY3BpLmMtNTctXHRcdCBcJiMzNDtVc2luZyBtb3JlIHRoYW4gJXUgYml0cyBvZiBzbGVlcCBjb250cm9sIHZhbHVlcyAlI3gvJSN4IVwmIzM0O1xuZHJpdmVycy94ZW4vYWNwaS5jOjU4Olx0XHQgXCYjMzQ7RW1haWwgeGVuLWRldmVsQGxpc3RzLnhlbi5vcmcgLSBUaGFuayB5b3UuXFxuXCYjMzQ7LCBcXFxuZHJpdmVycy94ZW4vYWNwaS5jLTU5LVx0XHQgYml0cywgdmFsX2EsIHZhbF9iKSlcbi0tXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vOXBmcy5oLTE0LSAqIFNlZSBkb2NzL21pc2MvOXBmcy5tYXJrZG93biBpbiB4ZW4uZ2l0IGZvciB0aGUgZnVsbCBzcGVjaWZpY2F0aW9uOlxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvLzlwZnMuaDoxNTogKiBodHRwczovL3hlbmJpdHMueGVuLm9yZy9kb2NzL3Vuc3RhYmxlL21pc2MvOXBmcy5odG1sXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vOXBmcy5oLTE2LSAqL1xuLS1cbmluY2x1ZGUveGVuL2ludGVyZmFjZS9pby9wdmNhbGxzLmgtMTQtICogU2VlIGRvY3MvbWlzYy9wdmNhbGxzLm1hcmtkb3duIGluIHhlbi5naXQgZm9yIHRoZSBmdWxsIHNwZWNpZmljYXRpb246XG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vcHZjYWxscy5oOjE1OiAqIGh0dHBzOi8veGVuYml0cy54ZW4ub3JnL2RvY3MvdW5zdGFibGUvbWlzYy9wdmNhbGxzLmh0bWxcbmluY2x1ZGUveGVuL2ludGVyZmFjZS9pby9wdmNhbGxzLmgtMTYtICovXG4tLVxubmV0LzlwL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX05FVF85UF9GRCkgJiM0Mzs9IDlwbmV0X2ZkLm9cbm5ldC85cC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfOVBfWEVOKSAmIzQzOz0gOXBuZXRfeGVuLm9cbm5ldC85cC9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfOVBfVklSVElPKSAmIzQzOz0gOXBuZXRfdmlydGlvLm9cbi0tXG5uZXQvOXAvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfTkVUXzlQX1VTQkcpICYjNDM7PSA5cG5ldF91c2JnLm9cbi0tXG5uZXQvOXAvTWFrZWZpbGUtMjItOXBuZXRfeGVuLW9ianMgOj0gXFxcbm5ldC85cC9NYWtlZmlsZToyMzpcdHRyYW5zX3hlbi5vIFxcXG5uZXQvOXAvTWFrZWZpbGUtMjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBYZW4gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuIFJpZ2h0LCBpdCBzaG93cyBga3ZtLSQoQ09ORklHX0tWTV9YRU4pICYjNDM7PSB4ZW4ub2AuIFRoYXQgY29uZmlybXMgaXQsIGBLVk1fWEVOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiByZWxhdGVkIHRvIFhlbi4gQW5kIG9mIGNvdXJzZSwgYEtWTWAgaXMgdGhlIG1haW4gS1ZNIGNvbmZpZy4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24uIEkgdGhpbmsgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCBtaWdodCBiZSBwcm9taXNpbmcuIEl04oCZcyBjYWxsZWQgZnJvbSBgdmNwdV9ydW5gIHRocm91Z2ggYGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzYC4gYHZjcHVfcnVuYCBpcyBhYnNvbHV0ZWx5IGEgaG90IHBhdGggaW4gYW55IEtWTSBzeXN0ZW0sIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gSG1tLCBhY3R1YWxseSwgYHZjcHVfcnVuYCAqaXMqIHRoZSBob3QgcGF0aCwgZnVsbCBzdG9wLiBMZXQmIzM5O3MgZGlnIGludG8gYGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzYCBzcGVjaWZpY2FsbHkuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIGJldHRlciBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTExNTY5PWJvb2wga3ZtX3ZjcHVfaGFzX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjA5LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjEwOlx0aWYgKGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzKHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjExLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE2OTI9c3RhdGljIGludCB2Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE1LVx0XHRrdm1fY2xlYXJfcmVxdWVzdChLVk1fUkVRX1VOQkxPQ0ssIHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjExNzE2Olx0XHRpZiAoa3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHModmNwdSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTE3MTctXHRcdFx0a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHModmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTkxLVxuYXJjaC94ODYva3ZtL3hlbi5oOjkyOnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veGVuLmgtOTMte1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0xNTg9c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTYxLVxuYXJjaC94ODYva3ZtL3hlbi5oOjE2MjpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3hlbi5oLTE2My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjUwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBLVk0vWGVuIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBnZXQgYSBnb29kIGRpc3RyaWJ1dGlvbiBvZiB0ZXN0IGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgYXZvaWRpbmcgY29tbW9uLCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSSBrbm93IGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgdmNwdV9ydW5gLCB3aGljaCBpcyBhIHRvdGFsIGhvdCBwYXRoLiBMaXN0aW5nIHRoYXQgd291bGRuJiMzOTt0IGJlIHZlcnkgaW5mb3JtYXRpdmUuCgpMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYWJvdXQgYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YD8gSXQmIzM5O3MgY2FsbGVkIGluZGlyZWN0bHkgZnJvbSBga3ZtX3ZjcHVfaGFzX2V2ZW50c2AgYW5kIGBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZGAsIHNvIGl0JiMzOTtzIGFsc28gYSBob3QgcGF0aC4gTm90IGlkZWFsLgoKSG1tLCBob3cgYWJvdXQgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmA/IEFoLCB0aGF0JiMzOTtzIGFuIGlvY3RsIGhhbmRsZXIhIFRoYXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZm9jdXMuIFdlIGFyZSBsb29raW5nIGZvciBnb29kIGZvY3VzIHN5bWJvbHMsIHNvIHdlJiMzOTtyZSBtYWtpbmcgcHJvZ3Jlc3MuCgpga3ZtX3hlbl9oeXBlcmNhbGxgLi4uIHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGh5cGVyY2FsbHMuIERlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC4KClRoZW4sIHRoZXJlJiMzOTtzIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAgYW5kIGBrdm1feGVuX3NldF9ldnRjaG5gLgoKQW5kIGBrdm1feGVuX3NldHVwX2V2dGNobmAgaXMgY2FsbGVkIGZyb20gYGt2bV9zZXRfcm91dGluZ19lbnRyeWAuIFRoYXQgc2VlbXMgbGlrZSBhIHN0cm9uZyBmb2N1cyBzeW1ib2wuCgpga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgIGlzIGNhbGxlZCBmcm9tIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgYW5kIGBrdm1feGVuX2h5cGVyY2FsbGAg4oCTIGFub3RoZXIgZ29vZCBmb2N1cyBzeW1ib2wuCgpBbmQgZmluYWxseSwgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyBhbiBpb2N0bCBoYW5kbGVyLiBBbm90aGVyIHN0cm9uZyBjYW5kaWRhdGUuCgpSaWdodCwgc28sIEkgd2FudCB0byBleHBsb3JlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lycS5jPTI0MT1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjY5LVxuYXJjaC94ODYva3ZtL2lycS5jOjI3MDpcdFx0cmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFx1MDAyNmUtXHUwMDNleGVuX2V2dGNobiwga3ZtKTtcbmFyY2gveDg2L2t2bS9pcnEuYy0yNzEtI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTEyNT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgeGVuX3RpbWVyX2NhbGxiYWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTM5LVxuYXJjaC94ODYva3ZtL3hlbi5jOjE0MDpcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXHUwMDI2ZSwgdmNwdS1cdTAwM2Vrdm0pO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE0MS1cdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spIHtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTgwMj1zdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xODIyLSAqL1xuYXJjaC94ODYva3ZtL3hlbi5jOjE4MjM6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS94ZW4uYy0xODI0LXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTk0OT1zdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5NTMtXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk1NDpcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoeGUsIGt2bSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk1NS1cdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5ODctXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk4ODpcdFx0cmMgPSBrdm1feGVuX3NldF9ldnRjaG5fZmFzdCh4ZSwga3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTg5LVx0XHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0zMz12b2lkIGt2bV94ZW5fZGVzdHJveV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmg6MzQ6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsXG5hcmNoL3g4Ni9rdm0veGVuLmgtMzUtXHRcdFx0ICAgIHN0cnVjdCBrdm0gKmt2bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Nzc0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtWTS1YZW4gRXZlbnQgQ2hhbm5lbCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUuIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYHhlbl90aW1lcl9jYWxsYmFja2AsIGFuZCBga3ZtX3hlbl9zZXRfZXZ0Y2huYC4gVGhhdCYjMzk7cyBhIHNvbGlkLCBmb2N1c2VkIHN5bWJvbCB0byBzdGFydCB3aXRoLiBJdCYjMzk7cyB1c2VkIGluIGRpZmZlcmVudCBjb250ZXh0cyBidXQgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcuCgpTaW5jZSB0aGlzIHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9mIGV2ZW50IGNoYW5uZWwgbWFuaXB1bGF0aW9uLCBsZXQmIzM5O3MgZHJpbGwgZG93biBkZWVwZXIsIGFuZCB0YWtlIGEgbG9vayBhdCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLiBJJiMzOTttIGN1cmlvdXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGludGVycnVwdCBpdHNlbGYgaXMgc2VudCB0byB0aGUgaHlwZXJ2aXNvci4gVGhpcyBjb3VsZCBnaXZlIG1vcmUgY29udGV4dCBhYm91dCBob3cgdGhlIGZhc3QgcGF0aCB0aWVzIGluIHdpdGggdGhlIG92ZXJhbGwgaW50ZXJydXB0IGluamVjdGlvbiBtZWNoYW5pc20gaW4gdGhlIEtWTS9YZW4gSFZNIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2h2bV9ldnRjaG5fc2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc1MjItXHRcdFx0Z290byBvdXQ7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUyMzpcdFx0ciA9IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKGt2bSwgXHUwMDI2dXhlKTtcbmFyY2gveDg2L2t2bS94ODYuYy03NTI0LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjAxNz1pbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMDY2LSAqL1xuYXJjaC94ODYva3ZtL3hlbi5jOjIwNjc6aW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICp1eGUpXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA2OC17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTI2PWludCBrdm1feGVuX2h2bV9nZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbmFyY2gveDg2L2t2bS94ZW4uaDoyNzppbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKmV2dCk7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMjgtaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTIxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29kZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHN0YXJ0aW5nIGluIGBrdm1fYXJjaF92bV9pb2N0bGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhIHdlbGwtZGVmaW5lZCBlbnRyeSBwb2ludCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgS1ZNIHZpcnR1YWwgbWFjaGluZSBmcm9tIHRoZSBvdXRzaWRlLiAmIzM0O0dvb2QgZm9jdXMgc3ltYm9sLCYjMzQ7IHllYWgsIHRoYXQgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvIHRoZSBhcmVhIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gTm93LCB3aGF0JiMzOTtzIGdvaW5nIG9uICpzcGVjaWZpY2FsbHkqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBga3ZtX3hlbl9odm1fc2V0X2F0dHJgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBzZXR0aW5nIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byBYZW4tSFZNIGd1ZXN0cyB3aXRoaW4gS1ZNLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb25maWd1cmF0aW9uIHRoZSBzeXN0ZW0gaXMgdGFyZ2V0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2h2bV9zZXRfYXR0ciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc1MTMtXHRcdFx0Z290byBvdXQ7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUxNDpcdFx0ciA9IGt2bV94ZW5faHZtX3NldF9hdHRyKGt2bSwgXHUwMDI2eGhhKTtcbmFyY2gveDg2L2t2bS94ODYuYy03NTE1LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9NzAxPWludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTc1OS1cbmFyY2gveDg2L2t2bS94ZW4uYzo3NjA6aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzYxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmg9MjQ9aW50IGt2bV94ZW5fdmNwdV9nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSk7XG5hcmNoL3g4Ni9rdm0veGVuLmg6MjU6aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5oLTI2LWludCBrdm1feGVuX2h2bV9nZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBDYWxsKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLCB3aGljaCBpbW1lZGlhdGVseSBwcm92aWRlcyBhIHByZXR0eSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhhdCYjMzk7cyBhIGdvb2QsIHNwZWNpZmljIHN5bWJvbCB0byBmb2N1cyBvbi4gSXQgZGlyZWN0cyB1cyB0b3dhcmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBWaXJ0dWFsIE1hY2hpbmUgSS9PIGNvbnRyb2wgbGF5ZXIsIHdoaWNoIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHR5cGUgb2YgaXNzdWUgd2UmIzM5O3JlIGxpa2VseSBjaGFzaW5nLiBOb3csIGJhc2VkIG9uIHdoZXJlIHRoaXMgaXMgdHJpZ2dlcmVkIGZyb20sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyB3ZSBjYWxsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZGVlcGVyIGludG8gdGhhdCByb3V0aW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTYxODk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NjExLVx0XHRcdGdvdG8gb3V0O1xuYXJjaC94ODYva3ZtL3g4Ni5jOjY2MTI6XHRcdHIgPSBrdm1feGVuX3ZjcHVfc2V0X2F0dHIodmNwdSwgXHUwMDI2eHZhKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NjEzLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9ODY1PWludCBrdm1feGVuX2h2bV9nZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy05MTktXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTIwOmludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTIxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmg9MjI9dm9pZCBrdm1feGVuX2luamVjdF92Y3B1X3ZlY3RvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3hlbi5oOjIzOmludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5oLTI0LWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg2OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtWTSBIeXBlcmNhbGwgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC4gVGhhdCYjMzk7cyBhIHNvbGlkIGVudHJ5IHBvaW50OyBnb29kLCBmb2N1c2VkIHBsYWNlIHRvIGJlZ2luIHRyYWNpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGF0aCBmb3IgYSBsb3Qgb2YgS1ZNIGludGVyYWN0aW9uLCBzbyBpdCYjMzk7cyB0aGUgbmF0dXJhbCBmaXJzdCBzdGVwIHRvIGxvb2sgYXQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIHJlYWNoaW5nIHRoZSBYZW4gaHlwZXJjYWxsLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHNwZWNpZmljYWxseSBhcm91bmQgYGt2bV94ZW5faHlwZXJjYWxsYC4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgdGhhdCBsZWQgdG8gdGhpcyBwYXRoLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmUgYmVoaW5kIGl0cyBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5PyBJIHdvbmRlciBob3cgbWFueSBkaWZmZXJlbnQgaHlwZXJjYWxscyB3ZSYjMzk7bGwgZmluZCBoZXJlLCBvciBpZiB0aGlzIGZ1bmN0aW9uIGlzIGEgc3dpdGNoYm9hcmQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IEtWTSBpcyBoYW5kbGluZyB0aGUgdHJhbnNpdGlvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2h5cGVyY2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTM3Nj1zdGF0aWMgaW50IGt2bV9odl9zZXRfbXNyX3B3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE0MTAtXHRcdCAqL1xuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE0MTE6XHRcdGlmIChrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKGt2bSkpIHtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNDEyLVx0XHRcdC8qIG9ybCAkMHg4MDAwMDAwMCwgJWVheCAqL1xuLS1cbmFyY2gveDg2L2t2bS90cmFjZS5oPTExND1UUkFDRV9FVkVOVChrdm1faHZfaHlwZXJjYWxsX2RvbmUsXG4tLVxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTMxLSAqL1xuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTMyOlRSQUNFX0VWRU5UKGt2bV94ZW5faHlwZXJjYWxsLFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTMzLVx0ICAgIFRQX1BST1RPKHU4IGNwbCwgdW5zaWduZWQgbG9uZyBucixcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA1MDQ9aW50IGt2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1MDUte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTA2Olx0aWYgKGt2bV94ZW5faHlwZXJjYWxsX2VuYWJsZWQodmNwdS1cdTAwM2Vrdm0pKVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTA3Olx0XHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGwodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1MDgtXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTEyOTg9aW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTMyOC1cdCAqL1xuYXJjaC94ODYva3ZtL3hlbi5jOjEzMjk6XHRpZiAoa3ZtX3hlbl9oeXBlcmNhbGxfZW5hYmxlZChrdm0pKSB7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTMzMC1cdFx0dTggaW5zdHJ1Y3Rpb25zWzMyXTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTM4ND1pbnQga3ZtX3hlbl9odm1fY29uZmlnKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2NvbmZpZyAqeGhjKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNDMwLVxuYXJjaC94ODYva3ZtL3hlbi5jOjE0MzE6c3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcbmFyY2gveDg2L2t2bS94ZW4uYy0xNDMyLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQzNi1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNDM3OnN0YXRpYyBpbnQga3ZtX3hlbl9oeXBlcmNhbGxfY29tcGxldGVfdXNlcnNwYWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uYy0xNDM4LXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQ0My1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNDQ0Olx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVx1MDAzZXhlbi51LmhjYWxsLnJlc3VsdCk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQ0NS19XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTE2ODc9c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCB0aW1lb3V0LFxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNzAxLVxuYXJjaC94ODYva3ZtL3hlbi5jOjE3MDI6aW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzAzLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTczOC1cdGNwbCA9IGt2bV94ODZfY2FsbChnZXRfY3BsKSh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzM5Olx0dHJhY2Vfa3ZtX3hlbl9oeXBlcmNhbGwoY3BsLCBpbnB1dCwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sIHBhcmFtc1syXSxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzQwLVx0XHRcdFx0cGFyYW1zWzNdLCBwYXJhbXNbNF0sIHBhcmFtc1s1XSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3ODAtXHRpZiAoaGFuZGxlZClcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzgxOlx0XHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCByKTtcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzgyLVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNzk2LVx0dmNwdS1cdTAwM2VhcmNoLmNvbXBsZXRlX3VzZXJzcGFjZV9pbyA9XG5hcmNoL3g4Ni9rdm0veGVuLmM6MTc5NzpcdFx0a3ZtX3hlbl9oeXBlcmNhbGxfY29tcGxldGVfdXNlcnNwYWNlO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTgtXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTY3PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2lzX2h5cGVyY2FsbF9wYWdlX21zcihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBtc3IpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTc0LVxuYXJjaC94ODYva3ZtL3hlbi5oOjc1OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS94ZW4uaC03Ni17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTEwMz1zdGF0aWMgaW5saW5lIGludCBrdm1feGVuX2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uaC0xMDQte1xuYXJjaC94ODYva3ZtL3hlbi5oOjEwNTpcdGlmIChrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjYga3ZtX3hlbl90aW1lcl9lbmFibGVkKHZjcHUpKVxuYXJjaC94ODYva3ZtL3hlbi5oLTEwNi1cdFx0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udGltZXJfcGVuZGluZyk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTE0Mz1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3hlbl9pc19oeXBlcmNhbGxfcGFnZV9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgbXNyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaC0xNDctXG5hcmNoL3g4Ni9rdm0veGVuLmg6MTQ4OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS94ZW4uaC0xNDkte1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0xODE9c3RhdGljIGlubGluZSBib29sIGt2bV94ZW5faXNfdHNjX2xlYWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZnVuY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTE4Ni1cbmFyY2gveDg2L2t2bS94ZW4uaDoxODc6aW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMTg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk3MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNLVhlbiBIeXBlcmNhbGwgUGF0aCoqCgpPa2F5LCBzbyBga3ZtX3hlbl9oeXBlcmNhbGxgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgWGVuIGh5cGVyY2FsbHMgd2hlbiB0aGV5JiMzOTtyZSBjb21pbmcgZnJvbSB0aGUgS1ZNIGVtdWxhdGlvbiBsYXllci4gVGhhdCBtYWtlcyBzZW5zZSwgYGt2bV9lbXVsYXRlX2h5cGVyY2FsbGAgaXMgdGhlIGludGVybWVkaWFyeSwgY2FsbGVkIHdoZW5ldmVyIGEgZ3Vlc3QgbWFrZXMgYSBoeXBlcmNhbGwgaW5zdHJ1Y3Rpb24uIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsLCBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYSwgYSBkZWZpbml0ZSAmIzM0O2hvdCBwYXRoJiMzNDsgZm9yIFhlbiBndWVzdHMuIEZvY3VzaW5nIG9uIGBrdm1feGVuX2h5cGVyY2FsbGAgaXRzZWxmIGlzIGEgZ29vZCBzdHJhdGVneSB0byB1bmRlcnN0YW5kIHRoZSBmbG93LgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIG91dCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLiBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGluIHRoaXMgY29udGV4dDsgSSBzdXNwZWN0IGl0IHBsYXlzIGEgc2lnbmlmaWNhbnQgcm9sZSBpbiB0aGUgb3ZlcmFsbCBYZW4gaHlwZXJjYWxsIGVtdWxhdGlvbiBwcm9jZXNzLCBhbmQgbWlnaHQgYmUgYSBnb29kIHBsYWNlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rdm1feGVuX2hhc19pbnRlcnJ1cHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jPTYzOT12b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzAwLVxuYXJjaC94ODYva3ZtL3hlbi5jOjcwMTppbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KVxuYXJjaC94ODYva3ZtL3hlbi5jLTcwMi17XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTE4PWV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZV9kZWZlcnJlZCBrdm1feGVuX2VuYWJsZWQ7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMTktXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjA6aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMjEtdm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD00MD1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3hlbl9zd19lbmFibGVfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uaC00OC1cdCAgICB2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZS5hY3RpdmUgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0veGVuLmg6NDk6XHQgICAgdmNwdS1cdTAwM2VhcmNoLnhlbi51cGNhbGxfdmVjdG9yIFx1MDAyNlx1MDAyNiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCh2Y3B1KSlcbmFyY2gveDg2L2t2bS94ZW4uaC01MC1cdFx0a3ZtX3hlbl9pbmplY3RfdmNwdV92ZWN0b3IodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTg2LVx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnVwY2FsbF92ZWN0b3IpXG5hcmNoL3g4Ni9rdm0veGVuLmg6ODc6XHRcdHJldHVybiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ZW4uaC04OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNL1hlbiBQZXJmb3JtYW5jZSBIb3RzcG90cyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIEtWTS9YZW4gaW50ZWdyYXRpb24gY29kZSB0byB1bmRlcnN0YW5kIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIHNlZSB0aGF0IGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAgaXMgY2FsbGVkIGRlZXBseSB3aXRoaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYywgZnJvbSBga3ZtX3hlbl9oYXNfaW50ZXJydXB0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBga3ZtX3ZjcHVfaGFzX2V2ZW50c2AgYW5kIGBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZGAuIEl0JiMzOTtzIGRlZmluaXRlbHkgYSBob3QgcGF0aCwgc28gSSYjMzk7bGwgZXhjbHVkZSBpdCBmcm9tIHRoZSBzeW1ib2xzIEkmIzM5O20gZm9jdXNpbmcgb24gdG8ga2VlcCBteSBhbmFseXNpcyBhY2N1cmF0ZS4gSSBhbHNvIG5lZWQgdG8gaWdub3JlIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2Agc2luY2UgaXQmIzM5O3MgYWxzbyBvbiB0aGUgY3JpdGljYWwgcGF0aCwgY2FsbGVkIGZyb20gYHZjcHVfcnVuYC4KClNvLCB0aGF0IGxlYXZlcyBhIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZnVuY3Rpb25zOiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYGt2bV94ZW5faHlwZXJjYWxsYCwgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCwgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCwgYW5kIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAuIEkmIzM5O2xsIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZXNlLgoKTm93LCB3aGF0IGFib3V0IHRob3NlIHN0YXRpYyBmdW5jdGlvbnM/IEhtbSwgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAuIFRoZXkgKmFyZSogc3RhdGljLCBidXQgdGhleSBjb3VsZCBzdGlsbCBiZSBpbXBvcnRhbnQuIEkmIzM5O2xsIGZsYWcgdGhlbSBmb3IgbGF0ZXIgcmV2aWV3LCBlc3BlY2lhbGx5IGlmIHRoZSBtb3JlIG9idmlvdXMgZnVuY3Rpb25zIGRvbiYjMzk7dCB5aWVsZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExvb2tzIGxpa2UgYEtWTWAgYW5kIGBLVk1fWEVOYC4gV2FpdCwgYEtWTV9YRU5gIGlzIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFJpZ2h0LCBpdCYjMzk7cyBzcGVjaWZpYyB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgYXMgSSB3b3VsZCBleHBlY3QuIExldCYjMzk7cyBzZWUuLi5hbnkgb3RoZXIgY29uZmlncyBpbnZvbHZlZCBoZXJlPyBObywgaXQgbG9va3MgbGlrZSB0aGUgcmVsZXZhbnQgY29kZSBtb2RpZmljYXRpb25zIGFyZSBjb25maW5lZCB0byBgYXJjaC94ODYva3ZtL3hlbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBBbmQsIG9mIGNvdXJzZSwgYHZpcnQva3ZtL3BmbmNhY2hlLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGFjdGl2ZS4gR29vZC4gSSB0aGluayBJIGhhdmUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZXNlIGFyZWFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZm5jYWNoZVxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTEzPWt2bS0kKENPTkZJR19IQVZFX0tWTV9ESVJUWV9SSU5HKSAmIzQzOz0gJChLVk0pL2RpcnR5X3Jpbmcub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtOjE0Omt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tMTUta3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODIzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqS1ZNIFBGTiBDYWNoZSBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCAqQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKi4uLiB0aGF0JiMzOTtzIHRoZSBmbGFnIHdlIG5lZWQgdG8gYmUgbG9va2luZyBhdC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtPa2F5LCBkb2VzIG91ciBidWlsZCBzeXN0ZW0gYWN0dWFsbHkgKmRlZmluZSogYEhBVkVfS1ZNX1BGTkNBQ0hFYD8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIEl0JiMzOTtzIHRoZSBtb3N0IGJhc2ljIGNoZWNrLCByZWFsbHkuIFRoZSBjb25maWcgc3ltYm9sIGRpY3RhdGVzIHRoYXQgY2VydGFpbiBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQsIGJ1dCBkbyB3ZSBhY3R1YWxseSBoYXZlIHRoZSBjb21waWxlciBzdXBwb3J0IHRvIHV0aWxpemUgaXQ/JiMzNDsuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgYXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFWRV9LVk1fUEZOQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZz00PWNvbmZpZyBLVk1fQ09NTU9OXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMC1cbnZpcnQva3ZtL0tjb25maWc6MTE6Y29uZmlnIEhBVkVfS1ZNX1BGTkNBQ0hFXG52aXJ0L2t2bS9LY29uZmlnLTEyLSAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDk5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIHN0dW1ibGVkIHVwb24gYEhBVkVfS1ZNX1BGTkNBQ0hFYC4gSXQmIzM5O3MgYSBoaWRkZW4gY29uZmlnIG9wdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSYjMzk7ZCB0eXBpY2FsbHkgZmluZCB0aHJvdWdoIGEgc3RhbmRhcmQgYG1ha2UgbWVudWNvbmZpZ2Agb3Igc2ltaWxhciBpbnRlcmZhY2UuIEl0JiMzOTtzIGFsc28gYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCB3aGljaCBpcyBnb29kIHRvIGtlZXAgaW4gbWluZC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgb2YgY291cnNlLCBpcyB3aGF0JiMzOTtzICpzZWxlY3RpbmcqIHRoaXMgdGhpbmc/IEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcyBhbmQgc2VlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGJlaW5nIHB1bGxlZCBpbi4gR290dGEgdHJhY2UgdGhlIGNvbmZpZyBoaWVyYXJjaHkgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRlbGxpbmcgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTI1LVx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI2Olx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNy1cdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQzMwoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA2NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBYZW4gRW11bGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgYEtWTV9YODZgLCB3aGljaCBtZWFucyBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQuIEkmIzM5O3ZlIHJlLWV4YW1pbmVkIHRoZSBmb2N1cyBzeW1ib2xzOiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYGt2bV94ZW5faHlwZXJjYWxsYCwgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCwgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCwgYW5kIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55LiBJIGNoZWNrZWQgZm9yIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhlIG1hY3JvcyBhbmQgc3RhdGljIGlubGluZXMgYXJlbiYjMzk7dCBjcml0aWNhbCBpbiB0aGUgc2FtZSB3YXksIGJ1dCBJIG1hZGUgc3VyZSB0byBub3RlIHRoZW0uCgpJIHRoZW4gdmVyaWZpZWQgcmVhY2hhYmlsaXR5LiBJIHNlZSB0aGF0IGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAgd2l0aGluIGBrdm1fYXJjaF92bV9pb2N0bGAgKHRyaWdnZXJlZCBieSBgS1ZNX1hFTl9IVk1fRVZUQ0hOX1NFTkRgKS4gYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCBpcyByZWFjaGFibGUgdmlhIGBrdm1fc2V0X3JvdXRpbmdfZW50cnlgICh0cmlnZ2VyZWQgYnkgYEtWTV9TRVRfR1NJX1JPVVRJTkdgKS4gYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyByZWFjaGFibGUgdmlhIGBrdm1fYXJjaF92bV9pb2N0bGAgKHRyaWdnZXJlZCBieSBgS1ZNX1hFTl9IVk1fU0VUX0FUVFJgKS4gQW5kIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGlzIGV4cG9zZWQgdGhyb3VnaCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgKHRyaWdnZXJlZCBieSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCkuIEZpbmFsbHksIGBrdm1feGVuX2h5cGVyY2FsbGAgaXMgZXhwb3NlZCB0byB0aGUgZ3Vlc3QgZXhlY3V0aW9uLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggdG91Y2hlcyBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIFhlbiBlbXVsYXRpb24gd2l0aGluIEtWTS4gSXQgYWRkcmVzc2VzIDMyLWJpdC82NC1iaXQgc2hhcmVkIGluZm8gaGFuZGxpbmcsIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnksIGFuZCBwZm5jYWNoZSBpbnZhbGlkYXRpb24g4oCTIGNvcmUgZnVuY3Rpb25hbGl0aWVzLiBUaGVzZSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHVzZXJzcGFjZSBhbmQgZ3Vlc3QgZXhlY3V0aW9uLCBzbyB0aGlzIHBhdGNoIG5lZWRzIHRob3JvdWdoIHJldmlldy4KCk15IGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMgaXMgY29tcGxldGUuIE5vdywgdGltZSB0byBldmFsdWF0ZSB0aGlzIGZ1cnRoZXIgYW5kIHJlcG9ydCBiYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oeXBlcmNhbGwmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9zZXR1cF9ldnRjaG4mIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9odm1fc2V0X2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBlbXVsYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgMzItYml0LzY0LWJpdCBzaGFyZWQgaW5mbyBoYW5kbGluZywgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSwgYW5kIHBmbmNhY2hlIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZSBhbmQgWGVuIGVtdWxhdGlvbiwgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGFuZCBndWVzdCBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHlwZXJjYWxsJiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0X2V2dGNobl9mYXN0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5fc2V0dXBfZXZ0Y2huJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX2V2dGNobl9zZW5kJiMzNDssCiAgICAmIzM0O2t2bV94ZW5faHZtX3NldF9hdHRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIDMyLWJpdC82NC1iaXQgc2hhcmVkIGluZm8gaGFuZGxpbmcsIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnksIGFuZCBwZm5jYWNoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUgYW5kIFhlbiBlbXVsYXRpb24sIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgZ3Vlc3QgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhbGlnbm1lbnQgaXNzdWVzLCBhdG9taWMgb3BlcmF0aW9ucyBvbiBndWVzdCBtZW1vcnksIGFuZCBhIHNlcXVlbmNlIGNvdW50ZXIgZm9yIEd1ZXN0IFBhZ2UgQ2FjaGUgKEdQQykgaW4gS1ZNIFhlbiBlbXVsYXRpb24uIEl0IHJlcGxhY2VzIGBJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGVgIHdpdGggYSBtYWNybyBga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSlgLCBoYW5kbGVzIHVuYWxpZ25lZCBhdG9taWMgb3BlcmF0aW9ucyBpbiBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCB1c2VzIGBidHNsYCBmb3IgMzItYml0IGFsaWduZWQgZ3Vlc3QtY29udHJvbGxlZCBtZW1vcnkgaW4gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYW5kIGludHJvZHVjZXMgYGdwY19pbnZhbGlkYXRlX3NlcWAgdG8gc2VwYXJhdGUgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBmcm9tIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5NzNlMDhiZDY4ZjhkOTVlMzM0ZWQ1ZDZiZGM5OTczNGJlYzRkZjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNzoyMzoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uYwppbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5jCkBAIC03Miw3ICYjNDM7NzIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGFyZWRfaW5mbywgd2MpICE9IDB4YzAwKTsKIAlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAKIAkJd2Nfc2VjX2hpID0gJmFtcDtzaGluZm8tJmd0O3djX3NlY19oaTsKQEAgLTM5MCw3ICYjNDM7MzkwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2LCBib29sIGF0b21pYykKIAlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9CiAJCSAgICAgc2l6ZW9mKHZ4LSZndDtydW5zdGF0ZV90aW1lcykpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IHYtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7CiYjNDM7CWlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odi0mZ3Q7a3ZtKSkgewogCQl1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJdGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbywKIAkJCQkgICAgIHN0YXRlX2VudHJ5X3RpbWUpOwpAQCAtNjYxLDI4ICYjNDM7NjYxLDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KQogCX0KIAogCS8qIE5vdyBncGMtJmd0O2todmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyB2LSZndDtrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkgewomIzQzOwlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtJmd0O2t2bSkpIHsKIAkJc3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiYjNDM7CQl2b2lkICp2aV9wZW5kaW5nX3NlbCA9ICZhbXA7dmktJmd0O2V2dGNobl9wZW5kaW5nX3NlbDsKIAotCQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggJiMzNDtvcnEgJTAsICUxXG4mIzM0OwotCQkJICAgICAmIzM0O25vdHEgJTBcbiYjMzQ7Ci0JCQkgICAgIExPQ0tfUFJFRklYICYjMzQ7YW5kcSAlMCwgJTJcbiYjMzQ7Ci0JCQkgICAgIDogJiMzNDs9ciYjMzQ7IChldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7CiYjNDM7CQlpZiAoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl2aV9wZW5kaW5nX3NlbCwgc2l6ZW9mKHU2NCkpKSB7CiYjNDM7CQkJYXRvbWljNjRfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBjYXN0IGtlZXBzIHRoZSBzaGlmdCB3ZWxsLWRlZmluZWQgb24gMzItYml0LAomIzQzOwkJCSAqIHdoZXJlIGV2dGNobl9wZW5kaW5nX3NlbCBpcyAzMiBiaXRzIHdpZGUgYW5kIHRoaXMKJiM0MzsJCQkgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZQomIzQzOwkJCSAqIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbygpLCB3aGljaCBpcyBnYXRlZCBvbgomIzQzOwkJCSAqIElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkuCiYjNDM7CQkJICovCiYjNDM7CQkJYXRvbWljX29yKCh1NjQpZXZ0Y2huX3BlbmRpbmdfc2VsICZndDsmZ3Q7IDMyLAomIzQzOwkJCQkgIHZpX3BlbmRpbmdfc2VsICYjNDM7IDQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKikmYW1wO3YtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7CiAJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiAJfSBlbHNlIHsKLQkJdTMyIGV2dGNobl9wZW5kaW5nX3NlbDMyID0gZXZ0Y2huX3BlbmRpbmdfc2VsOwogCQlzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmkgPSBncGMtJmd0O2todmE7CiAKLQkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICYjMzQ7b3JsICUwLCAlMVxuJiMzNDsKLQkJCSAgICAgJiMzNDtub3RsICUwXG4mIzM0OwotCQkJICAgICBMT0NLX1BSRUZJWCAmIzM0O2FuZGwgJTAsICUyXG4mIzM0OwotCQkJICAgICA6ICYjMzQ7PXImIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHZpLSZndDtldnRjaG5fcGVuZGluZ19zZWwpLAotCQkJICAgICAgICYjMzQ7JiM0MzttJiMzNDsgKHYtJmd0O2FyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCkKLQkJCSAgICAgOiAmIzM0OzAmIzM0OyAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTsKJiM0MzsJCWF0b21pY19vcihldnRjaG5fcGVuZGluZ19zZWwsICh2b2lkICopJmFtcDt2aS0mZ3Q7ZXZ0Y2huX3BlbmRpbmdfc2VsKTsKJiM0MzsJCWF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKSZhbXA7di0mZ3Q7YXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKTsKIAkJV1JJVEVfT05DRSh2aS0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKIAl9CiAKQEAgLTcxMyw2ICYjNDM7NzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiAJQlVJTERfQlVHX09OKHNpemVvZihyYykgIT0KIAkJICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwogCiYjNDM7CS8qCiYjNDM7CSAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLSZndDtzcmN1IG11c3QgYmUKJiM0MzsJICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb20KJiM0MzsJICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSwKJiM0MzsJICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUmIzM5O3MgU1JDVSBsb2NrLgomIzQzOwkgKiBUYWtpbmcgU1JDVSBkb2VzIG5vdCBzbGVlcCwgc28gaXQgaXMgc2FmZSBldmVuIGluIHRoZSBhdG9taWMgY2FzZQomIzQzOwkgKiB3aGljaCBpcyBoYW5kbGVkIGJlbG93LgomIzQzOwkgKi8KJiM0MzsJZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpOwomIzQzOwogCXJlYWRfbG9ja19pcnFzYXZlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CiAJd2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkgewogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC05MjYsNiAmIzQzOzk0MCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJciA9IC1FTlhJTzsKJiM0MzsJCQlpZiAoIUlTX0FMSUdORUQoZGF0YS0mZ3Q7dS5ncGEsIHNpemVvZih1MzIpKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiAJCQlyID0ga3ZtX2dwY19hY3RpdmF0ZSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJICAgICBkYXRhLSZndDt1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfSBlbHNlIHsKQEAgLTkzNSw2ICYjNDM7OTUzLDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJCQkJYnJlYWs7CiAJCQl9CiAKJiM0MzsJCQlyID0gLUVOWElPOwomIzQzOwkJCWlmICghSVNfQUxJR05FRChkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHUzMikpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKIAkJCXIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YSgmYW1wO3ZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaW5mb19jYWNoZSwKIAkJCQkJCSBkYXRhLSZndDt1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTsKIAkJfQpAQCAtOTc4LDcgJiM0MzsxMDAwLDcgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSkKIAkJICogYWRkcmVzcywgdGhhdCYjMzk7cyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKQogCQkgKiB3aWxsIGNvcGUuCiAJCSAqLwotCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpCiYjNDM7CQlpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSkpCiAJCQlzeiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTsKIAkJZWxzZQogCQkJc3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pOwpAQCAtMTQyMiwxNiAmIzQzOzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi0mZ3Q7eGVuLnUuaGNhbGwucmVzdWx0KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXhfZXZ0Y2huX3BvcnQoYm9vbCBoYXNfNjRiaXRfc2hpbmZvKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pCiAJCXJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7CiAJZWxzZQogCQlyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUzsKIH0KIAotc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAotCQkJICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1heF9ldnRjaG5fcG9ydChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaGFzXzY0Yml0X3NoaW5mbywKJiM0MzsJCQkgICAgICAgaW50IG5yX3BvcnRzLCBldnRjaG5fcG9ydF90ICpwb3J0cykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9ICZhbXA7a3ZtLSZndDthcmNoLnhlbi5zaGluZm9fY2FjaGU7CkBAIC0xNDQ2LDcgJiM0MzsxNDczLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLAogCQlnb3RvIG91dF9yY3U7CiAKIAlyZXQgPSBmYWxzZTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCX0gZWxzZSB7CkBAIC0xNDY4LDkgJiM0MzsxNDk1LDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cywKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsCiYjNDM7c3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSB1NjQgcGFyYW0sIHU2NCAqcikKIHsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtJmd0O2t2bSk7CiAJc3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDsKIAlldnRjaG5fcG9ydF90IHBvcnQsICpwb3J0czsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwpAQCAtMTQ4MCw3ICYjNDM7MTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAkgICAgISh2Y3B1LSZndDtrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgJmFtcDsgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7ICFsb25nbW9kZSkgewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsgIWlzXzY0Yml0KSB7CiAJCXN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyOwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBjb21wYXQgc3RydWN0IGRlZmluaXRpb24gaXMgY29ycmVjdCAqLwpAQCAtMTUyOSw3ICYjNDM7MTU1Nyw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHBvcnRzW2ldICZndDs9IG1heF9ldnRjaG5fcG9ydCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQlpZiAocG9ydHNbaV0gJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7CiAJCQkqciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTU0Miw3ICYjNDM7MTU3MCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwKIAogCXNldF9iaXQodmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC54ZW4ucG9sbF9tYXNrKTsKIAotCWlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkgewomIzQzOwlpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBoYXNfNjRiaXRfc2hpbmZvLCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHsKIAkJa3ZtX3NldF9tcF9zdGF0ZSh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVEKTsKIAogCQlpZiAoc2NoZWRfcG9sbC50aW1lb3V0KQpAQCAtMTU3NywxMiAmIzQzOzE2MDUsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LAogCQkJCSAgIGludCBjbWQsIHU2NCBwYXJhbSwgdTY0ICpyKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTQ0hFRE9QX3BvbGw6Ci0JCWlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKQomIzQzOwkJaWYgKGt2bV94ZW5fc2NoZWRvcF9wb2xsKHZjcHUsIGlzXzY0Yml0LCBwYXJhbSwgcikpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZmFsbHRocm91Z2g7CiAJY2FzZSBTQ0hFRE9QX3lpZWxkOgpAQCAtMTYwMSw3ICYjNDM7MTYyOSw3IEBAIHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7CiAgICAgdWludDMyX3QgZmxhZ3M7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAomIzQzO3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsCiAJCQkJICBpbnQgdmNwdV9pZCwgdTY0IHBhcmFtLCB1NjQgKnIpCiB7CiAJc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIgb25lc2hvdDsKQEAgLTE2MzMsNyAmIzQzOzE2NjEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLAogCQlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpICE9CiAJCQkgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTsKIAotCQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBsb25nbW9kZSA/IHNpemVvZihvbmVzaG90KSA6CiYjNDM7CQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgJmFtcDtvbmVzaG90LCBpc182NGJpdCA/IHNpemVvZihvbmVzaG90KSA6CiAJCQkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIpLCAmYW1wO2UpKSB7CiAJCQkqciA9IC1FRkFVTFQ7CiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2NzMsNyAmIzQzOzE3MDEsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IHRpbWVvdXQsCiAKIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JYm9vbCBsb25nbW9kZTsKJiM0MzsJYm9vbCBpc182NGJpdDsKIAl1NjQgaW5wdXQsIHBhcmFtc1s2XSwgciA9IC1FTk9TWVM7CiAJYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAJdTggY3BsOwpAQCAtMTY4Myw4ICYjNDM7MTcxMSw4IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgIGt2bV9odl9oeXBlcmNhbGxfZW5hYmxlZCh2Y3B1KSkKIAkJcmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7CiAKLQlsb25nbW9kZSA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7Ci0JaWYgKCFsb25nbW9kZSkgewomIzQzOwlpc182NGJpdCA9IGlzXzY0X2JpdF9oeXBlcmNhbGwodmNwdSk7CiYjNDM7CWlmICghaXNfNjRiaXQpIHsKIAkJaW5wdXQgPSBrdm1fZWF4X3JlYWQodmNwdSk7CiAJCXBhcmFtc1swXSA9IGt2bV9lYnhfcmVhZCh2Y3B1KTsKIAkJcGFyYW1zWzFdID0ga3ZtX2VjeF9yZWFkKHZjcHUpOwpAQCAtMTczMCwxNyAmIzQzOzE3NTgsMTcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6Ci0JCWhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcCh2Y3B1LCBpc182NGJpdCwgcGFyYW1zWzBdLAogCQkJCQkJIHBhcmFtc1sxXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDoKLQkJaGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sCiYjNDM7CQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sIHBhcmFtc1sxXSwKIAkJCQkJCXBhcmFtc1syXSwgJmFtcDtyKTsKIAkJYnJlYWs7CiAJY2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7CiAJCXU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdOwogCQkvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqLwotCQlpZiAoIWxvbmdtb2RlKQomIzQzOwkJaWYgKCFpc182NGJpdCkKIAkJCXRpbWVvdXQgfD0gcGFyYW1zWzFdICZsdDsmbHQ7IDMyOwogCQloYW5kbGVkID0ga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3AodmNwdSwgdGltZW91dCwgJmFtcDtyKTsKIAkJYnJlYWs7CkBAIC0xNzU1LDcgJiM0MzsxNzgzLDcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGhhbmRsZV9pbl91c2Vyc3BhY2U6CiAJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMOwotCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTsKJiM0MzsJdmNwdS0mZ3Q7cnVuLSZndDt4ZW4udS5oY2FsbC5sb25nbW9kZSA9IGlzXzY0Yml0OwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuY3BsID0gY3BsOwogCXZjcHUtJmd0O3J1bi0mZ3Q7eGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDsKIAl2Y3B1LSZndDtydW4tJmd0O3hlbi51LmhjYWxsLnBhcmFtc1swXSA9IHBhcmFtc1swXTsKQEAgLTE3OTUsOCAmIzQzOzE4MjMsOSBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KQogaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gJmFtcDtrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZTsKJiM0MzsJYm9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cywgdmlfcGVuZGluZ19zZWxfb2ZzOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQl1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcG9ydF93b3JkX2JpdDsKIAlib29sIGtpY2tfdmNwdSA9IGZhbHNlOwpAQCAtMTgxMiw3ICYjNDM7MTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pCiAJCVdSSVRFX09OQ0UoeGUtJmd0O3ZjcHVfaWR4LCB2Y3B1LSZndDt2Y3B1X2lkeCk7CiAJfQogCi0JaWYgKHhlLSZndDtwb3J0ICZndDs9IG1heF9ldnRjaG5fcG9ydChrdm0pKQomIzQzOwlpZiAoeGUtJmd0O3BvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJjID0gLUVXT1VMREJMT0NLOwpAQCAtMTgyMywxNiAmIzQzOzE4NTIsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAlpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKQogCQlnb3RvIG91dF9yY3U7CiAKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGUpIHsKJiM0MzsJaWYgKGhhc182NGJpdF9zaGluZm8pIHsKIAkJc3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtJmd0O2todmE7CiAJCXBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9wZW5kaW5nOwogCQltYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKSZhbXA7c2hpbmZvLSZndDtldnRjaG5fbWFzazsKIAkJcG9ydF93b3JkX2JpdCA9IHhlLSZndDtwb3J0IC8gNjQ7CiYjNDM7CiYjNDM7CQl2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKIAkJcGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikmYW1wO3NoaW5mby0mZ3Q7ZXZ0Y2huX3BlbmRpbmc7CiAJCW1hc2tfYml0cyA9ICh1bnNpZ25lZCBsb25nICopJmFtcDtzaGluZm8tJmd0O2V2dGNobl9tYXNrOwogCQlwb3J0X3dvcmRfYml0ID0geGUtJmd0O3BvcnQgLyAzMjsKJiM0MzsKJiM0MzsJCXZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpOwomIzQzOwomIzQzOwkJLyogdGVzdF9hbmRfc2V0X2JpdCgpIG5lZWRzIDY0LWJpdCBhbGlnbm1lbnQsIGJ1dCB0aGF0JiMzOTtzIE9LICovCiYjNDM7CQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpICZhbXA7IDcpOwogCX0KIAogCS8qCkBAIC0xODQ4LDYgJiM0MzsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSkKIAkJcmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqLwogCQlrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS0mZ3Q7cG9ydCk7CiAJfSBlbHNlIHsKJiM0MzsJCWJvb2wgb2xkOwomIzQzOwogCQlyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqLwogCQkvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJiMzOTtzIHZjcHVfaW5mbyB0byBzZXQgdGhlIGluZGV4IGFuZCBwZW5kaW5nX3NlbCAqLwogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z3BjLSZndDtsb2NrLCBmbGFncyk7CkBAIC0xODY0LDE5ICYjNDM7MTkwMiwyOSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKQogCQkJZ290byBvdXRfcmN1OwogCQl9CiAKLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlKSB7Ci0JCQlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtJmd0O2todmE7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgJmFtcDt2Y3B1X2luZm8tJmd0O2V2dGNobl9wZW5kaW5nX3NlbCkpIHsKLQkJCQlXUklURV9PTkNFKHZjcHVfaW5mby0mZ3Q7ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTsKLQkJCQlraWNrX3ZjcHUgPSB0cnVlOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZjcHVfaW5mbyA9IGdwYy0mZ3Q7a2h2YTsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChwb3J0X3dvcmRfYml0LAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyAqKSZhbXA7dmNwdV9pbmZvLSZndDtldnRjaG5fcGVuZGluZ19zZWwpKSB7Ci0JCQkJV1JJVEVfT05DRSh2Y3B1X2luZm8tJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7Ci0JCQkJa2lja192Y3B1ID0gdHJ1ZTsKLQkJCX0KJiM0MzsJCS8qCiYjNDM7CQkgKiBFeHBsaWNpdGx5IHVzZSBhIDMyLWJpdCBidHNsIGluc3RlYWQgb2YgdGVzdF9hbmRfc2V0X2JpdCgpLAomIzQzOwkJICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LQomIzQzOwkJICogY29udHJvbGxlZCBhbmQgb25seSByZXF1aXJlZCB0byBiZSAzMi1iaXQgYWxpZ25lZCwgc28gYQomIzQzOwkJICogNjQtYml0IGFjY2VzcyBjb3VsZCBnZW5lcmF0ZSBhIHNwbGl0LWxvY2sgI0FDLgomIzQzOwkJICoKJiM0MzsJCSAqIE5vdGUsIHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBvbgomIzQzOwkJICogcGVuZGluZ19iaXRzIGFib3ZlOiB0aGF0IGlzIGluIHRoZSBwZXItVk0gc2hhcmVkX2luZm8sIHdoaWNoCiYjNDM7CQkgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXQKJiM0MzsJCSAqIGFsaWduZWQuCiYjNDM7CQkgKi8KJiM0MzsJCW9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggJiMzNDtidHNsJiMzNDssCiYjNDM7CQkJCSAgICAgICAqKHUzMiAqKShncGMtJmd0O2todmEgJiM0MzsgdmlfcGVuZGluZ19zZWxfb2ZzKSwKJiM0MzsJCQkJICAgICAgIGMsICYjMzQ7SXImIzM0OywgcG9ydF93b3JkX2JpdCk7CiYjNDM7CQlpZiAoIW9sZCkgewomIzQzOwkJCXN0cnVjdCB2Y3B1X2luZm8gKnZpID0gZ3BjLSZndDtraHZhOwomIzQzOwomIzQzOwkJCS8qIE5vIG5lZWQgZm9yIGNvbXBhdCBoYW5kbGluZyAqLwomIzQzOwkJCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpICE9CiYjNDM7CQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF92Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykpOwomIzQzOwomIzQzOwkJCVdSSVRFX09OQ0UodmktJmd0O2V2dGNobl91cGNhbGxfcGVuZGluZywgMSk7CiYjNDM7CQkJa2lja192Y3B1ID0gdHJ1ZTsKIAkJfQogCiAJCS8qIEZvciB0aGUgcGVyLXZDUFUgbGFwaWMgdmVjdG9yLCBkZWxpdmVyIGl0IGFzIE1TSS4gKi8KQEAgLTE5NzQsNyAmIzQzOzIwMjIsNyBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAogCS8qCi0JICogRG9uJiMzOTt0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2YgbWF4X2V2dGNobl9wb3J0KCkuCiYjNDM7CSAqIERvbiYjMzk7dCBjaGVjayBmb3IgdGhlIHBvcnQgYmVpbmcgd2l0aGluIHJhbmdlIG9mIGt2bV9tYXhfZXZ0Y2huX3BvcnQoKS4KIAkgKiBVc2Vyc3BhY2UgY2FuIGNvbmZpZ3VyZSB3aGF0IGV2ZXIgdGFyZ2V0cyBpdCBsaWtlczsgZXZlbnRzIGp1c3Qgd29uJiMzOTt0CiAJICogYmUgZGVsaXZlcmVkIGlmL3doaWxlIHRoZSB0YXJnZXQgaXMgaW52YWxpZCwganVzdCBsaWtlIHVzZXJzcGFjZSBjYW4KIAkgKiBjb25maWd1cmUgTVNJcyB3aGljaCB0YXJnZXQgbm9uLWV4aXN0ZW50IEFQSUNzLgpAQCAtMTk4Myw4ICYjNDM7MjAzMSw4IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sCiAJICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcywKIAkgKiB3aXRob3V0IGltcG9zaW5nIGFuIG9yZGVyaW5nIGRlcGVuZGVuY3kgb24gdXNlcnNwYWNlLiAgSW4gdGhpcwogCSAqIHBhcnRpY3VsYXIgY2FzZSwgdGhlIHByb2JsZW1hdGljIG9yZGVyaW5nIHdvdWxkIGJlIHdpdGggc2V0dGluZyB0aGUKLQkgKiBYZW4gJiMzOTtsb25nIG1vZGUmIzM5OyBmbGFnLCB3aGljaCBjaGFuZ2VzIG1heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93IDQwOTYKLQkgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuCiYjNDM7CSAqIFhlbiAmIzM5O2xvbmcgbW9kZSYjMzk7IGZsYWcsIHdoaWNoIGNoYW5nZXMga3ZtX21heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93CiYjNDM7CSAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLgogCSAqLwogCiAJLyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqLwpAQCAtMjAyMSw3ICYjNDM7MjA2OSw3IEBAIGludCBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfeGVuX2V2dGNobiAqCiAJc3RydWN0IGt2bV94ZW5fZXZ0Y2huIGU7CiAJaW50IHJldDsKIAotCWlmICghdXhlLSZndDtwb3J0IHx8IHV4ZS0mZ3Q7cG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCF1eGUtJmd0O3BvcnQgfHwgdXhlLSZndDtwb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovCkBAIC0yMTMxLDcgJiM0MzsyMTc5LDcgQEAgc3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwKIAogCWNhc2UgRVZUQ0hOU1RBVF9pbnRlcmRvbWFpbjoKIAkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7Ci0JCQlpZiAoZGF0YS0mZ3Q7dS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgJmd0Oz0gbWF4X2V2dGNobl9wb3J0KGt2bSkpCiYjNDM7CQkJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0ICZndDs9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKIAkJCQlnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi8KIAkJfSBlbHNlIHsKIAkJCWV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChkYXRhLSZndDt1LmV2dGNobi5kZWxpdmVyLmV2ZW50ZmQuZmQpOwpAQCAtMjI0OSw3ICYjNDM7MjI5Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhCiAJaWYgKGRhdGEtJmd0O3UuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKQogCQlyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7CiAKLQlpZiAoIXBvcnQgfHwgcG9ydCAmZ3Q7PSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSkKJiM0MzsJaWYgKCFwb3J0IHx8IHBvcnQgJmd0Oz0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkYXRhLSZndDt1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9ERUFTU0lHTikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaAppbmRleCA1OWU2MTI4YTdiZDNjLi4zZThjOTMwNmViODk2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3hlbi5oCkBAIC0yNDgsNiAmIzQzOzI0OCwxMSBAQCBzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvIHsKICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqCQkJCVwKIAkJCQkgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXAogCQkJCQkJICAgZXZ0Y2huX3BlbmRpbmcpKQomIzQzOwomIzQzOy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJiMzOTtzICFoYXNfMzJiaXRfc2hpbmZvKCkuICovCiYjNDM7I2RlZmluZSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSBcCiYjNDM7CShJU19FTkFCTEVEKENPTkZJR182NEJJVCkgJmFtcDsmYW1wOyBSRUFEX09OQ0UoKGt2bSktJmd0O2FyY2gueGVuLmxvbmdfbW9kZSkpCiYjNDM7CiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7CiAgICAgaW50IHN0YXRlOwogICAgIHVpbnQ2NF90IHN0YXRlX2VudHJ5X3RpbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uZDc0MDZjMTBlMDkwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODU0LDYgJiM0Mzs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydDsKIAlnZm5fdCBtbXVfaW52YWxpZGF0ZV9yYW5nZV9lbmQ7CiAKJiM0MzsJdW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwogCXU2NCBtYW51YWxfZGlydHlfbG9nX3Byb3RlY3Q7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA0NWU3ODQ0NjJlYzZlLi5kMjQ3Zjc0MWQxZTNmIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTgxMiw2ICYjNDM7ODEyLDE2IEBAIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCiAKIAkvKiBQYWlycyB3aXRoIHRoZSBpbmNyZW1lbnQgaW4gcmFuZ2Vfc3RhcnQoKS4gKi8KIAlzcGluX2xvY2soJmFtcDtrdm0tJmd0O21uX2ludmFsaWRhdGVfbG9jayk7CiYjNDM7CWt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGUKJiM0MzsJICogR1BDIHNlcXVlbmNlIGluY3JlYXNlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgdGhlIGludmFsaWRhdGUgY291bnQKJiM0MzsJICogZ29lcyB0byB6ZXJvLiAgUGFpcnMgd2l0aCB0aGUgc21wX3JtYigpIGluCiYjNDM7CSAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3dtYigpOwomIzQzOwogCWlmICghV0FSTl9PTl9PTkNFKCFrdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSkKIAkJLS1rdm0tJmd0O21uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50OwogCXdha2UgPSAha3ZtLSZndDttbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jCmluZGV4IDcyOGQyYzFiNDg4YTguLjM2NTk2ODZiOTdjMjQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuYwpAQCAtMTI0LDcgJiM0MzsxMjQsNyBAQCBzdGF0aWMgdm9pZCBncGNfdW5tYXAoa3ZtX3Bmbl90IHBmbiwgdm9pZCAqa2h2YSkKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdwY19zZXEpCiB7CiAJLyoKIAkgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMKQEAgLTEzNiwyMCAmIzQzOzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfcwogCSAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50CiAJICogaXMgbm90IHByb3RlY3RlZCBieSBncGMtJmd0O2xvY2suICBJdCBpcyBndWFyYW50ZWVkIHRvCiAJICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLSZndDtsb2NrLCBhbmQKLQkgKiBpc24mIzM5O3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC4KJiM0MzsJICogaXNuJiMzOTt0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuCiAJICovCiAJaWYgKGt2bS0mZ3Q7bW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBFbnN1cmUgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgaXMgcmVhZCBiZWZvcmUKLQkgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbgotCSAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlCiYjNDM7CSAqIGdwY19pbnZhbGlkYXRlX3NlcS4gIFRoaXMgcGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluCiYjNDM7CSAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZQogCSAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZQotCSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KJiM0MzsJICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLgogCSAqLwogCXNtcF9ybWIoKTsKLQlyZXR1cm4ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTsKJiM0MzsJcmV0dXJuIGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU4LDcgJiM0MzsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAl2b2lkICpvbGRfa2h2YSA9ICh2b2lkICopUEFHRV9BTElHTl9ET1dOKCh1aW50cHRyX3QpZ3BjLSZndDtraHZhKTsKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCWdwYy0mZ3Q7dmFsaWQgPSBmYWxzZTsKIAogCWRvIHsKLQkJbW11X3NlcSA9IGdwYy0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQlncGNfc2VxID0gZ3BjLSZndDtrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcTsKIAkJc21wX3JtYigpOwogCiAJCXdyaXRlX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwpAQCAtMjMyLDcgJiM0MzsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAkJICogYXR0ZW1wdGluZyB0byByZWZyZXNoLgogCQkgKi8KIAkJV0FSTl9PTl9PTkNFKGdwYy0mZ3Q7dmFsaWQpOwotCX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSkpOwomIzQzOwl9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLSZndDtrdm0sIGdwY19zZXEpKTsKIAogCWdwYy0mZ3Q7dmFsaWQgPSB0cnVlOwogCWdwYy0mZ3Q7cGZuID0gbmV3X3BmbjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE1CgkJCQkJCQlvdXRwdXQ6IDI1NwoJCQkJCQkJdGhvdWdodHM6IDIyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNLVhlbiBQYXRjaCBBbmFseXNpczogU2FmZXR5IEZpcnN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgS1ZNLVhlbiBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGxlYW5zIHRvd2FyZHMgYSBsb3ctcmlzayBwcm9maWxlLCBmb2N1c2luZyBvbiBhbGlnbm1lbnQgZml4ZXMsIGF0b21pYyBvcGVyYXRpb24gaGFuZGxpbmcgb24gZ3Vlc3QgbWVtb3J5LCBhbmQgYSBHUEMgc2VxdWVuY2UgY291bnRlci4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmaWxlczogYGFyY2gveDg2L2t2bS94ZW4uY2AsIGBhcmNoL3g4Ni9rdm0veGVuLmhgLCBgaW5jbHVkZS9saW51eC9rdm1faG9zdC5oYCwgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLgoKVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AgcmV2b2x2ZXMgYXJvdW5kIGFkYXB0aW5nIHRvIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIHRoZSBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpICZhbXA7JmFtcDsga3ZtLSZndDthcmNoLnhlbi5sb25nX21vZGVgIGNoZWNrIHdpdGggYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYC4gVGhpcyBpbnZvbHZlcyBpbnRyb2R1Y2luZyBga3ZtX21heF9ldnRjaG5fcG9ydGAgYW5kIGBtYXhfZXZ0Y2huX3BvcnRgIHdoaWNoIGRlcGVuZCBvbiBgaGFzXzY0Yml0X3NoaW5mb2AuIEZ1cnRoZXJtb3JlLCBpdCYjMzk7cyBtb2RpZnlpbmcgaG93IHBlbmRpbmcgZXZlbnRzIGFyZSBpbmplY3RlZCBmb3IgNjQtYml0IGFsaWdubWVudCBhbmQgYXRvbWljIG9wZXJhdGlvbiBoYW5kbGluZy4gVGhlIHBhdGNoIGFsc28gYWRkcyBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGZvciBgZ3BhYCBhbmQgYGh2YWAuIFRoZSBgZ3VhcmQoc3JjdSkoJmFtcDt2LSZndDtrdm0tJmd0O3NyY3UpO2AgaGFzIGJlZW4gYWRkZWQgaW4gYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YC4gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBub3cgdXNlcyBgR0VOX0JJTkFSWV9STVdjY2AgZm9yIGJpdCB0ZXN0aW5nIGd1ZXN0LWNvbnRyb2xsZWQgbWVtb3J5LCBpbnN0ZWFkIG9mIHRoZSBvbGQgbWV0aG9kLgoKVGhlIGludHJvZHVjdGlvbiBvZiBgZ3BjX2ludmFsaWRhdGVfc2VxYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AgYW5kIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYCBpcyBpbXBvcnRhbnQgZm9yIGRlY291cGxpbmcgdGhlIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2UgZnJvbSB0aGUgTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gVGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBsb2dpYyBmbGF3IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEd1ZXN0IFBhZ2UgQ2FjaGUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LgoKTXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgZGVsdmUgZGVlcGVyOgoKKiAgIFRoZSBhbGlnbm1lbnQgY2hlY2tzIGFkZGVkIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIChlLmcuLCBgaWYgKCFJU19BTElHTkVEKGRhdGEtJmd0O3UuZ3BhLCBzaXplb2YodTMyKSkpYCkgYXJlIHN0YW5kYXJkIGVycm9yIHJldHVybnMuCiogICBUaGUgYWRqdXN0bWVudHMgaW4gYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCBkZWFsIHdpdGggaGFuZGxpbmcgdW5hbGlnbmVkIGF0b21pYyBvcGVyYXRpb25zLCB1c2luZyBgYXRvbWljNjRfb3JgIHdoZW4gYWxpZ25lZCBhbmQgYGF0b21pY19vcmAgd2l0aCBhcHByb3ByaWF0ZSBzaGlmdHMgd2hlbiB1bmFsaWduZWQuIFRoaXMgbG9va3Mgc2FmZS4KKiAgIFRoZSBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIGNoYW5nZSB3aXRoIGBHRU5fQklOQVJZX1JNV2NjYCBpcyBhIGJpdCB0ZXN0IGFuZCBzZXQgb24gZ3Vlc3QgbWVtb3J5LiBUaGUgZ3Vlc3Qgb3ducyB0aGlzIG1lbW9yeSwgc28gdGhpcyBpcyBleHBlY3RlZC4KKiAgIFRoZSBzZXF1ZW5jZSBjb3VudGVyIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgIGFkZHJlc3NlcyB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVzZSBvZiBtZW1vcnkgcmVhZCBmcm9tIGd1ZXN0IHNwYWNlLgoKU3BlY2lmaWNhbGx5LCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgdGhlIHJlYWQgb2YgYG9uZXNob3RgIGludG8gdGhlIHN0YWNrIGFuZCBwb3RlbnRpYWxseSBpdHMgc3Vic2VxdWVudCB1c2Ugd2FycmFudHMgZnVydGhlciBleGFtaW5hdGlvbi4gVGhlcmUgaXMgYSBzaXplIGRpc3Bhcml0eSBjaGVjayBiYXNlZCBvbiAzMi1iaXQgdnMgNjQtYml0IGd1ZXN0LCBhcyBpdCBtYXkgcmVhZCBkaWZmZXJlbnQgc2l6ZWQgc3RydWN0cyBmcm9tIGd1ZXN0IG1lbW9yeS4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bGx5IGNoZWNraW5nIHRoZSBgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXJgIGFuZCBgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lcmAsIHRoZXkgYXJlIHRoZSBzYW1lIHNpemUuIFRoZXJlIGFyZSBjb21waWxlLXRpbWUgY2hlY2tzIGZvciB0aGlzLCBhbmQgdGhlIGNvZGUgYXBwZWFycyB0byBiZSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGRpZmZlcmluZyBndWVzdCBhcmNoaXRlY3R1cmVzICgzMiB2cyA2NCBiaXQpLiBUaGUgc3RydWN0dXJlIGNvbnRhaW5zIGEgdGltZW91dCBhbmQgZmxhZ3MsIHdoaWNoIGFyZSB1c2VkIGluIGBrdm1feGVuX3N0YXJ0X3RpbWVyYCwgYWZ0ZXIgdGhlIHJlYWQuIEFsbCBvZiB0aGUgZmllbGRzIGFyZSB1c2VkLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkkmIzM5O3ZlIGFsc28gY2hlY2tlZCBga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSlgLCB3aGljaCBpcyBqdXN0IGEgbWFjcm8gcmVwbGFjZW1lbnQuIFRoZSBjaGFuZ2VzIHRvIGBrdm1feGVuX3NjaGVkb3BfcG9sbGAsIHdoaWNoIGlzIGNoZWNraW5nIGFuZCBoYW5kbGluZyB0aGUgMzIvNjQgYml0IGRpZmZlcmVuY2VzIG9mIGEgc3RydWN0dXJlLCBhcmUgY29ycmVjdC4KCkluIHN1bW1hcnksIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFRoZXJlJiMzOTtzIG5vdGhpbmcgbmV3IGhlcmUgdGhhdCBJIGNhbiBzZWUgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIG9wZW4gdXAgc2VjdXJpdHkgaG9sZXMuCgpJIHdpbGwgdGhlcmVmb3JlIG1hcmsgdGhpcyBwYXRjaCBhcyBzYWZlLCB3aXRoIG5vIG5lZWQgZm9yIEtNU0FOIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBmaXhpbmcgYWxpZ25tZW50IGlzc3VlcywgYXRvbWljIG9wZXJhdGlvbnMgb24gZ3Vlc3QgbWVtb3J5LCBhbmQgYSBzZXF1ZW5jZSBjb3VudGVyIGZvciBHdWVzdCBQYWdlIENhY2hlIChHUEMpIGluIEtWTSBYZW4gZW11bGF0aW9uLiBJdCByZXBsYWNlcyBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlYCB3aXRoIGEgbWFjcm8gYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYCwgaGFuZGxlcyB1bmFsaWduZWQgYXRvbWljIG9wZXJhdGlvbnMgaW4gYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCwgdXNlcyBgYnRzbGAgZm9yIDMyLWJpdCBhbGlnbmVkIGd1ZXN0LWNvbnRyb2xsZWQgbWVtb3J5IGluIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGFuZCBpbnRyb2R1Y2VzIGBncGNfaW52YWxpZGF0ZV9zZXFgIHRvIHNlcGFyYXRlIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2UgZnJvbSBNTVUgaW52YWxpZGF0aW9uIHNlcXVlbmNlLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgc3VjaCBhcyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGFsaWdubWVudCBpc3N1ZXMsIGF0b21pYyBvcGVyYXRpb25zIG9uIGd1ZXN0IG1lbW9yeSwgYW5kIGEgc2VxdWVuY2UgY291bnRlciBmb3IgR3Vlc3QgUGFnZSBDYWNoZSAoR1BDKSBpbiBLVk0gWGVuIGVtdWxhdGlvbi4gSXQgcmVwbGFjZXMgYElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZWAgd2l0aCBhIG1hY3JvIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAsIGhhbmRsZXMgdW5hbGlnbmVkIGF0b21pYyBvcGVyYXRpb25zIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIHVzZXMgYGJ0c2xgIGZvciAzMi1iaXQgYWxpZ25lZCBndWVzdC1jb250cm9sbGVkIG1lbW9yeSBpbiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBhbmQgaW50cm9kdWNlcyBgZ3BjX2ludmFsaWRhdGVfc2VxYCB0byBzZXBhcmF0ZSBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGZyb20gTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6MTcuMTMyMzU1Mjg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NjIzMTUwNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9oeXBlcmNhbGxcIixcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1feGVuX3NldHVwX2V2dGNoblwiLFxuICAgIFwia3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRcIixcbiAgICBcImt2bV94ZW5faHZtX3NldF9hdHRyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBmaXhpbmcgYWxpZ25tZW50IGlzc3VlcywgYXRvbWljIG9wZXJhdGlvbnMgb24gZ3Vlc3QgbWVtb3J5LCBhbmQgYSBzZXF1ZW5jZSBjb3VudGVyIGZvciBHdWVzdCBQYWdlIENhY2hlIChHUEMpIGluIEtWTSBYZW4gZW11bGF0aW9uLiBJdCByZXBsYWNlcyBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlYCB3aXRoIGEgbWFjcm8gYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYCwgaGFuZGxlcyB1bmFsaWduZWQgYXRvbWljIG9wZXJhdGlvbnMgaW4gYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCwgdXNlcyBgYnRzbGAgZm9yIDMyLWJpdCBhbGlnbmVkIGd1ZXN0LWNvbnRyb2xsZWQgbWVtb3J5IGluIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGFuZCBpbnRyb2R1Y2VzIGBncGNfaW52YWxpZGF0ZV9zZXFgIHRvIHNlcGFyYXRlIEdQQyBpbnZhbGlkYXRpb24gc2VxdWVuY2UgZnJvbSBNTVUgaW52YWxpZGF0aW9uIHNlcXVlbmNlLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgc3VjaCBhcyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIDMyLWJpdC82NC1iaXQgc2hhcmVkIGluZm8gaGFuZGxpbmcsIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnksIGFuZCBwZm5jYWNoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUgYW5kIFhlbiBlbXVsYXRpb24sIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyMzoxNy4xMzIzNjEzMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2Njk4MTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg5NzNlMDhiZDY4ZjhkOTVlMzM0ZWQ1ZDZiZGM5OTczNGJlYzRkZjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTc6MjM6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXFxuaW5kZXggNjk0YjMxYzFmY2M5YS4uNDg5ODcyMWJjZmRkOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5AQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjX3NlY19oaSkgIT0gMHhjMGMpO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpIHtcXG4gXFx0XFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXFx1MDAzZWtodmE7XFxuIFxcbiBcXHRcXHR3Y19zZWNfaGkgPSBcXHUwMDI2c2hpbmZvLVxcdTAwM2V3Y19zZWNfaGk7XFxuQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sIHRpbWUpICE9XFxuIFxcdFxcdCAgICAgc2l6ZW9mKHZ4LVxcdTAwM2VydW5zdGF0ZV90aW1lcykpO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXFx1MDAzZWt2bSkpIHtcXG4gXFx0XFx0dXNlcl9sZW4gPSBzaXplb2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyk7XFxuIFxcdFxcdHRpbWVzX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8sXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XFxuQEAgLTY2MSwyOCArNjYxLDMyIEBAIHZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBOb3cgZ3BjLVxcdTAwM2VraHZhIGlzIGEgdmFsaWQga2VybmVsIGFkZHJlc3MgZm9yIHRoZSB2Y3B1X2luZm8gKi9cXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXFx1MDAzZWt2bSkpIHtcXG4gXFx0XFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXFx1MDAzZWtodmE7XFxuK1xcdFxcdHZvaWQgKnZpX3BlbmRpbmdfc2VsID0gXFx1MDAyNnZpLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWw7XFxuIFxcbi1cXHRcXHRhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggXFxcIm9ycSAlMCwgJTFcXFxcblxcXCJcXG4tXFx0XFx0XFx0ICAgICBcXFwibm90cSAlMFxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIExPQ0tfUFJFRklYIFxcXCJhbmRxICUwLCAlMlxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIDogXFxcIj1yXFxcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCIrbVxcXCIgKHZpLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxcbi1cXHRcXHRcXHQgICAgICAgXFxcIittXFxcIiAodi1cXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxcbi1cXHRcXHRcXHQgICAgIDogXFxcIjBcXFwiIChldnRjaG5fcGVuZGluZ19zZWwpKTtcXG4rXFx0XFx0aWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdmlfcGVuZGluZ19zZWwsIHNpemVvZih1NjQpKSkge1xcbitcXHRcXHRcXHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgdmlfcGVuZGluZ19zZWwpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCxcXG4rXFx0XFx0XFx0ICogd2hlcmUgZXZ0Y2huX3BlbmRpbmdfc2VsIGlzIDMyIGJpdHMgd2lkZSBhbmQgdGhpc1xcbitcXHRcXHRcXHQgKiBicmFuY2ggaXMgdW5yZWFjaGFibGUgYW55d2F5ICh0aGlzIGlzIGluc2lkZVxcbitcXHRcXHRcXHQgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb25cXG4rXFx0XFx0XFx0ICogSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCBcXHUwMDNlXFx1MDAzZSAzMixcXG4rXFx0XFx0XFx0XFx0ICB2aV9wZW5kaW5nX3NlbCArIDQpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRhdG9taWM2NF9hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVxcdTAwMjZ2LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR1MzIgZXZ0Y2huX3BlbmRpbmdfc2VsMzIgPSBldnRjaG5fcGVuZGluZ19zZWw7XFxuIFxcdFxcdHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvICp2aSA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFxuLVxcdFxcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcXFwib3JsICUwLCAlMVxcXFxuXFxcIlxcbi1cXHRcXHRcXHQgICAgIFxcXCJub3RsICUwXFxcXG5cXFwiXFxuLVxcdFxcdFxcdCAgICAgTE9DS19QUkVGSVggXFxcImFuZGwgJTAsICUyXFxcXG5cXFwiXFxuLVxcdFxcdFxcdCAgICAgOiBcXFwiPXJcXFwiIChldnRjaG5fcGVuZGluZ19zZWwzMiksXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiK21cXFwiICh2aS1cXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSxcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCIrbVxcXCIgKHYtXFx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbClcXG4tXFx0XFx0XFx0ICAgICA6IFxcXCIwXFxcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTtcXG4rXFx0XFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcXHUwMDI2dmktXFx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCk7XFxuK1xcdFxcdGF0b21pY19hbmRub3QoZXZ0Y2huX3BlbmRpbmdfc2VsLCAodm9pZCAqKVxcdTAwMjZ2LVxcdTAwM2VhcmNoLnhlbi5ldnRjaG5fcGVuZGluZ19zZWwpO1xcbiBcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbiBcXHR9XFxuIFxcbkBAIC03MTMsNiArNzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2YocmMpICE9XFxuIFxcdFxcdCAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fdXBjYWxsX3BlbmRpbmcpKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGt2bV9ncGNfY2hlY2soKSBjaGVja3MgdGhlIG1lbXNsb3QgZ2VuZXJhdGlvbiwgc28ga3ZtLVxcdTAwM2VzcmN1IG11c3QgYmVcXG4rXFx0ICogaGVsZC4gTW9zdCBjYWxsZXJzIGhvbGQgaXQgYWxyZWFkeSwgYnV0IHRoaXMgaXMgYWxzbyByZWFjaGVkIGZyb21cXG4rXFx0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcXG4rXFx0ICogd2hlcmUgdmNwdV9lbnRlcl9ndWVzdCgpIGhhcyBhbHJlYWR5IGRyb3BwZWQgdGhlIHZDUFUncyBTUkNVIGxvY2suXFxuK1xcdCAqIFRha2luZyBTUkNVIGRvZXMgbm90IHNsZWVwLCBzbyBpdCBpcyBzYWZlIGV2ZW4gaW4gdGhlIGF0b21pYyBjYXNlXFxuK1xcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRndWFyZChzcmN1KShcXHUwMDI2di1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG4rXFxuIFxcdHJlYWRfbG9ja19pcnFzYXZlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0d2hpbGUgKCFrdm1fZ3BjX2NoZWNrKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbiBcXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5AQCAtOTI2LDYgKzk0MCwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0ciA9IC1FTlhJTztcXG4rXFx0XFx0XFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXFx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtOTM1LDYgKzk1MywxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0ciA9IC1FTlhJTztcXG4rXFx0XFx0XFx0aWYgKCFJU19BTElHTkVEKGRhdGEtXFx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLVxcdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcXG4gXFx0XFx0fVxcbkBAIC05NzgsNyArMTAwMCw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuIFxcdFxcdCAqIGFkZHJlc3MsIHRoYXQncyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxcbiBcXHRcXHQgKiB3aWxsIGNvcGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxcbitcXHRcXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdFxcdHN6ID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHN6ID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvKTtcXG5AQCAtMTQyMiwxNiArMTQ0NCwyMSBAQCBzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHZjcHUsIHJ1bi1cXHUwMDNleGVuLnUuaGNhbGwucmVzdWx0KTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KHN0cnVjdCBrdm0gKmt2bSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcXG4ge1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbylcXG4gXFx0XFx0cmV0dXJuIEVWVENITl8yTF9OUl9DSEFOTkVMUztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUztcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxcbi1cXHRcXHRcXHQgICAgICAgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sXFxuK1xcdFxcdFxcdCAgICAgICBpbnQgbnJfcG9ydHMsIGV2dGNobl9wb3J0X3QgKnBvcnRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcXG5AQCAtMTQ0Niw3ICsxNDczLDcgQEAgc3RhdGljIGJvb2wgd2FpdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG5yX3BvcnRzLFxcbiBcXHRcXHRnb3RvIG91dF9yY3U7XFxuIFxcbiBcXHRyZXQgPSBmYWxzZTtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xcbitcXHRpZiAoaGFzXzY0Yml0X3NoaW5mbykge1xcbiBcXHRcXHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFx0XFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZztcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTQ2OCw5ICsxNDk1LDEwIEBAIHN0YXRpYyBib29sIHdhaXRfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBucl9wb3J0cyxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbitzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXFxuIFxcdFxcdFxcdFxcdCB1NjQgcGFyYW0sIHU2NCAqcilcXG4ge1xcbitcXHRib29sIGhhc182NGJpdF9zaGluZm8gPSBrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0c3RydWN0IHNjaGVkX3BvbGwgc2NoZWRfcG9sbDtcXG4gXFx0ZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7XFxuIFxcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XFxuQEAgLTE0ODAsNyArMTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcXG4gXFx0ICAgICEodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLmZsYWdzIFxcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiAhbG9uZ21vZGUpIHtcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiAhaXNfNjRiaXQpIHtcXG4gXFx0XFx0c3RydWN0IGNvbXBhdF9zY2hlZF9wb2xsIHNwMzI7XFxuIFxcbiBcXHRcXHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cXG5AQCAtMTUyOSw3ICsxNTU3LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2NoZWRfcG9sbC5ucl9wb3J0czsgaSsrKSB7XFxuLVxcdFxcdGlmIChwb3J0c1tpXSBcXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQodmNwdS1cXHUwMDNla3ZtKSkge1xcbitcXHRcXHRpZiAocG9ydHNbaV0gXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKSB7XFxuIFxcdFxcdFxcdCpyID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG5AQCAtMTU0Miw3ICsxNTcwLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbiBcXG4gXFx0c2V0X2JpdCh2Y3B1LVxcdTAwM2V2Y3B1X2lkeCwgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnhlbi5wb2xsX21hc2spO1xcbiBcXG4tXFx0aWYgKCF3YWl0X3BlbmRpbmdfZXZlbnQodmNwdSwgc2NoZWRfcG9sbC5ucl9wb3J0cywgcG9ydHMpKSB7XFxuK1xcdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIGhhc182NGJpdF9zaGluZm8sIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xcbiBcXHRcXHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xcbiBcXG4gXFx0XFx0aWYgKHNjaGVkX3BvbGwudGltZW91dClcXG5AQCAtMTU3NywxMiArMTYwNSwxMiBAQCBzdGF0aWMgdm9pZCBjYW5jZWxfZXZ0Y2huX3BvbGwoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2NoZWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLFxcbitzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpc182NGJpdCxcXG4gXFx0XFx0XFx0XFx0ICAgaW50IGNtZCwgdTY0IHBhcmFtLCB1NjQgKnIpXFxuIHtcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XFxuLVxcdFxcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxcbitcXHRcXHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRjYXNlIFNDSEVET1BfeWllbGQ6XFxuQEAgLTE2MDEsNyArMTYyOSw3IEBAIHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7XFxuICAgICB1aW50MzJfdCBmbGFncztcXG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcXG4gXFxuLXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXFxuIFxcdFxcdFxcdFxcdCAgaW50IHZjcHVfaWQsIHU2NCBwYXJhbSwgdTY0ICpyKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIG9uZXNob3Q7XFxuQEAgLTE2MzMsNyArMTY2MSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXFxuIFxcdFxcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cXG4gXFx0XFx0XFx0ICAgICBzaXplb2ZfZmllbGQoc3RydWN0IHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIsIGZsYWdzKSk7XFxuIFxcbi1cXHRcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBwYXJhbSwgXFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcXG4rXFx0XFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFxcdTAwMjZvbmVzaG90LCBpc182NGJpdCA/IHNpemVvZihvbmVzaG90KSA6XFxuIFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXIpLCBcXHUwMDI2ZSkpIHtcXG4gXFx0XFx0XFx0KnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMTY3Myw3ICsxNzAxLDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zZXRfdGltZXJfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCB0aW1lb3V0LFxcbiBcXG4gaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRib29sIGxvbmdtb2RlO1xcbitcXHRib29sIGlzXzY0Yml0O1xcbiBcXHR1NjQgaW5wdXQsIHBhcmFtc1s2XSwgciA9IC1FTk9TWVM7XFxuIFxcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xcbiBcXHR1OCBjcGw7XFxuQEAgLTE2ODMsOCArMTcxMSw4IEBAIGludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXFxuIFxcdFxcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xcbiBcXG4tXFx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xcbi1cXHRpZiAoIWxvbmdtb2RlKSB7XFxuK1xcdGlzXzY0Yml0ID0gaXNfNjRfYml0X2h5cGVyY2FsbCh2Y3B1KTtcXG4rXFx0aWYgKCFpc182NGJpdCkge1xcbiBcXHRcXHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcXG4gXFx0XFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xcbiBcXHRcXHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XFxuQEAgLTE3MzAsMTcgKzE3NTgsMTcgQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQodmNwdSwgcGFyYW1zWzFdLCBcXHUwMDI2cik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIF9fSFlQRVJWSVNPUl9zY2hlZF9vcDpcXG4tXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSxcXG4rXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2NoZWRfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHBhcmFtc1sxXSwgXFx1MDAyNnIpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcXG4tXFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXFxuK1xcdFxcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRwYXJhbXNbMl0sIFxcdTAwMjZyKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgX19IWVBFUlZJU09SX3NldF90aW1lcl9vcDoge1xcbiBcXHRcXHR1NjQgdGltZW91dCA9IHBhcmFtc1swXTtcXG4gXFx0XFx0LyogSW4gMzItYml0IG1vZGUsIHRoZSA2NC1iaXQgdGltZW91dCBpcyBpbiB0d28gMzItYml0IHBhcmFtcy4gKi9cXG4tXFx0XFx0aWYgKCFsb25nbW9kZSlcXG4rXFx0XFx0aWYgKCFpc182NGJpdClcXG4gXFx0XFx0XFx0dGltZW91dCB8PSBwYXJhbXNbMV0gXFx1MDAzY1xcdTAwM2MgMzI7XFxuIFxcdFxcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NldF90aW1lcl9vcCh2Y3B1LCB0aW1lb3V0LCBcXHUwMDI2cik7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xNzU1LDcgKzE3ODMsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBoYW5kbGVfaW5fdXNlcnNwYWNlOlxcbiBcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWEVOO1xcbiBcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xcbi1cXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gbG9uZ21vZGU7XFxuK1xcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBpc182NGJpdDtcXG4gXFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XFxuIFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNleGVuLnUuaGNhbGwuaW5wdXQgPSBpbnB1dDtcXG4gXFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5wYXJhbXNbMF0gPSBwYXJhbXNbMF07XFxuQEAgLTE3OTUsOCArMTgyMyw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXFxuIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYyA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcXG4rXFx0Ym9vbCBoYXNfNjRiaXRfc2hpbmZvID0ga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cywgdmlfcGVuZGluZ19zZWxfb2ZzO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLVxcdHVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfYml0cywgKm1hc2tfYml0cztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IHBvcnRfd29yZF9iaXQ7XFxuIFxcdGJvb2wga2lja192Y3B1ID0gZmFsc2U7XFxuQEAgLTE4MTIsNyArMTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdFxcdFdSSVRFX09OQ0UoeGUtXFx1MDAzZXZjcHVfaWR4LCB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh4ZS1cXHUwMDNlcG9ydCBcXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcXG4rXFx0aWYgKHhlLVxcdTAwM2Vwb3J0IFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChoYXNfNjRiaXRfc2hpbmZvKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyYyA9IC1FV09VTERCTE9DSztcXG5AQCAtMTgyMywxNiArMTg1MiwyMyBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRpZiAoIWt2bV9ncGNfY2hlY2soZ3BjLCBQQUdFX1NJWkUpKVxcbiBcXHRcXHRnb3RvIG91dF9yY3U7XFxuIFxcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IGt2bS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XFxuK1xcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XFxuIFxcdFxcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVxcdTAwM2VraHZhO1xcbiBcXHRcXHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZzaGluZm8tXFx1MDAzZWV2dGNobl9wZW5kaW5nO1xcbiBcXHRcXHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZzaGluZm8tXFx1MDAzZWV2dGNobl9tYXNrO1xcbiBcXHRcXHRwb3J0X3dvcmRfYml0ID0geGUtXFx1MDAzZXBvcnQgLyA2NDtcXG4rXFxuK1xcdFxcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl9wZW5kaW5nX3NlbCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cXHUwMDNla2h2YTtcXG4gXFx0XFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZztcXG4gXFx0XFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2c2hpbmZvLVxcdTAwM2VldnRjaG5fbWFzaztcXG4gXFx0XFx0cG9ydF93b3JkX2JpdCA9IHhlLVxcdTAwM2Vwb3J0IC8gMzI7XFxuK1xcbitcXHRcXHR2aV9wZW5kaW5nX3NlbF9vZnMgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcXG4rXFxuK1xcdFxcdC8qIHRlc3RfYW5kX3NldF9iaXQoKSBuZWVkcyA2NC1iaXQgYWxpZ25tZW50LCBidXQgdGhhdCdzIE9LICovXFxuK1xcdFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3NoYXJlZF9pbmZvLCBldnRjaG5fcGVuZGluZykgXFx1MDAyNiA3KTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtMTg0OCw2ICsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0XFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xcbiBcXHRcXHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cXHUwMDNlcG9ydCk7XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdGJvb2wgb2xkO1xcbitcXG4gXFx0XFx0cmMgPSAxOyAvKiBEZWxpdmVyZWQgdG8gdGhlIGJpdG1hcCBpbiBzaGFyZWRfaW5mby4gKi9cXG4gXFx0XFx0LyogTm93IHN3aXRjaCB0byB0aGUgdkNQVSdzIHZjcHVfaW5mbyB0byBzZXQgdGhlIGluZGV4IGFuZCBwZW5kaW5nX3NlbCAqL1xcbiBcXHRcXHRyZWFkX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncGMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5AQCAtMTg2NCwxOSArMTkwMiwyOSBAQCBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9yY3U7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcXG4tXFx0XFx0XFx0c3RydWN0IHZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVxcdTAwM2VraHZhO1xcbi1cXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXFx1MDAyNnZjcHVfaW5mby1cXHUwMDNlZXZ0Y2huX3BlbmRpbmdfc2VsKSkge1xcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKHZjcHVfaW5mby1cXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcXG4tXFx0XFx0XFx0XFx0a2lja192Y3B1ID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVxcdTAwM2VraHZhO1xcbi1cXHRcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2dmNwdV9pbmZvLVxcdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpKSB7XFxuLVxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbi1cXHRcXHRcXHRcXHRraWNrX3ZjcHUgPSB0cnVlO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEV4cGxpY2l0bHkgdXNlIGEgMzItYml0IGJ0c2wgaW5zdGVhZCBvZiB0ZXN0X2FuZF9zZXRfYml0KCksXFxuK1xcdFxcdCAqIHdoaWNoIHdvdWxkIHVzZSBidHNxIG9uIHg4Ni02NC4gVGhlIHZjcHVfaW5mbyBpcyBndWVzdC1cXG4rXFx0XFx0ICogY29udHJvbGxlZCBhbmQgb25seSByZXF1aXJlZCB0byBiZSAzMi1iaXQgYWxpZ25lZCwgc28gYVxcbitcXHRcXHQgKiA2NC1iaXQgYWNjZXNzIGNvdWxkIGdlbmVyYXRlIGEgc3BsaXQtbG9jayAjQUMuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIE5vdGUsIHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIHRlc3RfYW5kX3NldF9iaXQoKSBvblxcbitcXHRcXHQgKiBwZW5kaW5nX2JpdHMgYWJvdmU6IHRoYXQgaXMgaW4gdGhlIHBlci1WTSBzaGFyZWRfaW5mbywgd2hpY2hcXG4rXFx0XFx0ICogaXMgcGFnZSBhbGlnbmVkLCBzbyB0aGUgYWNjZXNzIGlzIGd1YXJhbnRlZWQgdG8gYmUgNjQtYml0XFxuK1xcdFxcdCAqIGFsaWduZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRvbGQgPSBHRU5fQklOQVJZX1JNV2NjKExPQ0tfUFJFRklYIFxcXCJidHNsXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgICoodTMyICopKGdwYy1cXHUwMDNla2h2YSArIHZpX3BlbmRpbmdfc2VsX29mcyksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjLCBcXFwiSXJcXFwiLCBwb3J0X3dvcmRfYml0KTtcXG4rXFx0XFx0aWYgKCFvbGQpIHtcXG4rXFx0XFx0XFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXFx1MDAzZWtodmE7XFxuK1xcbitcXHRcXHRcXHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cXG4rXFx0XFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCB2Y3B1X2luZm8sIGV2dGNobl91cGNhbGxfcGVuZGluZykgIT1cXG4rXFx0XFx0XFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XFxuK1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHZpLVxcdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xcbitcXHRcXHRcXHRraWNrX3ZjcHUgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBGb3IgdGhlIHBlci12Q1BVIGxhcGljIHZlY3RvciwgZGVsaXZlciBpdCBhcyBNU0kuICovXFxuQEAgLTE5NzQsNyArMjAyMiw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2YgbWF4X2V2dGNobl9wb3J0KCkuXFxuK1xcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxcbiBcXHQgKiBVc2Vyc3BhY2UgY2FuIGNvbmZpZ3VyZSB3aGF0IGV2ZXIgdGFyZ2V0cyBpdCBsaWtlczsgZXZlbnRzIGp1c3Qgd29uJ3RcXG4gXFx0ICogYmUgZGVsaXZlcmVkIGlmL3doaWxlIHRoZSB0YXJnZXQgaXMgaW52YWxpZCwganVzdCBsaWtlIHVzZXJzcGFjZSBjYW5cXG4gXFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cXG5AQCAtMTk4Myw4ICsyMDMxLDggQEAgaW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcXG4gXFx0ICogd2l0aG91dCBpbXBvc2luZyBhbiBvcmRlcmluZyBkZXBlbmRlbmN5IG9uIHVzZXJzcGFjZS4gIEluIHRoaXNcXG4gXFx0ICogcGFydGljdWxhciBjYXNlLCB0aGUgcHJvYmxlbWF0aWMgb3JkZXJpbmcgd291bGQgYmUgd2l0aCBzZXR0aW5nIHRoZVxcbi1cXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XFxuLVxcdCAqIGluc3RlYWQgb2YgMTAyNCBldmVudCBjaGFubmVscy5cXG4rXFx0ICogWGVuICdsb25nIG1vZGUnIGZsYWcsIHdoaWNoIGNoYW5nZXMga3ZtX21heF9ldnRjaG5fcG9ydCgpIHRvIGFsbG93XFxuK1xcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxcbiBcXHQgKi9cXG4gXFxuIFxcdC8qIFdlIG9ubHkgc3VwcG9ydCAyIGxldmVsIGV2ZW50IGNoYW5uZWxzIGZvciBub3cgKi9cXG5AQCAtMjAyMSw3ICsyMDY5LDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcXG4gXFx0c3RydWN0IGt2bV94ZW5fZXZ0Y2huIGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIXV4ZS1cXHUwMDNlcG9ydCB8fCB1eGUtXFx1MDAzZXBvcnQgXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuK1xcdGlmICghdXhlLVxcdTAwM2Vwb3J0IHx8IHV4ZS1cXHUwMDNlcG9ydCBcXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xcbkBAIC0yMTMxLDcgKzIxNzksNyBAQCBzdGF0aWMgaW50IGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXG4gXFx0Y2FzZSBFVlRDSE5TVEFUX2ludGVyZG9tYWluOlxcbiBcXHRcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQpIHtcXG4tXFx0XFx0XFx0aWYgKGRhdGEtXFx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0IFxcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxcbitcXHRcXHRcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXFx1MDAzZT0ga3ZtX21heF9ldnRjaG5fcG9ydChrdm0pKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dF9ub2V2ZW50ZmQ7IC8qIC1FSU5WQUwgKi9cXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0ZXZlbnRmZCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGRhdGEtXFx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIuZXZlbnRmZC5mZCk7XFxuQEAgLTIyNDksNyArMjI5Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhXFxuIFxcdGlmIChkYXRhLVxcdTAwM2V1LmV2dGNobi5mbGFncyA9PSBLVk1fWEVOX0VWVENITl9SRVNFVClcXG4gXFx0XFx0cmV0dXJuIGt2bV94ZW5fZXZlbnRmZF9yZXNldChrdm0pO1xcbiBcXG4tXFx0aWYgKCFwb3J0IHx8IHBvcnQgXFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGt2bSkpXFxuK1xcdGlmICghcG9ydCB8fCBwb3J0IFxcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRpZiAoZGF0YS1cXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fREVBU1NJR04pXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uaCBiL2FyY2gveDg2L2t2bS94ZW4uaFxcbmluZGV4IDU5ZTYxMjhhN2JkM2MuLjNlOGM5MzA2ZWI4OTYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3hlbi5oXFxuQEAgLTI0OCw2ICsyNDgsMTEgQEAgc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbyB7XFxuICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHQgICAgICBzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBldnRjaG5fcGVuZGluZykpXFxuK1xcbisvKiBMYXRjaGVkIFZNLXdpZGUgbW9kZTsgdGhlIEtWTSBlcXVpdmFsZW50IG9mIFhlbidzICFoYXNfMzJiaXRfc2hpbmZvKCkuICovXFxuKyNkZWZpbmUga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkgXFxcXFxcbitcXHQoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFxcdTAwMjZcXHUwMDI2IFJFQURfT05DRSgoa3ZtKS1cXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSlcXG4rXFxuIHN0cnVjdCBjb21wYXRfdmNwdV9ydW5zdGF0ZV9pbmZvIHtcXG4gICAgIGludCBzdGF0ZTtcXG4gICAgIHVpbnQ2NF90IHN0YXRlX2VudHJ5X3RpbWU7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IGFiOGNmYWVjODJkMzEuLmQ3NDA2YzEwZTA5MGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTg1NCw2ICs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHtcXG4gXFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQ7XFxuIFxcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX2VuZDtcXG4gXFxuK1xcdHVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxO1xcbitcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzO1xcbiBcXHR1NjQgbWFudWFsX2RpcnR5X2xvZ19wcm90ZWN0O1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCA0NWU3ODQ0NjJlYzZlLi5kMjQ3Zjc0MWQxZTNmIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTgxMiw2ICs4MTIsMTYgQEAgc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4gXFxuIFxcdC8qIFBhaXJzIHdpdGggdGhlIGluY3JlbWVudCBpbiByYW5nZV9zdGFydCgpLiAqL1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW5faW52YWxpZGF0ZV9sb2NrKTtcXG4rXFx0a3ZtLVxcdTAwM2VncGNfaW52YWxpZGF0ZV9zZXErKztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFzIHdpdGggdGhlIE1NVSBzZXF1ZW5jZSBjb3VudGVyIGFuZCBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzcywgdGhlXFxuK1xcdCAqIEdQQyBzZXF1ZW5jZSBpbmNyZWFzZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIGNvdW50XFxuK1xcdCAqIGdvZXMgdG8gemVyby4gIFBhaXJzIHdpdGggdGhlIHNtcF9ybWIoKSBpblxcbitcXHQgKiBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoKS5cXG4rXFx0ICovXFxuK1xcdHNtcF93bWIoKTtcXG4rXFxuIFxcdGlmICghV0FSTl9PTl9PTkNFKCFrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcXG4gXFx0XFx0LS1rdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50O1xcbiBcXHR3YWtlID0gIWt2bS1cXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXFxuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jXFxuKysrIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xcbkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBncGNfc2VxKVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlc1xcbkBAIC0xMzYsMjAgKzEzNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xcbiBcXHQgKiBOb3RlLCBpdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudFxcbiBcXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cXHUwMDNlbG9jay4gIEl0IGlzIGd1YXJhbnRlZWQgdG9cXG4gXFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVxcdTAwM2Vsb2NrLCBhbmRcXG4tXFx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cXG4rXFx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBncGNfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cXG4gXFx0ICovXFxuIFxcdGlmIChrdm0tXFx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxcbi1cXHQgKiBtbXVfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxcbi1cXHQgKiBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZVxcbitcXHQgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxcbitcXHQgKiBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCkgdG8gZ3VhcmFudGVlIGVpdGhlciB0aGVcXG4gXFx0ICogb2xkIChub24temVybykgdmFsdWUgb2YgbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgb3IgdGhlXFxuLVxcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cXG4rXFx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxcbiBcXHQgKi9cXG4gXFx0c21wX3JtYigpO1xcbi1cXHRyZXR1cm4ga3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcXG4rXFx0cmV0dXJuIGt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XFxuIH1cXG4gXFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuIFxcdHZvaWQgKm9sZF9raHZhID0gKHZvaWQgKilQQUdFX0FMSUdOX0RPV04oKHVpbnRwdHJfdClncGMtXFx1MDAzZWtodmEpO1xcbiBcXHRrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xcbiBcXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4rXFx0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFxuIFxcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XFxuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0Z3BjLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRtbXVfc2VxID0gZ3BjLVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0XFx0Z3BjX3NlcSA9IGdwYy1cXHUwMDNla3ZtLVxcdTAwM2VncGNfaW52YWxpZGF0ZV9zZXE7XFxuIFxcdFxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0XFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGdwYy1cXHUwMDNldmFsaWQpO1xcbi1cXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVxcdTAwM2Vrdm0sIG1tdV9zZXEpKTtcXG4rXFx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cXHUwMDNla3ZtLCBncGNfc2VxKSk7XFxuIFxcbiBcXHRncGMtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG4gXFx0Z3BjLVxcdTAwM2VwZm4gPSBuZXdfcGZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyMzoxNy42OTk5MTQ0NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDI0NjY4MzExNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJrdm1feGVuX2h5cGVyY2FsbFwiLFxuICAgIFwia3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RcIixcbiAgICBcImt2bV94ZW5fc2V0dXBfZXZ0Y2huXCIsXG4gICAgXCJrdm1feGVuX2h2bV9ldnRjaG5fc2VuZFwiLFxuICAgIFwia3ZtX3hlbl9odm1fc2V0X2F0dHJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gWGVuIGVtdWxhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZpeGluZyAzMi1iaXQvNjQtYml0IHNoYXJlZCBpbmZvIGhhbmRsaW5nLCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5LCBhbmQgcGZuY2FjaGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBjb2RlIGFuZCBYZW4gZW11bGF0aW9uLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYW5kIGd1ZXN0IGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk3M2UwOGJkNjhmOGQ5NWUzMzRlZDVkNmJkYzk5NzM0YmVjNGRmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE3OjIzOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSkge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFxuIFx0XHR3Y19zZWNfaGkgPSBcdTAwMjZzaGluZm8tXHUwMDNld2Nfc2VjX2hpO1xuQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuIFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCB0aW1lKSAhPVxuIFx0XHQgICAgIHNpemVvZih2eC1cdTAwM2VydW5zdGF0ZV90aW1lcykpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHR1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbiBcdFx0dGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyxcbiBcdFx0XHRcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XG5AQCAtNjYxLDI4ICs2NjEsMzIgQEAgdm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHR9XG4gXG4gXHQvKiBOb3cgZ3BjLVx1MDAzZWtodmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqL1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuK1x0XHR2b2lkICp2aV9wZW5kaW5nX3NlbCA9IFx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbDtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwib3JxICUwLCAlMVxcblwiXG4tXHRcdFx0ICAgICBcIm5vdHEgJTBcXG5cIlxuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCJhbmRxICUwLCAlMlxcblwiXG4tXHRcdFx0ICAgICA6IFwiPXJcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcbi1cdFx0XHQgICAgICAgXCIrbVwiICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcIjBcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7XG4rXHRcdGlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXZpX3BlbmRpbmdfc2VsLCBzaXplb2YodTY0KSkpIHtcbitcdFx0XHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCxcbitcdFx0XHQgKiB3aGVyZSBldnRjaG5fcGVuZGluZ19zZWwgaXMgMzIgYml0cyB3aWRlIGFuZCB0aGlzXG4rXHRcdFx0ICogYnJhbmNoIGlzIHVucmVhY2hhYmxlIGFueXdheSAodGhpcyBpcyBpbnNpZGVcbitcdFx0XHQgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb25cbitcdFx0XHQgKiBJU19FTkFCTEVEKENPTkZJR182NEJJVCkpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCBcdTAwM2VcdTAwM2UgMzIsXG4rXHRcdFx0XHQgIHZpX3BlbmRpbmdfc2VsICsgNCk7XG4rXHRcdH1cbitcbitcdFx0YXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHUzMiBldnRjaG5fcGVuZGluZ19zZWwzMiA9IGV2dGNobl9wZW5kaW5nX3NlbDtcbiBcdFx0c3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4tXHRcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcIm9ybCAlMCwgJTFcXG5cIlxuLVx0XHRcdCAgICAgXCJub3RsICUwXFxuXCJcbi1cdFx0XHQgICAgIExPQ0tfUFJFRklYIFwiYW5kbCAlMCwgJTJcXG5cIlxuLVx0XHRcdCAgICAgOiBcIj1yXCIgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSxcbi1cdFx0XHQgICAgICAgXCIrbVwiICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcIjBcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTtcbitcdFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpO1xuK1x0XHRhdG9taWNfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH1cbiBcbkBAIC03MTMsNiArNzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJjKSAhPVxuIFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4gXG4rXHQvKlxuK1x0ICoga3ZtX2dwY19jaGVjaygpIGNoZWNrcyB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uLCBzbyBrdm0tXHUwMDNlc3JjdSBtdXN0IGJlXG4rXHQgKiBoZWxkLiBNb3N0IGNhbGxlcnMgaG9sZCBpdCBhbHJlYWR5LCBidXQgdGhpcyBpcyBhbHNvIHJlYWNoZWQgZnJvbVxuK1x0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcbitcdCAqIHdoZXJlIHZjcHVfZW50ZXJfZ3Vlc3QoKSBoYXMgYWxyZWFkeSBkcm9wcGVkIHRoZSB2Q1BVJ3MgU1JDVSBsb2NrLlxuK1x0ICogVGFraW5nIFNSQ1UgZG9lcyBub3Qgc2xlZXAsIHNvIGl0IGlzIHNhZmUgZXZlbiBpbiB0aGUgYXRvbWljIGNhc2VcbitcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXG4rXHQgKi9cbitcdGd1YXJkKHNyY3UpKFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuK1xuIFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHdoaWxlICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHtcbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTkyNiw2ICs5NDAsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRyID0gLUVOWElPO1xuK1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXG4rXHRcdFx0XHRicmVhaztcbitcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0ICAgICBkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTkzNSw2ICs5NTMsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRyID0gLUVOWElPO1xuK1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXG4rXHRcdFx0XHRicmVhaztcbitcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXG4gXHRcdFx0XHRcdFx0IGRhdGEtXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH1cbkBAIC05NzgsNyArMTAwMCw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdCAqIGFkZHJlc3MsIHRoYXQncyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxuIFx0XHQgKiB3aWxsIGNvcGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4rXHRcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRcdHN6ID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xuIFx0XHRlbHNlXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pO1xuQEAgLTE0MjIsMTYgKzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVx1MDAzZXhlbi51LmhjYWxsLnJlc3VsdCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4rc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxuK1x0aWYgKGhhc182NGJpdF9zaGluZm8pXG4gXHRcdHJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4tXHRcdFx0ICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKVxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpO1xuK31cbitcbitzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sXG4rXHRcdFx0ICAgICAgIGludCBucl9wb3J0cywgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbkBAIC0xNDQ2LDcgKzE0NzMsNyBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbiBcdHJldCA9IGZhbHNlO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuK1x0aWYgKGhhc182NGJpdF9zaGluZm8pIHtcbiBcdFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcdFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XG4gXHR9IGVsc2Uge1xuQEAgLTE0NjgsOSArMTQ5NSwxMCBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LFxuIFx0XHRcdFx0IHU2NCBwYXJhbSwgdTY0ICpyKVxuIHtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSk7XG4gXHRzdHJ1Y3Qgc2NoZWRfcG9sbCBzY2hlZF9wb2xsO1xuIFx0ZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuQEAgLTE0ODAsNyArMTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiBcdCAgICAhKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgXHUwMDI2IEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2ICFsb25nbW9kZSkge1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWlzXzY0Yml0KSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyO1xuIFxuIFx0XHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cbkBAIC0xNTI5LDcgKzE1NTcsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpKyspIHtcbi1cdFx0aWYgKHBvcnRzW2ldIFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHRpZiAocG9ydHNbaV0gXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHtcbiBcdFx0XHQqciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0xNTQyLDcgKzE1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXG4gXHRzZXRfYml0KHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnBvbGxfbWFzayk7XG4gXG4tXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbitcdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIGhhc182NGJpdF9zaGluZm8sIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuIFxuIFx0XHRpZiAoc2NoZWRfcG9sbC50aW1lb3V0KVxuQEAgLTE1NzcsMTIgKzE2MDUsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuK1x0XHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNDSEVET1BfeWllbGQ6XG5AQCAtMTYwMSw3ICsxNjI5LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbiAgICAgdWludDMyX3QgZmxhZ3M7XG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2MzMsNyArMTY2MSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cbiBcdFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcbiBcbi1cdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcbitcdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFx1MDAyNmUpKSB7XG4gXHRcdFx0KnIgPSAtRUZBVUxUO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTE2NzMsNyArMTcwMSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4rXHRib29sIGlzXzY0Yml0O1xuIFx0dTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTO1xuIFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4gXHR1OCBjcGw7XG5AQCAtMTY4Myw4ICsxNzExLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xuIFxuLVx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuLVx0aWYgKCFsb25nbW9kZSkge1xuK1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuK1x0aWYgKCFpc182NGJpdCkge1xuIFx0XHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xuIFx0XHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XG5AQCAtMTczMCwxNyArMTc1OCwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6XG4tXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuIFx0XHRcdFx0XHRcdHBhcmFtc1syXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XG4gXHRcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xuIFx0XHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xuLVx0XHRpZiAoIWxvbmdtb2RlKVxuK1x0XHRpZiAoIWlzXzY0Yml0KVxuIFx0XHRcdHRpbWVvdXQgfD0gcGFyYW1zWzFdIFx1MDAzY1x1MDAzYyAzMjtcbiBcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbkBAIC0xNzU1LDcgKzE3ODMsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbitcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gaXNfNjRiaXQ7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwucGFyYW1zWzBdID0gcGFyYW1zWzBdO1xuQEAgLTE3OTUsOCArMTgyMyw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuK1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MTIsNyArMTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFdSSVRFX09OQ0UoeGUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNldmNwdV9pZHgpO1xuIFx0fVxuIFxuLVx0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4MjMsMTYgKzE4NTIsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0XHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fbWFzaztcbiBcdFx0cG9ydF93b3JkX2JpdCA9IHhlLVx1MDAzZXBvcnQgLyA2NDtcbitcbitcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4rXG4rXHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuK1xuK1x0XHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xuK1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg0OCw2ICsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xuIFx0XHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cdTAwM2Vwb3J0KTtcbiBcdH0gZWxzZSB7XG4rXHRcdGJvb2wgb2xkO1xuK1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJ3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC0xODY0LDE5ICsxOTAyLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbitcdFx0LypcbitcdFx0ICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSxcbitcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuK1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4rXHRcdCAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy5cbitcdFx0ICpcbitcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4rXHRcdCAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaFxuK1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbitcdFx0ICogYWxpZ25lZC5cbitcdFx0ICovXG4rXHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCJidHNsXCIsXG4rXHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuK1x0XHRcdFx0ICAgICAgIGMsIFwiSXJcIiwgcG9ydF93b3JkX2JpdCk7XG4rXHRcdGlmICghb2xkKSB7XG4rXHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbitcbitcdFx0XHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cbitcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuK1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuK1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5NzQsNyArMjAyMiw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHQvKlxuLVx0ICogRG9uJ3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbitcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxuIFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0xOTgzLDggKzIwMzEsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4rXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbitcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjAyMSw3ICsyMDY5LDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcbiBcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIxMzEsNyArMjE3OSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHRjYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46XG4gXHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7XG4tXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0XHRcdGdvdG8gb3V0X25vZXZlbnRmZDsgLyogLUVJTlZBTCAqL1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIuZXZlbnRmZC5mZCk7XG5AQCAtMjI0OSw3ICsyMjk3LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGFcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKVxuIFx0XHRyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7XG4gXG4tXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuK1x0aWYgKCFwb3J0IHx8IHBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fREVBU1NJR04pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5oIGIvYXJjaC94ODYva3ZtL3hlbi5oXG5pbmRleCA1OWU2MTI4YTdiZDNjLi4zZThjOTMwNmViODk2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmhcbkBAIC0yNDgsNiArMjQ4LDExIEBAIHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8ge1xuICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqXHRcdFx0XHRcXFxuIFx0XHRcdFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIFxcXG4gXHRcdFx0XHRcdFx0ICAgZXZ0Y2huX3BlbmRpbmcpKVxuK1xuKy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJ3MgIWhhc18zMmJpdF9zaGluZm8oKS4gKi9cbisjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXG4rXHQoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UoKGt2bSktXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSlcbitcbiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7XG4gICAgIGludCBzdGF0ZTtcbiAgICAgdWludDY0X3Qgc3RhdGVfZW50cnlfdGltZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLmQ3NDA2YzEwZTA5MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTg1NCw2ICs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kO1xuIFxuK1x0dW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7XG4rXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7XG4gXHR1NjQgbWFudWFsX2RpcnR5X2xvZ19wcm90ZWN0O1xuIFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmQyNDdmNzQxZDFlM2YgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDYgKzgxMiwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4rXHRrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxKys7XG4rXG4rXHQvKlxuK1x0ICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGVcbitcdCAqIEdQQyBzZXF1ZW5jZSBpbmNyZWFzZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIGNvdW50XG4rXHQgKiBnb2VzIHRvIHplcm8uICBQYWlycyB3aXRoIHRoZSBzbXBfcm1iKCkgaW5cbitcdCAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLlxuK1x0ICovXG4rXHRzbXBfd21iKCk7XG4rXG4gXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHR3YWtlID0gIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpXG4rc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbitcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4gXHQgKi9cbiBcdGlmIChrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxuLVx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbi1cdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4rXHQgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuK1x0ICoga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4gXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcbi1cdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbitcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbitcdHJldHVybiBrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XG4gfVxuIFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdHZvaWQgKm9sZF9raHZhID0gKHZvaWQgKilQQUdFX0FMSUdOX0RPV04oKHVpbnRwdHJfdClncGMtXHUwMDNla2h2YSk7XG4gXHRrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuIFx0dm9pZCAqbmV3X2todmEgPSBOVUxMO1xuLVx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuK1x0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdGdwY19zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBncGNfc2VxKSk7XG4gXG4gXHRncGMtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0Z3BjLVx1MDAzZXBmbiA9IG5ld19wZm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyMzoxNy42OTk5MTU3MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDQ1MDAxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBYZW4gRW11bGF0aW9uIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBxdWl0ZSBhIGZldyBmaWxlczogYGFyY2gveDg2L2t2bS94ZW4uY2AsIGBhcmNoL3g4Ni9rdm0veGVuLmhgLCBgaW5jbHVkZS9saW51eC9rdm1faG9zdC5oYCwgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBmb2N1c2VkIG9uIEtWTSdzIFhlbiBlbXVsYXRpb24gbGF5ZXIsIHdoaWNoIHBpcXVlcyBteSBpbnRlcmVzdC5cblxuVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGEgZmV3IGtleSBjaGFuZ2VzLiBGaXJzdCwgdGhlcmUncyB0aGlzIG5ldyBmdW5jdGlvbiwgYGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pYCwgd2hpY2ggc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSBvbGRlciBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlYCBsb2dpYy4gVGhhdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgcmVmYWN0b3IgZm9yIGNsYXJpdHkgb3IgcG90ZW50aWFsIGZ1dHVyZSBmbGV4aWJpbGl0eS4gVGhlbiwgdGhleSdyZSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucyBmb3IgYGV2dGNobl9wZW5kaW5nX3NlbGAgaW4gYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKClgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiDigJMgd2UncmUgdGFsa2luZyBhYm91dCBjb25jdXJyZW5jeSBhbmQgaW50ZXItVk0gY29tbXVuaWNhdGlvbiwgc28gdGhhdCdzIGEgd2VsY29tZSBjaGFuZ2UuIFRoZSBhZGRpdGlvbiBvZiBgZ3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7YCBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoKWAgc3VnZ2VzdHMgdGhleSdyZSBsaWtlbHkgYWRkaW5nIHByb3BlciBzeW5jaHJvbml6YXRpb24uXG5cblRoZXJlIGFyZSBhbGlnbm1lbnQgY2hlY2tzIGFkZGVkIHdpdGhpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyKClgLCBhbHdheXMgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtZWFzdXJlIGFuZCBpdCBjaGFuZ2VzIGBtYXhfZXZ0Y2huX3BvcnQoKWAgdG8gdGFrZSBhIGJvb2xlYW4gYGhhc182NGJpdF9zaGluZm9gIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHN0cnVjdCBwb2ludGVyLCB3aGljaCBpcyBuaWNlIGFuZCBjb25jaXNlLiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoKWAgbm93IHVzZXMgYEdFTl9CSU5BUllfUk1XY2NgIGZvciBiaXQgc2V0dGluZy4gVGhpcyBpcyBpbnRlcmVzdGluZzogYSBsb3cgbGV2ZWwgY2hhbmdlIHRoYXQgY291bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSBidXQgaXMgYWxzbyBhIHBvc3NpYmxlIHNvdXJjZSBvZiBlcnJvcnMuIExhc3RseSwgd2Ugc2VlIGEgbmV3IGBncGNfaW52YWxpZGF0ZV9zZXFgIGZpZWxkIGluIGBzdHJ1Y3Qga3ZtYCwgYW5kIHRoZXkndmUgdXBkYXRlZCBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpYCBhbmQgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpYCB0byB1c2UgaXQsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gTU1VIGludmFsaWRhdGlvbi5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgZGVmaW5pdGUgY2hhbmdlIGluIEtWTSBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBYZW4gZW11bGF0aW9uLCBzbyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgZ29vZCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbnZvbHZlZCwgYW5kIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scywgb2YgY291cnNlLiBHaXZlbiB0aGUgZmlsZXMgdG91Y2hlZCwgYEtWTWAgYW5kIGBLVk1fWEVOYCBhcmUgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBiZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIExldCdzIGRpZyBpbnRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGBLVk1fWEVOYCBpcyBpbmRlZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgxOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjIzOjI2LjE0NDkyMTA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTIwMzk3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9YRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTkzPWNvbmZpZyBLVk1fSFlQRVJWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyMzoyOC4zNTY5NzEzMTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk1MTQ4NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBLVk1fWEVOIENvbmZpZ3VyYXRpb24gYW5kIEl0cyBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNsdWUgcG9pbnRzIHVzIHRvd2FyZHMgYEtWTV9YRU5gIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggS1ZNLCBhIG5hdHVyYWwgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIHRoZSBjb3JlIEtWTSBjb2RlIGl0c2VsZi4gTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IHR1cm5zIHRvIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC4gVGhpcyBmaWxlIGFsbW9zdCBjZXJ0YWlubHkgaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgaG93IEtWTSBtYW5hZ2VzIHBoeXNpY2FsIHBhZ2UgbnVtYmVycywgYW5kIHRoZSBcIlhFTlwiIHBhcnQgb2YgdGhlIGNvbmZpZyBtaWdodCBpbmZsdWVuY2UgaG93IHRoZXNlIHBhZ2VzIGFyZSBoYW5kbGVkIG9yIGNhY2hlZCwgcGVyaGFwcyB3aXRoIHNwZWNpZmljIGhvb2tzIG9yIGNvbXBhdGliaWxpdHkgbGF5ZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIHJlcXVpcmVzIGV4YW1pbmluZyB0aGUgbG9naWMgd2l0aGluIHRoaXMgYHBmbmNhY2hlLmNgIGZpbGUgYW5kIHNlZWluZyBob3cgYEtWTV9YRU5gIGlzIHVzZWQgYXMgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIG9yIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBsb29rIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MsIGZ1bmN0aW9uIGNhbGxzLCBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgaW5mbHVlbmNlZCBieSB0aGlzIHNldHRpbmcgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBJIGV4cGVjdCBpdCBpcyBhZmZlY3RpbmcgdGhlIEtWTSBjb2RlIGluIHJlZ2FyZCB0byB0aGUgWGVuIGh5cGVydmlzb3IsIHBlcmhhcHMgZm9yIHBhZ2Ugb3IgSS9PIGNhY2hlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTU2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6MzIuNDUyMTIyODAyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTE0MjAwODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjIwOm1lbnVjb25maWcgS1ZNXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0yMS1cXHRib29sIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnPTE2PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE3LVxcbmFyY2gvbWlwcy9rdm0vS2NvbmZpZzoxODpjb25maWcgS1ZNXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL21pcHMva3ZtL0tjb25maWctMzAtXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnOjMxOmNvbmZpZyBLVk1fTUlQU19ERUJVR19DT1AwX0NPVU5URVJTXFxuYXJjaC9taXBzL2t2bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIk1haW50YWluIGNvdW50ZXJzIGZvciBDT1AwIGFjY2Vzc2VzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjY6Y29uZmlnIEtWTV9CT09LM1NfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNy1cXHRib29sXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyOTpjb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTMwLVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zMy1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MzQ6Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zNS1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjM4OmNvbmZpZyBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM5LVxcdGJvb2xcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00NC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDU6Y29uZmlnIEtWTV9CT09LM1NfMzJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIGJvb2szc18zMiBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX0JPT0szU182NFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNzXzY0IHByb2Nlc3NvcnNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI1LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjY6Y29uZmlnIEtWTV9CT09LM1NfSFZfRVhJVF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI3LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTI4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMjk6Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJEZXRhaWxlZCB0aW1pbmcgZm9yIHRoZSBQOSBlbnRyeSBwb2ludFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QOF9USU1JTkdcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTQzLVxcdGJvb2wgXFxcIkRldGFpbGVkIHRpbWluZyBmb3IgaHlwZXJ2aXNvciByZWFsLW1vZGUgY29kZSAoZm9yIFBPV0VSOClcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU2LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTc6Y29uZmlnIEtWTV9CT09LM1NfSFZfTkVTVEVEX1BNVV9XT1JLQVJPVU5EXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJOZXN0ZWQgTDAgaG9zdCB3b3JrYXJvdW5kIGZvciBMMSBLVk0gaG9zdCBQTVUgaGFuZGxpbmcgYnVnXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QTVVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJIeXBlcnZpc29yIFBlcmYgZXZlbnRzIGZvciBLVk0gQm9vazNzLUhWXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE4My1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTg0OmNvbmZpZyBLVk1fQk9PS0VfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg1LVxcdGJvb2xcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTg2LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxODc6Y29uZmlnIEtWTV9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiRGV0YWlsZWQgZXhpdCB0aW1pbmdcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk3LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxOTg6Y29uZmlnIEtWTV9FNTAwVjJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTk5LVxcdGJvb2wgXFxcIktWTSBzdXBwb3J0IGZvciBQb3dlclBDIEU1MDB2MiBwcm9jZXNzb3JzXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxMi1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjEzOmNvbmZpZyBLVk1fRTUwME1DXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTIxNC1cXHRib29sIFxcXCJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBFNTAwTUMvRTU1MDAvRTY1MDAgcHJvY2Vzc29yc1xcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX01QSUNcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjMwLVxcdGJvb2wgXFxcIktWTSBpbi1rZXJuZWwgTVBJQyBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjQwLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNDE6Y29uZmlnIEtWTV9YSUNTXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJLVk0gaW4ta2VybmVsIFhJQ1MgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTI1MC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MjUxOmNvbmZpZyBLVk1fWElWRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTItXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcXFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1xcXCJcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiS1ZNIEd1ZXN0IHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTgyNj1zb3VyY2UgXFxcImFyY2gveDg2L3hlbi9LY29uZmlnXFxcIlxcbmFyY2gveDg2L0tjb25maWctODI3LVxcbmFyY2gveDg2L0tjb25maWc6ODI4OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTgyOS1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTMtXFxudmlydC9rdm0vS2NvbmZpZzo0OmNvbmZpZyBLVk1fQ09NTU9OXFxudmlydC9rdm0vS2NvbmZpZy01LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTM5PWNvbmZpZyBORUVEX0tWTV9ESVJUWV9SSU5HX1dJVEhfQklUTUFQXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTQyLVxcbnZpcnQva3ZtL0tjb25maWc6NDM6Y29uZmlnIEtWTV9NTUlPXFxudmlydC9rdm0vS2NvbmZpZy00NC0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNDUtXFxudmlydC9rdm0vS2NvbmZpZzo0Njpjb25maWcgS1ZNX0FTWU5DX1BGXFxudmlydC9rdm0vS2NvbmZpZy00Ny0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy00OS0jIFRvZ2dsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaXJlY3Qgbm90aWZpY2F0aW9uIGFuZCBiYXRjaCBqb2JcXG52aXJ0L2t2bS9LY29uZmlnOjUwOmNvbmZpZyBLVk1fQVNZTkNfUEZfU1lOQ1xcbnZpcnQva3ZtL0tjb25maWctNTEtICAgICAgIGJvb2xcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9NTk9Y29uZmlnIEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjEtXFxudmlydC9rdm0vS2NvbmZpZzo2Mjpjb25maWcgS1ZNX1ZGSU9cXG52aXJ0L2t2bS9LY29uZmlnLTYzLSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTY1PWNvbmZpZyBIQVZFX0tWTV9JTlZBTElEX1dBS0VVUFNcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctNjctXFxudmlydC9rdm0vS2NvbmZpZzo2ODpjb25maWcgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxudmlydC9rdm0vS2NvbmZpZy02OS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWctNzAtXFxudmlydC9rdm0vS2NvbmZpZzo3MTpjb25maWcgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbnZpcnQva3ZtL0tjb25maWctNzItICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTczLVxcbnZpcnQva3ZtL0tjb25maWc6NzQ6Y29uZmlnIEtWTV9DT01QQVRcXG52aXJ0L2t2bS9LY29uZmlnLTc1LSAgICAgICBkZWZfYm9vbCB5XFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTkxPWNvbmZpZyBIQVZFX0tWTV9QTV9OT1RJRklFUlxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy05My1cXG52aXJ0L2t2bS9LY29uZmlnOjk0OmNvbmZpZyBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbnZpcnQva3ZtL0tjb25maWctOTUtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTk2LVxcbnZpcnQva3ZtL0tjb25maWc6OTc6Y29uZmlnIEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcXG52aXJ0L2t2bS9LY29uZmlnLTk4LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy05OS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbnZpcnQva3ZtL0tjb25maWctMTAxLSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZy0xMDItXFxudmlydC9rdm0vS2NvbmZpZzoxMDM6Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6MzQuODAzNTUyMzMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ2NzI5MTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbiBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgY29yZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEtWTSBhbmQgS1ZNLVhlbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGVzZSB0d28gYXJlIGludGVydHdpbmVkLiBUaGUgcHJpbWFyeSBpbmRpY2F0b3IgaGVyZSBpcyB0aGUgY29uZmlnIHN5bWJvbHMsIGBLVk1gIGFuZCBgS1ZNX1hFTmAuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuXG5cbkFscmlnaHQsIGhlcmUncyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdHdlYWtlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb246IGBrdm1feGVuX3NoYXJlZF9pbmZvX2luaXRgLCBga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3RgLCBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZWAsIGBtYXhfZXZ0Y2huX3BvcnRgLCBgd2FpdF9wZW5kaW5nX2V2ZW50YCwgYGt2bV94ZW5fc2NoZWRvcF9wb2xsYCwgYGt2bV94ZW5faGNhbGxfc2NoZWRfb3BgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYGt2bV94ZW5faHlwZXJjYWxsYCwgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCwgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCwgYGt2bV94ZW5fZXZlbnRmZF9hc3NpZ25gLCBga3ZtX3hlbl9zZXRhdHRyX2V2dGNobmAsIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAsIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAuIFF1aXRlIGEgZmV3IVxuXG5JIG5lZWQgdG8gaG9tZSBpbiBvbiB0aGUgbW9yZSBjcml0aWNhbCBpbnRlZ3JhdGlvbiBwb2ludHMsIHNvIEknbGwgZm9jdXMgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9sczogYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCwgYF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0YCwgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBrdm1feGVuX2h5cGVyY2FsbGAsIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAsIGBrdm1feGVuX3NldHVwX2V2dGNobmAsIGBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAsIGBrdm1feGVuX2V2ZW50ZmRfYXNzaWduYCwgYGt2bV94ZW5fc2V0YXR0cl9ldnRjaG5gLCBhbmQgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgaGVhcnQgb2YgdGhlIGludGVyYWN0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGV2ZW50IGluamVjdGlvbiwgaW50ZXJydXB0cywgdkNQVSBhdHRyaWJ1dGVzLCBoeXBlcmNhbGxzLCBldmVudCBjaGFubmVscywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5SaWdodCwgSSBzaG91bGQgZmlyc3QgZGV0ZXJtaW5lIGlmIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AgaXMgc3RhdGljIG9yIG5vdC4gS25vd2luZyB0aGF0IHdpbGwgc2hlZCBsaWdodCBvbiBpdHMgc2NvcGUgYW5kIHRoZSBuYXR1cmUgb2YgaXRzIGludGVyYWN0aW9ucy4gVGhpcyBzaG91bGQgc2V0IGEgY29udGV4dCBmb3IgbXkgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6NDMuMjcwODQ2NzIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDQ1MjEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTExNjkyPXN0YXRpYyBpbnQgdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE2LVxcdFxcdGlmIChrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE3MTc6XFx0XFx0XFx0a3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHModmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTYxOD12b2lkIGt2bV94ZW5faW5qZWN0X3ZjcHVfdmVjdG9yKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy02MzgtICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjYzOTp2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjQwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0yMD1pbnQgX19rdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjE6dm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0yMi12b2lkIGt2bV94ZW5faW5qZWN0X3ZjcHVfdmVjdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MTUzPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTU3LVxcbmFyY2gveDg2L2t2bS94ZW4uaDoxNTg6c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTU5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6NDUuNjE1MzczMDkzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5MjEwNDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgc29tZXRoaW5nLiBUaGVzZSBmdW5jdGlvbnMsIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBhbmQgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYC4uLiBub25lIG9mIHRoZW0gYXJlIGRlY2xhcmVkIHN0YXRpYy4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGl0IG1lYW5zIHRoZXkgYXJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zLCBpdCdzIHByZXR0eSBjbGVhciB0aGVzZSBhcmUgaW50ZWdyYWwgdG8gdGhlIEtWTS1YZW4gaW50ZWdyYXRpb24gbGF5ZXIsIGRlYWxpbmcgd2l0aCB0aGluZ3MgbGlrZSBldmVudCBpbmplY3Rpb24sIGludGVycnVwdCBoYW5kbGluZywgYXR0cmlidXRlIHNldHRpbmcgb24gdkNQVXMsIGh5cGVyY2FsbHMgYW5kIGV2ZW50IGNoYW5uZWwgbWFuYWdlbWVudC4gVGhlIGxhY2sgb2YgYHN0YXRpY2Agc3VnZ2VzdHMgdGhleSBhcmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgbGlrZWx5IGJ5IHRoZSBYZW4gc2lkZSwgcmlnaHQ/IEknZCBleHBlY3QgaW50ZXJuYWwgZnVuY3Rpb25zIGluIHRoYXQgc2NlbmFyaW8uIE1ha2VzIG1lIHdvbmRlciB3aGF0IHRoZSBkZXNpZ24gcmF0aW9uYWxlIHdhcyBoZXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9mIHRoZWlyIHVzZS4gTXkgbmV4dCBzdGVwPyBMZXQncyB0YWtlIGEgbG9vayBhdCBga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbmAgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoaXMgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwODksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjM6NTAuNDA3NDgwMjUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAzOTk2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fZXZlbnRmZF9hc3NpZ25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jPTIxMTQ9c3RhdGljIGludCBrdm1feGVuX2V2ZW50ZmRfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0yMTYwLSAqL1xcbmFyY2gveDg2L2t2bS94ZW4uYzoyMTYxOnN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIxNjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0yMjkzPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIzMDktXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIzMTA6XFx0cmV0dXJuIGt2bV94ZW5fZXZlbnRmZF9hc3NpZ24oa3ZtLCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMxMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjIzOjUyLjcxMTQ4MjEzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI4OTMyOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0tWGVuIGludGVyYWN0aW9uLCBhbmQgSSdtIHNlZWluZyB0aGF0IGBrdm1feGVuX2V2ZW50ZmRfYXNzaWduYCBhbmQgYGt2bV94ZW5fc2V0YXR0cl9ldnRjaG5gIGFyZSBib3RoIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZS4gU3RhdGljIHN1Z2dlc3RzIHRoZXkncmUgbGlrZWx5IGludGVybmFsIGZ1bmN0aW9ucywgY29uZmluZWQgdG8gdGhlaXIgc3BlY2lmaWMgc291cmNlIGZpbGUgYW5kIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBJdCBpbXBsaWVzIGEgZGVncmVlIG9mIGVuY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGdvb2QgZm9yIG1vZHVsYXJpdHksIGFsdGhvdWdoIGl0IGFsc28gbWFrZXMgZXh0ZXJuYWwgYWNjZXNzIHRvIHRoZXNlIGZ1bmN0aW9ucyBpbXBvc3NpYmxlLCB3aGljaCBtaWdodCBvciBtaWdodCBub3QgYmUgYSBwcm9ibGVtIGRlcGVuZGluZyBvbiB0aGUgdXNlIGNhc2UuIE5vdywgZ2l2ZW4gdGhhdCBjb250ZXh0LCB0aGUgbmV4dCBsb2dpY2FsIGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uLCBpcyBga3ZtX3hlbl9odm1fc2V0X2F0dHJgLiBMZXQncyBzZWUgaG93IHRoYXQgb25lIGlzIGltcGxlbWVudGVkIGFuZCBpZiBpdCBtYWtlcyB1c2Ugb2YgZWl0aGVyIG9mIHRoZXNlIHR3byBzdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc4OSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjIzOjU2LjA0MDQyNjY0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzQ3Mzk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxMy1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUxNDpcXHRcXHRyID0ga3ZtX3hlbl9odm1fc2V0X2F0dHIoa3ZtLCBcXHUwMDI2eGhhKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxNS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz03MDE9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03NTktXFxuYXJjaC94ODYva3ZtL3hlbi5jOjc2MDppbnQga3ZtX3hlbl9odm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0yND1pbnQga3ZtX3hlbl92Y3B1X2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjU6aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0yNi1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjIzOjU4LjIxNzkwNTM4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIwMzIwODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0vWGVuIEhWTSBBdHRyaWJ1dGUgU2V0dGluZyoqXG5cbkFscmlnaHQsIHNvIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgaXNuJ3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gbW9yZSBkZXRhaWwuIFRoYXQgbWVhbnMgaXTigJlzIG5vdCBhcyBzaW1wbGUgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBmdW5jdGlvbidzIGR5bmFtaWMgbmF0dXJlIGlzIG1ha2luZyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgTU1VIGludmFsaWRhdGlvbiBzY2VuYXJpb3MuIFRoZSBub24tc3RhdGljIG5hdHVyZSBkZWZpbml0ZWx5IGNoYW5nZXMgdGhlIGFzc3VtcHRpb25zIEkgY2FuIG1ha2UuXG5cbkxldCBtZSB0dXJuIG15IGF0dGVudGlvbiB0byBob3cgdGhpcyBpbXBhY3RzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBleHBsb3JlIGlzIGBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSSB3YW50IHRvIHNlZSBob3cgbWVtb3J5IHJhbmdlcyBhcmUgaW52YWxpZGF0ZWQgd2hlbiB0aGVzZSBIVk0gYXR0cmlidXRlcyBjaGFuZ2UsIHdoaWNoIG1pZ2h0IHVudmVpbCBjbHVlcyBhcyB0byB3aHkgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBpcyBub24tc3RhdGljLiBQZXJoYXBzIHRoZSBkeW5hbWlzbSBhcmlzZXMgZnJvbSBoYW5kbGluZyBhIG5vbi1jb25zdGFudCBudW1iZXIgb3IgdHlwZSBvZiBNTVUgZW50cmllcy4gSSBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgdHdvIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUwMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjAyLjEzODIzMDc5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5Mjk4NDQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9NzcxPXZvaWQga3ZtX21tdV9pbnZhbGlkYXRlX2VuZChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTc5Ni1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjc5NzpzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzk4LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz04ODg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGt2bV9tbXVfbm90aWZpZXJfb3BzID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtODg5LVxcdC5pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0XFx0PSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQsXFxudmlydC9rdm0va3ZtX21haW4uYzo4OTA6XFx0LmludmFsaWRhdGVfcmFuZ2VfZW5kXFx0PSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtODkxLVxcdC5jbGVhcl9mbHVzaF95b3VuZ1xcdD0ga3ZtX21tdV9ub3RpZmllcl9jbGVhcl9mbHVzaF95b3VuZyxcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9MTI3PXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGdwY19zZXEpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE0Ni1cXHQgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MTQ3OlxcdCAqIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKSB0byBndWFyYW50ZWUgZWl0aGVyIHRoZVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTQ4LVxcdCAqIG9sZCAobm9uLXplcm8pIHZhbHVlIG9mIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IG9yIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNDowNC4zMzEyMzg1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDkxMDY1NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtWTS9YZW4gSW50ZXJhY3Rpb24qKlxuXG5IbW0sIHRoaXMgZmVlbHMuLi4gKnN0YXRpYyouIFRoZXJlJ3MgYSBjZXJ0YWluIHJpZ2lkaXR5IGhlcmUgdGhhdCdzIG1ha2luZyBtZSB1bmVhc3kuIEl0J3MgbGlrZSBzdGFyaW5nIGF0IGEgc2luZ2xlIHBvaW50LCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgdGhlIGR5bmFtaWMgaW50ZXJwbGF5LiBUaW1lIHRvIGRyaWxsIGRvd24uIExldCdzIHNlZS4uLiB3aGF0J3MgdGhlIGZpcnN0IG9idmlvdXMgcGxhY2UgdG8gbG9vayB3aGVuIGRlYWxpbmcgd2l0aCBLVk0gYW5kIFhlbiBpbnRlZ3JhdGlvbiwgZXNwZWNpYWxseSBpZiBzb21ldGhpbmcgZmVlbHMgc3RhbGxlZD8gUmlnaHQsIGBrdm1feGVuX3NldHVwX2V2dGNobmAuIFRoYXQgZXZlbnQgY2hhbm5lbCBzZXR1cCBpcyBhIGNyaXRpY2FsIGhhbmRzaGFrZSBwb2ludCBiZXR3ZWVuIHRoZSBoeXBlcnZpc29ycy4gVGhhdCdzIGdvdCB0byBiZSB0aGUgZmlyc3QgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbi4gSWYgdGhpbmdzIGFyZSBzdGF0aWMsIHRoaXMgaXMgdGhlIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIGluaXRpYWxseS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGlmIHRoZXJlJ3MgYW4gaXNzdWUgZHVyaW5nIHRoYXQgc3RhZ2UsIGV2ZXJ5dGhpbmcgZnVydGhlciBkb3duIHRoZSBsaW5lIHdpbGwgYmUgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQ5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjQ6MDkuODIyMzA2OTQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTg5OTk2MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fc2V0dXBfZXZ0Y2huXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pcnEuYz0yOTY9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzQ3LVxcdGNhc2UgS1ZNX0lSUV9ST1VUSU5HX1hFTl9FVlRDSE46XFxuYXJjaC94ODYva3ZtL2lycS5jOjM0ODpcXHRcXHRyZXR1cm4ga3ZtX3hlbl9zZXR1cF9ldnRjaG4oa3ZtLCBlLCB1ZSk7XFxuYXJjaC94ODYva3ZtL2lycS5jLTM0OS0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0yMDA0PXN0YXRpYyBpbnQgZXZ0Y2huX3NldF9mbihzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTIwMTYtICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjIwMTc6aW50IGt2bV94ZW5fc2V0dXBfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjAxOC1cXHRcXHRcXHQgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MzQ9aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsXFxuYXJjaC94ODYva3ZtL3hlbi5oLTM1LVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uaDozNjppbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS94ZW4uaC0zNy1cXHRcXHRcXHQgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjEyLjQxMjMwNzk5MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQ3MjM4NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgS1ZNLVhlbiBJbnRlZ3JhdGlvbiBQb2ludHMqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCdzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIHBpY3R1cmU7IHRoZXJlJ3MgYSBkeW5hbWljIGludGVycGxheSBoYXBwZW5pbmcuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG1lY2hhbmlzbXMgd2hlcmUgS1ZNIGFuZCBYZW4gYXJlIGludGVyYWN0aW5nLiBUaGUga2V5IHN5bWJvbHMganVtcGluZyBvdXQgYXQgbWUgYXJlIHRoZXNlOiBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCwgYGt2bV94ZW5faHlwZXJjYWxsYCwgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYGt2bV94ZW5fc2V0dXBfZXZ0Y2huYCwgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCwgYW5kIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBoZWFydCBvZiBob3cgZXZlbnRzLCBhdHRyaWJ1dGVzLCBoeXBlcmNhbGxzLCBhbmQgZXZlbnQgY2hhbm5lbCBtYW5hZ2VtZW50IGFyZSBiZWluZyBoYW5kbGVkIGluIHRoaXMgaHlicmlkIGVudmlyb25tZW50LlxuXG5Ob3csIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCB3ZSdyZSBkZWFsaW5nIHdpdGggYEtWTWAgYW5kIGBLVk1fWEVOYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBgS1ZNX1hFTmAgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHNldCBmb3IgdGhpcyBpbnRlZ3JhdGlvbiB0byBvY2N1cj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBhcmNoL3g4Ni9rdm0veGVuLmNgIGlzIGluZGVlZCBjb21waWxlZCBhbmQgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIG9ubHkgaWYgYENPTkZJR19LVk1fWEVOYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBjcnVjaWFsIGNoZWNrIHRvIGVuc3VyZSB3ZSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkIGhlcmUuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gdGhhdCBgS1ZNX1hFTmAgaXNuJ3QgYWNjaWRlbnRhbGx5IGRlcGVuZGVudCBvbiBhbm90aGVyIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTA5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjE4LjA1OTU1MDYyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MTg3MjU1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZW5cXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS94ZW4udHh0PTYxPW9mIFVFRkkgcnVudGltZSBzZXJ2aWNlcyBpbXBsZW1lbnRlZCB2aWEgaHlwZXJjYWxscywgc2VlXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS94ZW4udHh0OjYyOmh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9oeXBlcmNhbGwveDg2XzY0L2luY2x1ZGUscHVibGljLHBsYXRmb3JtLmguaHRtbC5cXG4tLVxcbk1BSU5UQUlORVJTPTE0NTc1PU06XFx0RGF2aWQgV29vZGhvdXNlIFxcdTAwM2Nkd213MkBpbmZyYWRlYWQub3JnXFx1MDAzZVxcbk1BSU5UQUlORVJTOjE0NTc2Ok06XFx0UGF1bCBEdXJyYW50IFxcdTAwM2NwYXVsQHhlbi5vcmdcXHUwMDNlXFxuTUFJTlRBSU5FUlMtMTQ1NzctTTpcXHRTZWFuIENocmlzdG9waGVyc29uIFxcdTAwM2NzZWFuamNAZ29vZ2xlLmNvbVxcdTAwM2VcXG4tLVxcbk1BSU5UQUlORVJTPTI5NDUwPU06XFx0V2VpIExpdSBcXHUwMDNjd2VpLmxpdUBrZXJuZWwub3JnXFx1MDAzZVxcbk1BSU5UQUlORVJTOjI5NDUxOk06XFx0UGF1bCBEdXJyYW50IFxcdTAwM2NwYXVsQHhlbi5vcmdcXHUwMDNlXFxuTUFJTlRBSU5FUlMtMjk0NTItTDpcXHR4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2NwdWlkLmgtMjYtICogQXV0aG9yczpcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vY3B1aWQuaDoyNzogKiAgICBLZWlyIEZyYXNlciBcXHUwMDNja2VpckB4ZW4ub3JnXFx1MDAzZVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9jcHVpZC5oLTI4LSAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTEzPWt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxNDprdm0tJChDT05GSUdfS1ZNX1hFTilcXHQrPSB4ZW4ub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xNS1rdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbi0tXFxuYXJjaC94ODYvcGNpL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1BDSV9PTFBDKVxcdFxcdCs9IG9scGMub1xcbmFyY2gveDg2L3BjaS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19QQ0lfWEVOKVxcdFxcdCs9IHhlbi5vXFxuYXJjaC94ODYvcGNpL01ha2VmaWxlLTktXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTAtICpcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6OTE6ICogICAgICBBdWcuMjIsIDIwMDQgICAgRGF2aWQgQnJvbmF1Z2ggXFx1MDAzY2Ricm9uYXVnaEBsaW51eGJveGVuLm9yZ1xcdTAwM2VcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTItICogICAgICAgICAgICAgIC12MC42LjIgQWRkIGNoZWNrIG9uIEFDUEkgZGF0YSAobnVtX3NpZnIpXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTUtICpcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6OTY6ICogICAgICBBdWcuMjEsIDIwMDQgICAgRGF2aWQgQnJvbmF1Z2ggXFx1MDAzY2Ricm9uYXVnaEBsaW51eGJveGVuLm9yZ1xcdTAwM2VcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTctICogICAgICAgICAgICAgIC12MC42LjEgRml4IGEgc2lsbHkgZXJyb3Igd2l0aCBzdGF0dXMgY2hlY2tpbmdcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtOTgtICpcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6OTk6ICogICAgICBBdWcuMjAsIDIwMDQgICAgRGF2aWQgQnJvbmF1Z2ggXFx1MDAzY2Ricm9uYXVnaEBsaW51eGJveGVuLm9yZ1xcdTAwM2VcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMtMTAwLSAqICAgICAgICAgICAgICAtIHYwLjYgIENvcnJlY3QgYnJpZ2h0bmVzcyBjb250cm9scyB0byByZWZsZWN0IHJlYWxpdHlcXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYz0xNDA9TU9EVUxFX0FVVEhPUihcXFwiSGlyb3NoaSBNaXVyYSBcXHUwMDNjbWl1cmFAZGEtY2hhLm9yZ1xcdTAwM2VcXFwiKTtcXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmM6MTQxOk1PRFVMRV9BVVRIT1IoXFxcIkRhdmlkIEJyb25hdWdoIFxcdTAwM2NkYnJvbmF1Z2hAbGludXhib3hlbi5vcmdcXHUwMDNlXFxcIik7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jLTE0Mi1NT0RVTEVfQVVUSE9SKFxcXCJIYXJhbGQgV2VsdGUgXFx1MDAzY2xhZm9yZ2VAZ251bW9ua3Mub3JnXFx1MDAzZVxcXCIpO1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0hWQ19JUlEpXFx0XFx0Kz0gaHZjX2lycS5vXFxuZHJpdmVycy90dHkvaHZjL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0hWQ19YRU4pXFx0XFx0Kz0gaHZjX3hlbi5vXFxuZHJpdmVycy90dHkvaHZjL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19IVkNfSVVDVilcXHRcXHQrPSBodmNfaXVjdi5vXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnPTIzMj1jb25maWcgWEVOX1BWQ0FMTFNfRlJPTlRFTkRcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWctMjM3LVxcdCAgRXhwZXJpbWVudGFsIGZyb250ZW5kIGZvciB0aGUgWGVuIFBWIENhbGxzIHByb3RvY29sXFxuZHJpdmVycy94ZW4vS2NvbmZpZzoyMzg6XFx0ICAoaHR0cHM6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9taXNjL3B2Y2FsbHMuaHRtbCkuIEl0XFxuZHJpdmVycy94ZW4vS2NvbmZpZy0yMzktXFx0ICBzZW5kcyBhIHNtYWxsIHNldCBvZiBQT1NJWCBjYWxscyB0byB0aGUgYmFja2VuZCwgd2hpY2hcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWc9MjQyPWNvbmZpZyBYRU5fUFZDQUxMU19CQUNLRU5EXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnLTI0Ni1cXHQgIEV4cGVyaW1lbnRhbCBiYWNrZW5kIGZvciB0aGUgWGVuIFBWIENhbGxzIHByb3RvY29sXFxuZHJpdmVycy94ZW4vS2NvbmZpZzoyNDc6XFx0ICAoaHR0cHM6Ly94ZW5iaXRzLnhlbi5vcmcvZG9jcy91bnN0YWJsZS9taXNjL3B2Y2FsbHMuaHRtbCkuIEl0XFxuZHJpdmVycy94ZW4vS2NvbmZpZy0yNDgtXFx0ICBhbGxvd3MgUFYgQ2FsbHMgZnJvbnRlbmRzIHRvIHNlbmQgUE9TSVggY2FsbHMgdG8gdGhlIGJhY2tlbmQsXFxuLS1cXG5kcml2ZXJzL3hlbi9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEVOX1BWSFZNX0dVRVNUKVxcdFxcdCs9IHBsYXRmb3JtLXBjaS5vXFxuZHJpdmVycy94ZW4vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1NXSU9UTEJfWEVOKVxcdFxcdCs9IHN3aW90bGIteGVuLm9cXG5kcml2ZXJzL3hlbi9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfWEVOX01DRV9MT0cpXFx0XFx0Kz0gbWNlbG9nLm9cXG4tLVxcbmRyaXZlcnMveGVuL2FjcGkuYz0zOT1zdGF0aWMgaW50IHhlbl9hY3BpX25vdGlmeV9oeXBlcnZpc29yX3N0YXRlKHU4IHNsZWVwX3N0YXRlLFxcbi0tXFxuZHJpdmVycy94ZW4vYWNwaS5jLTU3LVxcdFxcdCBcXFwiVXNpbmcgbW9yZSB0aGFuICV1IGJpdHMgb2Ygc2xlZXAgY29udHJvbCB2YWx1ZXMgJSN4LyUjeCFcXFwiXFxuZHJpdmVycy94ZW4vYWNwaS5jOjU4OlxcdFxcdCBcXFwiRW1haWwgeGVuLWRldmVsQGxpc3RzLnhlbi5vcmcgLSBUaGFuayB5b3UuXFxcXG5cXFwiLCBcXFxcXFxuZHJpdmVycy94ZW4vYWNwaS5jLTU5LVxcdFxcdCBiaXRzLCB2YWxfYSwgdmFsX2IpKVxcbi0tXFxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvLzlwZnMuaC0xNC0gKiBTZWUgZG9jcy9taXNjLzlwZnMubWFya2Rvd24gaW4geGVuLmdpdCBmb3IgdGhlIGZ1bGwgc3BlY2lmaWNhdGlvbjpcXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vOXBmcy5oOjE1OiAqIGh0dHBzOi8veGVuYml0cy54ZW4ub3JnL2RvY3MvdW5zdGFibGUvbWlzYy85cGZzLmh0bWxcXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vOXBmcy5oLTE2LSAqL1xcbi0tXFxuaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvL3B2Y2FsbHMuaC0xNC0gKiBTZWUgZG9jcy9taXNjL3B2Y2FsbHMubWFya2Rvd24gaW4geGVuLmdpdCBmb3IgdGhlIGZ1bGwgc3BlY2lmaWNhdGlvbjpcXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vcHZjYWxscy5oOjE1OiAqIGh0dHBzOi8veGVuYml0cy54ZW4ub3JnL2RvY3MvdW5zdGFibGUvbWlzYy9wdmNhbGxzLmh0bWxcXG5pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vcHZjYWxscy5oLTE2LSAqL1xcbi0tXFxubmV0LzlwL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX05FVF85UF9GRCkgKz0gOXBuZXRfZmQub1xcbm5ldC85cC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfOVBfWEVOKSArPSA5cG5ldF94ZW4ub1xcbm5ldC85cC9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfOVBfVklSVElPKSArPSA5cG5ldF92aXJ0aW8ub1xcbi0tXFxubmV0LzlwL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX05FVF85UF9VU0JHKSArPSA5cG5ldF91c2JnLm9cXG4tLVxcbm5ldC85cC9NYWtlZmlsZS0yMi05cG5ldF94ZW4tb2JqcyA6PSBcXFxcXFxubmV0LzlwL01ha2VmaWxlOjIzOlxcdHRyYW5zX3hlbi5vIFxcXFxcXG5uZXQvOXAvTWFrZWZpbGUtMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjIwLjYzMTQyOTU4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQwOTkyMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBYZW4gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBSaWdodCwgaXQgc2hvd3MgYGt2bS0kKENPTkZJR19LVk1fWEVOKSArPSB4ZW4ub2AuIFRoYXQgY29uZmlybXMgaXQsIGBLVk1fWEVOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiByZWxhdGVkIHRvIFhlbi4gQW5kIG9mIGNvdXJzZSwgYEtWTWAgaXMgdGhlIG1haW4gS1ZNIGNvbmZpZy5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi4gSSB0aGluayBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgIG1pZ2h0IGJlIHByb21pc2luZy4gSXTigJlzIGNhbGxlZCBmcm9tIGB2Y3B1X3J1bmAgdGhyb3VnaCBga3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHNgLiBgdmNwdV9ydW5gIGlzIGFic29sdXRlbHkgYSBob3QgcGF0aCBpbiBhbnkgS1ZNIHN5c3RlbSwgc28gdGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBIbW0sIGFjdHVhbGx5LCBgdmNwdV9ydW5gICppcyogdGhlIGhvdCBwYXRoLCBmdWxsIHN0b3AuIExldCdzIGRpZyBpbnRvIGBrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50c2Agc3BlY2lmaWNhbGx5LiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBiZXR0ZXIgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzIxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjI0Ljk3MjQyNDQzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4ODUyNDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9MTE1Njk9Ym9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTYwOS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE2MTA6XFx0aWYgKGt2bV94ZW5faGFzX3BlbmRpbmdfZXZlbnRzKHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTYxMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTY5Mj1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTcxNS1cXHRcXHRrdm1fY2xlYXJfcmVxdWVzdChLVk1fUkVRX1VOQkxPQ0ssIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMTcxNjpcXHRcXHRpZiAoa3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHModmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNzE3LVxcdFxcdFxcdGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmgtOTEtXFxuYXJjaC94ODYva3ZtL3hlbi5oOjkyOnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2hhc19wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3hlbi5oLTkzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0xNTg9c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaC0xNjEtXFxuYXJjaC94ODYva3ZtL3hlbi5oOjE2MjpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3hlbl9oYXNfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ZW4uaC0xNjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNDoyNy4yNjA5NTkwMTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMxNDQ5Mzg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgS1ZNL1hlbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGdldCBhIGdvb2QgZGlzdHJpYnV0aW9uIG9mIHRlc3QgY292ZXJhZ2UsIHNwZWNpZmljYWxseSBhdm9pZGluZyBjb21tb24sIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBJIGtub3cgYGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBmcm9tIGB2Y3B1X3J1bmAsIHdoaWNoIGlzIGEgdG90YWwgaG90IHBhdGguIExpc3RpbmcgdGhhdCB3b3VsZG4ndCBiZSB2ZXJ5IGluZm9ybWF0aXZlLlxuXG5MZXQncyBzZWUuLi4gd2hhdCBhYm91dCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgPyBJdCdzIGNhbGxlZCBpbmRpcmVjdGx5IGZyb20gYGt2bV92Y3B1X2hhc19ldmVudHNgIGFuZCBga3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWRgLCBzbyBpdCdzIGFsc28gYSBob3QgcGF0aC4gTm90IGlkZWFsLlxuXG5IbW0sIGhvdyBhYm91dCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYD8gQWgsIHRoYXQncyBhbiBpb2N0bCBoYW5kbGVyISBUaGF0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZm9jdXMuIFdlIGFyZSBsb29raW5nIGZvciBnb29kIGZvY3VzIHN5bWJvbHMsIHNvIHdlJ3JlIG1ha2luZyBwcm9ncmVzcy5cblxuYGt2bV94ZW5faHlwZXJjYWxsYC4uLiB0aGF0J3MgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGh5cGVyY2FsbHMuIERlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC5cblxuVGhlbiwgdGhlcmUncyBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgIGFuZCBga3ZtX3hlbl9zZXRfZXZ0Y2huYC5cblxuQW5kIGBrdm1feGVuX3NldHVwX2V2dGNobmAgaXMgY2FsbGVkIGZyb20gYGt2bV9zZXRfcm91dGluZ19lbnRyeWAuIFRoYXQgc2VlbXMgbGlrZSBhIHN0cm9uZyBmb2N1cyBzeW1ib2wuXG5cbmBrdm1feGVuX2h2bV9ldnRjaG5fc2VuZGAgaXMgY2FsbGVkIGZyb20gYGt2bV94ZW5faHZtX3NldF9hdHRyYCBhbmQgYGt2bV94ZW5faHlwZXJjYWxsYCDigJMgYW5vdGhlciBnb29kIGZvY3VzIHN5bWJvbC5cblxuQW5kIGZpbmFsbHksIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgaXMgYW4gaW9jdGwgaGFuZGxlci4gQW5vdGhlciBzdHJvbmcgY2FuZGlkYXRlLlxuXG5SaWdodCwgc28sIEkgd2FudCB0byBleHBsb3JlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjQ6MzMuNTc1NDU3Mzk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQwODk3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pcnEuYz0yNDE9aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMjY5LVxcbmFyY2gveDg2L2t2bS9pcnEuYzoyNzA6XFx0XFx0cmV0dXJuIGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KFxcdTAwMjZlLVxcdTAwM2V4ZW5fZXZ0Y2huLCBrdm0pO1xcbmFyY2gveDg2L2t2bS9pcnEuYy0yNzEtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTI1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZW5fdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEzOS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQwOlxcdHJjID0ga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3QoXFx1MDAyNmUsIHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0MS1cXHRpZiAocmMgIT0gLUVXT1VMREJMT0NLKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTgwMj1zdGF0aWMgdm9pZCBrdm1feGVuX2NoZWNrX3BvbGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBwb3J0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE4MjItICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE4MjM6aW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTgyNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTk0OT1zdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk1My1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk1NDpcXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTU1LVxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk4Ny1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTk4ODpcXHRcXHRyYyA9IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHhlLCBrdm0pO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTg5LVxcdFxcdGlmIChyYyAhPSAtRVdPVUxEQkxPQ0spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MzM9dm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ZW4uaDozNDppbnQga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3Qoc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmgtMzUtXFx0XFx0XFx0ICAgIHN0cnVjdCBrdm0gKmt2bSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjM1LjgxNjM2MDE5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE1NzYzOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLVk0tWGVuIEV2ZW50IENoYW5uZWwgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBgeGVuX3RpbWVyX2NhbGxiYWNrYCwgYW5kIGBrdm1feGVuX3NldF9ldnRjaG5gLiBUaGF0J3MgYSBzb2xpZCwgZm9jdXNlZCBzeW1ib2wgdG8gc3RhcnQgd2l0aC4gSXQncyB1c2VkIGluIGRpZmZlcmVudCBjb250ZXh0cyBidXQgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcuXG5cblNpbmNlIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2YgZXZlbnQgY2hhbm5lbCBtYW5pcHVsYXRpb24sIGxldCdzIGRyaWxsIGRvd24gZGVlcGVyLCBhbmQgdGFrZSBhIGxvb2sgYXQgYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYC4gSSdtIGN1cmlvdXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGludGVycnVwdCBpdHNlbGYgaXMgc2VudCB0byB0aGUgaHlwZXJ2aXNvci4gVGhpcyBjb3VsZCBnaXZlIG1vcmUgY29udGV4dCBhYm91dCBob3cgdGhlIGZhc3QgcGF0aCB0aWVzIGluIHdpdGggdGhlIG92ZXJhbGwgaW50ZXJydXB0IGluamVjdGlvbiBtZWNoYW5pc20gaW4gdGhlIEtWTS9YZW4gSFZNIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc3NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjM5LjczMjEyNzMwNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1OTQ0NTgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2h2bV9ldnRjaG5fc2VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUyMi1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUyMzpcXHRcXHRyID0ga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoa3ZtLCBcXHUwMDI2dXhlKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUyNC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0yMDE3PWludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA2Ni0gKi9cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjA2NzppbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKnV4ZSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjA2OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MjY9aW50IGt2bV94ZW5faHZtX2dldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xcbmFyY2gveDg2L2t2bS94ZW4uaDoyNzppbnQga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX3hlbl9ldnRjaG4gKmV2dCk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTI4LWludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNDo0MS44OTE1Nzc0NzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzY3NjIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBDb2RlKipcblxuUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIGluIGBrdm1fYXJjaF92bV9pb2N0bGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGEgd2VsbC1kZWZpbmVkIGVudHJ5IHBvaW50IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBLVk0gdmlydHVhbCBtYWNoaW5lIGZyb20gdGhlIG91dHNpZGUuIFwiR29vZCBmb2N1cyBzeW1ib2wsXCIgeWVhaCwgdGhhdCBpbW1lZGlhdGVseSBwb2ludHMgbWUgdG8gdGhlIGFyZWEgSSdtIGludGVyZXN0ZWQgaW4uIE5vdywgd2hhdCdzIGdvaW5nIG9uICpzcGVjaWZpY2FsbHkqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAuIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gc2V0dGluZyBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gWGVuLUhWTSBndWVzdHMgd2l0aGluIEtWTS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBjb25maWd1cmVkLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb25maWd1cmF0aW9uIHRoZSBzeXN0ZW0gaXMgdGFyZ2V0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUyMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjQ1LjIxNTI1NjE1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3OTg2MjQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NzI1OD1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxMy1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzUxNDpcXHRcXHRyID0ga3ZtX3hlbl9odm1fc2V0X2F0dHIoa3ZtLCBcXHUwMDI2eGhhKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzUxNS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz03MDE9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03NTktXFxuYXJjaC94ODYva3ZtL3hlbi5jOjc2MDppbnQga3ZtX3hlbl9odm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0yND1pbnQga3ZtX3hlbl92Y3B1X2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjU6aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0yNi1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI0OjQ3LjM5NTEyMzY0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk0Mzk0MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIENhbGwqKlxuXG5BbHJpZ2h0LCB0aGF0J3MgaW50ZXJlc3RpbmcuIFRoZSBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLCB3aGljaCBpbW1lZGlhdGVseSBwcm92aWRlcyBhIHByZXR0eSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhhdCdzIGEgZ29vZCwgc3BlY2lmaWMgc3ltYm9sIHRvIGZvY3VzIG9uLiBJdCBkaXJlY3RzIHVzIHRvd2FyZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFZpcnR1YWwgTWFjaGluZSBJL08gY29udHJvbCBsYXllciwgd2hpY2ggaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSB0eXBlIG9mIGlzc3VlIHdlJ3JlIGxpa2VseSBjaGFzaW5nLiBOb3csIGJhc2VkIG9uIHdoZXJlIHRoaXMgaXMgdHJpZ2dlcmVkIGZyb20sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyB3ZSBjYWxsIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLiBJJ20gZ29pbmcgdG8gbG9vayBkZWVwZXIgaW50byB0aGF0IHJvdXRpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjQ6NTAuNTg5NTIxMTg1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwNjEzNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NjE4OT1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYxMS1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjYxMjpcXHRcXHRyID0ga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHZjcHUsIFxcdTAwMjZ4dmEpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NjEzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTg2NT1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy05MTktXFxuYXJjaC94ODYva3ZtL3hlbi5jOjkyMDppbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbmFyY2gveDg2L2t2bS94ZW4uYy05MjEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oPTIyPXZvaWQga3ZtX3hlbl9pbmplY3RfdmNwdV92ZWN0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjM6aW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTI0LWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNDo1Mi45MDAxMzkzNTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzNjQ2NTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIEh5cGVyY2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBzdGFydGluZyB3aXRoIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC4gVGhhdCdzIGEgc29saWQgZW50cnkgcG9pbnQ7IGdvb2QsIGZvY3VzZWQgcGxhY2UgdG8gYmVnaW4gdHJhY2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGhlIHN0YW5kYXJkIHBhdGggZm9yIGEgbG90IG9mIEtWTSBpbnRlcmFjdGlvbiwgc28gaXQncyB0aGUgbmF0dXJhbCBmaXJzdCBzdGVwIHRvIGxvb2sgYXQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgcmVhY2hpbmcgdGhlIFhlbiBoeXBlcmNhbGwuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBga3ZtX3hlbl9oeXBlcmNhbGxgLiBJJ2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlc2lnbiBkZWNpc2lvbnMgdGhhdCBsZWQgdG8gdGhpcyBwYXRoLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmUgYmVoaW5kIGl0cyBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5PyBJIHdvbmRlciBob3cgbWFueSBkaWZmZXJlbnQgaHlwZXJjYWxscyB3ZSdsbCBmaW5kIGhlcmUsIG9yIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBzd2l0Y2hib2FyZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgS1ZNIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2l0aW9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODY4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjQ6NTguMzM2NjA5MzE2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgxNzA4OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV94ZW5faHlwZXJjYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz0xMzc2PXN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3JfcHcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSxcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNDEwLVxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNDExOlxcdFxcdGlmIChrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKGt2bSkpIHtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTQxMi1cXHRcXHRcXHQvKiBvcmwgJDB4ODAwMDAwMDAsICVlYXggKi9cXG4tLVxcbmFyY2gveDg2L2t2bS90cmFjZS5oPTExND1UUkFDRV9FVkVOVChrdm1faHZfaHlwZXJjYWxsX2RvbmUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaC0xMzEtICovXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTMyOlRSQUNFX0VWRU5UKGt2bV94ZW5faHlwZXJjYWxsLFxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMy1cXHQgICAgVFBfUFJPVE8odTggY3BsLCB1bnNpZ25lZCBsb25nIG5yLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwNTA0PWludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDUwNS17XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTA2OlxcdGlmIChrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHZjcHUtXFx1MDAzZWt2bSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTA3OlxcdFxcdHJldHVybiBrdm1feGVuX2h5cGVyY2FsbCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA1MDgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTI5OD1pbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEzMjgtXFx0ICovXFxuYXJjaC94ODYva3ZtL3hlbi5jOjEzMjk6XFx0aWYgKGt2bV94ZW5faHlwZXJjYWxsX2VuYWJsZWQoa3ZtKSkge1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xMzMwLVxcdFxcdHU4IGluc3RydWN0aW9uc1szMl07XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTM4ND1pbnQga3ZtX3hlbl9odm1fY29uZmlnKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2NvbmZpZyAqeGhjKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0MzAtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE0MzE6c3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9zZXRfcmVzdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQzMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQzNi1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTQzNzpzdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX2NvbXBsZXRlX3VzZXJzcGFjZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0Mzgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE0NDMtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE0NDQ6XFx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVxcdTAwM2V4ZW4udS5oY2FsbC5yZXN1bHQpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xNDQ1LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xNjg3PXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzAxLVxcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzAyOmludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MDMte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MzgtXFx0Y3BsID0ga3ZtX3g4Nl9jYWxsKGdldF9jcGwpKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ZW4uYzoxNzM5OlxcdHRyYWNlX2t2bV94ZW5faHlwZXJjYWxsKGNwbCwgaW5wdXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLCBwYXJhbXNbMl0sXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3NDAtXFx0XFx0XFx0XFx0cGFyYW1zWzNdLCBwYXJhbXNbNF0sIHBhcmFtc1s1XSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc4MC1cXHRpZiAoaGFuZGxlZClcXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTc4MTpcXHRcXHRyZXR1cm4ga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdCh2Y3B1LCByKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTc4Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzk2LVxcdHZjcHUtXFx1MDAzZWFyY2guY29tcGxldGVfdXNlcnNwYWNlX2lvID1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTc5NzpcXHRcXHRrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2U7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3OTgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9Njc9c3RhdGljIGlubGluZSBib29sIGt2bV94ZW5faXNfaHlwZXJjYWxsX3BhZ2VfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIG1zcilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaC03NC1cXG5hcmNoL3g4Ni9rdm0veGVuLmg6NzU6c3RhdGljIGlubGluZSBib29sIGt2bV94ZW5faHlwZXJjYWxsX2VuYWJsZWQoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS94ZW4uaC03Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MTAzPXN0YXRpYyBpbmxpbmUgaW50IGt2bV94ZW5faGFzX3BlbmRpbmdfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ZW4uaC0xMDQte1xcbmFyY2gveDg2L2t2bS94ZW4uaDoxMDU6XFx0aWYgKGt2bV94ZW5faHlwZXJjYWxsX2VuYWJsZWQodmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNiBrdm1feGVuX3RpbWVyX2VuYWJsZWQodmNwdSkpXFxuYXJjaC94ODYva3ZtL3hlbi5oLTEwNi1cXHRcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnRpbWVyX3BlbmRpbmcpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oPTE0Mz1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3hlbl9pc19oeXBlcmNhbGxfcGFnZV9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgbXNyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oLTE0Ny1cXG5hcmNoL3g4Ni9rdm0veGVuLmg6MTQ4OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1feGVuX2h5cGVyY2FsbF9lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTQ5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0xODE9c3RhdGljIGlubGluZSBib29sIGt2bV94ZW5faXNfdHNjX2xlYWYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZnVuY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmgtMTg2LVxcbmFyY2gveDg2L2t2bS94ZW4uaDoxODc6aW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTE4OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6MDAuNjE4MzIyNzI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzgwNzg3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0tWGVuIEh5cGVyY2FsbCBQYXRoKipcblxuT2theSwgc28gYGt2bV94ZW5faHlwZXJjYWxsYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIFhlbiBoeXBlcmNhbGxzIHdoZW4gdGhleSdyZSBjb21pbmcgZnJvbSB0aGUgS1ZNIGVtdWxhdGlvbiBsYXllci4gVGhhdCBtYWtlcyBzZW5zZSwgYGt2bV9lbXVsYXRlX2h5cGVyY2FsbGAgaXMgdGhlIGludGVybWVkaWFyeSwgY2FsbGVkIHdoZW5ldmVyIGEgZ3Vlc3QgbWFrZXMgYSBoeXBlcmNhbGwgaW5zdHJ1Y3Rpb24uIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsLCBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYSwgYSBkZWZpbml0ZSBcImhvdCBwYXRoXCIgZm9yIFhlbiBndWVzdHMuIEZvY3VzaW5nIG9uIGBrdm1feGVuX2h5cGVyY2FsbGAgaXRzZWxmIGlzIGEgZ29vZCBzdHJhdGVneSB0byB1bmRlcnN0YW5kIHRoZSBmbG93LlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgY2hlY2sgb3V0IGBfX2t2bV94ZW5faGFzX2ludGVycnVwdGAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBpbiB0aGlzIGNvbnRleHQ7IEkgc3VzcGVjdCBpdCBwbGF5cyBhIHNpZ25pZmljYW50IHJvbGUgaW4gdGhlIG92ZXJhbGwgWGVuIGh5cGVyY2FsbCBlbXVsYXRpb24gcHJvY2VzcywgYW5kIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBsb29rIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTcwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6MDQuODU2NDA0ODMzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY5MDA1MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ZW4uYz02Mzk9dm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzAwLVxcbmFyY2gveDg2L2t2bS94ZW4uYzo3MDE6aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzAyLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD0xOD1leHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2VfZGVmZXJyZWQga3ZtX3hlbl9lbmFibGVkO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0xOS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjA6aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTIxLXZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD00MD1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3hlbl9zd19lbmFibGVfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oLTQ4LVxcdCAgICB2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUuYWN0aXZlIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3hlbi5oOjQ5OlxcdCAgICB2Y3B1LVxcdTAwM2VhcmNoLnhlbi51cGNhbGxfdmVjdG9yIFxcdTAwMjZcXHUwMDI2IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ZW4uaC01MC1cXHRcXHRrdm1feGVuX2luamVjdF92Y3B1X3ZlY3Rvcih2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uaD04Mj1zdGF0aWMgaW5saW5lIGludCBrdm1feGVuX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oLTg2LVxcdCAgICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gueGVuLnVwY2FsbF92ZWN0b3IpXFxuYXJjaC94ODYva3ZtL3hlbi5oOjg3OlxcdFxcdHJldHVybiBfX2t2bV94ZW5faGFzX2ludGVycnVwdCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmgtODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjA3LjEyNTQxNTU0NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTY2MTcxNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTS9YZW4gUGVyZm9ybWFuY2UgSG90c3BvdHMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IHRoZSBLVk0vWGVuIGludGVncmF0aW9uIGNvZGUgdG8gdW5kZXJzdGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBzZWUgdGhhdCBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgIGlzIGNhbGxlZCBkZWVwbHkgd2l0aGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMsIGZyb20gYGt2bV94ZW5faGFzX2ludGVycnVwdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2hhc19ldmVudHNgIGFuZCBga3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWRgLiBJdCdzIGRlZmluaXRlbHkgYSBob3QgcGF0aCwgc28gSSdsbCBleGNsdWRlIGl0IGZyb20gdGhlIHN5bWJvbHMgSSdtIGZvY3VzaW5nIG9uIHRvIGtlZXAgbXkgYW5hbHlzaXMgYWNjdXJhdGUuIEkgYWxzbyBuZWVkIHRvIGlnbm9yZSBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgIHNpbmNlIGl0J3MgYWxzbyBvbiB0aGUgY3JpdGljYWwgcGF0aCwgY2FsbGVkIGZyb20gYHZjcHVfcnVuYC5cblxuU28sIHRoYXQgbGVhdmVzIGEgbGlzdCBvZiBpbnRlcmVzdGluZyBmdW5jdGlvbnM6IGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBhbmQgYGt2bV94ZW5faHZtX3NldF9hdHRyYC4gSSdsbCB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGVzZS5cblxuTm93LCB3aGF0IGFib3V0IHRob3NlIHN0YXRpYyBmdW5jdGlvbnM/IEhtbSwgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAuIFRoZXkgKmFyZSogc3RhdGljLCBidXQgdGhleSBjb3VsZCBzdGlsbCBiZSBpbXBvcnRhbnQuIEknbGwgZmxhZyB0aGVtIGZvciBsYXRlciByZXZpZXcsIGVzcGVjaWFsbHkgaWYgdGhlIG1vcmUgb2J2aW91cyBmdW5jdGlvbnMgZG9uJ3QgeWllbGQgc3VmZmljaWVudCBpbmZvcm1hdGlvbi5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExvb2tzIGxpa2UgYEtWTWAgYW5kIGBLVk1fWEVOYC4gV2FpdCwgYEtWTV9YRU5gIGlzIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFJpZ2h0LCBpdCdzIHNwZWNpZmljIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBhcyBJIHdvdWxkIGV4cGVjdC4gTGV0J3Mgc2VlLi4uYW55IG90aGVyIGNvbmZpZ3MgaW52b2x2ZWQgaGVyZT8gTm8sIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgY29uZmluZWQgdG8gYGFyY2gveDg2L2t2bS94ZW4uY2AgYW5kIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC4gQW5kLCBvZiBjb3Vyc2UsIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBhY3RpdmUuIEdvb2QuIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUgaW50byB0aGVzZSBhcmVhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6MTYuMDkxNTg5NzMxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTExNDIxOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBmbmNhY2hlXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL01ha2VmaWxlLmt2bT0xMz1rdm0tJChDT05GSUdfSEFWRV9LVk1fRElSVFlfUklORykgKz0gJChLVk0pL2RpcnR5X3Jpbmcub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bToxNDprdm0tJChDT05GSUdfSEFWRV9LVk1fUEZOQ0FDSEUpICs9ICQoS1ZNKS9wZm5jYWNoZS5vXFxudmlydC9rdm0vTWFrZWZpbGUua3ZtLTE1LWt2bS0kKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpICs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjE5LjAwMzAxOTI4NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMwNzk5NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKktWTSBQRk4gQ2FjaGUgRXhhbWluYXRpb24qKlxuXG5BbHJpZ2h0LCAqQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKi4uLiB0aGF0J3MgdGhlIGZsYWcgd2UgbmVlZCB0byBiZSBsb29raW5nIGF0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiT2theSwgZG9lcyBvdXIgYnVpbGQgc3lzdGVtIGFjdHVhbGx5ICpkZWZpbmUqIGBIQVZFX0tWTV9QRk5DQUNIRWA/IFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIEl0J3MgdGhlIG1vc3QgYmFzaWMgY2hlY2ssIHJlYWxseS4gVGhlIGNvbmZpZyBzeW1ib2wgZGljdGF0ZXMgdGhhdCBjZXJ0YWluIGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudCwgYnV0IGRvIHdlIGFjdHVhbGx5IGhhdmUgdGhlIGNvbXBpbGVyIHN1cHBvcnQgdG8gdXRpbGl6ZSBpdD9cIi4gTGV0J3MgZGVsdmUgaW50byB0aGF0IGFzcGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4MjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNToyMi4wMzM4MzA0MTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDQ3MDk5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhBVkVfS1ZNX1BGTkNBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9ND1jb25maWcgS1ZNX0NPTU1PTlxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMC1cXG52aXJ0L2t2bS9LY29uZmlnOjExOmNvbmZpZyBIQVZFX0tWTV9QRk5DQUNIRVxcbnZpcnQva3ZtL0tjb25maWctMTItICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6MjQuMTc4NTQ2ODAzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjg4MjU3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBIQVZFX0tWTV9QRk5DQUNIRWAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkndmUgc3R1bWJsZWQgdXBvbiBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBJdCdzIGEgaGlkZGVuIGNvbmZpZyBvcHRpb24sIG1lYW5pbmcgaXQncyBub3Qgc29tZXRoaW5nIHlvdSdkIHR5cGljYWxseSBmaW5kIHRocm91Z2ggYSBzdGFuZGFyZCBgbWFrZSBtZW51Y29uZmlnYCBvciBzaW1pbGFyIGludGVyZmFjZS4gSXQncyBhbHNvIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXMgd2hhdCdzICpzZWxlY3RpbmcqIHRoaXMgdGhpbmc/IEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWUgd2hlcmUgdGhpcyBvcHRpb24gaXMgYmVpbmcgcHVsbGVkIGluLiBHb3R0YSB0cmFjZSB0aGUgY29uZmlnIGhpZXJhcmNoeSB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3QuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIGFyZSB0ZWxsaW5nIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjA5OSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjI3LjM0NzM3NTY1OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNzU1ODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTI1LVxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjY6XFx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjctXFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjI5LjQ1NDk0MjczN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU2MzQyNzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFhlbiBFbXVsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBLVk1fWDg2YCwgd2hpY2ggbWVhbnMgYEtWTWAgYW5kIGBLVk1fWEVOYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGJlZW4gY2hhbmdlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5J3JlIGV4cG9zZWQuIEkndmUgcmUtZXhhbWluZWQgdGhlIGZvY3VzIHN5bWJvbHM6IGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLCBga3ZtX3hlbl9oeXBlcmNhbGxgLCBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gLCBga3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRgLCBhbmQgYGt2bV94ZW5faHZtX3NldF9hdHRyYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueS4gSSBjaGVja2VkIGZvciBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBtYWNyb3MgYW5kIHN0YXRpYyBpbmxpbmVzIGFyZW4ndCBjcml0aWNhbCBpbiB0aGUgc2FtZSB3YXksIGJ1dCBJIG1hZGUgc3VyZSB0byBub3RlIHRoZW0uXG5cbkkgdGhlbiB2ZXJpZmllZCByZWFjaGFiaWxpdHkuIEkgc2VlIHRoYXQgYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggYGt2bV94ZW5faHZtX2V2dGNobl9zZW5kYCB3aXRoaW4gYGt2bV9hcmNoX3ZtX2lvY3RsYCAodHJpZ2dlcmVkIGJ5IGBLVk1fWEVOX0hWTV9FVlRDSE5fU0VORGApLiBga3ZtX3hlbl9zZXR1cF9ldnRjaG5gIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9zZXRfcm91dGluZ19lbnRyeWAgKHRyaWdnZXJlZCBieSBgS1ZNX1NFVF9HU0lfUk9VVElOR2ApLiBga3ZtX3hlbl9odm1fc2V0X2F0dHJgIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9hcmNoX3ZtX2lvY3RsYCAodHJpZ2dlcmVkIGJ5IGBLVk1fWEVOX0hWTV9TRVRfQVRUUmApLiBBbmQgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgaXMgZXhwb3NlZCB0aHJvdWdoIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCAodHJpZ2dlcmVkIGJ5IGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgKS4gRmluYWxseSwgYGt2bV94ZW5faHlwZXJjYWxsYCBpcyBleHBvc2VkIHRvIHRoZSBndWVzdCBleGVjdXRpb24uXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIHRvdWNoZXMgZnVuZGFtZW50YWwgYXNwZWN0cyBvZiBYZW4gZW11bGF0aW9uIHdpdGhpbiBLVk0uIEl0IGFkZHJlc3NlcyAzMi1iaXQvNjQtYml0IHNoYXJlZCBpbmZvIGhhbmRsaW5nLCBldmVudCBjaGFubmVsIGRlbGl2ZXJ5LCBhbmQgcGZuY2FjaGUgaW52YWxpZGF0aW9uIOKAkyBjb3JlIGZ1bmN0aW9uYWxpdGllcy4gVGhlc2UgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCB1c2Vyc3BhY2UgYW5kIGd1ZXN0IGV4ZWN1dGlvbiwgc28gdGhpcyBwYXRjaCBuZWVkcyB0aG9yb3VnaCByZXZpZXcuXG5cbk15IGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMgaXMgY29tcGxldGUuIE5vdywgdGltZSB0byBldmFsdWF0ZSB0aGlzIGZ1cnRoZXIgYW5kIHJlcG9ydCBiYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQzMywiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTc6MjU6NDAuMDE4MzczMTQ1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MzY3OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9YRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1feGVuX3ZjcHVfc2V0X2F0dHJcIixcbiAgICBcImt2bV94ZW5faHlwZXJjYWxsXCIsXG4gICAgXCJrdm1feGVuX3NldF9ldnRjaG5fZmFzdFwiLFxuICAgIFwia3ZtX3hlbl9zZXR1cF9ldnRjaG5cIixcbiAgICBcImt2bV94ZW5faHZtX2V2dGNobl9zZW5kXCIsXG4gICAgXCJrdm1feGVuX2h2bV9zZXRfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZml4aW5nIDMyLWJpdC82NC1iaXQgc2hhcmVkIGluZm8gaGFuZGxpbmcsIGV2ZW50IGNoYW5uZWwgZGVsaXZlcnksIGFuZCBwZm5jYWNoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGNvZGUgYW5kIFhlbiBlbXVsYXRpb24sIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBhbmQgZ3Vlc3QgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiLFxuICAgIFwia3ZtX3hlbl9oeXBlcmNhbGxcIixcbiAgICBcImt2bV94ZW5fc2V0X2V2dGNobl9mYXN0XCIsXG4gICAgXCJrdm1feGVuX3NldHVwX2V2dGNoblwiLFxuICAgIFwia3ZtX3hlbl9odm1fZXZ0Y2huX3NlbmRcIixcbiAgICBcImt2bV94ZW5faHZtX3NldF9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFhlbiBlbXVsYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBmaXhpbmcgMzItYml0LzY0LWJpdCBzaGFyZWQgaW5mbyBoYW5kbGluZywgZXZlbnQgY2hhbm5lbCBkZWxpdmVyeSwgYW5kIHBmbmNhY2hlIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBLVk0gY29kZSBhbmQgWGVuIGVtdWxhdGlvbiwgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGFuZCBndWVzdCBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE3OjI1OjQwLjE2Njc1MTA5MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1ODg3Mzg5MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNTo0MC4xNjc2MDE4ODFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQ1ODc4ODI0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhbGlnbm1lbnQgaXNzdWVzLCBhdG9taWMgb3BlcmF0aW9ucyBvbiBndWVzdCBtZW1vcnksIGFuZCBhIHNlcXVlbmNlIGNvdW50ZXIgZm9yIEd1ZXN0IFBhZ2UgQ2FjaGUgKEdQQykgaW4gS1ZNIFhlbiBlbXVsYXRpb24uIEl0IHJlcGxhY2VzIGBJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGVgIHdpdGggYSBtYWNybyBga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSlgLCBoYW5kbGVzIHVuYWxpZ25lZCBhdG9taWMgb3BlcmF0aW9ucyBpbiBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCB1c2VzIGBidHNsYCBmb3IgMzItYml0IGFsaWduZWQgZ3Vlc3QtY29udHJvbGxlZCBtZW1vcnkgaW4gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYW5kIGludHJvZHVjZXMgYGdwY19pbnZhbGlkYXRlX3NlcWAgdG8gc2VwYXJhdGUgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBmcm9tIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk3M2UwOGJkNjhmOGQ5NWUzMzRlZDVkNmJkYzk5NzM0YmVjNGRmMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE3OjIzOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhLi40ODk4NzIxYmNmZGQ5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2hhcmVkX2luZm8sIHdjKSAhPSAweGMwMCk7XG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNoYXJlZF9pbmZvLCB3Y19zZWNfaGkpICE9IDB4YzBjKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKSkge1xuIFx0XHRzdHJ1Y3Qgc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFxuIFx0XHR3Y19zZWNfaGkgPSBcdTAwMjZzaGluZm8tXHUwMDNld2Nfc2VjX2hpO1xuQEAgLTM5MCw3ICszOTAsNyBAQCBzdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuIFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvLCB0aW1lKSAhPVxuIFx0XHQgICAgIHNpemVvZih2eC1cdTAwM2VydW5zdGF0ZV90aW1lcykpO1xuIFxuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHR1c2VyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmNwdV9ydW5zdGF0ZV9pbmZvKTtcbiBcdFx0dGltZXNfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyxcbiBcdFx0XHRcdCAgICAgc3RhdGVfZW50cnlfdGltZSk7XG5AQCAtNjYxLDI4ICs2NjEsMzIgQEAgdm9pZCBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHR9XG4gXG4gXHQvKiBOb3cgZ3BjLVx1MDAzZWtodmEgaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcyBmb3IgdGhlIHZjcHVfaW5mbyAqL1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSB7XG4rXHRpZiAoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKHYtXHUwMDNla3ZtKSkge1xuIFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2aSA9IGdwYy1cdTAwM2VraHZhO1xuK1x0XHR2b2lkICp2aV9wZW5kaW5nX3NlbCA9IFx1MDAyNnZpLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbDtcbiBcbi1cdFx0YXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIFwib3JxICUwLCAlMVxcblwiXG4tXHRcdFx0ICAgICBcIm5vdHEgJTBcXG5cIlxuLVx0XHRcdCAgICAgTE9DS19QUkVGSVggXCJhbmRxICUwLCAlMlxcblwiXG4tXHRcdFx0ICAgICA6IFwiPXJcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSxcbi1cdFx0XHQgICAgICAgXCIrbVwiICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcIjBcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsKSk7XG4rXHRcdGlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXZpX3BlbmRpbmdfc2VsLCBzaXplb2YodTY0KSkpIHtcbitcdFx0XHRhdG9taWM2NF9vcihldnRjaG5fcGVuZGluZ19zZWwsIHZpX3BlbmRpbmdfc2VsKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRhdG9taWNfb3IoZXZ0Y2huX3BlbmRpbmdfc2VsLCB2aV9wZW5kaW5nX3NlbCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgY2FzdCBrZWVwcyB0aGUgc2hpZnQgd2VsbC1kZWZpbmVkIG9uIDMyLWJpdCxcbitcdFx0XHQgKiB3aGVyZSBldnRjaG5fcGVuZGluZ19zZWwgaXMgMzIgYml0cyB3aWRlIGFuZCB0aGlzXG4rXHRcdFx0ICogYnJhbmNoIGlzIHVucmVhY2hhYmxlIGFueXdheSAodGhpcyBpcyBpbnNpZGVcbitcdFx0XHQgKiBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oKSwgd2hpY2ggaXMgZ2F0ZWQgb25cbitcdFx0XHQgKiBJU19FTkFCTEVEKENPTkZJR182NEJJVCkpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGF0b21pY19vcigodTY0KWV2dGNobl9wZW5kaW5nX3NlbCBcdTAwM2VcdTAwM2UgMzIsXG4rXHRcdFx0XHQgIHZpX3BlbmRpbmdfc2VsICsgNCk7XG4rXHRcdH1cbitcbitcdFx0YXRvbWljNjRfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHUzMiBldnRjaG5fcGVuZGluZ19zZWwzMiA9IGV2dGNobl9wZW5kaW5nX3NlbDtcbiBcdFx0c3RydWN0IGNvbXBhdF92Y3B1X2luZm8gKnZpID0gZ3BjLVx1MDAzZWtodmE7XG4gXG4tXHRcdGFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCBcIm9ybCAlMCwgJTFcXG5cIlxuLVx0XHRcdCAgICAgXCJub3RsICUwXFxuXCJcbi1cdFx0XHQgICAgIExPQ0tfUFJFRklYIFwiYW5kbCAlMCwgJTJcXG5cIlxuLVx0XHRcdCAgICAgOiBcIj1yXCIgKGV2dGNobl9wZW5kaW5nX3NlbDMyKSxcbi1cdFx0XHQgICAgICAgXCIrbVwiICh2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpLFxuLVx0XHRcdCAgICAgICBcIittXCIgKHYtXHUwMDNlYXJjaC54ZW4uZXZ0Y2huX3BlbmRpbmdfc2VsKVxuLVx0XHRcdCAgICAgOiBcIjBcIiAoZXZ0Y2huX3BlbmRpbmdfc2VsMzIpKTtcbitcdFx0YXRvbWljX29yKGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2aS1cdTAwM2VldnRjaG5fcGVuZGluZ19zZWwpO1xuK1x0XHRhdG9taWNfYW5kbm90KGV2dGNobl9wZW5kaW5nX3NlbCwgKHZvaWQgKilcdTAwMjZ2LVx1MDAzZWFyY2gueGVuLmV2dGNobl9wZW5kaW5nX3NlbCk7XG4gXHRcdFdSSVRFX09OQ0UodmktXHUwMDNlZXZ0Y2huX3VwY2FsbF9wZW5kaW5nLCAxKTtcbiBcdH1cbiBcbkBAIC03MTMsNiArNzE3LDE2IEBAIGludCBfX2t2bV94ZW5faGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJjKSAhPVxuIFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4gXG4rXHQvKlxuK1x0ICoga3ZtX2dwY19jaGVjaygpIGNoZWNrcyB0aGUgbWVtc2xvdCBnZW5lcmF0aW9uLCBzbyBrdm0tXHUwMDNlc3JjdSBtdXN0IGJlXG4rXHQgKiBoZWxkLiBNb3N0IGNhbGxlcnMgaG9sZCBpdCBhbHJlYWR5LCBidXQgdGhpcyBpcyBhbHNvIHJlYWNoZWQgZnJvbVxuK1x0ICoga3ZtX2VtdWxhdGVfaGFsdCgpIG9uIHRoZSBWTS1FeGl0IHBhdGggYW5kIGZyb20ga3ZtX3ZjcHVfYmxvY2soKSxcbitcdCAqIHdoZXJlIHZjcHVfZW50ZXJfZ3Vlc3QoKSBoYXMgYWxyZWFkeSBkcm9wcGVkIHRoZSB2Q1BVJ3MgU1JDVSBsb2NrLlxuK1x0ICogVGFraW5nIFNSQ1UgZG9lcyBub3Qgc2xlZXAsIHNvIGl0IGlzIHNhZmUgZXZlbiBpbiB0aGUgYXRvbWljIGNhc2VcbitcdCAqIHdoaWNoIGlzIGhhbmRsZWQgYmVsb3cuXG4rXHQgKi9cbitcdGd1YXJkKHNyY3UpKFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuK1xuIFx0cmVhZF9sb2NrX2lycXNhdmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHdoaWxlICgha3ZtX2dwY19jaGVjayhncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHtcbiBcdFx0cmVhZF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZncGMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTkyNiw2ICs5NDAsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRyID0gLUVOWElPO1xuK1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpXG4rXHRcdFx0XHRicmVhaztcbitcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbiBcdFx0XHRcdFx0ICAgICBkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTkzNSw2ICs5NTMsMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRyID0gLUVOWElPO1xuK1x0XHRcdGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuaHZhLCBzaXplb2YodTMyKSkpXG4rXHRcdFx0XHRicmVhaztcbitcbiBcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZV9odmEoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXG4gXHRcdFx0XHRcdFx0IGRhdGEtXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4gXHRcdH1cbkBAIC05NzgsNyArMTAwMCw3IEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRcdCAqIGFkZHJlc3MsIHRoYXQncyBhY3R1YWxseSBPSy4ga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3QoKVxuIFx0XHQgKiB3aWxsIGNvcGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpXG4rXHRcdGlmIChrdm1feGVuX2hhc182NGJpdF9zaGluZm8odmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRcdHN6ID0gc2l6ZW9mKHN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8pO1xuIFx0XHRlbHNlXG4gXHRcdFx0c3ogPSBzaXplb2Yoc3RydWN0IGNvbXBhdF92Y3B1X3J1bnN0YXRlX2luZm8pO1xuQEAgLTE0MjIsMTYgKzE0NDQsMjEgQEAgc3RhdGljIGludCBrdm1feGVuX2h5cGVyY2FsbF9jb21wbGV0ZV91c2Vyc3BhY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQodmNwdSwgcnVuLVx1MDAzZXhlbi51LmhjYWxsLnJlc3VsdCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1heF9ldnRjaG5fcG9ydChzdHJ1Y3Qga3ZtICprdm0pXG4rc3RhdGljIGlubGluZSBpbnQgbWF4X2V2dGNobl9wb3J0KGJvb2wgaGFzXzY0Yml0X3NoaW5mbylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKVxuK1x0aWYgKGhhc182NGJpdF9zaGluZm8pXG4gXHRcdHJldHVybiBFVlRDSE5fMkxfTlJfQ0hBTk5FTFM7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBDT01QQVRfRVZUQ0hOXzJMX05SX0NIQU5ORUxTO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4tXHRcdFx0ICAgICAgIGV2dGNobl9wb3J0X3QgKnBvcnRzKVxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tYXhfZXZ0Y2huX3BvcnQoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiBtYXhfZXZ0Y2huX3BvcnQoa3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSkpO1xuK31cbitcbitzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhhc182NGJpdF9zaGluZm8sXG4rXHRcdFx0ICAgICAgIGludCBucl9wb3J0cywgZXZ0Y2huX3BvcnRfdCAqcG9ydHMpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbkBAIC0xNDQ2LDcgKzE0NzMsNyBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbiBcdHJldCA9IGZhbHNlO1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYga3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSkge1xuK1x0aWYgKGhhc182NGJpdF9zaGluZm8pIHtcbiBcdFx0c3RydWN0IHNoYXJlZF9pbmZvICpzaGluZm8gPSBncGMtXHUwMDNla2h2YTtcbiBcdFx0cGVuZGluZ19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX3BlbmRpbmc7XG4gXHR9IGVsc2Uge1xuQEAgLTE0NjgsOSArMTQ5NSwxMCBAQCBzdGF0aWMgYm9vbCB3YWl0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnJfcG9ydHMsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9zY2hlZG9wX3BvbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzXzY0Yml0LFxuIFx0XHRcdFx0IHU2NCBwYXJhbSwgdTY0ICpyKVxuIHtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyh2Y3B1LVx1MDAzZWt2bSk7XG4gXHRzdHJ1Y3Qgc2NoZWRfcG9sbCBzY2hlZF9wb2xsO1xuIFx0ZXZ0Y2huX3BvcnRfdCBwb3J0LCAqcG9ydHM7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuQEAgLTE0ODAsNyArMTUwOCw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5fc2NoZWRvcF9wb2xsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSxcbiBcdCAgICAhKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuZmxhZ3MgXHUwMDI2IEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2ICFsb25nbW9kZSkge1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcdTAwMjZcdTAwMjYgIWlzXzY0Yml0KSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2NoZWRfcG9sbCBzcDMyO1xuIFxuIFx0XHQvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgY29tcGF0IHN0cnVjdCBkZWZpbml0aW9uIGlzIGNvcnJlY3QgKi9cbkBAIC0xNTI5LDcgKzE1NTcsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzY2hlZF9wb2xsLm5yX3BvcnRzOyBpKyspIHtcbi1cdFx0aWYgKHBvcnRzW2ldIFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHRpZiAocG9ydHNbaV0gXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoaGFzXzY0Yml0X3NoaW5mbykpIHtcbiBcdFx0XHQqciA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0xNTQyLDcgKzE1NzAsNyBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX3NjaGVkb3BfcG9sbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4gXG4gXHRzZXRfYml0KHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnBvbGxfbWFzayk7XG4gXG4tXHRpZiAoIXdhaXRfcGVuZGluZ19ldmVudCh2Y3B1LCBzY2hlZF9wb2xsLm5yX3BvcnRzLCBwb3J0cykpIHtcbitcdGlmICghd2FpdF9wZW5kaW5nX2V2ZW50KHZjcHUsIGhhc182NGJpdF9zaGluZm8sIHNjaGVkX3BvbGwubnJfcG9ydHMsIHBvcnRzKSkge1xuIFx0XHRrdm1fc2V0X21wX3N0YXRlKHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQpO1xuIFxuIFx0XHRpZiAoc2NoZWRfcG9sbC50aW1lb3V0KVxuQEAgLTE1NzcsMTIgKzE2MDUsMTIgQEAgc3RhdGljIHZvaWQgY2FuY2VsX2V2dGNobl9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsXG4rc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9zY2hlZF9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsXG4gXHRcdFx0XHQgICBpbnQgY21kLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBTQ0hFRE9QX3BvbGw6XG4tXHRcdGlmIChrdm1feGVuX3NjaGVkb3BfcG9sbCh2Y3B1LCBsb25nbW9kZSwgcGFyYW0sIHIpKVxuK1x0XHRpZiAoa3ZtX3hlbl9zY2hlZG9wX3BvbGwodmNwdSwgaXNfNjRiaXQsIHBhcmFtLCByKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNDSEVET1BfeWllbGQ6XG5AQCAtMTYwMSw3ICsxNjI5LDcgQEAgc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbiAgICAgdWludDMyX3QgZmxhZ3M7XG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuK3N0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaXNfNjRiaXQsIGludCBjbWQsXG4gXHRcdFx0XHQgIGludCB2Y3B1X2lkLCB1NjQgcGFyYW0sIHU2NCAqcilcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciBvbmVzaG90O1xuQEAgLTE2MzMsNyArMTY2MSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyLCBmbGFncykgIT1cbiBcdFx0XHQgICAgIHNpemVvZl9maWVsZChzdHJ1Y3QgdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciwgZmxhZ3MpKTtcbiBcbi1cdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGxvbmdtb2RlID8gc2l6ZW9mKG9uZXNob3QpIDpcbitcdFx0aWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgcGFyYW0sIFx1MDAyNm9uZXNob3QsIGlzXzY0Yml0ID8gc2l6ZW9mKG9uZXNob3QpIDpcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciksIFx1MDAyNmUpKSB7XG4gXHRcdFx0KnIgPSAtRUZBVUxUO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuQEAgLTE2NzMsNyArMTcwMSw3IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDY0X3QgdGltZW91dCxcbiBcbiBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGJvb2wgbG9uZ21vZGU7XG4rXHRib29sIGlzXzY0Yml0O1xuIFx0dTY0IGlucHV0LCBwYXJhbXNbNl0sIHIgPSAtRU5PU1lTO1xuIFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4gXHR1OCBjcGw7XG5AQCAtMTY4Myw4ICsxNzExLDggQEAgaW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBrdm1faHZfaHlwZXJjYWxsKHZjcHUpO1xuIFxuLVx0bG9uZ21vZGUgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuLVx0aWYgKCFsb25nbW9kZSkge1xuK1x0aXNfNjRiaXQgPSBpc182NF9iaXRfaHlwZXJjYWxsKHZjcHUpO1xuK1x0aWYgKCFpc182NGJpdCkge1xuIFx0XHRpbnB1dCA9IGt2bV9lYXhfcmVhZCh2Y3B1KTtcbiBcdFx0cGFyYW1zWzBdID0ga3ZtX2VieF9yZWFkKHZjcHUpO1xuIFx0XHRwYXJhbXNbMV0gPSBrdm1fZWN4X3JlYWQodmNwdSk7XG5AQCAtMTczMCwxNyArMTc1OCwxNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHZjcHUsIHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2NoZWRfb3A6XG4tXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGxvbmdtb2RlLCBwYXJhbXNbMF0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3NjaGVkX29wKHZjcHUsIGlzXzY0Yml0LCBwYXJhbXNbMF0sXG4gXHRcdFx0XHRcdFx0IHBhcmFtc1sxXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1JfdmNwdV9vcDpcbi1cdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXG4rXHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgaXNfNjRiaXQsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuIFx0XHRcdFx0XHRcdHBhcmFtc1syXSwgXHUwMDI2cik7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wOiB7XG4gXHRcdHU2NCB0aW1lb3V0ID0gcGFyYW1zWzBdO1xuIFx0XHQvKiBJbiAzMi1iaXQgbW9kZSwgdGhlIDY0LWJpdCB0aW1lb3V0IGlzIGluIHR3byAzMi1iaXQgcGFyYW1zLiAqL1xuLVx0XHRpZiAoIWxvbmdtb2RlKVxuK1x0XHRpZiAoIWlzXzY0Yml0KVxuIFx0XHRcdHRpbWVvdXQgfD0gcGFyYW1zWzFdIFx1MDAzY1x1MDAzYyAzMjtcbiBcdFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfc2V0X3RpbWVyX29wKHZjcHUsIHRpbWVvdXQsIFx1MDAyNnIpO1xuIFx0XHRicmVhaztcbkBAIC0xNzU1LDcgKzE3ODMsNyBAQCBpbnQga3ZtX3hlbl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGhhbmRsZV9pbl91c2Vyc3BhY2U6XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1hFTjtcbiBcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi50eXBlID0gS1ZNX0VYSVRfWEVOX0hDQUxMO1xuLVx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwubG9uZ21vZGUgPSBsb25nbW9kZTtcbitcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXhlbi51LmhjYWxsLmxvbmdtb2RlID0gaXNfNjRiaXQ7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5jcGwgPSBjcGw7XG4gXHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2V4ZW4udS5oY2FsbC5pbnB1dCA9IGlucHV0O1xuIFx0dmNwdS1cdTAwM2VydW4tXHUwMDNleGVuLnUuaGNhbGwucGFyYW1zWzBdID0gcGFyYW1zWzBdO1xuQEAgLTE3OTUsOCArMTgyMyw5IEBAIHN0YXRpYyB2b2lkIGt2bV94ZW5fY2hlY2tfcG9sbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHBvcnQpXG4gaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZTtcbitcdGJvb2wgaGFzXzY0Yml0X3NoaW5mbyA9IGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pO1xuK1x0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19iaXRzLCAqbWFza19iaXRzLCB2aV9wZW5kaW5nX3NlbF9vZnM7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHR1bnNpZ25lZCBsb25nICpwZW5kaW5nX2JpdHMsICptYXNrX2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHBvcnRfd29yZF9iaXQ7XG4gXHRib29sIGtpY2tfdmNwdSA9IGZhbHNlO1xuQEAgLTE4MTIsNyArMTg0MSw3IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFdSSVRFX09OQ0UoeGUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNldmNwdV9pZHgpO1xuIFx0fVxuIFxuLVx0aWYgKHhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICh4ZS1cdTAwM2Vwb3J0IFx1MDAzZT0gbWF4X2V2dGNobl9wb3J0KGhhc182NGJpdF9zaGluZm8pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJjID0gLUVXT1VMREJMT0NLO1xuQEAgLTE4MjMsMTYgKzE4NTIsMjMgQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICgha3ZtX2dwY19jaGVjayhncGMsIFBBR0VfU0laRSkpXG4gXHRcdGdvdG8gb3V0X3JjdTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbitcdGlmIChoYXNfNjRiaXRfc2hpbmZvKSB7XG4gXHRcdHN0cnVjdCBzaGFyZWRfaW5mbyAqc2hpbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4gXHRcdHBlbmRpbmdfYml0cyA9ICh1bnNpZ25lZCBsb25nICopXHUwMDI2c2hpbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nO1xuIFx0XHRtYXNrX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fbWFzaztcbiBcdFx0cG9ydF93b3JkX2JpdCA9IHhlLVx1MDAzZXBvcnQgLyA2NDtcbitcbitcdFx0dmlfcGVuZGluZ19zZWxfb2ZzID0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3BlbmRpbmdfc2VsKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8gKnNoaW5mbyA9IGdwYy1cdTAwM2VraHZhO1xuIFx0XHRwZW5kaW5nX2JpdHMgPSAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnNoaW5mby1cdTAwM2VldnRjaG5fcGVuZGluZztcbiBcdFx0bWFza19iaXRzID0gKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZzaGluZm8tXHUwMDNlZXZ0Y2huX21hc2s7XG4gXHRcdHBvcnRfd29yZF9iaXQgPSB4ZS1cdTAwM2Vwb3J0IC8gMzI7XG4rXG4rXHRcdHZpX3BlbmRpbmdfc2VsX29mcyA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdmNwdV9pbmZvLCBldnRjaG5fcGVuZGluZ19zZWwpO1xuK1xuK1x0XHQvKiB0ZXN0X2FuZF9zZXRfYml0KCkgbmVlZHMgNjQtYml0IGFsaWdubWVudCwgYnV0IHRoYXQncyBPSyAqL1xuK1x0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9zaGFyZWRfaW5mbywgZXZ0Y2huX3BlbmRpbmcpIFx1MDAyNiA3KTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTg0OCw2ICsxODg0LDggQEAgaW50IGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0KHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0cmMgPSAtRU5PVENPTk47IC8qIE1hc2tlZCAqL1xuIFx0XHRrdm1feGVuX2NoZWNrX3BvbGxlcih2Y3B1LCB4ZS1cdTAwM2Vwb3J0KTtcbiBcdH0gZWxzZSB7XG4rXHRcdGJvb2wgb2xkO1xuK1xuIFx0XHRyYyA9IDE7IC8qIERlbGl2ZXJlZCB0byB0aGUgYml0bWFwIGluIHNoYXJlZF9pbmZvLiAqL1xuIFx0XHQvKiBOb3cgc3dpdGNoIHRvIHRoZSB2Q1BVJ3MgdmNwdV9pbmZvIHRvIHNldCB0aGUgaW5kZXggYW5kIHBlbmRpbmdfc2VsICovXG4gXHRcdHJlYWRfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3BjLVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC0xODY0LDE5ICsxOTAyLDI5IEBAIGludCBrdm1feGVuX3NldF9ldnRjaG5fZmFzdChzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4gXHRcdFx0Z290byBvdXRfcmN1O1xuIFx0XHR9XG4gXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBncGMtXHUwMDNla2h2YTtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQocG9ydF93b3JkX2JpdCwgXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbyAqdmNwdV9pbmZvID0gZ3BjLVx1MDAzZWtodmE7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KHBvcnRfd29yZF9iaXQsXG4tXHRcdFx0XHRcdCAgICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2dmNwdV9pbmZvLVx1MDAzZWV2dGNobl9wZW5kaW5nX3NlbCkpIHtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodmNwdV9pbmZvLVx1MDAzZWV2dGNobl91cGNhbGxfcGVuZGluZywgMSk7XG4tXHRcdFx0XHRraWNrX3ZjcHUgPSB0cnVlO1xuLVx0XHRcdH1cbitcdFx0LypcbitcdFx0ICogRXhwbGljaXRseSB1c2UgYSAzMi1iaXQgYnRzbCBpbnN0ZWFkIG9mIHRlc3RfYW5kX3NldF9iaXQoKSxcbitcdFx0ICogd2hpY2ggd291bGQgdXNlIGJ0c3Egb24geDg2LTY0LiBUaGUgdmNwdV9pbmZvIGlzIGd1ZXN0LVxuK1x0XHQgKiBjb250cm9sbGVkIGFuZCBvbmx5IHJlcXVpcmVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkLCBzbyBhXG4rXHRcdCAqIDY0LWJpdCBhY2Nlc3MgY291bGQgZ2VuZXJhdGUgYSBzcGxpdC1sb2NrICNBQy5cbitcdFx0ICpcbitcdFx0ICogTm90ZSwgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgdGVzdF9hbmRfc2V0X2JpdCgpIG9uXG4rXHRcdCAqIHBlbmRpbmdfYml0cyBhYm92ZTogdGhhdCBpcyBpbiB0aGUgcGVyLVZNIHNoYXJlZF9pbmZvLCB3aGljaFxuK1x0XHQgKiBpcyBwYWdlIGFsaWduZWQsIHNvIHRoZSBhY2Nlc3MgaXMgZ3VhcmFudGVlZCB0byBiZSA2NC1iaXRcbitcdFx0ICogYWxpZ25lZC5cbitcdFx0ICovXG4rXHRcdG9sZCA9IEdFTl9CSU5BUllfUk1XY2MoTE9DS19QUkVGSVggXCJidHNsXCIsXG4rXHRcdFx0XHQgICAgICAgKih1MzIgKikoZ3BjLVx1MDAzZWtodmEgKyB2aV9wZW5kaW5nX3NlbF9vZnMpLFxuK1x0XHRcdFx0ICAgICAgIGMsIFwiSXJcIiwgcG9ydF93b3JkX2JpdCk7XG4rXHRcdGlmICghb2xkKSB7XG4rXHRcdFx0c3RydWN0IHZjcHVfaW5mbyAqdmkgPSBncGMtXHUwMDNla2h2YTtcbitcbitcdFx0XHQvKiBObyBuZWVkIGZvciBjb21wYXQgaGFuZGxpbmcgKi9cbitcdFx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSAhPVxuK1x0XHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3ZjcHVfaW5mbywgZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKSk7XG4rXG4rXHRcdFx0V1JJVEVfT05DRSh2aS1cdTAwM2VldnRjaG5fdXBjYWxsX3BlbmRpbmcsIDEpO1xuK1x0XHRcdGtpY2tfdmNwdSA9IHRydWU7XG4gXHRcdH1cbiBcbiBcdFx0LyogRm9yIHRoZSBwZXItdkNQVSBsYXBpYyB2ZWN0b3IsIGRlbGl2ZXIgaXQgYXMgTVNJLiAqL1xuQEAgLTE5NzQsNyArMjAyMiw3IEBAIGludCBrdm1feGVuX3NldHVwX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHQvKlxuLVx0ICogRG9uJ3QgY2hlY2sgZm9yIHRoZSBwb3J0IGJlaW5nIHdpdGhpbiByYW5nZSBvZiBtYXhfZXZ0Y2huX3BvcnQoKS5cbitcdCAqIERvbid0IGNoZWNrIGZvciB0aGUgcG9ydCBiZWluZyB3aXRoaW4gcmFuZ2Ugb2Yga3ZtX21heF9ldnRjaG5fcG9ydCgpLlxuIFx0ICogVXNlcnNwYWNlIGNhbiBjb25maWd1cmUgd2hhdCBldmVyIHRhcmdldHMgaXQgbGlrZXM7IGV2ZW50cyBqdXN0IHdvbid0XG4gXHQgKiBiZSBkZWxpdmVyZWQgaWYvd2hpbGUgdGhlIHRhcmdldCBpcyBpbnZhbGlkLCBqdXN0IGxpa2UgdXNlcnNwYWNlIGNhblxuIFx0ICogY29uZmlndXJlIE1TSXMgd2hpY2ggdGFyZ2V0IG5vbi1leGlzdGVudCBBUElDcy5cbkBAIC0xOTgzLDggKzIwMzEsOCBAQCBpbnQga3ZtX3hlbl9zZXR1cF9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0ICogY2FuIGJlIHJlc3RvcmVkICppbmRlcGVuZGVudGx5KiBvZiBvdGhlciB0aGluZ3MgbGlrZSBjcmVhdGluZyB2Q1BVcyxcbiBcdCAqIHdpdGhvdXQgaW1wb3NpbmcgYW4gb3JkZXJpbmcgZGVwZW5kZW5jeSBvbiB1c2Vyc3BhY2UuICBJbiB0aGlzXG4gXHQgKiBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBwcm9ibGVtYXRpYyBvcmRlcmluZyB3b3VsZCBiZSB3aXRoIHNldHRpbmcgdGhlXG4tXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBtYXhfZXZ0Y2huX3BvcnQoKSB0byBhbGxvdyA0MDk2XG4tXHQgKiBpbnN0ZWFkIG9mIDEwMjQgZXZlbnQgY2hhbm5lbHMuXG4rXHQgKiBYZW4gJ2xvbmcgbW9kZScgZmxhZywgd2hpY2ggY2hhbmdlcyBrdm1fbWF4X2V2dGNobl9wb3J0KCkgdG8gYWxsb3dcbitcdCAqIDQwOTYgaW5zdGVhZCBvZiAxMDI0IGV2ZW50IGNoYW5uZWxzLlxuIFx0ICovXG4gXG4gXHQvKiBXZSBvbmx5IHN1cHBvcnQgMiBsZXZlbCBldmVudCBjaGFubmVscyBmb3Igbm93ICovXG5AQCAtMjAyMSw3ICsyMDY5LDcgQEAgaW50IGt2bV94ZW5faHZtX2V2dGNobl9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZ194ZW5fZXZ0Y2huICpcbiBcdHN0cnVjdCBrdm1feGVuX2V2dGNobiBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdGlmICghdXhlLVx1MDAzZXBvcnQgfHwgdXhlLVx1MDAzZXBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0LyogV2Ugb25seSBzdXBwb3J0IDIgbGV2ZWwgZXZlbnQgY2hhbm5lbHMgZm9yIG5vdyAqL1xuQEAgLTIxMzEsNyArMjE3OSw3IEBAIHN0YXRpYyBpbnQga3ZtX3hlbl9ldmVudGZkX2Fzc2lnbihzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHRjYXNlIEVWVENITlNUQVRfaW50ZXJkb21haW46XG4gXHRcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIucG9ydC5wb3J0KSB7XG4tXHRcdFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZGVsaXZlci5wb3J0LnBvcnQgXHUwMDNlPSBtYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbitcdFx0XHRpZiAoZGF0YS1cdTAwM2V1LmV2dGNobi5kZWxpdmVyLnBvcnQucG9ydCBcdTAwM2U9IGt2bV9tYXhfZXZ0Y2huX3BvcnQoa3ZtKSlcbiBcdFx0XHRcdGdvdG8gb3V0X25vZXZlbnRmZDsgLyogLUVJTlZBTCAqL1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChkYXRhLVx1MDAzZXUuZXZ0Y2huLmRlbGl2ZXIuZXZlbnRmZC5mZCk7XG5AQCAtMjI0OSw3ICsyMjk3LDcgQEAgc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGFcbiBcdGlmIChkYXRhLVx1MDAzZXUuZXZ0Y2huLmZsYWdzID09IEtWTV9YRU5fRVZUQ0hOX1JFU0VUKVxuIFx0XHRyZXR1cm4ga3ZtX3hlbl9ldmVudGZkX3Jlc2V0KGt2bSk7XG4gXG4tXHRpZiAoIXBvcnQgfHwgcG9ydCBcdTAwM2U9IG1heF9ldnRjaG5fcG9ydChrdm0pKVxuK1x0aWYgKCFwb3J0IHx8IHBvcnQgXHUwMDNlPSBrdm1fbWF4X2V2dGNobl9wb3J0KGt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGRhdGEtXHUwMDNldS5ldnRjaG4uZmxhZ3MgPT0gS1ZNX1hFTl9FVlRDSE5fREVBU1NJR04pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5oIGIvYXJjaC94ODYva3ZtL3hlbi5oXG5pbmRleCA1OWU2MTI4YTdiZDNjLi4zZThjOTMwNmViODk2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmhcbkBAIC0yNDgsNiArMjQ4LDExIEBAIHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8ge1xuICNkZWZpbmUgQ09NUEFUX0VWVENITl8yTF9OUl9DSEFOTkVMUyAoOCAqXHRcdFx0XHRcXFxuIFx0XHRcdFx0ICAgICAgc2l6ZW9mX2ZpZWxkKHN0cnVjdCBjb21wYXRfc2hhcmVkX2luZm8sIFxcXG4gXHRcdFx0XHRcdFx0ICAgZXZ0Y2huX3BlbmRpbmcpKVxuK1xuKy8qIExhdGNoZWQgVk0td2lkZSBtb2RlOyB0aGUgS1ZNIGVxdWl2YWxlbnQgb2YgWGVuJ3MgIWhhc18zMmJpdF9zaGluZm8oKS4gKi9cbisjZGVmaW5lIGt2bV94ZW5faGFzXzY0Yml0X3NoaW5mbyhrdm0pIFxcXG4rXHQoSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UoKGt2bSktXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlKSlcbitcbiBzdHJ1Y3QgY29tcGF0X3ZjcHVfcnVuc3RhdGVfaW5mbyB7XG4gICAgIGludCBzdGF0ZTtcbiAgICAgdWludDY0X3Qgc3RhdGVfZW50cnlfdGltZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLmQ3NDA2YzEwZTA5MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTg1NCw2ICs4NTQsOCBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdGdmbl90IG1tdV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0O1xuIFx0Z2ZuX3QgbW11X2ludmFsaWRhdGVfcmFuZ2VfZW5kO1xuIFxuK1x0dW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7XG4rXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7XG4gXHR1NjQgbWFudWFsX2RpcnR5X2xvZ19wcm90ZWN0O1xuIFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmQyNDdmNzQxZDFlM2YgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtODEyLDYgKzgxMiwxNiBAQCBzdGF0aWMgdm9pZCBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuIFxuIFx0LyogUGFpcnMgd2l0aCB0aGUgaW5jcmVtZW50IGluIHJhbmdlX3N0YXJ0KCkuICovXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1uX2ludmFsaWRhdGVfbG9jayk7XG4rXHRrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxKys7XG4rXG4rXHQvKlxuK1x0ICogQXMgd2l0aCB0aGUgTU1VIHNlcXVlbmNlIGNvdW50ZXIgYW5kIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzLCB0aGVcbitcdCAqIEdQQyBzZXF1ZW5jZSBpbmNyZWFzZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIGNvdW50XG4rXHQgKiBnb2VzIHRvIHplcm8uICBQYWlycyB3aXRoIHRoZSBzbXBfcm1iKCkgaW5cbitcdCAqIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZSgpLlxuK1x0ICovXG4rXHRzbXBfd21iKCk7XG4rXG4gXHRpZiAoIVdBUk5fT05fT05DRSgha3ZtLVx1MDAzZW1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50KSlcbiBcdFx0LS1rdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQ7XG4gXHR3YWtlID0gIWt2bS1cdTAwM2Vtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudDtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uMzY1OTY4NmI5N2MyNCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpXG4rc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NcbiBcdCAqIE5vdGUsIGl0IGRvZXMgbm90IG1hdHRlciB0aGF0IG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50XG4gXHQgKiBpcyBub3QgcHJvdGVjdGVkIGJ5IGdwYy1cdTAwM2Vsb2NrLiAgSXQgaXMgZ3VhcmFudGVlZCB0b1xuIFx0ICogYmUgZWxldmF0ZWQgYmVmb3JlIHRoZSBtbXVfbm90aWZpZXIgYWNxdWlyZXMgZ3BjLVx1MDAzZWxvY2ssIGFuZFxuLVx0ICogaXNuJ3QgZHJvcHBlZCB1bnRpbCBhZnRlciBtbXVfaW52YWxpZGF0ZV9zZXEgaXMgdXBkYXRlZC5cbitcdCAqIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgZ3BjX2ludmFsaWRhdGVfc2VxIGlzIHVwZGF0ZWQuXG4gXHQgKi9cbiBcdGlmIChrdm0tXHUwMDNlbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIEVuc3VyZSBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBpcyByZWFkIGJlZm9yZVxuLVx0ICogbW11X2ludmFsaWRhdGVfc2VxLiAgVGhpcyBwYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW5cbi1cdCAqIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4rXHQgKiBncGNfaW52YWxpZGF0ZV9zZXEuICBUaGlzIHBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpblxuK1x0ICoga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpIHRvIGd1YXJhbnRlZSBlaXRoZXIgdGhlXG4gXHQgKiBvbGQgKG5vbi16ZXJvKSB2YWx1ZSBvZiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBvciB0aGVcbi1cdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbitcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIGdwY19pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cbiBcdCAqL1xuIFx0c21wX3JtYigpO1xuLVx0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcTtcbitcdHJldHVybiBrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XG4gfVxuIFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdHZvaWQgKm9sZF9raHZhID0gKHZvaWQgKilQQUdFX0FMSUdOX0RPV04oKHVpbnRwdHJfdClncGMtXHUwMDNla2h2YSk7XG4gXHRrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuIFx0dm9pZCAqbmV3X2todmEgPSBOVUxMO1xuLVx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuK1x0dW5zaWduZWQgbG9uZyBncGNfc2VxO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIFxuIFx0ZG8ge1xuLVx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdGdwY19zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjMyLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBncGNfc2VxKSk7XG4gXG4gXHRncGMtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0Z3BjLVx1MDAzZXBmbiA9IG5ld19wZm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNTo0MC4xNjc2MDM5OTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ1ODc4NTE3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNLVhlbiBQYXRjaCBBbmFseXNpczogU2FmZXR5IEZpcnN0KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIEtWTS1YZW4gcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBsZWFucyB0b3dhcmRzIGEgbG93LXJpc2sgcHJvZmlsZSwgZm9jdXNpbmcgb24gYWxpZ25tZW50IGZpeGVzLCBhdG9taWMgb3BlcmF0aW9uIGhhbmRsaW5nIG9uIGd1ZXN0IG1lbW9yeSwgYW5kIGEgR1BDIHNlcXVlbmNlIGNvdW50ZXIuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGBhcmNoL3g4Ni9rdm0veGVuLmNgLCBgYXJjaC94ODYva3ZtL3hlbi5oYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgYW5kIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC5cblxuVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AgcmV2b2x2ZXMgYXJvdW5kIGFkYXB0aW5nIHRvIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIHRoZSBgSVNfRU5BQkxFRChDT05GSUdfNjRCSVQpIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlYCBjaGVjayB3aXRoIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAuIFRoaXMgaW52b2x2ZXMgaW50cm9kdWNpbmcgYGt2bV9tYXhfZXZ0Y2huX3BvcnRgIGFuZCBgbWF4X2V2dGNobl9wb3J0YCB3aGljaCBkZXBlbmQgb24gYGhhc182NGJpdF9zaGluZm9gLiBGdXJ0aGVybW9yZSwgaXQncyBtb2RpZnlpbmcgaG93IHBlbmRpbmcgZXZlbnRzIGFyZSBpbmplY3RlZCBmb3IgNjQtYml0IGFsaWdubWVudCBhbmQgYXRvbWljIG9wZXJhdGlvbiBoYW5kbGluZy4gVGhlIHBhdGNoIGFsc28gYWRkcyBhbGlnbm1lbnQgY2hlY2tzIGluIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGZvciBgZ3BhYCBhbmQgYGh2YWAuIFRoZSBgZ3VhcmQoc3JjdSkoXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7YCBoYXMgYmVlbiBhZGRlZCBpbiBgX19rdm1feGVuX2hhc19pbnRlcnJ1cHRgLiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgIG5vdyB1c2VzIGBHRU5fQklOQVJZX1JNV2NjYCBmb3IgYml0IHRlc3RpbmcgZ3Vlc3QtY29udHJvbGxlZCBtZW1vcnksIGluc3RlYWQgb2YgdGhlIG9sZCBtZXRob2QuXG5cblRoZSBpbnRyb2R1Y3Rpb24gb2YgYGdwY19pbnZhbGlkYXRlX3NlcWAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AgaXMgaW1wb3J0YW50IGZvciBkZWNvdXBsaW5nIHRoZSBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGZyb20gdGhlIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIFRoaXMgaXMgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbG9naWMgZmxhdyByZWxhdGVkIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBHdWVzdCBQYWdlIENhY2hlIGFuZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBkZWx2ZSBkZWVwZXI6XG5cbiogICBUaGUgYWxpZ25tZW50IGNoZWNrcyBhZGRlZCBpbiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCAoZS5nLiwgYGlmICghSVNfQUxJR05FRChkYXRhLVx1MDAzZXUuZ3BhLCBzaXplb2YodTMyKSkpYCkgYXJlIHN0YW5kYXJkIGVycm9yIHJldHVybnMuXG4qICAgVGhlIGFkanVzdG1lbnRzIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AgZGVhbCB3aXRoIGhhbmRsaW5nIHVuYWxpZ25lZCBhdG9taWMgb3BlcmF0aW9ucywgdXNpbmcgYGF0b21pYzY0X29yYCB3aGVuIGFsaWduZWQgYW5kIGBhdG9taWNfb3JgIHdpdGggYXBwcm9wcmlhdGUgc2hpZnRzIHdoZW4gdW5hbGlnbmVkLiBUaGlzIGxvb2tzIHNhZmUuXG4qICAgVGhlIGBrdm1feGVuX3NldF9ldnRjaG5fZmFzdGAgY2hhbmdlIHdpdGggYEdFTl9CSU5BUllfUk1XY2NgIGlzIGEgYml0IHRlc3QgYW5kIHNldCBvbiBndWVzdCBtZW1vcnkuIFRoZSBndWVzdCBvd25zIHRoaXMgbWVtb3J5LCBzbyB0aGlzIGlzIGV4cGVjdGVkLlxuKiAgIFRoZSBzZXF1ZW5jZSBjb3VudGVyIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgIGFkZHJlc3NlcyB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIG1lbW9yeSByZWFkIGZyb20gZ3Vlc3Qgc3BhY2UuXG5cblNwZWNpZmljYWxseSwgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIHRoZSByZWFkIG9mIGBvbmVzaG90YCBpbnRvIHRoZSBzdGFjayBhbmQgcG90ZW50aWFsbHkgaXRzIHN1YnNlcXVlbnQgdXNlIHdhcnJhbnRzIGZ1cnRoZXIgZXhhbWluYXRpb24uIFRoZXJlIGlzIGEgc2l6ZSBkaXNwYXJpdHkgY2hlY2sgYmFzZWQgb24gMzItYml0IHZzIDY0LWJpdCBndWVzdCwgYXMgaXQgbWF5IHJlYWQgZGlmZmVyZW50IHNpemVkIHN0cnVjdHMgZnJvbSBndWVzdCBtZW1vcnkuIEhvd2V2ZXIsIGFmdGVyIGNhcmVmdWxseSBjaGVja2luZyB0aGUgYGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyYCBhbmQgYHZjcHVfc2V0X3NpbmdsZXNob3RfdGltZXJgLCB0aGV5IGFyZSB0aGUgc2FtZSBzaXplLiBUaGVyZSBhcmUgY29tcGlsZS10aW1lIGNoZWNrcyBmb3IgdGhpcywgYW5kIHRoZSBjb2RlIGFwcGVhcnMgdG8gYmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBkaWZmZXJpbmcgZ3Vlc3QgYXJjaGl0ZWN0dXJlcyAoMzIgdnMgNjQgYml0KS4gVGhlIHN0cnVjdHVyZSBjb250YWlucyBhIHRpbWVvdXQgYW5kIGZsYWdzLCB3aGljaCBhcmUgdXNlZCBpbiBga3ZtX3hlbl9zdGFydF90aW1lcmAsIGFmdGVyIHRoZSByZWFkLiBBbGwgb2YgdGhlIGZpZWxkcyBhcmUgdXNlZCwgc28gdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkkndmUgYWxzbyBjaGVja2VkIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAsIHdoaWNoIGlzIGp1c3QgYSBtYWNybyByZXBsYWNlbWVudC4gVGhlIGNoYW5nZXMgdG8gYGt2bV94ZW5fc2NoZWRvcF9wb2xsYCwgd2hpY2ggaXMgY2hlY2tpbmcgYW5kIGhhbmRsaW5nIHRoZSAzMi82NCBiaXQgZGlmZmVyZW5jZXMgb2YgYSBzdHJ1Y3R1cmUsIGFyZSBjb3JyZWN0LlxuXG5JbiBzdW1tYXJ5LCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBUaGVyZSdzIG5vdGhpbmcgbmV3IGhlcmUgdGhhdCBJIGNhbiBzZWUgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIG9wZW4gdXAgc2VjdXJpdHkgaG9sZXMuXG5cbkkgd2lsbCB0aGVyZWZvcmUgbWFyayB0aGlzIHBhdGNoIGFzIHNhZmUsIHdpdGggbm8gbmVlZCBmb3IgS01TQU4gYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE1LCJPdXRwdXRUb2tlbnMiOjI1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNzoyNjowNC43NTU0NTk1MTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIGZpeGluZyBhbGlnbm1lbnQgaXNzdWVzLCBhdG9taWMgb3BlcmF0aW9ucyBvbiBndWVzdCBtZW1vcnksIGFuZCBhIHNlcXVlbmNlIGNvdW50ZXIgZm9yIEd1ZXN0IFBhZ2UgQ2FjaGUgKEdQQykgaW4gS1ZNIFhlbiBlbXVsYXRpb24uIEl0IHJlcGxhY2VzIGBJU19FTkFCTEVEKENPTkZJR182NEJJVCkgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGVgIHdpdGggYSBtYWNybyBga3ZtX3hlbl9oYXNfNjRiaXRfc2hpbmZvKGt2bSlgLCBoYW5kbGVzIHVuYWxpZ25lZCBhdG9taWMgb3BlcmF0aW9ucyBpbiBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCB1c2VzIGBidHNsYCBmb3IgMzItYml0IGFsaWduZWQgZ3Vlc3QtY29udHJvbGxlZCBtZW1vcnkgaW4gYGt2bV94ZW5fc2V0X2V2dGNobl9mYXN0YCwgYW5kIGludHJvZHVjZXMgYGdwY19pbnZhbGlkYXRlX3NlcWAgdG8gc2VwYXJhdGUgR1BDIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBmcm9tIE1NVSBpbnZhbGlkYXRpb24gc2VxdWVuY2UuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gZml4aW5nIGFsaWdubWVudCBpc3N1ZXMsIGF0b21pYyBvcGVyYXRpb25zIG9uIGd1ZXN0IG1lbW9yeSwgYW5kIGEgc2VxdWVuY2UgY291bnRlciBmb3IgR3Vlc3QgUGFnZSBDYWNoZSAoR1BDKSBpbiBLVk0gWGVuIGVtdWxhdGlvbi4gSXQgcmVwbGFjZXMgYElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZWAgd2l0aCBhIG1hY3JvIGBrdm1feGVuX2hhc182NGJpdF9zaGluZm8oa3ZtKWAsIGhhbmRsZXMgdW5hbGlnbmVkIGF0b21pYyBvcGVyYXRpb25zIGluIGBrdm1feGVuX2luamVjdF9wZW5kaW5nX2V2ZW50c2AsIHVzZXMgYGJ0c2xgIGZvciAzMi1iaXQgYWxpZ25lZCBndWVzdC1jb250cm9sbGVkIG1lbW9yeSBpbiBga3ZtX3hlbl9zZXRfZXZ0Y2huX2Zhc3RgLCBhbmQgaW50cm9kdWNlcyBgZ3BjX2ludmFsaWRhdGVfc2VxYCB0byBzZXBhcmF0ZSBHUEMgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGZyb20gTU1VIGludmFsaWRhdGlvbiBzZXF1ZW5jZS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsvw2z[1] Phase: Succeeded StartedAt: 2026-08-12 17:26:16 +0000 UTC FinishedAt: 2026-08-12 17:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 17:26:16 +0000 UTC FinishedAt: 2026-08-12 17:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2] Phase: Succeeded StartedAt: 2026-08-12 17:26:16 +0000 UTC FinishedAt: 2026-08-12 21:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 17:26:16 +0000 UTC FinishedAt: 2026-08-12 21:09:41 +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","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:26:16 +0000 UTC FinishedAt: 2026-08-12 17:26:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:26:16 +0000 UTC FinishedAt: 2026-08-12 17:26:21 +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","KVM_XEN"],"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-workflowsvw2z/series-workflowsvw2z-convert-artifact-2482629261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:26:26 +0000 UTC FinishedAt: 2026-08-12 17:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:26:26 +0000 UTC FinishedAt: 2026-08-12 17:47:19 +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:*7a2e5f94-f3fb-4cd7-8250-1df9a384376c,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-workflowsvw2z/series-workflowsvw2z-convert-artifact-2482629261/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": "6a328563-4fa4-476e-a1d5-9021e0b40326", "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-workflowsvw2z/series-workflowsvw2z-build-action-2226210307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:26:26 +0000 UTC FinishedAt: 2026-08-12 17:47:09 +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:*7a2e5f94-f3fb-4cd7-8250-1df9a384376c,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-workflowsvw2z/series-workflowsvw2z-convert-artifact-2482629261/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": "6a328563-4fa4-476e-a1d5-9021e0b40326", "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-workflowsvw2z/series-workflowsvw2z-build-action-2226210307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:47:19 +0000 UTC FinishedAt: 2026-08-12 17:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:47:19 +0000 UTC FinishedAt: 2026-08-12 17:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:47:19 +0000 UTC FinishedAt: 2026-08-12 17:47:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:47:19 +0000 UTC FinishedAt: 2026-08-12 17:47:23 +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","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-workflowsvw2z/series-workflowsvw2z-convert-artifact-1321250792/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:47:29 +0000 UTC FinishedAt: 2026-08-12 17:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:47:29 +0000 UTC FinishedAt: 2026-08-12 17:49:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6a328563-4fa4-476e-a1d5-9021e0b40326,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-workflowsvw2z/series-workflowsvw2z-build-action-2226210307/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-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:49:32 +0000 UTC FinishedAt: 2026-08-12 17:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:49:32 +0000 UTC FinishedAt: 2026-08-12 17:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:49:32 +0000 UTC FinishedAt: 2026-08-12 18:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:49:32 +0000 UTC FinishedAt: 2026-08-12 18:06:00 +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:*7a2e5f94-f3fb-4cd7-8250-1df9a384376c,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-workflowsvw2z/series-workflowsvw2z-convert-artifact-1321250792/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": "44857827-c23e-4a6e-9278-b00a1baf6ff1", "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-workflowsvw2z/series-workflowsvw2z-build-action-1991075732/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 17:49:32 +0000 UTC FinishedAt: 2026-08-12 18:05:50 +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:*7a2e5f94-f3fb-4cd7-8250-1df9a384376c,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-workflowsvw2z/series-workflowsvw2z-convert-artifact-1321250792/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": "44857827-c23e-4a6e-9278-b00a1baf6ff1", "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-workflowsvw2z/series-workflowsvw2z-build-action-1991075732/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:06:00 +0000 UTC FinishedAt: 2026-08-12 18:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:06:00 +0000 UTC FinishedAt: 2026-08-12 18:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:06:00 +0000 UTC FinishedAt: 2026-08-12 18:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:06:00 +0000 UTC FinishedAt: 2026-08-12 18:07:48 +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:*44857827-c23e-4a6e-9278-b00a1baf6ff1,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-workflowsvw2z/series-workflowsvw2z-build-action-1991075732/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-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:07:58 +0000 UTC FinishedAt: 2026-08-12 21:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:07:58 +0000 UTC FinishedAt: 2026-08-12 21:09:41 +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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"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:*6a328563-4fa4-476e-a1d5-9021e0b40326,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*44857827-c23e-4a6e-9278-b00a1baf6ff1,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-workflowsvw2z/series-workflowsvw2z-build-action-2226210307/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-workflowsvw2z/series-workflowsvw2z-build-action-1991075732/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:07:58 +0000 UTC FinishedAt: 2026-08-12 18:08:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:07:58 +0000 UTC FinishedAt: 2026-08-12 18:08:02 +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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"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-workflowsvw2z/series-workflowsvw2z-convert-artifact-3211476001/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:07:58 +0000 UTC FinishedAt: 2026-08-12 18:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:07:58 +0000 UTC FinishedAt: 2026-08-12 18:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:07:58 +0000 UTC FinishedAt: 2026-08-12 18:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:08:08 +0000 UTC FinishedAt: 2026-08-12 21:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvw2z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"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_xen_vcpu_set_attr","kvm_xen_hypercall","kvm_xen_set_evtchn_fast","kvm_xen_setup_evtchn","kvm_xen_hvm_evtchn_send","kvm_xen_hvm_set_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"9dfd5081-ff52-4d59-bde4-bacb7fe02a8d","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-12 18:08:08 +0000 UTC FinishedAt: 2026-08-12 21:09:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6a328563-4fa4-476e-a1d5-9021e0b40326,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*44857827-c23e-4a6e-9278-b00a1baf6ff1,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-workflowsvw2z/series-workflowsvw2z-build-action-2226210307/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-workflowsvw2z/series-workflowsvw2z-build-action-1991075732/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-workflowsvw2z/series-workflowsvw2z-convert-artifact-3211476001/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,}