Name: series-workflowwv82x Phase: Succeeded StartedAt: 2026-08-02 04:08:08 +0000 UTC FinishedAt: 2026-08-02 08:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[0] Phase: Succeeded StartedAt: 2026-08-02 04:08:08 +0000 UTC FinishedAt: 2026-08-02 04:23:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 04:08:08 +0000 UTC FinishedAt: 2026-08-02 04:23:59 +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": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "9ba89453-cd4e-4667-8ef7-71a9571a9606" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "hva_to_pfn", "__kvm_faultin_pfn", "__gfn_to_page", "__kvm_vcpu_map" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h2YV90b19wZm4mIzM0OywKICAgICYjMzQ7X19rdm1fZmF1bHRpbl9wZm4mIzM0OywKICAgICYjMzQ7X19nZm5fdG9fcGFnZSYjMzQ7LAogICAgJiMzNDtfX2t2bV92Y3B1X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24gYGh2YV90b19wZm4oKWAsIHdoaWNoIGhhbmRsZXMgdHJhbnNsYXRpbmcgaG9zdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwYWdlIGZyYW1lIG51bWJlcnMuIEl0IHNwZWNpZmljYWxseSBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFpbGVkIGBnZXRfdXNlcl9wYWdlcygpYCBjYWxscyBhbmQgaW5hY2Nlc3NpYmxlIG1hcHBpbmdzIChlLmcuLCBQUk9UX1JFQUQgbWFwcGluZ3MgaW4gd3JpdGFibGUgbWVtc2xvdHMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjFkMzY4NGFkNGRlMDkyNTA3OTBiZjNjNDZkZmVmMDcyOWQxYTQ2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMDQ6MjI6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmVhZjhlZTA3MjVkNGUgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMjkyNSwxNyAmIzQzOzI5MjUsNiBAQCBzdGF0aWMgaW50IGh2YV90b19wZm5fc2xvdyhzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXG4gXHRyZXR1cm4gbnBhZ2VzO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXG4te1xuLVx0aWYgKHVubGlrZWx5KCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRUFEKSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmICh3cml0ZV9mYXVsdCBcdTAwMjZcdTAwMjYgKHVubGlrZWx5KCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXG4ge1xuQEAgLTMwMDgsMjAgJiM0MzsyOTk3LDI5IEBAIGt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxuIHJldHJ5OlxuIFx0dm1hID0gdm1hX2xvb2t1cChjdXJyZW50LVx1MDAzZW1tLCBrZnAtXHUwMDNlaHZhKTtcbiBcbi1cdGlmICh2bWEgPT0gTlVMTClcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEdVUCBmYWlsZWQuICBJdCBjb3VsZCBiZSBhbiBpbmFjY2Vzc2libGUgbWFwcGluZywgYSBwZm5tYXAgb25lLFxuJiM0MztcdCAqIG9yIHRoZSBwYWdlIG1pZ2h0IGJlIGFic2VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHZtYSA9PSBOVUxMIHx8IHVubGlrZWx5KCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRUFEKSkpIHtcbiBcdFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4tXHRlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbiYjNDM7XHR9IGVsc2UgaWYgKChrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEV4aXQgdG8gdXNlcnNwYWNlIGZvciBQUk9UX1JFQUQgbWFwcGluZ3MgaW4gYSB3cml0YWJsZVxuJiM0MztcdFx0ICogbWVtc2xvdCwgYXMgdGhpcyBpcyBwYXJ0IG9mIHRoZSBBUEkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHBmbiA9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKVxuJiM0MztcdFx0XHQ/IEtWTV9QRk5fRVJSX1JPX0ZBVUxUIDogS1ZNX1BGTl9FUlJfRkFVTFQ7XG4mIzQzO1x0fSBlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbiBcdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG4gXHRcdGlmIChyID09IC1FQUdBSU4pXG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0aWYgKHIgXHUwMDNjIDApXG4gXHRcdFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoKGtmcC1cdTAwM2VmbGFncyBcdTAwMjYgRk9MTF9OT1dBSVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgdm1hX2lzX3ZhbGlkKHZtYSwga2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFKSlcbi1cdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9ORUVEU19JTztcbi1cdFx0ZWxzZVxuLVx0XHRcdHBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuJiM0MztcdFx0cGZuID0ga2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX05PV0FJVFxuJiM0MztcdFx0XHQ/IEtWTV9QRk5fRVJSX05FRURTX0lPIDogS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR9XG4gXHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFx0cmV0dXJuIHBmbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHZhX3RvX3BmbiYjMzQ7LAogICAgJiMzNDtfX2t2bV9mYXVsdGluX3BmbiYjMzQ7LAogICAgJiMzNDtfX2dmbl90b19wYWdlJiMzNDssCiAgICAmIzM0O19fa3ZtX3ZjcHVfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaGFuZGxlcyB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBhZ2UgZnJhbWUgbnVtYmVycy4gSXQgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBmYWlsZWQgYGdldF91c2VyX3BhZ2VzKClgIGNhbGxzIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MgKGUuZy4sIFBST1RfUkVBRCBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMWQzNjg0YWQ0ZGUwOTI1MDc5MGJmM2M0NmRmZWYwNzI5ZDFhNDY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAwNDoyMjo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmVhZjhlZTA3MjVkNGUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMjkyNSwxNyAmIzQzOzI5MjUsNiBAQCBzdGF0aWMgaW50IGh2YV90b19wZm5fc2xvdyhzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pCiAJcmV0dXJuIG5wYWdlczsKIH0KIAotc3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KQotewotCWlmICh1bmxpa2VseSghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVBRCkpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAod3JpdGVfZmF1bHQgJmFtcDsmYW1wOyAodW5saWtlbHkoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1dSSVRFKSkpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKQogewpAQCAtMzAwOCwyMCAmIzQzOzI5OTcsMjkgQEAga3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApCiByZXRyeToKIAl2bWEgPSB2bWFfbG9va3VwKGN1cnJlbnQtJmd0O21tLCBrZnAtJmd0O2h2YSk7CiAKLQlpZiAodm1hID09IE5VTEwpCiYjNDM7CS8qCiYjNDM7CSAqIEdVUCBmYWlsZWQuICBJdCBjb3VsZCBiZSBhbiBpbmFjY2Vzc2libGUgbWFwcGluZywgYSBwZm5tYXAgb25lLAomIzQzOwkgKiBvciB0aGUgcGFnZSBtaWdodCBiZSBhYnNlbnQuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlpZiAodm1hID09IE5VTEwgfHwgdW5saWtlbHkoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFQUQpKSkgewogCQlwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDsKLQllbHNlIGlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9JTyB8IFZNX1BGTk1BUCkpIHsKJiM0MzsJfSBlbHNlIGlmICgoa2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX1dSSVRFKSAmYW1wOyZhbXA7IHVubGlrZWx5KCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogRXhpdCB0byB1c2Vyc3BhY2UgZm9yIFBST1RfUkVBRCBtYXBwaW5ncyBpbiBhIHdyaXRhYmxlCiYjNDM7CQkgKiBtZW1zbG90LCBhcyB0aGlzIGlzIHBhcnQgb2YgdGhlIEFQSS4KJiM0MzsJCSAqLwomIzQzOwkJcGZuID0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyAoVk1fSU8gfCBWTV9QRk5NQVApCiYjNDM7CQkJPyBLVk1fUEZOX0VSUl9ST19GQVVMVCA6IEtWTV9QRk5fRVJSX0ZBVUxUOwomIzQzOwl9IGVsc2UgaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX0lPIHwgVk1fUEZOTUFQKSkgewogCQlyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgJmFtcDtwZm4pOwogCQlpZiAociA9PSAtRUFHQUlOKQogCQkJZ290byByZXRyeTsKIAkJaWYgKHIgJmx0OyAwKQogCQkJcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7CiAJfSBlbHNlIHsKLQkJaWYgKChrZnAtJmd0O2ZsYWdzICZhbXA7IEZPTExfTk9XQUlUKSAmYW1wOyZhbXA7Ci0JCSAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtJmd0O2ZsYWdzICZhbXA7IEZPTExfV1JJVEUpKQotCQkJcGZuID0gS1ZNX1BGTl9FUlJfTkVFRFNfSU87Ci0JCWVsc2UKLQkJCXBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwomIzQzOwkJcGZuID0ga2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX05PV0FJVAomIzQzOwkJCT8gS1ZNX1BGTl9FUlJfTkVFRFNfSU8gOiBLVk1fUEZOX0VSUl9GQVVMVDsKIAl9CiAJbW1hcF9yZWFkX3VubG9jayhjdXJyZW50LSZndDttbSk7CiAJcmV0dXJuIHBmbjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBQYXRjaDogaHZhX3RvX3BmbigpIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UsIGJ1dCBpdCB0b3VjaGVzIGEgY29yZSBmdW5jdGlvbjogYGh2YV90b19wZm4oKWAuIFRoZSBwcmltYXJ5IGNoYW5nZSBoZXJlIGlzIHRoZSBpbmxpbmluZyBvZiBgdm1hX2lzX3ZhbGlkKClgJiMzOTtzIGxvZ2ljIGRpcmVjdGx5IGludG8gYGh2YV90b19wZm4oKWAsIGFsb25nIHdpdGggc29tZSBtb2RpZmljYXRpb25zIGluIHRoZSBsb2dpYyB3aGVuIHRoZSBgdm1hYCBpcyBub3QgbnVsbC4KClByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGRlZGljYXRlZCBgdm1hX2lzX3ZhbGlkKClgIGZ1bmN0aW9uLCBjaGVja2luZyBmb3IgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy4gTm93LCB0aGF0IGNoZWNrIGlzIGluY29ycG9yYXRlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGBodmFfdG9fcGZuKClgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBtb2RpZmllcyBob3cgYGh2YV90b19wZm4oKWAgYmVoYXZlcyB3aGVuIGEgYHZtYWAgKHZpcnR1YWwgbWVtb3J5IGFyZWEpIGlzIGZvdW5kLiBJdCBzZWVtcyB0aGUgY29kZSBub3cgZGlyZWN0bHkgY2hlY2tzIGB2bWEtJmd0O3ZtX2ZsYWdzYCB3aXRoaW4gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgZnVuY3Rpb24gY2FsbC4gVGhlIHBhdGNoIGFsc28gYXBwZWFycyB0byBpbXBsZW1lbnQgbmV3IGNoZWNrcyBmb3Igd3JpdGUgZmxhZ3Mgd2l0aGluIGEgd3JpdGFibGUgbWVtc2xvdC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBmbG93IG9mIGhvdyB0aGUgUEZOIChwaHlzaWNhbCBmcmFtZSBudW1iZXIpIGlzIGRldGVybWluZWQgZnJvbSBhIGhvc3QgdmlydHVhbCBhZGRyZXNzIChIVkEpIGJ5IHJlcGxhY2luZyB0aGUgY2FsbCB0byBgdm1hX2lzX3ZhbGlkKClgIHdpdGggYW4gaW5saW5lZCBjaGVjayBmb3IgdGhlIFZNQSBmbGFncywgYXMgd2VsbCBhcyBhbHRlcmluZyBiZWhhdmlvciB0byBhbGlnbiB3aXRoIEFQSSBleHBlY3RhdGlvbnMuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgaGF2ZSBzdWJ0bGUgaW1wbGljYXRpb25zIGZvciBob3cgbWVtb3J5IGFjY2VzcyBwZXJtaXNzaW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gS1ZNLgoKR2l2ZW4gdGhpcyBtb2RpZmljYXRpb24gb2YgYSBjcml0aWNhbCBmdW5jdGlvbiBpbiBLVk0sIGFuZCB3aXRoIGtub3dsZWRnZSBvZiB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFwcGluZyBhbmQgZ3Vlc3QgYWNjZXNzLCBmdXp6aW5nIGBodmFfdG9fcGZuKClgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgY2hhbmdlcyBhcmUgc291bmQgYW5kIHRoYXQgbm8gbmV3IHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaHZhX3RvX3BmbmAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFuZCBiZWdpbiBjcmFmdGluZyBmdXp6aW5nIGNhc2VzIHRvIGNvdmVyIGFsbCB0aGVzZSBuZXcgbG9naWMgYnJhbmNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yODI3PXN0YXRpYyBrdm1fcGZuX3Qga3ZtX3Jlc29sdmVfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4NTE6c3RhdGljIGJvb2wgaHZhX3RvX3Bmbl9mYXN0KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1Mi17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yODgyLSAqL1xudmlydC9rdm0va3ZtX21haW4uYzoyODgzOnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9zbG93KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTI3LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTI4OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkyOS1cdFx0XHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxudmlydC9rdm0va3ZtX21haW4uYzoyOTc0Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5ODQtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODU6XHRpZiAoaHZhX3RvX3Bmbl9mYXN0KGtmcCwgXHUwMDI2cGZuKSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ni1cdFx0cmV0dXJuIHBmbjtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ny1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4ODpcdG5wYWdlcyA9IGh2YV90b19wZm5fc2xvdyhrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5ODktXHRpZiAobnBhZ2VzID09IDEpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDE0LVx0fSBlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNTpcdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTYtXHRcdGlmIChyID09IC1FQUdBSU4pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDI4PXN0YXRpYyBrdm1fcGZuX3Qga3ZtX2ZvbGxvd19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDQzLVxudmlydC9rdm0va3ZtX21haW4uYzozMDQ0Olx0cmV0dXJuIGh2YV90b19wZm4oa2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA0NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZzoKCioqVHJhY2luZyBEb3duIHRoZSBga3ZtX2ZvbGxvd19wZm5gIENhbGxlcnMqKgoKQWxyaWdodCwgc28gYGh2YV90b19wZm5gIGlzIGJlaW5nIGNhbGxlZCBieSBga3ZtX2ZvbGxvd19wZm5gLiBUaGF0JiMzOTtzIGEgZ29vZCBicmVhZGNydW1iLCBidXQgSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBoYXZlIGEgaHVuY2ggdGhpcyBpcyBnb2luZyB0byBiZSByZWxhdGVkIHRvIHNvbWUgcGFnZSBmYXVsdCBvciBtZW1vcnkgYWNjZXNzIGlzc3VlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aG8mIzM5O3MgKmNhbGxpbmcqIGBrdm1fZm9sbG93X3BmbmAuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIHdpbGwgc2hvdyBtZSB0aGUgaGlnaGVyLWxldmVsIGxvZ2ljIHRoYXQgdWx0aW1hdGVseSByZWxpZXMgb24gdGhlIGBodmFfdG9fcGZuYCBjb252ZXJzaW9uIGFuZCBob3BlZnVsbHkgbGVhZCBtZSB0byB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgcHJvYmxlbSBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkgbmVlZCB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIGBncmVwYCBvciBtYXliZSBhIGJhY2t0cmFjZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZm9sbG93X3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yODI1PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjgyNi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjgyNzpzdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4MjgtXHRcdFx0XHQgc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqbWFwLCBib29sIHdyaXRhYmxlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudmlydC9rdm0va3ZtX21haW4uYzoyOTI5Olx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzMC17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxudmlydC9rdm0va3ZtX21haW4uYzoyOTc0Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMjctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMjg6c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAyOS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDQ3PWt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDUwLXtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1MTpcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTItXHRcdC5zbG90ID0gc2xvdCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjQtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNjU6XHRyZXR1cm4ga3ZtX2ZvbGxvd19wZm4oXHUwMDI2a2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2Ni19XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDkzPXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA5NS1cdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2UgPSBOVUxMO1xudmlydC9rdm0va3ZtX21haW4uYzozMDk2Olx0c3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA5Ny1cdFx0LnNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbiksXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMTAyLVxudmlydC9rdm0va3ZtX21haW4uYzozMTAzOlx0KHZvaWQpa3ZtX2ZvbGxvd19wZm4oXHUwMDI2a2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwNC1cdHJldHVybiByZWZjb3VudGVkX3BhZ2U7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMTA4PWludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExMC17XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMTE6XHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xudmlydC9rdm0va3ZtX21haW4uYy0zMTEyLVx0XHQuc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbiksXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMTI0LVxudmlydC9rdm0va3ZtX21haW4uYzozMTI1Olx0bWFwLVx1MDAzZXBmbiA9IGt2bV9mb2xsb3dfcGZuKFx1MDAyNmtmcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMjYtXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihtYXAtXHUwMDNlcGZuKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzA1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGlzIEtWTSBNZW1vcnkgTWFwcGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGRpdmVzIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIEtWTSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgaHZhX3RvX3BmbmAgZnVuY3Rpb24sIHdoaWNoIGlzIGNyaXRpY2FsLiBJIGtub3cgdGhhdCBgaHZhX3RvX3BmbmAgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgc2V2ZXJhbCBrZXkgS1ZNIGZ1bmN0aW9uczogYGt2bV9mb2xsb3dfcGZuYCwgYF9fa3ZtX2ZhdWx0aW5fcGZuYCwgYF9fZ2ZuX3RvX3BhZ2VgLCBhbmQgYF9fa3ZtX3ZjcHVfbWFwYC4gVGhlc2UgYXJlIGFsbCBkZWVwbHkgaW52b2x2ZWQgaW4gaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBsb29rdXBzIGFuZCBmYXVsdHMuCgpUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrIHdpdGhpbiBgaHZhX3RvX3BmbmAgdGhhdCBraWNrcyBpbiB3aGVuIGEgR1VQIChHZXQgVXNlciBQYWdlKSBvcGVyYXRpb24gZmFpbHMsIGJ1dCBhIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgaXMgc3RpbGwgcHJlc2VudC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGB2bWFgIGFuZCBpdHMgZmxhZ3MuIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyBmb3IgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgKGBWTV9SRUFEYCwgYFZNX1dSSVRFYCkgb2YgdGhlIFZNQSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBob3cgS1ZNIGJlaGF2ZXMgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzIGFuZCBhIG1hcHBpbmcgaXMgZWl0aGVyIG1pc3NpbmcsIHJlYWQtb25seSwgb3Igb3RoZXJ3aXNlIGluYWNjZXNzaWJsZS4gVGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYFZNX1JFQURgIGFuZCBhbm90aGVyIGZvciBgVk1fV1JJVEVgIGlmIGBGT0xMX1dSSVRFYCBpcyByZXF1ZXN0ZWQuIElmIHRoZXJlIGlzIGEgd3JpdGUgcmVxdWVzdCB0byBhIHJlYWQtb25seSBtYXBwaW5nLCBLVk0gd2lsbCBub3cgZXhpdCB0byB1c2Vyc3BhY2UuIEFsc28sIGl04oCZcyBsb29raW5nIGF0IGBWTV9JT2AgYW5kIGBWTV9QRk5NQVBgIGZsYWdzIGFuZCByZXR1cm5pbmcgdGhlIHJlbGV2YW50IGZhdWx0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgaW4gaG93IEtWTSBoYW5kbGVzIHBhZ2UgZmF1bHRzIHJlbGF0ZWQgdG8gbWVtb3J5IHNsb3RzLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lLCBhY3R1YWxseSwgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aG9zZSBjb3JlIGZ1bmN0aW9ucy4KCkkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoYXQgYGh2YV90b19wZm5gICppcyogaW5kZWVkIGV4cG9ydGVkLCBhcyBJIGJlbGlldmUgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipodmFfdG9fcGZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkNoZWNraW5nIEtWTSBFeHBvcnQgU3RhdHVzKioKClJpZ2h0LCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIE15IGludGVybmFsIGNoZWNrbGlzdCBoYXMgZmxhZ2dlZCBga3ZtX2ZvbGxvd19wZm5gIGZvciByZXZpZXcsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB3aGV0aGVyIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkLiBJcyBpdCBhY2Nlc3NpYmxlIGF0IGFsbD8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAuIElmIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgdGhlbiBpdCYjMzk7cyBjbGVhcmx5IG9mZi1saW1pdHMgYW5kIEkgbmVlZCB0byBhZGp1c3QgbXkgYW5hbHlzaXMgYWNjb3JkaW5nbHkuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBsb29raW5nIGF0IGFuIGluYWNjZXNzaWJsZSBzeW1ib2wuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCB0aGF0IGluZm9ybWF0aW9uIGVhc2lseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiprdm1fZm9sbG93X3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzgyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIEV4cG9ydGVkIFN5bWJvbDogYF9fa3ZtX2ZhdWx0aW5fcGZuYCoqCgpSaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcXVpY2tseS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgX19rdm1fZmF1bHRpbl9wZm5gLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBleHBvcnRlZC4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdXNlIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29udGV4dC4gS25vd2luZyB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIGhhcyBiaWcgaW1wbGljYXRpb25zIGZvciBob3cgZXh0ZXJuYWwgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIG1pZ2h0IGludGVyYWN0IHdpdGggdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCBkaWN0YXRlcyB3aGV0aGVyIGl0JiMzOTtzIGEgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZSBvciBzb21ldGhpbmcgaW50ZXJuYWwgYW5kIHBvdGVudGlhbGx5IHN1YmplY3QgdG8gY2hhbmdlLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoaXMgd2l0aCB0aGUgcmlnaHQgdG9vbHMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBzeW1ib2wgaXMgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIHN5bWJvbCB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19rdm1fZmF1bHRpbl9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MzA0Nz1rdm1fcGZuX3QgX19rdm1fZmF1bHRpbl9wZm4oY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2Ni19XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNjc6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fa3ZtX2ZhdWx0aW5fcGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc0NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOgoKKipDaGVja2luZyBmb3IgRXhwb3J0ZWQgRnVuY3Rpb25hbGl0eSoqCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgZnVuY3Rpb24gYF9fZ2ZuX3RvX3BhZ2VgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZSBmb3IgdXNlLiBJIGNhbiYjMzk7dCBidWlsZCBvciB1c2UgdGhpcyBmdW5jdGlvbmFsaXR5IGlmIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAgaW4gbXkgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgZnVuY3Rpb25zIG9yIHBvdGVudGlhbGx5IGludGVybmFsIEFQSXMuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayBpdHMgdmlzaWJpbGl0eSB0byBjb25maXJtIGFjY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIHN5bWJvbCBpcyBhY3R1YWxseSBleHBvcnRlZCBhcyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLCBvdGhlcndpc2UsIGl0IG1heSBvbmx5IGJlIHZpc2libGUgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCBvciBtb2R1bGUsIHdoaWNoIHdvdWxkIGxpbWl0IG15IGFiaWxpdHkgdG8gdXNlIGl0IGluIG90aGVyIGNvbnRleHRzLiBUaGlzIHZpc2liaWxpdHkgaXMga2V5IGZvciBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19nZm5fdG9fcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0zMDkzPXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwNS19XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMDY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fZ2ZuX3RvX3BhZ2UpO1xudmlydC9rdm0va3ZtX21haW4uYy0zMTA3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIEV4cG9ydGVkIFN5bWJvbDogYF9fa3ZtX3ZjcHVfbWFwYCoqCgpSaWdodCwgc28gSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIGBfX2t2bV92Y3B1X21hcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgcGFydGljdWxhciBzeW1ib2wgaXMgZXhwb3J0ZWQuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHdoYXRldmVyIEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgb24sIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIGFjdHVhbGx5IHVzZSBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBmaXJzdCBzdGVwIOKAkyBtYWtlIHN1cmUgdGhlIHRhcmdldCBpcyBldmVuIGFjY2Vzc2libGUhIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBpZiB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgc2ltcGx5IG5vdCBleHBvc2VkLiBTbywgeWVhaCwgdGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIHRhc2s6IHZlcmlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19rdm1fdmNwdV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MzEwOD1pbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMzktfVxudmlydC9rdm0va3ZtX21haW4uYzozMTQwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX2t2bV92Y3B1X21hcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBLVk0gTWVtb3J5IFRyYW5zbGF0aW9uIFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBodmFfdG9fcGZuYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgaW50ZXJuYWwgdG8gdGhlIEtWTSBtb2R1bGUsIHdoaWNoIGlzIGNvbW1vbiBmb3IgY3JpdGljYWwgbWVtb3J5IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBsaWtlIHRoaXMuIEJ1dCB3YWl0LCBhIHNlY29uZCBsb29r4oCmIG5vLCBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIFRoYXQgY2hhbmdlcyB0aGluZ3M7IGl0IGltcGxpZXMgdGhpcyBmdW5jdGlvbiBtaWdodCBoYXZlIGJyb2FkZXIgdXNhZ2UsIG9yIGF0IGxlYXN0IGEgZGlmZmVyZW50IHNjb3BlIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGViYXNlIGFyZSBjYWxsaW5nIG9yIGFyZSBhYmxlIHRvIGNhbGwgYGh2YV90b19wZm5gIG5vdyB0aGF0IEkga25vdyBpdCBpc24mIzM5O3Qgc3RhdGljLiBJdCBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgd2lkZWx5IHRoZSBwYXRjaCBtaWdodCBpbXBhY3QgdGhlIEtWTSBlbnZpcm9ubWVudCwgYW5kIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Bmbl90IGh2YV90b19wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MjkyOD1zdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxudmlydC9rdm0va3ZtX21haW4uYzoyOTc0Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqCgpSaWdodCwgdGhpcyBzaXR1YXRpb24gaXNuJiMzOTt0IGZpeGVkLCBpdCYjMzk7cyBmbHVpZC4gSXQmIzM5O3Mgbm90IGEgY2xvc2VkIGJvb2s7IGl0JiMzOTtzIGdvdCBsYXllcnMuIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjcml0aWNhbCBjb21wb25lbnQsIHdoYXRldmVyICYjMzQ7aXQmIzM0OyByZWZlcnMgdG8gaW4gdGhpcyBjb250ZXh0LCBpcyBwcm9wZXJseSBleHBvcnRlZCBvciBhY2Nlc3NpYmxlLiBJIGhhdmUgdG8gdmVyaWZ5IGl0cyBhdmFpbGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qaHZhX3RvX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEtWTSBQRk4gSGFuZGxpbmcqKgoKUmlnaHQsIHNvIHRoaXMgdGhpbmcgaXNuJiMzOTt0ICpleHBvcnRlZCogbGlrZSBhIGdsb2JhbCB2YXJpYWJsZSwgYnV0IGl0JiMzOTtzIG5vdCBhIHRydWx5IHN0YXRpYyBsb2NhbCBlaXRoZXIuIFRoaXMgbWVhbnMgdGhlcmUmIzM5O3Mgc29tZSBpbnRlcmVzdGluZyBkeW5hbWljIGJlaGF2aW9yIHRvIGl0LCBhbmQgdGhhdCBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgSSBzaG91bGQgYmUgbG9va2luZyBhdC4gJiMzNDtodmFfdG9fcGZuJiMzNDsganVtcHMgb3V0IGltbWVkaWF0ZWx5IGFzIGEgZ29vZCBwb3RlbnRpYWwgZm9jdXMgcG9pbnQuIEl0JiMzOTtzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHRoYXQgd291bGQgYmUgaW52b2x2ZWQgaW4sIHlvdSBrbm93LCB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgZnJhbWUgbnVtYmVyIHRyYW5zbGF0aW9uLCB3aGljaCBpcyBwcm9iYWJseSBjZW50cmFsIHRvIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gJiMzNDtfX19fa3ZtX2ZhdWx0aW5fcGZuJiMzNDsgc2VlbXMgcmVsZXZhbnQgdG9vLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb247IGl0JiMzOTtzIGdvdCAmIzM0O2ZhdWx0aW4mIzM0OyBpbiBpdHMgbmFtZSBhbmQgc291bmRzIGxpa2UgaXQmIzM5O3MgbWFuYWdpbmcgdGhlIFBGTiYjMzk7cyBmYXVsdGluZyBiZWhhdmlvciB3aXRoaW4gS1ZNLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIG9yIHRha2luZyB0aGUgd3JvbmcgcGF0aCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24uIEdvdHRhIG1ha2Ugc3VyZSB0aGUgS1ZNIHN1YnN5c3RlbSBpcyBhY3R1YWxseSBlbmFibGVkIGFuZCB0aGF0IEkgZG9uJiMzOTt0IG5lZWQgdG8gdHdlYWsgYW55dGhpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFF1aWNrIGNoZWNrIGluIEtjb25maWcgc2hvdWxkIGJlIGVub3VnaCB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdmlydC9rdm0va3ZtX21haW4uY2AsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIEtWTSB2aXJ0dWFsaXphdGlvbiBtb2R1bGUuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBmaWxlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gR290dGEgZW5zdXJlIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgc2V0IGJlZm9yZSBJIHByb2NlZWQuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBodmFfdG9fcGZuYC4gSXMgdGhhdCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciB0aGlzPyBJdCAqbG9va3MqIGludGVybmFsLCBub3Qgc3RhdGljIGJ1dCBjYWxsZWQgYnkgYSBzdGF0aWMgZnVuY3Rpb24sIGBrdm1fZm9sbG93X3BmbmDigJR0aGF0JiMzOTtzIGEgc2xpZ2h0IHdyaW5rbGUuIEkgZXhwZWN0ZWQgdGhhdCBpbnRlcm5hbCBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgc3RhdGljLiBUaGF0JiMzOTtzIGEgcG9pbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgYXMgdGhlIGltcGxpY2F0aW9uIGNvdWxkIGJlIGltcG9ydGFudC4gV2FpdCBhIHNlY29uZCwgYGh2YV90b19wZm5gICppc24mIzM5O3QqIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoYXQgbm93LiBMZXQgbWUganVzdCBxdWlja2x5IHNlZSBpZiBpdCYjMzk7cyBkZWNsYXJlZCBpbiBhIGhlYWRlciBmaWxlIGFueXdoZXJlIHRvIGdldCBhIGJldHRlciBncmFzcCBvbiB3aGVyZSBpdCBpcyBhdmFpbGFibGUgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25hbGl0eSBtaWdodCBiZSByZWx5aW5nIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h2YV90b19wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLVk0gTW9kdWxlIExvY2F0aW9uIENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGFjdHVhbGx5IGltcGxlbWVudGVkPyBUaGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBsb29rLCBhbmQgbGlrZWx5IHRoZSAqb25seSogcGxhY2UgSSYjMzk7bGwgKm5lZWQqIHRvIGxvb2ssIGlzIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgcHJvamVjdCBhbmQgbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwsIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gdGhhdCBpZiBpdCYjMzk7cyBLVk0tcmVsYXRlZCBhbmQgY29yZSwgaXQmIzM5O3MgZ29pbmcgdG8gcmVzaWRlIHRoZXJlLiBObyBuZWVkIHRvIGNoYXNlIGdob3N0cyBlbHNld2hlcmUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBpbnZlc3RpZ2F0aW9uIG9mIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTI4Mjc9c3RhdGljIGt2bV9wZm5fdCBrdm1fcmVzb2x2ZV9wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MjctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5Mjg6c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudmlydC9rdm0va3ZtX21haW4uYy0yOTI5LVx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3Bmbilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzMtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NzQ6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzUte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4NC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4NTpcdGlmIChodmFfdG9fcGZuX2Zhc3Qoa2ZwLCBcdTAwMjZwZm4pKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LVx0XHRyZXR1cm4gcGZuO1xudmlydC9rdm0va3ZtX21haW4uYy0yOTg3LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTg4Olx0bnBhZ2VzID0gaHZhX3RvX3Bmbl9zbG93KGtmcCwgXHUwMDI2cGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4OS1cdGlmIChucGFnZXMgPT0gMSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTQtXHR9IGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xudmlydC9rdm0va3ZtX21haW4uYzozMDE1Olx0XHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXHUwMDI2cGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNi1cdFx0aWYgKHIgPT0gLUVBR0FJTilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMjg9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNDMtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNDQ6XHRyZXR1cm4gaHZhX3RvX3BmbihrZnApO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDQ1LX1cbi0tXG52aXJ0L2t2bS9rdm1fbW0uaD0yNz1zdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ge1xuLS1cbnZpcnQva3ZtL2t2bV9tbS5oLTU4LVxudmlydC9rdm0va3ZtX21tLmg6NTk6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApO1xudmlydC9rdm0va3ZtX21tLmgtNjAtXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1NC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MTU1OnN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTYte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjA4LVxudmlydC9rdm0vcGZuY2FjaGUuYzoyMDk6XHRcdG5ld19wZm4gPSBodmFfdG9fcGZuKFx1MDAyNmtmcCk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTIxMC1cdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4obmV3X3BmbikpXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0yNTY9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzIyOlx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMy1cdGdwYy1cdTAwM2V1aHZhICYjNDM7PSBwYWdlX29mZnNldDtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyOS1cdGlmICghZ3BjLVx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMwOlx0XHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMS1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTEwCgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGBodmFfdG9fcGZuYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGRlY2xhcmVkIGluIGBrdm1fbW0uaGAgYW5kIHVzZWQgaW4gYHBmbmNhY2hlLmNgLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBBUEkgZnVuY3Rpb24gd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLiBHb29kLCB0aGF0JiMzOTtzIGEgc29saWQgZm9jdXMgc3ltYm9sLiBJJiMzOTtsbCBhZGQgYF9fa3ZtX2ZhdWx0aW5fcGZuYCBhbmQgYF9fZ2ZuX3RvX3BhZ2VgIGFzIHdlbGwgc2luY2UgdGhvc2UgZnVuY3Rpb25zIGFyZSBhbHNvIGV4cG9ydGVkIGFuZCBjYWxsIGBodmFfdG9fcGZuYCB2aWEgYGt2bV9mb2xsb3dfcGZuYC4gTWFrZXMgc2Vuc2UgdG8gY29uc2lkZXIgdGhvc2UgYXMgcmVsYXRlZCBzeW1ib2xzIGZvciBmdXp6aW5nLgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaXMgYSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gSXQmIzM5O3MgaGFuZGxpbmcgaG9zdCB2aXJ0dWFsIGFkZHJlc3MgdG8gcGFnZSBmcmFtZSBudW1iZXIgdHJhbnNsYXRpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGZhaWx1cmVzIGZyb20gYGdldF91c2VyX3BhZ2VzKClgIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MsIGxpa2UgcmVhZC1vbmx5IG1hcHBpbmdzIGluIHdyaXRhYmxlIG1lbXNsb3RzLiBUaGF0JiMzOTtzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljLCB3aGljaCBtZWFucyBmdXp6aW5nIGl0IGlzIGEgd29ydGh3aGlsZSBpbnZlc3RtZW50LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBwYXRjaCB0b3VjaGVzIGNvZGUgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLCB3aGljaCwgZnJvbSBtZW1vcnksIGlzIGNvbW1vbiBLVk0gY29kZSwgbm90IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgYEtWTWAgaXMgZW5hYmxlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4uLiB5ZXAsIGl0JiMzOTtzIGEgdHJpc3RhdGUuIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkgZG9uJiMzOTt0IHNlZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGhlcmUsIHNvIGBLVk1gIGFsb25lIGlzIGVub3VnaCB0byByZXByb2R1Y2UgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h2YV90b19wZm4mIzM0OywKICAgICYjMzQ7X19rdm1fZmF1bHRpbl9wZm4mIzM0OywKICAgICYjMzQ7X19nZm5fdG9fcGFnZSYjMzQ7LAogICAgJiMzNDtfX2t2bV92Y3B1X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24gYGh2YV90b19wZm4oKWAsIHdoaWNoIGhhbmRsZXMgdHJhbnNsYXRpbmcgaG9zdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwYWdlIGZyYW1lIG51bWJlcnMuIEl0IHNwZWNpZmljYWxseSBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFpbGVkIGBnZXRfdXNlcl9wYWdlcygpYCBjYWxscyBhbmQgaW5hY2Nlc3NpYmxlIG1hcHBpbmdzIChlLmcuLCBQUk9UX1JFQUQgbWFwcGluZ3MgaW4gd3JpdGFibGUgbWVtc2xvdHMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodmFfdG9fcGZuJiMzNDssCiAgICAmIzM0O19fa3ZtX2ZhdWx0aW5fcGZuJiMzNDssCiAgICAmIzM0O19fZ2ZuX3RvX3BhZ2UmIzM0OywKICAgICYjMzQ7X19rdm1fdmNwdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBodmFfdG9fcGZuKClgLCB3aGljaCBoYW5kbGVzIHRyYW5zbGF0aW5nIGhvc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGFnZSBmcmFtZSBudW1iZXJzLiBJdCBzcGVjaWZpY2FsbHkgY2hhbmdlcyB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGZhaWxlZCBgZ2V0X3VzZXJfcGFnZXMoKWAgY2FsbHMgYW5kIGluYWNjZXNzaWJsZSBtYXBwaW5ncyAoZS5nLiwgUFJPVF9SRUFEIG1hcHBpbmdzIGluIHdyaXRhYmxlIG1lbXNsb3RzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIyOjQ5LjMyNzM2NDExN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Njg3NjI2MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh2YV90b19wZm5cIixcbiAgICBcIl9fa3ZtX2ZhdWx0aW5fcGZuXCIsXG4gICAgXCJfX2dmbl90b19wYWdlXCIsXG4gICAgXCJfX2t2bV92Y3B1X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaGFuZGxlcyB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBhZ2UgZnJhbWUgbnVtYmVycy4gSXQgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBmYWlsZWQgYGdldF91c2VyX3BhZ2VzKClgIGNhbGxzIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MgKGUuZy4sIFBST1RfUkVBRCBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIyOjQ5LjMyNzM3MTMwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2OTA3MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjFkMzY4NGFkNGRlMDkyNTA3OTBiZjNjNDZkZmVmMDcyOWQxYTQ2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDA0OjIyOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggNDVlNzg0NDYyZWM2ZS4uZWFmOGVlMDcyNWQ0ZSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC0yOTI1LDE3ICsyOTI1LDYgQEAgc3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbiBcXHRyZXR1cm4gbnBhZ2VzO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXFxuLXtcXG4tXFx0aWYgKHVubGlrZWx5KCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFQUQpKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0aWYgKHdyaXRlX2ZhdWx0IFxcdTAwMjZcXHUwMDI2ICh1bmxpa2VseSghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XUklURSkpKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbiB7XFxuQEAgLTMwMDgsMjAgKzI5OTcsMjkgQEAga3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxuIHJldHJ5OlxcbiBcXHR2bWEgPSB2bWFfbG9va3VwKGN1cnJlbnQtXFx1MDAzZW1tLCBrZnAtXFx1MDAzZWh2YSk7XFxuIFxcbi1cXHRpZiAodm1hID09IE5VTEwpXFxuK1xcdC8qXFxuK1xcdCAqIEdVUCBmYWlsZWQuICBJdCBjb3VsZCBiZSBhbiBpbmFjY2Vzc2libGUgbWFwcGluZywgYSBwZm5tYXAgb25lLFxcbitcXHQgKiBvciB0aGUgcGFnZSBtaWdodCBiZSBhYnNlbnQuXFxuK1xcdCAqL1xcbitcXG4rXFx0aWYgKHZtYSA9PSBOVUxMIHx8IHVubGlrZWx5KCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFQUQpKSkge1xcbiBcXHRcXHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcXG4tXFx0ZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcXG4rXFx0fSBlbHNlIGlmICgoa2ZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZPTExfV1JJVEUpIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1dSSVRFKSkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRXhpdCB0byB1c2Vyc3BhY2UgZm9yIFBST1RfUkVBRCBtYXBwaW5ncyBpbiBhIHdyaXRhYmxlXFxuK1xcdFxcdCAqIG1lbXNsb3QsIGFzIHRoaXMgaXMgcGFydCBvZiB0aGUgQVBJLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cGZuID0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUClcXG4rXFx0XFx0XFx0PyBLVk1fUEZOX0VSUl9ST19GQVVMVCA6IEtWTV9QRk5fRVJSX0ZBVUxUO1xcbitcXHR9IGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XFxuIFxcdFxcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcXHUwMDI2cGZuKTtcXG4gXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG4gXFx0XFx0XFx0Z290byByZXRyeTtcXG4gXFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKChrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9OT1dBSVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9XUklURSkpXFxuLVxcdFxcdFxcdHBmbiA9IEtWTV9QRk5fRVJSX05FRURTX0lPO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xcbitcXHRcXHRwZm4gPSBrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9OT1dBSVRcXG4rXFx0XFx0XFx0PyBLVk1fUEZOX0VSUl9ORUVEU19JTyA6IEtWTV9QRk5fRVJSX0ZBVUxUO1xcbiBcXHR9XFxuIFxcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cXHUwMDNlbW0pO1xcbiBcXHRyZXR1cm4gcGZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMjo0OS43NzQ5NDY2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4MjQwMDMwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh2YV90b19wZm5cIixcbiAgICBcIl9fa3ZtX2ZhdWx0aW5fcGZuXCIsXG4gICAgXCJfX2dmbl90b19wYWdlXCIsXG4gICAgXCJfX2t2bV92Y3B1X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaGFuZGxlcyB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBhZ2UgZnJhbWUgbnVtYmVycy4gSXQgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBmYWlsZWQgYGdldF91c2VyX3BhZ2VzKClgIGNhbGxzIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MgKGUuZy4sIFBST1RfUkVBRCBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYxZDM2ODRhZDRkZTA5MjUwNzkwYmYzYzQ2ZGZlZjA3MjlkMWE0NjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA0OjIyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmVhZjhlZTA3MjVkNGUgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMjkyNSwxNyArMjkyNSw2IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9zbG93KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcbiBcdHJldHVybiBucGFnZXM7XG4gfVxuIFxuLXN0YXRpYyBib29sIHZtYV9pc192YWxpZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCB3cml0ZV9mYXVsdClcbi17XG4tXHRpZiAodW5saWtlbHkoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFQUQpKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0aWYgKHdyaXRlX2ZhdWx0IFx1MDAyNlx1MDAyNiAodW5saWtlbHkoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSkpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4gc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcbiB7XG5AQCAtMzAwOCwyMCArMjk5NywyOSBAQCBrdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbiByZXRyeTpcbiBcdHZtYSA9IHZtYV9sb29rdXAoY3VycmVudC1cdTAwM2VtbSwga2ZwLVx1MDAzZWh2YSk7XG4gXG4tXHRpZiAodm1hID09IE5VTEwpXG4rXHQvKlxuK1x0ICogR1VQIGZhaWxlZC4gIEl0IGNvdWxkIGJlIGFuIGluYWNjZXNzaWJsZSBtYXBwaW5nLCBhIHBmbm1hcCBvbmUsXG4rXHQgKiBvciB0aGUgcGFnZSBtaWdodCBiZSBhYnNlbnQuXG4rXHQgKi9cbitcbitcdGlmICh2bWEgPT0gTlVMTCB8fCB1bmxpa2VseSghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVBRCkpKSB7XG4gXHRcdHBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuLVx0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XG4rXHR9IGVsc2UgaWYgKChrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBFeGl0IHRvIHVzZXJzcGFjZSBmb3IgUFJPVF9SRUFEIG1hcHBpbmdzIGluIGEgd3JpdGFibGVcbitcdFx0ICogbWVtc2xvdCwgYXMgdGhpcyBpcyBwYXJ0IG9mIHRoZSBBUEkuXG4rXHRcdCAqL1xuK1x0XHRwZm4gPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUClcbitcdFx0XHQ/IEtWTV9QRk5fRVJSX1JPX0ZBVUxUIDogS1ZNX1BGTl9FUlJfRkFVTFQ7XG4rXHR9IGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xuIFx0XHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXHUwMDI2cGZuKTtcbiBcdFx0aWYgKHIgPT0gLUVBR0FJTilcbiBcdFx0XHRnb3RvIHJldHJ5O1xuIFx0XHRpZiAociBcdTAwM2MgMClcbiBcdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmICgoa2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX05PV0FJVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpKVxuLVx0XHRcdHBmbiA9IEtWTV9QRk5fRVJSX05FRURTX0lPO1xuLVx0XHRlbHNlXG4tXHRcdFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4rXHRcdHBmbiA9IGtmcC1cdTAwM2VmbGFncyBcdTAwMjYgRk9MTF9OT1dBSVRcbitcdFx0XHQ/IEtWTV9QRk5fRVJSX05FRURTX0lPIDogS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR9XG4gXHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFx0cmV0dXJuIHBmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIyOjQ5Ljc3NDk0ODA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAzNDE0OTg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaDogaHZhX3RvX3BmbigpIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UsIGJ1dCBpdCB0b3VjaGVzIGEgY29yZSBmdW5jdGlvbjogYGh2YV90b19wZm4oKWAuIFRoZSBwcmltYXJ5IGNoYW5nZSBoZXJlIGlzIHRoZSBpbmxpbmluZyBvZiBgdm1hX2lzX3ZhbGlkKClgJ3MgbG9naWMgZGlyZWN0bHkgaW50byBgaHZhX3RvX3BmbigpYCwgYWxvbmcgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGxvZ2ljIHdoZW4gdGhlIGB2bWFgIGlzIG5vdCBudWxsLlxuXG5QcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBkZWRpY2F0ZWQgYHZtYV9pc192YWxpZCgpYCBmdW5jdGlvbiwgY2hlY2tpbmcgZm9yIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMuIE5vdywgdGhhdCBjaGVjayBpcyBpbmNvcnBvcmF0ZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBgaHZhX3RvX3BmbigpYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IGBodmFfdG9fcGZuKClgIGJlaGF2ZXMgd2hlbiBhIGB2bWFgICh2aXJ0dWFsIG1lbW9yeSBhcmVhKSBpcyBmb3VuZC4gSXQgc2VlbXMgdGhlIGNvZGUgbm93IGRpcmVjdGx5IGNoZWNrcyBgdm1hLVx1MDAzZXZtX2ZsYWdzYCB3aXRoaW4gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgZnVuY3Rpb24gY2FsbC4gVGhlIHBhdGNoIGFsc28gYXBwZWFycyB0byBpbXBsZW1lbnQgbmV3IGNoZWNrcyBmb3Igd3JpdGUgZmxhZ3Mgd2l0aGluIGEgd3JpdGFibGUgbWVtc2xvdC5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhbHRlcnMgdGhlIGZsb3cgb2YgaG93IHRoZSBQRk4gKHBoeXNpY2FsIGZyYW1lIG51bWJlcikgaXMgZGV0ZXJtaW5lZCBmcm9tIGEgaG9zdCB2aXJ0dWFsIGFkZHJlc3MgKEhWQSkgYnkgcmVwbGFjaW5nIHRoZSBjYWxsIHRvIGB2bWFfaXNfdmFsaWQoKWAgd2l0aCBhbiBpbmxpbmVkIGNoZWNrIGZvciB0aGUgVk1BIGZsYWdzLCBhcyB3ZWxsIGFzIGFsdGVyaW5nIGJlaGF2aW9yIHRvIGFsaWduIHdpdGggQVBJIGV4cGVjdGF0aW9ucy4gVGhpcyBjb3VsZCBwb3RlbnRpYWxseSBoYXZlIHN1YnRsZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zIGFyZSBoYW5kbGVkIHdpdGhpbiBLVk0uXG5cbkdpdmVuIHRoaXMgbW9kaWZpY2F0aW9uIG9mIGEgY3JpdGljYWwgZnVuY3Rpb24gaW4gS1ZNLCBhbmQgd2l0aCBrbm93bGVkZ2Ugb2YgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hcHBpbmcgYW5kIGd1ZXN0IGFjY2VzcywgZnV6emluZyBgaHZhX3RvX3BmbigpYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBhcHByb2FjaCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIHNvdW5kIGFuZCB0aGF0IG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGh2YV90b19wZm5gIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYmVnaW4gY3JhZnRpbmcgZnV6emluZyBjYXNlcyB0byBjb3ZlciBhbGwgdGhlc2UgbmV3IGxvZ2ljIGJyYW5jaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjI6NTcuODA5MTAyNzQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDE2MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTI4Mjc9c3RhdGljIGt2bV9wZm5fdCBrdm1fcmVzb2x2ZV9wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUwLSAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1Mi17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODgzOnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9zbG93KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODQte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTI3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkyODpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTI5LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk3My1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NzQ6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4NC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODU6XFx0aWYgKGh2YV90b19wZm5fZmFzdChrZnAsIFxcdTAwMjZwZm4pKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ni1cXHRcXHRyZXR1cm4gcGZuO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ny1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODg6XFx0bnBhZ2VzID0gaHZhX3RvX3Bmbl9zbG93KGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg5LVxcdGlmIChucGFnZXMgPT0gMSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNC1cXHR9IGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XFxudmlydC9rdm0va3ZtX21haW4uYzozMDE1OlxcdFxcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcXHUwMDI2cGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTYtXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzAyOD1zdGF0aWMga3ZtX3Bmbl90IGt2bV9mb2xsb3dfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDQzLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA0NDpcXHRyZXR1cm4gaHZhX3RvX3BmbihrZnApO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA0NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIyOjU3Ljg3MDEyMjgzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NDM3ODU0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZzpcblxuKipUcmFjaW5nIERvd24gdGhlIGBrdm1fZm9sbG93X3BmbmAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIGBodmFfdG9fcGZuYCBpcyBiZWluZyBjYWxsZWQgYnkgYGt2bV9mb2xsb3dfcGZuYC4gVGhhdCdzIGEgZ29vZCBicmVhZGNydW1iLCBidXQgSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBoYXZlIGEgaHVuY2ggdGhpcyBpcyBnb2luZyB0byBiZSByZWxhdGVkIHRvIHNvbWUgcGFnZSBmYXVsdCBvciBtZW1vcnkgYWNjZXNzIGlzc3VlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aG8ncyAqY2FsbGluZyogYGt2bV9mb2xsb3dfcGZuYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGVudHJ5IHBvaW50cyB0byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBoaWdoZXItbGV2ZWwgbG9naWMgdGhhdCB1bHRpbWF0ZWx5IHJlbGllcyBvbiB0aGUgYGh2YV90b19wZm5gIGNvbnZlcnNpb24gYW5kIGhvcGVmdWxseSBsZWFkIG1lIHRvIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtIEknbSBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdGhlIGNhbGwgZ3JhcGguIExldCdzIHNlZS4uLiBhIHF1aWNrIGBncmVwYCBvciBtYXliZSBhIGJhY2t0cmFjZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjA0LjgxMzkxMjYyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ3NzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZm9sbG93X3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNT1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eSk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yODI2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjgyNzpzdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxudmlydC9rdm0va3ZtX21haW4uYy0yODI4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICptYXAsIGJvb2wgd3JpdGFibGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkyOTpcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTMwLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk3My1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NzQ6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAyNy1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMjg6c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMjkte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zMDQ3PWt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTAte1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1MTpcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cXHRcXHQuc2xvdCA9IHNsb3QsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjQtXFxudmlydC9rdm0va3ZtX21haW4uYzozMDY1OlxcdHJldHVybiBrdm1fZm9sbG93X3BmbihcXHUwMDI2a2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjYtfVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zMDkzPXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDk1LVxcdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2UgPSBOVUxMO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA5NjpcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA5Ny1cXHRcXHQuc2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwMi1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMDM6XFx0KHZvaWQpa3ZtX2ZvbGxvd19wZm4oXFx1MDAyNmtmcCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTA0LVxcdHJldHVybiByZWZjb3VudGVkX3BhZ2U7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMxMDg9aW50IF9fa3ZtX3ZjcHVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBzdHJ1Y3Qga3ZtX2hvc3RfbWFwICptYXAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMTAte1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzExMTpcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExMi1cXHRcXHQuc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbiksXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMjQtXFxudmlydC9rdm0va3ZtX21haW4uYzozMTI1OlxcdG1hcC1cXHUwMDNlcGZuID0ga3ZtX2ZvbGxvd19wZm4oXFx1MDAyNmtmcCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTI2LVxcdGlmIChpc19lcnJvcl9ub3Nsb3RfcGZuKG1hcC1cXHUwMDNlcGZuKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MDQuODc2MzkzODQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI2MDQ2MTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhpcyBLVk0gTWVtb3J5IE1hcHBpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZGl2ZXMgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgS1ZNJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYGh2YV90b19wZm5gIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbC4gSSBrbm93IHRoYXQgYGh2YV90b19wZm5gIGlzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IHNldmVyYWwga2V5IEtWTSBmdW5jdGlvbnM6IGBrdm1fZm9sbG93X3BmbmAsIGBfX2t2bV9mYXVsdGluX3BmbmAsIGBfX2dmbl90b19wYWdlYCwgYW5kIGBfX2t2bV92Y3B1X21hcGAuIFRoZXNlIGFyZSBhbGwgZGVlcGx5IGludm9sdmVkIGluIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgbG9va3VwcyBhbmQgZmF1bHRzLlxuXG5UaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrIHdpdGhpbiBgaHZhX3RvX3BmbmAgdGhhdCBraWNrcyBpbiB3aGVuIGEgR1VQIChHZXQgVXNlciBQYWdlKSBvcGVyYXRpb24gZmFpbHMsIGJ1dCBhIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgaXMgc3RpbGwgcHJlc2VudC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGB2bWFgIGFuZCBpdHMgZmxhZ3MuIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyBmb3IgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgKGBWTV9SRUFEYCwgYFZNX1dSSVRFYCkgb2YgdGhlIFZNQSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgaG93IEtWTSBiZWhhdmVzIHdoZW4gYSBwYWdlIGZhdWx0IG9jY3VycyBhbmQgYSBtYXBwaW5nIGlzIGVpdGhlciBtaXNzaW5nLCByZWFkLW9ubHksIG9yIG90aGVyd2lzZSBpbmFjY2Vzc2libGUuIFRoZXJlJ3MgYSBjaGVjayBmb3IgYFZNX1JFQURgIGFuZCBhbm90aGVyIGZvciBgVk1fV1JJVEVgIGlmIGBGT0xMX1dSSVRFYCBpcyByZXF1ZXN0ZWQuIElmIHRoZXJlIGlzIGEgd3JpdGUgcmVxdWVzdCB0byBhIHJlYWQtb25seSBtYXBwaW5nLCBLVk0gd2lsbCBub3cgZXhpdCB0byB1c2Vyc3BhY2UuIEFsc28sIGl04oCZcyBsb29raW5nIGF0IGBWTV9JT2AgYW5kIGBWTV9QRk5NQVBgIGZsYWdzIGFuZCByZXR1cm5pbmcgdGhlIHJlbGV2YW50IGZhdWx0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgaW4gaG93IEtWTSBoYW5kbGVzIHBhZ2UgZmF1bHRzIHJlbGF0ZWQgdG8gbWVtb3J5IHNsb3RzLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUsIGFjdHVhbGx5LCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aG9zZSBjb3JlIGZ1bmN0aW9ucy5cblxuSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgdGhhdCBgaHZhX3RvX3BmbmAgKmlzKiBpbmRlZWQgZXhwb3J0ZWQsIGFzIEkgYmVsaWV2ZSBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoxMS4xMzY4NTc0NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4Mjk5MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MTEuMTkwNjk2NTgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNTIzNjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgS1ZNIEV4cG9ydCBTdGF0dXMqKlxuXG5SaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBNeSBpbnRlcm5hbCBjaGVja2xpc3QgaGFzIGZsYWdnZWQgYGt2bV9mb2xsb3dfcGZuYCBmb3IgcmV2aWV3LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkLiBJcyBpdCBhY2Nlc3NpYmxlIGF0IGFsbD8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAuIElmIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGVuIGl0J3MgY2xlYXJseSBvZmYtbGltaXRzIGFuZCBJIG5lZWQgdG8gYWRqdXN0IG15IGFuYWx5c2lzIGFjY29yZGluZ2x5LiBObyBwb2ludCB3YXN0aW5nIHRpbWUgbG9va2luZyBhdCBhbiBpbmFjY2Vzc2libGUgc3ltYm9sLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCB0aGF0IGluZm9ybWF0aW9uIGVhc2lseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE4OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjE0LjEyNTkzNTg0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1MzkwNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmt2bV9mb2xsb3dfcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjE0LjE4NDQ4MTkwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU2MDY1NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBmb3IgRXhwb3J0ZWQgU3ltYm9sOiBgX19rdm1fZmF1bHRpbl9wZm5gKipcblxuUmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHF1aWNrbHkuIEknbSB0aGlua2luZyBhYm91dCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgX19rdm1fZmF1bHRpbl9wZm5gLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCdzIGV4cG9ydGVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgaXRzIGFjY2Vzc2liaWxpdHkgYW5kIHBvdGVudGlhbCB1c2Ugd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBLbm93aW5nIHdoZXRoZXIgaXQncyBleHBvcnRlZCBoYXMgYmlnIGltcGxpY2F0aW9ucyBmb3IgaG93IGV4dGVybmFsIG1vZHVsZXMgb3Igc3Vic3lzdGVtcyBtaWdodCBpbnRlcmFjdCB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQgZGljdGF0ZXMgd2hldGhlciBpdCdzIGEgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZSBvciBzb21ldGhpbmcgaW50ZXJuYWwgYW5kIHBvdGVudGlhbGx5IHN1YmplY3QgdG8gY2hhbmdlLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoaXMgd2l0aCB0aGUgcmlnaHQgdG9vbHMuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIHN5bWJvbCBpcyBwYXJ0IG9mIHRoZSBrZXJuZWwncyBzeW1ib2wgdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoxNy40NDA1NTA1MjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjM4NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fa3ZtX2ZhdWx0aW5fcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0zMDQ3PWt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjYtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA2NzpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX19rdm1fZmF1bHRpbl9wZm4pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MTcuNDkzMTkzOTMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODI0NTU4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBmb3IgRXhwb3J0ZWQgRnVuY3Rpb25hbGl0eSoqXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBmdW5jdGlvbiBgX19nZm5fdG9fcGFnZWAgaXMgYWN0dWFsbHkgYXZhaWxhYmxlIGZvciB1c2UuIEkgY2FuJ3QgYnVpbGQgb3IgdXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBpZiBpdCdzIG5vdCBleHBvcnRlZC4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAgaW4gbXkgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgZnVuY3Rpb25zIG9yIHBvdGVudGlhbGx5IGludGVybmFsIEFQSXMuIEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIGl0cyB2aXNpYmlsaXR5IHRvIGNvbmZpcm0gYWNjZXNzLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBzeW1ib2wgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYXMgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZSwgb3RoZXJ3aXNlLCBpdCBtYXkgb25seSBiZSB2aXNpYmxlIHdpdGhpbiBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgb3IgbW9kdWxlLCB3aGljaCB3b3VsZCBsaW1pdCBteSBhYmlsaXR5IHRvIHVzZSBpdCBpbiBvdGhlciBjb250ZXh0cy4gVGhpcyB2aXNpYmlsaXR5IGlzIGtleSBmb3IgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoyMC4yNzU2NTIyNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDg2OTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX2dmbl90b19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0zMDkzPXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMTA1LX1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMDY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fZ2ZuX3RvX3BhZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MjAuMzgwNTI1OTc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NjYxNjc2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkNoZWNraW5nIGZvciBFeHBvcnRlZCBTeW1ib2w6IGBfX2t2bV92Y3B1X21hcGAqKlxuXG5SaWdodCwgc28gSSdtIGp1c3QgcXVpY2tseSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YgYF9fa3ZtX3ZjcHVfbWFwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBwYXJ0aWN1bGFyIHN5bWJvbCBpcyBleHBvcnRlZC4gSXQncyBjcnVjaWFsIGZvciB3aGF0ZXZlciBJJ20gY3VycmVudGx5IHdvcmtpbmcgb24sIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIGFjdHVhbGx5IHVzZSBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBmaXJzdCBzdGVwIOKAkyBtYWtlIHN1cmUgdGhlIHRhcmdldCBpcyBldmVuIGFjY2Vzc2libGUhIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBpZiB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgc2ltcGx5IG5vdCBleHBvc2VkLiBTbywgeWVhaCwgdGhhdCdzIHRoZSBpbW1lZGlhdGUgdGFzazogdmVyaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDg5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MjMuMTQ2Njk4MzUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc5MTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX2t2bV92Y3B1X21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MzEwOD1pbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEzOS19XFxudmlydC9rdm0va3ZtX21haW4uYzozMTQwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX2t2bV92Y3B1X21hcCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoyMy4yMDE0OTg5MDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1ODg5NDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIG15IGFyZWEgb2YgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgS1ZNIE1lbW9yeSBUcmFuc2xhdGlvbiBQYXRoKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBgaHZhX3RvX3BmbmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGludGVybmFsIHRvIHRoZSBLVk0gbW9kdWxlLCB3aGljaCBpcyBjb21tb24gZm9yIGNyaXRpY2FsIG1lbW9yeSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgbGlrZSB0aGlzLiBCdXQgd2FpdCwgYSBzZWNvbmQgbG9va+KApiBubywgaXQncyAqbm90KiBzdGF0aWMuIFRoYXQgY2hhbmdlcyB0aGluZ3M7IGl0IGltcGxpZXMgdGhpcyBmdW5jdGlvbiBtaWdodCBoYXZlIGJyb2FkZXIgdXNhZ2UsIG9yIGF0IGxlYXN0IGEgZGlmZmVyZW50IHNjb3BlIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGViYXNlIGFyZSBjYWxsaW5nIG9yIGFyZSBhYmxlIHRvIGNhbGwgYGh2YV90b19wZm5gIG5vdyB0aGF0IEkga25vdyBpdCBpc24ndCBzdGF0aWMuIEl0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyB3aWRlbHkgdGhlIHBhdGNoIG1pZ2h0IGltcGFjdCB0aGUgS1ZNIGVudmlyb25tZW50LCBhbmQgYW55IHBvdGVudGlhbCBzaWRlLWVmZmVjdHMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDMwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MjYuNjYwMzk2MDQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQzNDMwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Bmbl90IGh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk3NDprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoyNi43NjQ3NDY3NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NDYzNjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIER5bmFtaWMgTmF0dXJlKipcblxuUmlnaHQsIHRoaXMgc2l0dWF0aW9uIGlzbid0IGZpeGVkLCBpdCdzIGZsdWlkLiBJdCdzIG5vdCBhIGNsb3NlZCBib29rOyBpdCdzIGdvdCBsYXllcnMuIEZpcnN0IHRoaW5nJ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGNyaXRpY2FsIGNvbXBvbmVudCwgd2hhdGV2ZXIgXCJpdFwiIHJlZmVycyB0byBpbiB0aGlzIGNvbnRleHQsIGlzIHByb3Blcmx5IGV4cG9ydGVkIG9yIGFjY2Vzc2libGUuIEkgaGF2ZSB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjMwLjI1OTM4NzMyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2MDU5NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzozMC4zNjIwMDEzNzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NTkyMDY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBLVk0gUEZOIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIHRoaXMgdGhpbmcgaXNuJ3QgKmV4cG9ydGVkKiBsaWtlIGEgZ2xvYmFsIHZhcmlhYmxlLCBidXQgaXQncyBub3QgYSB0cnVseSBzdGF0aWMgbG9jYWwgZWl0aGVyLiBUaGlzIG1lYW5zIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBkeW5hbWljIGJlaGF2aW9yIHRvIGl0LCBhbmQgdGhhdCBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgSSBzaG91bGQgYmUgbG9va2luZyBhdC4gXCJodmFfdG9fcGZuXCIganVtcHMgb3V0IGltbWVkaWF0ZWx5IGFzIGEgZ29vZCBwb3RlbnRpYWwgZm9jdXMgcG9pbnQuIEl0J3MgdGhlIGtpbmQgb2YgZnVuY3Rpb24gdGhhdCB3b3VsZCBiZSBpbnZvbHZlZCBpbiwgeW91IGtub3csIHZpcnR1YWwgYWRkcmVzcyB0byBwaHlzaWNhbCBmcmFtZSBudW1iZXIgdHJhbnNsYXRpb24sIHdoaWNoIGlzIHByb2JhYmx5IGNlbnRyYWwgdG8gd2hhdCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIFwiX19fX2t2bV9mYXVsdGluX3BmblwiIHNlZW1zIHJlbGV2YW50IHRvbywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uOyBpdCdzIGdvdCBcImZhdWx0aW5cIiBpbiBpdHMgbmFtZSBhbmQgc291bmRzIGxpa2UgaXQncyBtYW5hZ2luZyB0aGUgUEZOJ3MgZmF1bHRpbmcgYmVoYXZpb3Igd2l0aGluIEtWTS5cblxuTm93LCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgb3IgdGFraW5nIHRoZSB3cm9uZyBwYXRoLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbi4gR290dGEgbWFrZSBzdXJlIHRoZSBLVk0gc3Vic3lzdGVtIGlzIGFjdHVhbGx5IGVuYWJsZWQgYW5kIHRoYXQgSSBkb24ndCBuZWVkIHRvIHR3ZWFrIGFueXRoaW5nIGluIHRoZSBjb25maWd1cmF0aW9uLiBRdWljayBjaGVjayBpbiBLY29uZmlnIHNob3VsZCBiZSBlbm91Z2ggdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MzQuMTM3OTI2MzA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjEzMzczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjM0LjE5MDA2MzU2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMyNzkxMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdmlydC9rdm0va3ZtX21haW4uY2AsIHdoaWNoIHRlbGxzIG1lIGl0J3MgcmVsYXRlZCB0byB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIG1vZHVsZS4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlIGZpbGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBHb3R0YSBlbnN1cmUgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQgYmVmb3JlIEkgcHJvY2VlZC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIGBodmFfdG9fcGZuYC4gSXMgdGhhdCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciB0aGlzPyBJdCAqbG9va3MqIGludGVybmFsLCBub3Qgc3RhdGljIGJ1dCBjYWxsZWQgYnkgYSBzdGF0aWMgZnVuY3Rpb24sIGBrdm1fZm9sbG93X3BmbmDigJR0aGF0J3MgYSBzbGlnaHQgd3JpbmtsZS4gSSBleHBlY3RlZCB0aGF0IGludGVybmFsIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBzdGF0aWMuIFRoYXQncyBhIHBvaW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIGFzIHRoZSBpbXBsaWNhdGlvbiBjb3VsZCBiZSBpbXBvcnRhbnQuIFdhaXQgYSBzZWNvbmQsIGBodmFfdG9fcGZuYCAqaXNuJ3QqIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoYXQgbm93LiBMZXQgbWUganVzdCBxdWlja2x5IHNlZSBpZiBpdCdzIGRlY2xhcmVkIGluIGEgaGVhZGVyIGZpbGUgYW55d2hlcmUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHdoZXJlIGl0IGlzIGF2YWlsYWJsZSBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbmFsaXR5IG1pZ2h0IGJlIHJlbHlpbmcgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjM4LjEyMjg1NzczNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NjcwODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzozOC4xODQ0MzA2NDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNDAxODE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktWTSBNb2R1bGUgTG9jYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGFjdHVhbGx5IGltcGxlbWVudGVkPyBUaGUgZmlyc3QgcGxhY2UgSSdtIGdvaW5nIHRvIGxvb2ssIGFuZCBsaWtlbHkgdGhlICpvbmx5KiBwbGFjZSBJJ2xsICpuZWVkKiB0byBsb29rLCBpcyBgdmlydC9rdm0va3ZtX21haW4uY2AuIEdpdmVuIHRoZSBzY29wZSBvZiB0aGlzIHByb2plY3QgYW5kIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhhdCBpZiBpdCdzIEtWTS1yZWxhdGVkIGFuZCBjb3JlLCBpdCdzIGdvaW5nIHRvIHJlc2lkZSB0aGVyZS4gTm8gbmVlZCB0byBjaGFzZSBnaG9zdHMgZWxzZXdoZXJlLiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBpbnZlc3RpZ2F0aW9uIG9mIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzo0MS4xMTg0NTEyMzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Mzc5ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MjctXFxudmlydC9rdm0va3ZtX21haW4uYzoyOTI4OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MjktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk3NDprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzUte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg0LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4NTpcXHRpZiAoaHZhX3RvX3Bmbl9mYXN0KGtmcCwgXFx1MDAyNnBmbikpXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LVxcdFxcdHJldHVybiBwZm47XFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4ODpcXHRucGFnZXMgPSBodmFfdG9fcGZuX3Nsb3coa2ZwLCBcXHUwMDI2cGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5ODktXFx0aWYgKG5wYWdlcyA9PSAxKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDE0LVxcdH0gZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMTU6XFx0XFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFxcdTAwMjZwZm4pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNi1cXHRcXHRpZiAociA9PSAtRUFHQUlOKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zMDI4PXN0YXRpYyBrdm1fcGZuX3Qga3ZtX2ZvbGxvd19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNDMtXFxudmlydC9rdm0va3ZtX21haW4uYzozMDQ0OlxcdHJldHVybiBodmFfdG9fcGZuKGtmcCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDQ1LX1cXG4tLVxcbnZpcnQva3ZtL2t2bV9tbS5oPTI3PXN0cnVjdCBrdm1fZm9sbG93X3BmbiB7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaC01OC1cXG52aXJ0L2t2bS9rdm1fbW0uaDo1OTprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCk7XFxudmlydC9rdm0va3ZtX21tLmgtNjAtXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTEyNz1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTQtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoxNTU6c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTYte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yMDgtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoyMDk6XFx0XFx0bmV3X3BmbiA9IGh2YV90b19wZm4oXFx1MDAyNmtmcCk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy0yMTAtXFx0XFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4obmV3X3BmbikpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTI1Nj1zdGF0aWMgaW50IF9fa3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMjEtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozMjI6XFx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMjMtXFx0Z3BjLVxcdTAwM2V1aHZhICs9IHBhZ2Vfb2Zmc2V0O1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMjktXFx0aWYgKCFncGMtXFx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjMzMDpcXHRcXHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMzEtXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6NDEuMTg0ODM2MTY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2OTE0Mjk3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYGh2YV90b19wZm5gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgZGVjbGFyZWQgaW4gYGt2bV9tbS5oYCBhbmQgdXNlZCBpbiBgcGZuY2FjaGUuY2AuIFRoYXQgdGVsbHMgbWUgaXQncyBhIG5vbi1zdGF0aWMgQVBJIGZ1bmN0aW9uIHdpdGhpbiB0aGUgS1ZNIHN1YnN5c3RlbS4gR29vZCwgdGhhdCdzIGEgc29saWQgZm9jdXMgc3ltYm9sLiBJJ2xsIGFkZCBgX19rdm1fZmF1bHRpbl9wZm5gIGFuZCBgX19nZm5fdG9fcGFnZWAgYXMgd2VsbCBzaW5jZSB0aG9zZSBmdW5jdGlvbnMgYXJlIGFsc28gZXhwb3J0ZWQgYW5kIGNhbGwgYGh2YV90b19wZm5gIHZpYSBga3ZtX2ZvbGxvd19wZm5gLiBNYWtlcyBzZW5zZSB0byBjb25zaWRlciB0aG9zZSBhcyByZWxhdGVkIHN5bWJvbHMgZm9yIGZ1enppbmcuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaXMgYSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gSXQncyBoYW5kbGluZyBob3N0IHZpcnR1YWwgYWRkcmVzcyB0byBwYWdlIGZyYW1lIG51bWJlciB0cmFuc2xhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBmYWlsdXJlcyBmcm9tIGBnZXRfdXNlcl9wYWdlcygpYCBhbmQgaW5hY2Nlc3NpYmxlIG1hcHBpbmdzLCBsaWtlIHJlYWQtb25seSBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cy4gVGhhdCdzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljLCB3aGljaCBtZWFucyBmdXp6aW5nIGl0IGlzIGEgd29ydGh3aGlsZSBpbnZlc3RtZW50LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb2RlIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgd2hpY2gsIGZyb20gbWVtb3J5LCBpcyBjb21tb24gS1ZNIGNvZGUsIG5vdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBLVk1gIGlzIGVuYWJsZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuLi4geWVwLCBpdCdzIGEgdHJpc3RhdGUuIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkgZG9uJ3Qgc2VlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgaGVyZSwgc28gYEtWTWAgYWxvbmUgaXMgZW5vdWdoIHRvIHJlcHJvZHVjZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTEwLCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzo0Ny44NzYyNjgyMDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3MDQwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh2YV90b19wZm5cIixcbiAgICBcIl9fa3ZtX2ZhdWx0aW5fcGZuXCIsXG4gICAgXCJfX2dmbl90b19wYWdlXCIsXG4gICAgXCJfX2t2bV92Y3B1X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaGFuZGxlcyB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBhZ2UgZnJhbWUgbnVtYmVycy4gSXQgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBmYWlsZWQgYGdldF91c2VyX3BhZ2VzKClgIGNhbGxzIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MgKGUuZy4sIFBST1RfUkVBRCBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHZhX3RvX3BmblwiLFxuICAgIFwiX19rdm1fZmF1bHRpbl9wZm5cIixcbiAgICBcIl9fZ2ZuX3RvX3BhZ2VcIixcbiAgICBcIl9fa3ZtX3ZjcHVfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBodmFfdG9fcGZuKClgLCB3aGljaCBoYW5kbGVzIHRyYW5zbGF0aW5nIGhvc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGFnZSBmcmFtZSBudW1iZXJzLiBJdCBzcGVjaWZpY2FsbHkgY2hhbmdlcyB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGZhaWxlZCBgZ2V0X3VzZXJfcGFnZXMoKWAgY2FsbHMgYW5kIGluYWNjZXNzaWJsZSBtYXBwaW5ncyAoZS5nLiwgUFJPVF9SRUFEIG1hcHBpbmdzIGluIHdyaXRhYmxlIG1lbXNsb3RzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowwv82x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 04:08:08 +0000 UTC FinishedAt: 2026-08-02 04:23:49 +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": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "9ba89453-cd4e-4667-8ef7-71a9571a9606" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "hva_to_pfn", "__kvm_faultin_pfn", "__gfn_to_page", "__kvm_vcpu_map" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h2YV90b19wZm4mIzM0OywKICAgICYjMzQ7X19rdm1fZmF1bHRpbl9wZm4mIzM0OywKICAgICYjMzQ7X19nZm5fdG9fcGFnZSYjMzQ7LAogICAgJiMzNDtfX2t2bV92Y3B1X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24gYGh2YV90b19wZm4oKWAsIHdoaWNoIGhhbmRsZXMgdHJhbnNsYXRpbmcgaG9zdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwYWdlIGZyYW1lIG51bWJlcnMuIEl0IHNwZWNpZmljYWxseSBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFpbGVkIGBnZXRfdXNlcl9wYWdlcygpYCBjYWxscyBhbmQgaW5hY2Nlc3NpYmxlIG1hcHBpbmdzIChlLmcuLCBQUk9UX1JFQUQgbWFwcGluZ3MgaW4gd3JpdGFibGUgbWVtc2xvdHMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjFkMzY4NGFkNGRlMDkyNTA3OTBiZjNjNDZkZmVmMDcyOWQxYTQ2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMDQ6MjI6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmVhZjhlZTA3MjVkNGUgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMjkyNSwxNyAmIzQzOzI5MjUsNiBAQCBzdGF0aWMgaW50IGh2YV90b19wZm5fc2xvdyhzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXG4gXHRyZXR1cm4gbnBhZ2VzO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXG4te1xuLVx0aWYgKHVubGlrZWx5KCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRUFEKSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdGlmICh3cml0ZV9mYXVsdCBcdTAwMjZcdTAwMjYgKHVubGlrZWx5KCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXG4ge1xuQEAgLTMwMDgsMjAgJiM0MzsyOTk3LDI5IEBAIGt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxuIHJldHJ5OlxuIFx0dm1hID0gdm1hX2xvb2t1cChjdXJyZW50LVx1MDAzZW1tLCBrZnAtXHUwMDNlaHZhKTtcbiBcbi1cdGlmICh2bWEgPT0gTlVMTClcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEdVUCBmYWlsZWQuICBJdCBjb3VsZCBiZSBhbiBpbmFjY2Vzc2libGUgbWFwcGluZywgYSBwZm5tYXAgb25lLFxuJiM0MztcdCAqIG9yIHRoZSBwYWdlIG1pZ2h0IGJlIGFic2VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHZtYSA9PSBOVUxMIHx8IHVubGlrZWx5KCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9SRUFEKSkpIHtcbiBcdFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4tXHRlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbiYjNDM7XHR9IGVsc2UgaWYgKChrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEV4aXQgdG8gdXNlcnNwYWNlIGZvciBQUk9UX1JFQUQgbWFwcGluZ3MgaW4gYSB3cml0YWJsZVxuJiM0MztcdFx0ICogbWVtc2xvdCwgYXMgdGhpcyBpcyBwYXJ0IG9mIHRoZSBBUEkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHBmbiA9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKVxuJiM0MztcdFx0XHQ/IEtWTV9QRk5fRVJSX1JPX0ZBVUxUIDogS1ZNX1BGTl9FUlJfRkFVTFQ7XG4mIzQzO1x0fSBlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbiBcdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG4gXHRcdGlmIChyID09IC1FQUdBSU4pXG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0aWYgKHIgXHUwMDNjIDApXG4gXHRcdFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoKGtmcC1cdTAwM2VmbGFncyBcdTAwMjYgRk9MTF9OT1dBSVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgdm1hX2lzX3ZhbGlkKHZtYSwga2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFKSlcbi1cdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9ORUVEU19JTztcbi1cdFx0ZWxzZVxuLVx0XHRcdHBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuJiM0MztcdFx0cGZuID0ga2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX05PV0FJVFxuJiM0MztcdFx0XHQ/IEtWTV9QRk5fRVJSX05FRURTX0lPIDogS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR9XG4gXHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFx0cmV0dXJuIHBmbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHZhX3RvX3BmbiYjMzQ7LAogICAgJiMzNDtfX2t2bV9mYXVsdGluX3BmbiYjMzQ7LAogICAgJiMzNDtfX2dmbl90b19wYWdlJiMzNDssCiAgICAmIzM0O19fa3ZtX3ZjcHVfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaGFuZGxlcyB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBhZ2UgZnJhbWUgbnVtYmVycy4gSXQgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBmYWlsZWQgYGdldF91c2VyX3BhZ2VzKClgIGNhbGxzIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MgKGUuZy4sIFBST1RfUkVBRCBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMWQzNjg0YWQ0ZGUwOTI1MDc5MGJmM2M0NmRmZWYwNzI5ZDFhNDY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAwNDoyMjo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmVhZjhlZTA3MjVkNGUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMjkyNSwxNyAmIzQzOzI5MjUsNiBAQCBzdGF0aWMgaW50IGh2YV90b19wZm5fc2xvdyhzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pCiAJcmV0dXJuIG5wYWdlczsKIH0KIAotc3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KQotewotCWlmICh1bmxpa2VseSghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkVBRCkpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAod3JpdGVfZmF1bHQgJmFtcDsmYW1wOyAodW5saWtlbHkoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1dSSVRFKSkpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKQogewpAQCAtMzAwOCwyMCAmIzQzOzI5OTcsMjkgQEAga3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApCiByZXRyeToKIAl2bWEgPSB2bWFfbG9va3VwKGN1cnJlbnQtJmd0O21tLCBrZnAtJmd0O2h2YSk7CiAKLQlpZiAodm1hID09IE5VTEwpCiYjNDM7CS8qCiYjNDM7CSAqIEdVUCBmYWlsZWQuICBJdCBjb3VsZCBiZSBhbiBpbmFjY2Vzc2libGUgbWFwcGluZywgYSBwZm5tYXAgb25lLAomIzQzOwkgKiBvciB0aGUgcGFnZSBtaWdodCBiZSBhYnNlbnQuCiYjNDM7CSAqLwomIzQzOwomIzQzOwlpZiAodm1hID09IE5VTEwgfHwgdW5saWtlbHkoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFQUQpKSkgewogCQlwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDsKLQllbHNlIGlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9JTyB8IFZNX1BGTk1BUCkpIHsKJiM0MzsJfSBlbHNlIGlmICgoa2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX1dSSVRFKSAmYW1wOyZhbXA7IHVubGlrZWx5KCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogRXhpdCB0byB1c2Vyc3BhY2UgZm9yIFBST1RfUkVBRCBtYXBwaW5ncyBpbiBhIHdyaXRhYmxlCiYjNDM7CQkgKiBtZW1zbG90LCBhcyB0aGlzIGlzIHBhcnQgb2YgdGhlIEFQSS4KJiM0MzsJCSAqLwomIzQzOwkJcGZuID0gdm1hLSZndDt2bV9mbGFncyAmYW1wOyAoVk1fSU8gfCBWTV9QRk5NQVApCiYjNDM7CQkJPyBLVk1fUEZOX0VSUl9ST19GQVVMVCA6IEtWTV9QRk5fRVJSX0ZBVUxUOwomIzQzOwl9IGVsc2UgaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX0lPIHwgVk1fUEZOTUFQKSkgewogCQlyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgJmFtcDtwZm4pOwogCQlpZiAociA9PSAtRUFHQUlOKQogCQkJZ290byByZXRyeTsKIAkJaWYgKHIgJmx0OyAwKQogCQkJcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7CiAJfSBlbHNlIHsKLQkJaWYgKChrZnAtJmd0O2ZsYWdzICZhbXA7IEZPTExfTk9XQUlUKSAmYW1wOyZhbXA7Ci0JCSAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtJmd0O2ZsYWdzICZhbXA7IEZPTExfV1JJVEUpKQotCQkJcGZuID0gS1ZNX1BGTl9FUlJfTkVFRFNfSU87Ci0JCWVsc2UKLQkJCXBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwomIzQzOwkJcGZuID0ga2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX05PV0FJVAomIzQzOwkJCT8gS1ZNX1BGTl9FUlJfTkVFRFNfSU8gOiBLVk1fUEZOX0VSUl9GQVVMVDsKIAl9CiAJbW1hcF9yZWFkX3VubG9jayhjdXJyZW50LSZndDttbSk7CiAJcmV0dXJuIHBmbjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBQYXRjaDogaHZhX3RvX3BmbigpIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UsIGJ1dCBpdCB0b3VjaGVzIGEgY29yZSBmdW5jdGlvbjogYGh2YV90b19wZm4oKWAuIFRoZSBwcmltYXJ5IGNoYW5nZSBoZXJlIGlzIHRoZSBpbmxpbmluZyBvZiBgdm1hX2lzX3ZhbGlkKClgJiMzOTtzIGxvZ2ljIGRpcmVjdGx5IGludG8gYGh2YV90b19wZm4oKWAsIGFsb25nIHdpdGggc29tZSBtb2RpZmljYXRpb25zIGluIHRoZSBsb2dpYyB3aGVuIHRoZSBgdm1hYCBpcyBub3QgbnVsbC4KClByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGRlZGljYXRlZCBgdm1hX2lzX3ZhbGlkKClgIGZ1bmN0aW9uLCBjaGVja2luZyBmb3IgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy4gTm93LCB0aGF0IGNoZWNrIGlzIGluY29ycG9yYXRlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGBodmFfdG9fcGZuKClgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBtb2RpZmllcyBob3cgYGh2YV90b19wZm4oKWAgYmVoYXZlcyB3aGVuIGEgYHZtYWAgKHZpcnR1YWwgbWVtb3J5IGFyZWEpIGlzIGZvdW5kLiBJdCBzZWVtcyB0aGUgY29kZSBub3cgZGlyZWN0bHkgY2hlY2tzIGB2bWEtJmd0O3ZtX2ZsYWdzYCB3aXRoaW4gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgZnVuY3Rpb24gY2FsbC4gVGhlIHBhdGNoIGFsc28gYXBwZWFycyB0byBpbXBsZW1lbnQgbmV3IGNoZWNrcyBmb3Igd3JpdGUgZmxhZ3Mgd2l0aGluIGEgd3JpdGFibGUgbWVtc2xvdC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBmbG93IG9mIGhvdyB0aGUgUEZOIChwaHlzaWNhbCBmcmFtZSBudW1iZXIpIGlzIGRldGVybWluZWQgZnJvbSBhIGhvc3QgdmlydHVhbCBhZGRyZXNzIChIVkEpIGJ5IHJlcGxhY2luZyB0aGUgY2FsbCB0byBgdm1hX2lzX3ZhbGlkKClgIHdpdGggYW4gaW5saW5lZCBjaGVjayBmb3IgdGhlIFZNQSBmbGFncywgYXMgd2VsbCBhcyBhbHRlcmluZyBiZWhhdmlvciB0byBhbGlnbiB3aXRoIEFQSSBleHBlY3RhdGlvbnMuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgaGF2ZSBzdWJ0bGUgaW1wbGljYXRpb25zIGZvciBob3cgbWVtb3J5IGFjY2VzcyBwZXJtaXNzaW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gS1ZNLgoKR2l2ZW4gdGhpcyBtb2RpZmljYXRpb24gb2YgYSBjcml0aWNhbCBmdW5jdGlvbiBpbiBLVk0sIGFuZCB3aXRoIGtub3dsZWRnZSBvZiB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFwcGluZyBhbmQgZ3Vlc3QgYWNjZXNzLCBmdXp6aW5nIGBodmFfdG9fcGZuKClgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgY2hhbmdlcyBhcmUgc291bmQgYW5kIHRoYXQgbm8gbmV3IHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaHZhX3RvX3BmbmAgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFuZCBiZWdpbiBjcmFmdGluZyBmdXp6aW5nIGNhc2VzIHRvIGNvdmVyIGFsbCB0aGVzZSBuZXcgbG9naWMgYnJhbmNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yODI3PXN0YXRpYyBrdm1fcGZuX3Qga3ZtX3Jlc29sdmVfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4NTE6c3RhdGljIGJvb2wgaHZhX3RvX3Bmbl9mYXN0KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1Mi17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yODgyLSAqL1xudmlydC9rdm0va3ZtX21haW4uYzoyODgzOnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9zbG93KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTI3LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTI4OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkyOS1cdFx0XHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxudmlydC9rdm0va3ZtX21haW4uYzoyOTc0Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5ODQtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODU6XHRpZiAoaHZhX3RvX3Bmbl9mYXN0KGtmcCwgXHUwMDI2cGZuKSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ni1cdFx0cmV0dXJuIHBmbjtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ny1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4ODpcdG5wYWdlcyA9IGh2YV90b19wZm5fc2xvdyhrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5ODktXHRpZiAobnBhZ2VzID09IDEpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDE0LVx0fSBlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNTpcdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTYtXHRcdGlmIChyID09IC1FQUdBSU4pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDI4PXN0YXRpYyBrdm1fcGZuX3Qga3ZtX2ZvbGxvd19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDQzLVxudmlydC9rdm0va3ZtX21haW4uYzozMDQ0Olx0cmV0dXJuIGh2YV90b19wZm4oa2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA0NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZzoKCioqVHJhY2luZyBEb3duIHRoZSBga3ZtX2ZvbGxvd19wZm5gIENhbGxlcnMqKgoKQWxyaWdodCwgc28gYGh2YV90b19wZm5gIGlzIGJlaW5nIGNhbGxlZCBieSBga3ZtX2ZvbGxvd19wZm5gLiBUaGF0JiMzOTtzIGEgZ29vZCBicmVhZGNydW1iLCBidXQgSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBoYXZlIGEgaHVuY2ggdGhpcyBpcyBnb2luZyB0byBiZSByZWxhdGVkIHRvIHNvbWUgcGFnZSBmYXVsdCBvciBtZW1vcnkgYWNjZXNzIGlzc3VlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aG8mIzM5O3MgKmNhbGxpbmcqIGBrdm1fZm9sbG93X3BmbmAuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIHdpbGwgc2hvdyBtZSB0aGUgaGlnaGVyLWxldmVsIGxvZ2ljIHRoYXQgdWx0aW1hdGVseSByZWxpZXMgb24gdGhlIGBodmFfdG9fcGZuYCBjb252ZXJzaW9uIGFuZCBob3BlZnVsbHkgbGVhZCBtZSB0byB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgcHJvYmxlbSBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkgbmVlZCB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIGBncmVwYCBvciBtYXliZSBhIGJhY2t0cmFjZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZm9sbG93X3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yODI1PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjgyNi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjgyNzpzdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4MjgtXHRcdFx0XHQgc3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyAqbWFwLCBib29sIHdyaXRhYmxlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudmlydC9rdm0va3ZtX21haW4uYzoyOTI5Olx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzMC17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxudmlydC9rdm0va3ZtX21haW4uYzoyOTc0Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMjctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMjg6c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAyOS17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDQ3PWt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDUwLXtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1MTpcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTItXHRcdC5zbG90ID0gc2xvdCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjQtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNjU6XHRyZXR1cm4ga3ZtX2ZvbGxvd19wZm4oXHUwMDI2a2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2Ni19XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMDkzPXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA5NS1cdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2UgPSBOVUxMO1xudmlydC9rdm0va3ZtX21haW4uYzozMDk2Olx0c3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA5Ny1cdFx0LnNsb3QgPSBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbiksXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMTAyLVxudmlydC9rdm0va3ZtX21haW4uYzozMTAzOlx0KHZvaWQpa3ZtX2ZvbGxvd19wZm4oXHUwMDI2a2ZwKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwNC1cdHJldHVybiByZWZjb3VudGVkX3BhZ2U7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMTA4PWludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExMC17XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMTE6XHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xudmlydC9rdm0va3ZtX21haW4uYy0zMTEyLVx0XHQuc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbiksXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMTI0LVxudmlydC9rdm0va3ZtX21haW4uYzozMTI1Olx0bWFwLVx1MDAzZXBmbiA9IGt2bV9mb2xsb3dfcGZuKFx1MDAyNmtmcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMjYtXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihtYXAtXHUwMDNlcGZuKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzA1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGlzIEtWTSBNZW1vcnkgTWFwcGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGRpdmVzIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIEtWTSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgaHZhX3RvX3BmbmAgZnVuY3Rpb24sIHdoaWNoIGlzIGNyaXRpY2FsLiBJIGtub3cgdGhhdCBgaHZhX3RvX3BmbmAgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgc2V2ZXJhbCBrZXkgS1ZNIGZ1bmN0aW9uczogYGt2bV9mb2xsb3dfcGZuYCwgYF9fa3ZtX2ZhdWx0aW5fcGZuYCwgYF9fZ2ZuX3RvX3BhZ2VgLCBhbmQgYF9fa3ZtX3ZjcHVfbWFwYC4gVGhlc2UgYXJlIGFsbCBkZWVwbHkgaW52b2x2ZWQgaW4gaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBsb29rdXBzIGFuZCBmYXVsdHMuCgpUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrIHdpdGhpbiBgaHZhX3RvX3BmbmAgdGhhdCBraWNrcyBpbiB3aGVuIGEgR1VQIChHZXQgVXNlciBQYWdlKSBvcGVyYXRpb24gZmFpbHMsIGJ1dCBhIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgaXMgc3RpbGwgcHJlc2VudC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGB2bWFgIGFuZCBpdHMgZmxhZ3MuIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyBmb3IgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgKGBWTV9SRUFEYCwgYFZNX1dSSVRFYCkgb2YgdGhlIFZNQSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBob3cgS1ZNIGJlaGF2ZXMgd2hlbiBhIHBhZ2UgZmF1bHQgb2NjdXJzIGFuZCBhIG1hcHBpbmcgaXMgZWl0aGVyIG1pc3NpbmcsIHJlYWQtb25seSwgb3Igb3RoZXJ3aXNlIGluYWNjZXNzaWJsZS4gVGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYFZNX1JFQURgIGFuZCBhbm90aGVyIGZvciBgVk1fV1JJVEVgIGlmIGBGT0xMX1dSSVRFYCBpcyByZXF1ZXN0ZWQuIElmIHRoZXJlIGlzIGEgd3JpdGUgcmVxdWVzdCB0byBhIHJlYWQtb25seSBtYXBwaW5nLCBLVk0gd2lsbCBub3cgZXhpdCB0byB1c2Vyc3BhY2UuIEFsc28sIGl04oCZcyBsb29raW5nIGF0IGBWTV9JT2AgYW5kIGBWTV9QRk5NQVBgIGZsYWdzIGFuZCByZXR1cm5pbmcgdGhlIHJlbGV2YW50IGZhdWx0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgaW4gaG93IEtWTSBoYW5kbGVzIHBhZ2UgZmF1bHRzIHJlbGF0ZWQgdG8gbWVtb3J5IHNsb3RzLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lLCBhY3R1YWxseSwgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aG9zZSBjb3JlIGZ1bmN0aW9ucy4KCkkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIHRoYXQgYGh2YV90b19wZm5gICppcyogaW5kZWVkIGV4cG9ydGVkLCBhcyBJIGJlbGlldmUgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipodmFfdG9fcGZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkNoZWNraW5nIEtWTSBFeHBvcnQgU3RhdHVzKioKClJpZ2h0LCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIE15IGludGVybmFsIGNoZWNrbGlzdCBoYXMgZmxhZ2dlZCBga3ZtX2ZvbGxvd19wZm5gIGZvciByZXZpZXcsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB3aGV0aGVyIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkLiBJcyBpdCBhY2Nlc3NpYmxlIGF0IGFsbD8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAuIElmIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgdGhlbiBpdCYjMzk7cyBjbGVhcmx5IG9mZi1saW1pdHMgYW5kIEkgbmVlZCB0byBhZGp1c3QgbXkgYW5hbHlzaXMgYWNjb3JkaW5nbHkuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBsb29raW5nIGF0IGFuIGluYWNjZXNzaWJsZSBzeW1ib2wuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCB0aGF0IGluZm9ybWF0aW9uIGVhc2lseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiprdm1fZm9sbG93X3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzgyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIEV4cG9ydGVkIFN5bWJvbDogYF9fa3ZtX2ZhdWx0aW5fcGZuYCoqCgpSaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcXVpY2tseS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgX19rdm1fZmF1bHRpbl9wZm5gLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBleHBvcnRlZC4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdXNlIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29udGV4dC4gS25vd2luZyB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIGhhcyBiaWcgaW1wbGljYXRpb25zIGZvciBob3cgZXh0ZXJuYWwgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIG1pZ2h0IGludGVyYWN0IHdpdGggdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCBkaWN0YXRlcyB3aGV0aGVyIGl0JiMzOTtzIGEgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZSBvciBzb21ldGhpbmcgaW50ZXJuYWwgYW5kIHBvdGVudGlhbGx5IHN1YmplY3QgdG8gY2hhbmdlLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoaXMgd2l0aCB0aGUgcmlnaHQgdG9vbHMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBzeW1ib2wgaXMgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIHN5bWJvbCB0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19rdm1fZmF1bHRpbl9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MzA0Nz1rdm1fcGZuX3QgX19rdm1fZmF1bHRpbl9wZm4oY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2Ni19XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNjc6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fa3ZtX2ZhdWx0aW5fcGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc0NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOgoKKipDaGVja2luZyBmb3IgRXhwb3J0ZWQgRnVuY3Rpb25hbGl0eSoqCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgZnVuY3Rpb24gYF9fZ2ZuX3RvX3BhZ2VgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZSBmb3IgdXNlLiBJIGNhbiYjMzk7dCBidWlsZCBvciB1c2UgdGhpcyBmdW5jdGlvbmFsaXR5IGlmIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAgaW4gbXkgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgZnVuY3Rpb25zIG9yIHBvdGVudGlhbGx5IGludGVybmFsIEFQSXMuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayBpdHMgdmlzaWJpbGl0eSB0byBjb25maXJtIGFjY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIHN5bWJvbCBpcyBhY3R1YWxseSBleHBvcnRlZCBhcyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLCBvdGhlcndpc2UsIGl0IG1heSBvbmx5IGJlIHZpc2libGUgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCBvciBtb2R1bGUsIHdoaWNoIHdvdWxkIGxpbWl0IG15IGFiaWxpdHkgdG8gdXNlIGl0IGluIG90aGVyIGNvbnRleHRzLiBUaGlzIHZpc2liaWxpdHkgaXMga2V5IGZvciBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19nZm5fdG9fcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0zMDkzPXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwNS19XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMDY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fZ2ZuX3RvX3BhZ2UpO1xudmlydC9rdm0va3ZtX21haW4uYy0zMTA3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIEV4cG9ydGVkIFN5bWJvbDogYF9fa3ZtX3ZjcHVfbWFwYCoqCgpSaWdodCwgc28gSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIGBfX2t2bV92Y3B1X21hcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgcGFydGljdWxhciBzeW1ib2wgaXMgZXhwb3J0ZWQuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHdoYXRldmVyIEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgb24sIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIGFjdHVhbGx5IHVzZSBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBmaXJzdCBzdGVwIOKAkyBtYWtlIHN1cmUgdGhlIHRhcmdldCBpcyBldmVuIGFjY2Vzc2libGUhIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBpZiB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgc2ltcGx5IG5vdCBleHBvc2VkLiBTbywgeWVhaCwgdGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIHRhc2s6IHZlcmlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19rdm1fdmNwdV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MzEwOD1pbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMzktfVxudmlydC9rdm0va3ZtX21haW4uYzozMTQwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX2t2bV92Y3B1X21hcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBLVk0gTWVtb3J5IFRyYW5zbGF0aW9uIFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBodmFfdG9fcGZuYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgaW50ZXJuYWwgdG8gdGhlIEtWTSBtb2R1bGUsIHdoaWNoIGlzIGNvbW1vbiBmb3IgY3JpdGljYWwgbWVtb3J5IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBsaWtlIHRoaXMuIEJ1dCB3YWl0LCBhIHNlY29uZCBsb29r4oCmIG5vLCBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIFRoYXQgY2hhbmdlcyB0aGluZ3M7IGl0IGltcGxpZXMgdGhpcyBmdW5jdGlvbiBtaWdodCBoYXZlIGJyb2FkZXIgdXNhZ2UsIG9yIGF0IGxlYXN0IGEgZGlmZmVyZW50IHNjb3BlIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGViYXNlIGFyZSBjYWxsaW5nIG9yIGFyZSBhYmxlIHRvIGNhbGwgYGh2YV90b19wZm5gIG5vdyB0aGF0IEkga25vdyBpdCBpc24mIzM5O3Qgc3RhdGljLiBJdCBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgd2lkZWx5IHRoZSBwYXRjaCBtaWdodCBpbXBhY3QgdGhlIEtWTSBlbnZpcm9ubWVudCwgYW5kIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Bmbl90IGh2YV90b19wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MjkyOD1zdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxudmlydC9rdm0va3ZtX21haW4uYzoyOTc0Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqCgpSaWdodCwgdGhpcyBzaXR1YXRpb24gaXNuJiMzOTt0IGZpeGVkLCBpdCYjMzk7cyBmbHVpZC4gSXQmIzM5O3Mgbm90IGEgY2xvc2VkIGJvb2s7IGl0JiMzOTtzIGdvdCBsYXllcnMuIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjcml0aWNhbCBjb21wb25lbnQsIHdoYXRldmVyICYjMzQ7aXQmIzM0OyByZWZlcnMgdG8gaW4gdGhpcyBjb250ZXh0LCBpcyBwcm9wZXJseSBleHBvcnRlZCBvciBhY2Nlc3NpYmxlLiBJIGhhdmUgdG8gdmVyaWZ5IGl0cyBhdmFpbGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qaHZhX3RvX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEtWTSBQRk4gSGFuZGxpbmcqKgoKUmlnaHQsIHNvIHRoaXMgdGhpbmcgaXNuJiMzOTt0ICpleHBvcnRlZCogbGlrZSBhIGdsb2JhbCB2YXJpYWJsZSwgYnV0IGl0JiMzOTtzIG5vdCBhIHRydWx5IHN0YXRpYyBsb2NhbCBlaXRoZXIuIFRoaXMgbWVhbnMgdGhlcmUmIzM5O3Mgc29tZSBpbnRlcmVzdGluZyBkeW5hbWljIGJlaGF2aW9yIHRvIGl0LCBhbmQgdGhhdCBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgSSBzaG91bGQgYmUgbG9va2luZyBhdC4gJiMzNDtodmFfdG9fcGZuJiMzNDsganVtcHMgb3V0IGltbWVkaWF0ZWx5IGFzIGEgZ29vZCBwb3RlbnRpYWwgZm9jdXMgcG9pbnQuIEl0JiMzOTtzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHRoYXQgd291bGQgYmUgaW52b2x2ZWQgaW4sIHlvdSBrbm93LCB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgZnJhbWUgbnVtYmVyIHRyYW5zbGF0aW9uLCB3aGljaCBpcyBwcm9iYWJseSBjZW50cmFsIHRvIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gJiMzNDtfX19fa3ZtX2ZhdWx0aW5fcGZuJiMzNDsgc2VlbXMgcmVsZXZhbnQgdG9vLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb247IGl0JiMzOTtzIGdvdCAmIzM0O2ZhdWx0aW4mIzM0OyBpbiBpdHMgbmFtZSBhbmQgc291bmRzIGxpa2UgaXQmIzM5O3MgbWFuYWdpbmcgdGhlIFBGTiYjMzk7cyBmYXVsdGluZyBiZWhhdmlvciB3aXRoaW4gS1ZNLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzIG9yIHRha2luZyB0aGUgd3JvbmcgcGF0aCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24uIEdvdHRhIG1ha2Ugc3VyZSB0aGUgS1ZNIHN1YnN5c3RlbSBpcyBhY3R1YWxseSBlbmFibGVkIGFuZCB0aGF0IEkgZG9uJiMzOTt0IG5lZWQgdG8gdHdlYWsgYW55dGhpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFF1aWNrIGNoZWNrIGluIEtjb25maWcgc2hvdWxkIGJlIGVub3VnaCB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdmlydC9rdm0va3ZtX21haW4uY2AsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIEtWTSB2aXJ0dWFsaXphdGlvbiBtb2R1bGUuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBmaWxlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19LVk1gIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gR290dGEgZW5zdXJlIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgc2V0IGJlZm9yZSBJIHByb2NlZWQuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBodmFfdG9fcGZuYC4gSXMgdGhhdCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciB0aGlzPyBJdCAqbG9va3MqIGludGVybmFsLCBub3Qgc3RhdGljIGJ1dCBjYWxsZWQgYnkgYSBzdGF0aWMgZnVuY3Rpb24sIGBrdm1fZm9sbG93X3BmbmDigJR0aGF0JiMzOTtzIGEgc2xpZ2h0IHdyaW5rbGUuIEkgZXhwZWN0ZWQgdGhhdCBpbnRlcm5hbCBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgc3RhdGljLiBUaGF0JiMzOTtzIGEgcG9pbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgYXMgdGhlIGltcGxpY2F0aW9uIGNvdWxkIGJlIGltcG9ydGFudC4gV2FpdCBhIHNlY29uZCwgYGh2YV90b19wZm5gICppc24mIzM5O3QqIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoYXQgbm93LiBMZXQgbWUganVzdCBxdWlja2x5IHNlZSBpZiBpdCYjMzk7cyBkZWNsYXJlZCBpbiBhIGhlYWRlciBmaWxlIGFueXdoZXJlIHRvIGdldCBhIGJldHRlciBncmFzcCBvbiB3aGVyZSBpdCBpcyBhdmFpbGFibGUgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25hbGl0eSBtaWdodCBiZSByZWx5aW5nIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h2YV90b19wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk1NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLVk0gTW9kdWxlIExvY2F0aW9uIENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGFjdHVhbGx5IGltcGxlbWVudGVkPyBUaGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBsb29rLCBhbmQgbGlrZWx5IHRoZSAqb25seSogcGxhY2UgSSYjMzk7bGwgKm5lZWQqIHRvIGxvb2ssIGlzIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgcHJvamVjdCBhbmQgbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwsIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gdGhhdCBpZiBpdCYjMzk7cyBLVk0tcmVsYXRlZCBhbmQgY29yZSwgaXQmIzM5O3MgZ29pbmcgdG8gcmVzaWRlIHRoZXJlLiBObyBuZWVkIHRvIGNoYXNlIGdob3N0cyBlbHNld2hlcmUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBpbnZlc3RpZ2F0aW9uIG9mIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTI4Mjc9c3RhdGljIGt2bV9wZm5fdCBrdm1fcmVzb2x2ZV9wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1MC0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxudmlydC9rdm0va3ZtX21haW4uYy0yODg0LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MjctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5Mjg6c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudmlydC9rdm0va3ZtX21haW4uYy0yOTI5LVx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3Bmbilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzMtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NzQ6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzUte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4NC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4NTpcdGlmIChodmFfdG9fcGZuX2Zhc3Qoa2ZwLCBcdTAwMjZwZm4pKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LVx0XHRyZXR1cm4gcGZuO1xudmlydC9rdm0va3ZtX21haW4uYy0yOTg3LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTg4Olx0bnBhZ2VzID0gaHZhX3RvX3Bmbl9zbG93KGtmcCwgXHUwMDI2cGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4OS1cdGlmIChucGFnZXMgPT0gMSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTQtXHR9IGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xudmlydC9rdm0va3ZtX21haW4uYzozMDE1Olx0XHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXHUwMDI2cGZuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNi1cdFx0aWYgKHIgPT0gLUVBR0FJTilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMjg9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNDMtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNDQ6XHRyZXR1cm4gaHZhX3RvX3BmbihrZnApO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDQ1LX1cbi0tXG52aXJ0L2t2bS9rdm1fbW0uaD0yNz1zdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ge1xuLS1cbnZpcnQva3ZtL2t2bV9tbS5oLTU4LVxudmlydC9rdm0va3ZtX21tLmg6NTk6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApO1xudmlydC9rdm0va3ZtX21tLmgtNjAtXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0xMjc9c3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE1NC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MTU1OnN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTYte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjA4LVxudmlydC9rdm0vcGZuY2FjaGUuYzoyMDk6XHRcdG5ld19wZm4gPSBodmFfdG9fcGZuKFx1MDAyNmtmcCk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTIxMC1cdFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4obmV3X3BmbikpXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0yNTY9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzIyOlx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyMy1cdGdwYy1cdTAwM2V1aHZhICYjNDM7PSBwYWdlX29mZnNldDtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMyOS1cdGlmICghZ3BjLVx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMwOlx0XHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMS1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTEwCgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGBodmFfdG9fcGZuYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGRlY2xhcmVkIGluIGBrdm1fbW0uaGAgYW5kIHVzZWQgaW4gYHBmbmNhY2hlLmNgLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBBUEkgZnVuY3Rpb24gd2l0aGluIHRoZSBLVk0gc3Vic3lzdGVtLiBHb29kLCB0aGF0JiMzOTtzIGEgc29saWQgZm9jdXMgc3ltYm9sLiBJJiMzOTtsbCBhZGQgYF9fa3ZtX2ZhdWx0aW5fcGZuYCBhbmQgYF9fZ2ZuX3RvX3BhZ2VgIGFzIHdlbGwgc2luY2UgdGhvc2UgZnVuY3Rpb25zIGFyZSBhbHNvIGV4cG9ydGVkIGFuZCBjYWxsIGBodmFfdG9fcGZuYCB2aWEgYGt2bV9mb2xsb3dfcGZuYC4gTWFrZXMgc2Vuc2UgdG8gY29uc2lkZXIgdGhvc2UgYXMgcmVsYXRlZCBzeW1ib2xzIGZvciBmdXp6aW5nLgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaXMgYSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gSXQmIzM5O3MgaGFuZGxpbmcgaG9zdCB2aXJ0dWFsIGFkZHJlc3MgdG8gcGFnZSBmcmFtZSBudW1iZXIgdHJhbnNsYXRpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGZhaWx1cmVzIGZyb20gYGdldF91c2VyX3BhZ2VzKClgIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MsIGxpa2UgcmVhZC1vbmx5IG1hcHBpbmdzIGluIHdyaXRhYmxlIG1lbXNsb3RzLiBUaGF0JiMzOTtzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljLCB3aGljaCBtZWFucyBmdXp6aW5nIGl0IGlzIGEgd29ydGh3aGlsZSBpbnZlc3RtZW50LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBwYXRjaCB0b3VjaGVzIGNvZGUgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLCB3aGljaCwgZnJvbSBtZW1vcnksIGlzIGNvbW1vbiBLVk0gY29kZSwgbm90IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgYEtWTWAgaXMgZW5hYmxlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4uLiB5ZXAsIGl0JiMzOTtzIGEgdHJpc3RhdGUuIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkgZG9uJiMzOTt0IHNlZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGhlcmUsIHNvIGBLVk1gIGFsb25lIGlzIGVub3VnaCB0byByZXByb2R1Y2UgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h2YV90b19wZm4mIzM0OywKICAgICYjMzQ7X19rdm1fZmF1bHRpbl9wZm4mIzM0OywKICAgICYjMzQ7X19nZm5fdG9fcGFnZSYjMzQ7LAogICAgJiMzNDtfX2t2bV92Y3B1X21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24gYGh2YV90b19wZm4oKWAsIHdoaWNoIGhhbmRsZXMgdHJhbnNsYXRpbmcgaG9zdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwYWdlIGZyYW1lIG51bWJlcnMuIEl0IHNwZWNpZmljYWxseSBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFpbGVkIGBnZXRfdXNlcl9wYWdlcygpYCBjYWxscyBhbmQgaW5hY2Nlc3NpYmxlIG1hcHBpbmdzIChlLmcuLCBQUk9UX1JFQUQgbWFwcGluZ3MgaW4gd3JpdGFibGUgbWVtc2xvdHMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodmFfdG9fcGZuJiMzNDssCiAgICAmIzM0O19fa3ZtX2ZhdWx0aW5fcGZuJiMzNDssCiAgICAmIzM0O19fZ2ZuX3RvX3BhZ2UmIzM0OywKICAgICYjMzQ7X19rdm1fdmNwdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBodmFfdG9fcGZuKClgLCB3aGljaCBoYW5kbGVzIHRyYW5zbGF0aW5nIGhvc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGFnZSBmcmFtZSBudW1iZXJzLiBJdCBzcGVjaWZpY2FsbHkgY2hhbmdlcyB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGZhaWxlZCBgZ2V0X3VzZXJfcGFnZXMoKWAgY2FsbHMgYW5kIGluYWNjZXNzaWJsZSBtYXBwaW5ncyAoZS5nLiwgUFJPVF9SRUFEIG1hcHBpbmdzIGluIHdyaXRhYmxlIG1lbXNsb3RzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIyOjQ5LjMyNzM2NDExN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Njg3NjI2MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh2YV90b19wZm5cIixcbiAgICBcIl9fa3ZtX2ZhdWx0aW5fcGZuXCIsXG4gICAgXCJfX2dmbl90b19wYWdlXCIsXG4gICAgXCJfX2t2bV92Y3B1X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaGFuZGxlcyB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBhZ2UgZnJhbWUgbnVtYmVycy4gSXQgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBmYWlsZWQgYGdldF91c2VyX3BhZ2VzKClgIGNhbGxzIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MgKGUuZy4sIFBST1RfUkVBRCBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIyOjQ5LjMyNzM3MTMwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2OTA3MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjFkMzY4NGFkNGRlMDkyNTA3OTBiZjNjNDZkZmVmMDcyOWQxYTQ2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDA0OjIyOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggNDVlNzg0NDYyZWM2ZS4uZWFmOGVlMDcyNWQ0ZSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC0yOTI1LDE3ICsyOTI1LDYgQEAgc3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbiBcXHRyZXR1cm4gbnBhZ2VzO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXFxuLXtcXG4tXFx0aWYgKHVubGlrZWx5KCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFQUQpKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0aWYgKHdyaXRlX2ZhdWx0IFxcdTAwMjZcXHUwMDI2ICh1bmxpa2VseSghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9XUklURSkpKSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbiB7XFxuQEAgLTMwMDgsMjAgKzI5OTcsMjkgQEAga3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxuIHJldHJ5OlxcbiBcXHR2bWEgPSB2bWFfbG9va3VwKGN1cnJlbnQtXFx1MDAzZW1tLCBrZnAtXFx1MDAzZWh2YSk7XFxuIFxcbi1cXHRpZiAodm1hID09IE5VTEwpXFxuK1xcdC8qXFxuK1xcdCAqIEdVUCBmYWlsZWQuICBJdCBjb3VsZCBiZSBhbiBpbmFjY2Vzc2libGUgbWFwcGluZywgYSBwZm5tYXAgb25lLFxcbitcXHQgKiBvciB0aGUgcGFnZSBtaWdodCBiZSBhYnNlbnQuXFxuK1xcdCAqL1xcbitcXG4rXFx0aWYgKHZtYSA9PSBOVUxMIHx8IHVubGlrZWx5KCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1JFQUQpKSkge1xcbiBcXHRcXHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcXG4tXFx0ZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcXG4rXFx0fSBlbHNlIGlmICgoa2ZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZPTExfV1JJVEUpIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1dSSVRFKSkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRXhpdCB0byB1c2Vyc3BhY2UgZm9yIFBST1RfUkVBRCBtYXBwaW5ncyBpbiBhIHdyaXRhYmxlXFxuK1xcdFxcdCAqIG1lbXNsb3QsIGFzIHRoaXMgaXMgcGFydCBvZiB0aGUgQVBJLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cGZuID0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUClcXG4rXFx0XFx0XFx0PyBLVk1fUEZOX0VSUl9ST19GQVVMVCA6IEtWTV9QRk5fRVJSX0ZBVUxUO1xcbitcXHR9IGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XFxuIFxcdFxcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcXHUwMDI2cGZuKTtcXG4gXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG4gXFx0XFx0XFx0Z290byByZXRyeTtcXG4gXFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKChrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9OT1dBSVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9XUklURSkpXFxuLVxcdFxcdFxcdHBmbiA9IEtWTV9QRk5fRVJSX05FRURTX0lPO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xcbitcXHRcXHRwZm4gPSBrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9OT1dBSVRcXG4rXFx0XFx0XFx0PyBLVk1fUEZOX0VSUl9ORUVEU19JTyA6IEtWTV9QRk5fRVJSX0ZBVUxUO1xcbiBcXHR9XFxuIFxcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cXHUwMDNlbW0pO1xcbiBcXHRyZXR1cm4gcGZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMjo0OS43NzQ5NDY2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4MjQwMDMwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh2YV90b19wZm5cIixcbiAgICBcIl9fa3ZtX2ZhdWx0aW5fcGZuXCIsXG4gICAgXCJfX2dmbl90b19wYWdlXCIsXG4gICAgXCJfX2t2bV92Y3B1X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaGFuZGxlcyB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBhZ2UgZnJhbWUgbnVtYmVycy4gSXQgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBmYWlsZWQgYGdldF91c2VyX3BhZ2VzKClgIGNhbGxzIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MgKGUuZy4sIFBST1RfUkVBRCBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYxZDM2ODRhZDRkZTA5MjUwNzkwYmYzYzQ2ZGZlZjA3MjlkMWE0NjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA0OjIyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDQ1ZTc4NDQ2MmVjNmUuLmVhZjhlZTA3MjVkNGUgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMjkyNSwxNyArMjkyNSw2IEBAIHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9zbG93KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcbiBcdHJldHVybiBucGFnZXM7XG4gfVxuIFxuLXN0YXRpYyBib29sIHZtYV9pc192YWxpZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCB3cml0ZV9mYXVsdClcbi17XG4tXHRpZiAodW5saWtlbHkoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFQUQpKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0aWYgKHdyaXRlX2ZhdWx0IFx1MDAyNlx1MDAyNiAodW5saWtlbHkoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSkpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4gc3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcbiB7XG5AQCAtMzAwOCwyMCArMjk5NywyOSBAQCBrdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbiByZXRyeTpcbiBcdHZtYSA9IHZtYV9sb29rdXAoY3VycmVudC1cdTAwM2VtbSwga2ZwLVx1MDAzZWh2YSk7XG4gXG4tXHRpZiAodm1hID09IE5VTEwpXG4rXHQvKlxuK1x0ICogR1VQIGZhaWxlZC4gIEl0IGNvdWxkIGJlIGFuIGluYWNjZXNzaWJsZSBtYXBwaW5nLCBhIHBmbm1hcCBvbmUsXG4rXHQgKiBvciB0aGUgcGFnZSBtaWdodCBiZSBhYnNlbnQuXG4rXHQgKi9cbitcbitcdGlmICh2bWEgPT0gTlVMTCB8fCB1bmxpa2VseSghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVBRCkpKSB7XG4gXHRcdHBmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUO1xuLVx0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XG4rXHR9IGVsc2UgaWYgKChrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBFeGl0IHRvIHVzZXJzcGFjZSBmb3IgUFJPVF9SRUFEIG1hcHBpbmdzIGluIGEgd3JpdGFibGVcbitcdFx0ICogbWVtc2xvdCwgYXMgdGhpcyBpcyBwYXJ0IG9mIHRoZSBBUEkuXG4rXHRcdCAqL1xuK1x0XHRwZm4gPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUClcbitcdFx0XHQ/IEtWTV9QRk5fRVJSX1JPX0ZBVUxUIDogS1ZNX1BGTl9FUlJfRkFVTFQ7XG4rXHR9IGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xuIFx0XHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXHUwMDI2cGZuKTtcbiBcdFx0aWYgKHIgPT0gLUVBR0FJTilcbiBcdFx0XHRnb3RvIHJldHJ5O1xuIFx0XHRpZiAociBcdTAwM2MgMClcbiBcdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmICgoa2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX05PV0FJVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpKVxuLVx0XHRcdHBmbiA9IEtWTV9QRk5fRVJSX05FRURTX0lPO1xuLVx0XHRlbHNlXG4tXHRcdFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4rXHRcdHBmbiA9IGtmcC1cdTAwM2VmbGFncyBcdTAwMjYgRk9MTF9OT1dBSVRcbitcdFx0XHQ/IEtWTV9QRk5fRVJSX05FRURTX0lPIDogS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR9XG4gXHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIFx0cmV0dXJuIHBmbjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIyOjQ5Ljc3NDk0ODA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAzNDE0OTg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaDogaHZhX3RvX3BmbigpIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UsIGJ1dCBpdCB0b3VjaGVzIGEgY29yZSBmdW5jdGlvbjogYGh2YV90b19wZm4oKWAuIFRoZSBwcmltYXJ5IGNoYW5nZSBoZXJlIGlzIHRoZSBpbmxpbmluZyBvZiBgdm1hX2lzX3ZhbGlkKClgJ3MgbG9naWMgZGlyZWN0bHkgaW50byBgaHZhX3RvX3BmbigpYCwgYWxvbmcgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGxvZ2ljIHdoZW4gdGhlIGB2bWFgIGlzIG5vdCBudWxsLlxuXG5QcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBkZWRpY2F0ZWQgYHZtYV9pc192YWxpZCgpYCBmdW5jdGlvbiwgY2hlY2tpbmcgZm9yIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMuIE5vdywgdGhhdCBjaGVjayBpcyBpbmNvcnBvcmF0ZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBgaHZhX3RvX3BmbigpYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IGBodmFfdG9fcGZuKClgIGJlaGF2ZXMgd2hlbiBhIGB2bWFgICh2aXJ0dWFsIG1lbW9yeSBhcmVhKSBpcyBmb3VuZC4gSXQgc2VlbXMgdGhlIGNvZGUgbm93IGRpcmVjdGx5IGNoZWNrcyBgdm1hLVx1MDAzZXZtX2ZsYWdzYCB3aXRoaW4gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIHJlbW92aW5nIHRoZSByZWR1bmRhbnQgZnVuY3Rpb24gY2FsbC4gVGhlIHBhdGNoIGFsc28gYXBwZWFycyB0byBpbXBsZW1lbnQgbmV3IGNoZWNrcyBmb3Igd3JpdGUgZmxhZ3Mgd2l0aGluIGEgd3JpdGFibGUgbWVtc2xvdC5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhbHRlcnMgdGhlIGZsb3cgb2YgaG93IHRoZSBQRk4gKHBoeXNpY2FsIGZyYW1lIG51bWJlcikgaXMgZGV0ZXJtaW5lZCBmcm9tIGEgaG9zdCB2aXJ0dWFsIGFkZHJlc3MgKEhWQSkgYnkgcmVwbGFjaW5nIHRoZSBjYWxsIHRvIGB2bWFfaXNfdmFsaWQoKWAgd2l0aCBhbiBpbmxpbmVkIGNoZWNrIGZvciB0aGUgVk1BIGZsYWdzLCBhcyB3ZWxsIGFzIGFsdGVyaW5nIGJlaGF2aW9yIHRvIGFsaWduIHdpdGggQVBJIGV4cGVjdGF0aW9ucy4gVGhpcyBjb3VsZCBwb3RlbnRpYWxseSBoYXZlIHN1YnRsZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zIGFyZSBoYW5kbGVkIHdpdGhpbiBLVk0uXG5cbkdpdmVuIHRoaXMgbW9kaWZpY2F0aW9uIG9mIGEgY3JpdGljYWwgZnVuY3Rpb24gaW4gS1ZNLCBhbmQgd2l0aCBrbm93bGVkZ2Ugb2YgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hcHBpbmcgYW5kIGd1ZXN0IGFjY2VzcywgZnV6emluZyBgaHZhX3RvX3BmbigpYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBhcHByb2FjaCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIHNvdW5kIGFuZCB0aGF0IG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGh2YV90b19wZm5gIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYmVnaW4gY3JhZnRpbmcgZnV6emluZyBjYXNlcyB0byBjb3ZlciBhbGwgdGhlc2UgbmV3IGxvZ2ljIGJyYW5jaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjI6NTcuODA5MTAyNzQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDE2MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTI4Mjc9c3RhdGljIGt2bV9wZm5fdCBrdm1fcmVzb2x2ZV9wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUwLSAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg1MTpzdGF0aWMgYm9vbCBodmFfdG9fcGZuX2Zhc3Qoc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg1Mi17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODItICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODgzOnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9zbG93KHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBmbilcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODQte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTI3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkyODpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTI5LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk3My1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NzQ6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4NC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODU6XFx0aWYgKGh2YV90b19wZm5fZmFzdChrZnAsIFxcdTAwMjZwZm4pKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ni1cXHRcXHRyZXR1cm4gcGZuO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4Ny1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODg6XFx0bnBhZ2VzID0gaHZhX3RvX3Bmbl9zbG93KGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg5LVxcdGlmIChucGFnZXMgPT0gMSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNC1cXHR9IGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XFxudmlydC9rdm0va3ZtX21haW4uYzozMDE1OlxcdFxcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcXHUwMDI2cGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTYtXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzAyOD1zdGF0aWMga3ZtX3Bmbl90IGt2bV9mb2xsb3dfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDQzLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA0NDpcXHRyZXR1cm4gaHZhX3RvX3BmbihrZnApO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA0NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIyOjU3Ljg3MDEyMjgzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NDM3ODU0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZzpcblxuKipUcmFjaW5nIERvd24gdGhlIGBrdm1fZm9sbG93X3BmbmAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIGBodmFfdG9fcGZuYCBpcyBiZWluZyBjYWxsZWQgYnkgYGt2bV9mb2xsb3dfcGZuYC4gVGhhdCdzIGEgZ29vZCBicmVhZGNydW1iLCBidXQgSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBoYXZlIGEgaHVuY2ggdGhpcyBpcyBnb2luZyB0byBiZSByZWxhdGVkIHRvIHNvbWUgcGFnZSBmYXVsdCBvciBtZW1vcnkgYWNjZXNzIGlzc3VlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aG8ncyAqY2FsbGluZyogYGt2bV9mb2xsb3dfcGZuYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGVudHJ5IHBvaW50cyB0byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBoaWdoZXItbGV2ZWwgbG9naWMgdGhhdCB1bHRpbWF0ZWx5IHJlbGllcyBvbiB0aGUgYGh2YV90b19wZm5gIGNvbnZlcnNpb24gYW5kIGhvcGVmdWxseSBsZWFkIG1lIHRvIHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtIEknbSBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdGhlIGNhbGwgZ3JhcGguIExldCdzIHNlZS4uLiBhIHF1aWNrIGBncmVwYCBvciBtYXliZSBhIGJhY2t0cmFjZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjA0LjgxMzkxMjYyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ3NzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZm9sbG93X3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNT1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eSk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yODI2LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjgyNzpzdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxudmlydC9rdm0va3ZtX21haW4uYy0yODI4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzICptYXAsIGJvb2wgd3JpdGFibGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkyOTpcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTMwLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk3My1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5NzQ6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTc1LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAyNy1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMjg6c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMjkte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zMDQ3PWt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTAte1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1MTpcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cXHRcXHQuc2xvdCA9IHNsb3QsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjQtXFxudmlydC9rdm0va3ZtX21haW4uYzozMDY1OlxcdHJldHVybiBrdm1fZm9sbG93X3BmbihcXHUwMDI2a2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjYtfVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zMDkzPXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDk1LVxcdHN0cnVjdCBwYWdlICpyZWZjb3VudGVkX3BhZ2UgPSBOVUxMO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA5NjpcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA5Ny1cXHRcXHQuc2xvdCA9IGdmbl90b19tZW1zbG90KGt2bSwgZ2ZuKSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwMi1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMDM6XFx0KHZvaWQpa3ZtX2ZvbGxvd19wZm4oXFx1MDAyNmtmcCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTA0LVxcdHJldHVybiByZWZjb3VudGVkX3BhZ2U7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMxMDg9aW50IF9fa3ZtX3ZjcHVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBzdHJ1Y3Qga3ZtX2hvc3RfbWFwICptYXAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMTAte1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzExMTpcXHRzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4ga2ZwID0ge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExMi1cXHRcXHQuc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbiksXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxMjQtXFxudmlydC9rdm0va3ZtX21haW4uYzozMTI1OlxcdG1hcC1cXHUwMDNlcGZuID0ga3ZtX2ZvbGxvd19wZm4oXFx1MDAyNmtmcCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTI2LVxcdGlmIChpc19lcnJvcl9ub3Nsb3RfcGZuKG1hcC1cXHUwMDNlcGZuKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MDQuODc2MzkzODQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI2MDQ2MTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhpcyBLVk0gTWVtb3J5IE1hcHBpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZGl2ZXMgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgS1ZNJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYGh2YV90b19wZm5gIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbC4gSSBrbm93IHRoYXQgYGh2YV90b19wZm5gIGlzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IHNldmVyYWwga2V5IEtWTSBmdW5jdGlvbnM6IGBrdm1fZm9sbG93X3BmbmAsIGBfX2t2bV9mYXVsdGluX3BmbmAsIGBfX2dmbl90b19wYWdlYCwgYW5kIGBfX2t2bV92Y3B1X21hcGAuIFRoZXNlIGFyZSBhbGwgZGVlcGx5IGludm9sdmVkIGluIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgbG9va3VwcyBhbmQgZmF1bHRzLlxuXG5UaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrIHdpdGhpbiBgaHZhX3RvX3BmbmAgdGhhdCBraWNrcyBpbiB3aGVuIGEgR1VQIChHZXQgVXNlciBQYWdlKSBvcGVyYXRpb24gZmFpbHMsIGJ1dCBhIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgaXMgc3RpbGwgcHJlc2VudC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIGB2bWFgIGFuZCBpdHMgZmxhZ3MuIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyBmb3IgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgKGBWTV9SRUFEYCwgYFZNX1dSSVRFYCkgb2YgdGhlIFZNQSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgaG93IEtWTSBiZWhhdmVzIHdoZW4gYSBwYWdlIGZhdWx0IG9jY3VycyBhbmQgYSBtYXBwaW5nIGlzIGVpdGhlciBtaXNzaW5nLCByZWFkLW9ubHksIG9yIG90aGVyd2lzZSBpbmFjY2Vzc2libGUuIFRoZXJlJ3MgYSBjaGVjayBmb3IgYFZNX1JFQURgIGFuZCBhbm90aGVyIGZvciBgVk1fV1JJVEVgIGlmIGBGT0xMX1dSSVRFYCBpcyByZXF1ZXN0ZWQuIElmIHRoZXJlIGlzIGEgd3JpdGUgcmVxdWVzdCB0byBhIHJlYWQtb25seSBtYXBwaW5nLCBLVk0gd2lsbCBub3cgZXhpdCB0byB1c2Vyc3BhY2UuIEFsc28sIGl04oCZcyBsb29raW5nIGF0IGBWTV9JT2AgYW5kIGBWTV9QRk5NQVBgIGZsYWdzIGFuZCByZXR1cm5pbmcgdGhlIHJlbGV2YW50IGZhdWx0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgaW4gaG93IEtWTSBoYW5kbGVzIHBhZ2UgZmF1bHRzIHJlbGF0ZWQgdG8gbWVtb3J5IHNsb3RzLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUsIGFjdHVhbGx5LCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aG9zZSBjb3JlIGZ1bmN0aW9ucy5cblxuSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgdGhhdCBgaHZhX3RvX3BmbmAgKmlzKiBpbmRlZWQgZXhwb3J0ZWQsIGFzIEkgYmVsaWV2ZSBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoxMS4xMzY4NTc0NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4Mjk5MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MTEuMTkwNjk2NTgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNTIzNjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgS1ZNIEV4cG9ydCBTdGF0dXMqKlxuXG5SaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBNeSBpbnRlcm5hbCBjaGVja2xpc3QgaGFzIGZsYWdnZWQgYGt2bV9mb2xsb3dfcGZuYCBmb3IgcmV2aWV3LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkLiBJcyBpdCBhY2Nlc3NpYmxlIGF0IGFsbD8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAuIElmIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGVuIGl0J3MgY2xlYXJseSBvZmYtbGltaXRzIGFuZCBJIG5lZWQgdG8gYWRqdXN0IG15IGFuYWx5c2lzIGFjY29yZGluZ2x5LiBObyBwb2ludCB3YXN0aW5nIHRpbWUgbG9va2luZyBhdCBhbiBpbmFjY2Vzc2libGUgc3ltYm9sLiBMZXQncyBzZWUgaWYgSSBjYW4gZmluZCB0aGF0IGluZm9ybWF0aW9uIGVhc2lseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE4OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjE0LjEyNTkzNTg0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1MzkwNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmt2bV9mb2xsb3dfcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjE0LjE4NDQ4MTkwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU2MDY1NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipDaGVja2luZyBmb3IgRXhwb3J0ZWQgU3ltYm9sOiBgX19rdm1fZmF1bHRpbl9wZm5gKipcblxuUmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHF1aWNrbHkuIEknbSB0aGlua2luZyBhYm91dCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgX19rdm1fZmF1bHRpbl9wZm5gLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCdzIGV4cG9ydGVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgaXRzIGFjY2Vzc2liaWxpdHkgYW5kIHBvdGVudGlhbCB1c2Ugd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBLbm93aW5nIHdoZXRoZXIgaXQncyBleHBvcnRlZCBoYXMgYmlnIGltcGxpY2F0aW9ucyBmb3IgaG93IGV4dGVybmFsIG1vZHVsZXMgb3Igc3Vic3lzdGVtcyBtaWdodCBpbnRlcmFjdCB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQgZGljdGF0ZXMgd2hldGhlciBpdCdzIGEgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZSBvciBzb21ldGhpbmcgaW50ZXJuYWwgYW5kIHBvdGVudGlhbGx5IHN1YmplY3QgdG8gY2hhbmdlLiBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoaXMgd2l0aCB0aGUgcmlnaHQgdG9vbHMuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIHN5bWJvbCBpcyBwYXJ0IG9mIHRoZSBrZXJuZWwncyBzeW1ib2wgdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoxNy40NDA1NTA1MjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjM4NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fa3ZtX2ZhdWx0aW5fcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0zMDQ3PWt2bV9wZm5fdCBfX2t2bV9mYXVsdGluX3Bmbihjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNjYtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA2NzpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX19rdm1fZmF1bHRpbl9wZm4pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA2OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MTcuNDkzMTkzOTMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODI0NTU4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBmb3IgRXhwb3J0ZWQgRnVuY3Rpb25hbGl0eSoqXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBmdW5jdGlvbiBgX19nZm5fdG9fcGFnZWAgaXMgYWN0dWFsbHkgYXZhaWxhYmxlIGZvciB1c2UuIEkgY2FuJ3QgYnVpbGQgb3IgdXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBpZiBpdCdzIG5vdCBleHBvcnRlZC4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAgaW4gbXkgcHJvY2VzcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwtbGV2ZWwgZnVuY3Rpb25zIG9yIHBvdGVudGlhbGx5IGludGVybmFsIEFQSXMuIEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIGl0cyB2aXNpYmlsaXR5IHRvIGNvbmZpcm0gYWNjZXNzLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBzeW1ib2wgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYXMgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZSwgb3RoZXJ3aXNlLCBpdCBtYXkgb25seSBiZSB2aXNpYmxlIHdpdGhpbiBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgb3IgbW9kdWxlLCB3aGljaCB3b3VsZCBsaW1pdCBteSBhYmlsaXR5IHRvIHVzZSBpdCBpbiBvdGhlciBjb250ZXh0cy4gVGhpcyB2aXNpYmlsaXR5IGlzIGtleSBmb3IgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoyMC4yNzU2NTIyNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDg2OTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX2dmbl90b19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0zMDkzPXN0cnVjdCBwYWdlICpfX2dmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBib29sIHdyaXRlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMTA1LX1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMDY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fZ2ZuX3RvX3BhZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MjAuMzgwNTI1OTc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NjYxNjc2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkNoZWNraW5nIGZvciBFeHBvcnRlZCBTeW1ib2w6IGBfX2t2bV92Y3B1X21hcGAqKlxuXG5SaWdodCwgc28gSSdtIGp1c3QgcXVpY2tseSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YgYF9fa3ZtX3ZjcHVfbWFwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBwYXJ0aWN1bGFyIHN5bWJvbCBpcyBleHBvcnRlZC4gSXQncyBjcnVjaWFsIGZvciB3aGF0ZXZlciBJJ20gY3VycmVudGx5IHdvcmtpbmcgb24sIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIGFjdHVhbGx5IHVzZSBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBmaXJzdCBzdGVwIOKAkyBtYWtlIHN1cmUgdGhlIHRhcmdldCBpcyBldmVuIGFjY2Vzc2libGUhIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSBpZiB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgc2ltcGx5IG5vdCBleHBvc2VkLiBTbywgeWVhaCwgdGhhdCdzIHRoZSBpbW1lZGlhdGUgdGFzazogdmVyaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDg5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MjMuMTQ2Njk4MzUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc5MTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX2t2bV92Y3B1X21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MzEwOD1pbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEzOS19XFxudmlydC9rdm0va3ZtX21haW4uYzozMTQwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX2t2bV92Y3B1X21hcCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoyMy4yMDE0OTg5MDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1ODg5NDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIG15IGFyZWEgb2YgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgS1ZNIE1lbW9yeSBUcmFuc2xhdGlvbiBQYXRoKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBgaHZhX3RvX3BmbmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGludGVybmFsIHRvIHRoZSBLVk0gbW9kdWxlLCB3aGljaCBpcyBjb21tb24gZm9yIGNyaXRpY2FsIG1lbW9yeSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgbGlrZSB0aGlzLiBCdXQgd2FpdCwgYSBzZWNvbmQgbG9va+KApiBubywgaXQncyAqbm90KiBzdGF0aWMuIFRoYXQgY2hhbmdlcyB0aGluZ3M7IGl0IGltcGxpZXMgdGhpcyBmdW5jdGlvbiBtaWdodCBoYXZlIGJyb2FkZXIgdXNhZ2UsIG9yIGF0IGxlYXN0IGEgZGlmZmVyZW50IHNjb3BlIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGViYXNlIGFyZSBjYWxsaW5nIG9yIGFyZSBhYmxlIHRvIGNhbGwgYGh2YV90b19wZm5gIG5vdyB0aGF0IEkga25vdyBpdCBpc24ndCBzdGF0aWMuIEl0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyB3aWRlbHkgdGhlIHBhdGNoIG1pZ2h0IGltcGFjdCB0aGUgS1ZNIGVudmlyb25tZW50LCBhbmQgYW55IHBvdGVudGlhbCBzaWRlLWVmZmVjdHMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDMwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MjYuNjYwMzk2MDQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQzNDMwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Bmbl90IGh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk3NDprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzoyNi43NjQ3NDY3NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NDYzNjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIER5bmFtaWMgTmF0dXJlKipcblxuUmlnaHQsIHRoaXMgc2l0dWF0aW9uIGlzbid0IGZpeGVkLCBpdCdzIGZsdWlkLiBJdCdzIG5vdCBhIGNsb3NlZCBib29rOyBpdCdzIGdvdCBsYXllcnMuIEZpcnN0IHRoaW5nJ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGNyaXRpY2FsIGNvbXBvbmVudCwgd2hhdGV2ZXIgXCJpdFwiIHJlZmVycyB0byBpbiB0aGlzIGNvbnRleHQsIGlzIHByb3Blcmx5IGV4cG9ydGVkIG9yIGFjY2Vzc2libGUuIEkgaGF2ZSB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjMwLjI1OTM4NzMyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2MDU5NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzozMC4zNjIwMDEzNzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NTkyMDY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBLVk0gUEZOIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIHRoaXMgdGhpbmcgaXNuJ3QgKmV4cG9ydGVkKiBsaWtlIGEgZ2xvYmFsIHZhcmlhYmxlLCBidXQgaXQncyBub3QgYSB0cnVseSBzdGF0aWMgbG9jYWwgZWl0aGVyLiBUaGlzIG1lYW5zIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBkeW5hbWljIGJlaGF2aW9yIHRvIGl0LCBhbmQgdGhhdCBzdWdnZXN0cyBhIHNwZWNpZmljIGFyZWEgSSBzaG91bGQgYmUgbG9va2luZyBhdC4gXCJodmFfdG9fcGZuXCIganVtcHMgb3V0IGltbWVkaWF0ZWx5IGFzIGEgZ29vZCBwb3RlbnRpYWwgZm9jdXMgcG9pbnQuIEl0J3MgdGhlIGtpbmQgb2YgZnVuY3Rpb24gdGhhdCB3b3VsZCBiZSBpbnZvbHZlZCBpbiwgeW91IGtub3csIHZpcnR1YWwgYWRkcmVzcyB0byBwaHlzaWNhbCBmcmFtZSBudW1iZXIgdHJhbnNsYXRpb24sIHdoaWNoIGlzIHByb2JhYmx5IGNlbnRyYWwgdG8gd2hhdCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIFwiX19fX2t2bV9mYXVsdGluX3BmblwiIHNlZW1zIHJlbGV2YW50IHRvbywgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uOyBpdCdzIGdvdCBcImZhdWx0aW5cIiBpbiBpdHMgbmFtZSBhbmQgc291bmRzIGxpa2UgaXQncyBtYW5hZ2luZyB0aGUgUEZOJ3MgZmF1bHRpbmcgYmVoYXZpb3Igd2l0aGluIEtWTS5cblxuTm93LCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgb3IgdGFraW5nIHRoZSB3cm9uZyBwYXRoLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbi4gR290dGEgbWFrZSBzdXJlIHRoZSBLVk0gc3Vic3lzdGVtIGlzIGFjdHVhbGx5IGVuYWJsZWQgYW5kIHRoYXQgSSBkb24ndCBuZWVkIHRvIHR3ZWFrIGFueXRoaW5nIGluIHRoZSBjb25maWd1cmF0aW9uLiBRdWljayBjaGVjayBpbiBLY29uZmlnIHNob3VsZCBiZSBlbm91Z2ggdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6MzQuMTM3OTI2MzA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjEzMzczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4My1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTctXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjk6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjM0LjE5MDA2MzU2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMyNzkxMjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdmlydC9rdm0va3ZtX21haW4uY2AsIHdoaWNoIHRlbGxzIG1lIGl0J3MgcmVsYXRlZCB0byB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIG1vZHVsZS4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlIGZpbGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0tWTWAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBHb3R0YSBlbnN1cmUgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQgYmVmb3JlIEkgcHJvY2VlZC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIGBodmFfdG9fcGZuYC4gSXMgdGhhdCBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciB0aGlzPyBJdCAqbG9va3MqIGludGVybmFsLCBub3Qgc3RhdGljIGJ1dCBjYWxsZWQgYnkgYSBzdGF0aWMgZnVuY3Rpb24sIGBrdm1fZm9sbG93X3BmbmDigJR0aGF0J3MgYSBzbGlnaHQgd3JpbmtsZS4gSSBleHBlY3RlZCB0aGF0IGludGVybmFsIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBzdGF0aWMuIFRoYXQncyBhIHBvaW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIGFzIHRoZSBpbXBsaWNhdGlvbiBjb3VsZCBiZSBpbXBvcnRhbnQuIFdhaXQgYSBzZWNvbmQsIGBodmFfdG9fcGZuYCAqaXNuJ3QqIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoYXQgbm93LiBMZXQgbWUganVzdCBxdWlja2x5IHNlZSBpZiBpdCdzIGRlY2xhcmVkIGluIGEgaGVhZGVyIGZpbGUgYW55d2hlcmUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHdoZXJlIGl0IGlzIGF2YWlsYWJsZSBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbmFsaXR5IG1pZ2h0IGJlIHJlbHlpbmcgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA0OjIzOjM4LjEyMjg1NzczNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NjcwODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzozOC4xODQ0MzA2NDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkzNDAxODE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktWTSBNb2R1bGUgTG9jYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGFjdHVhbGx5IGltcGxlbWVudGVkPyBUaGUgZmlyc3QgcGxhY2UgSSdtIGdvaW5nIHRvIGxvb2ssIGFuZCBsaWtlbHkgdGhlICpvbmx5KiBwbGFjZSBJJ2xsICpuZWVkKiB0byBsb29rLCBpcyBgdmlydC9rdm0va3ZtX21haW4uY2AuIEdpdmVuIHRoZSBzY29wZSBvZiB0aGlzIHByb2plY3QgYW5kIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhhdCBpZiBpdCdzIEtWTS1yZWxhdGVkIGFuZCBjb3JlLCBpdCdzIGdvaW5nIHRvIHJlc2lkZSB0aGVyZS4gTm8gbmVlZCB0byBjaGFzZSBnaG9zdHMgZWxzZXdoZXJlLiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBpbnZlc3RpZ2F0aW9uIG9mIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5NTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzo0MS4xMTg0NTEyMzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Mzc5ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh2YV90b19wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MjctXFxudmlydC9rdm0va3ZtX21haW4uYzoyOTI4OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MjktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTczLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk3NDprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NzUte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg0LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4NTpcXHRpZiAoaHZhX3RvX3Bmbl9mYXN0KGtmcCwgXFx1MDAyNnBmbikpXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LVxcdFxcdHJldHVybiBwZm47XFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk4ODpcXHRucGFnZXMgPSBodmFfdG9fcGZuX3Nsb3coa2ZwLCBcXHUwMDI2cGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5ODktXFx0aWYgKG5wYWdlcyA9PSAxKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDE0LVxcdH0gZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMTU6XFx0XFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFxcdTAwMjZwZm4pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNi1cXHRcXHRpZiAociA9PSAtRUFHQUlOKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zMDI4PXN0YXRpYyBrdm1fcGZuX3Qga3ZtX2ZvbGxvd19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNDMtXFxudmlydC9rdm0va3ZtX21haW4uYzozMDQ0OlxcdHJldHVybiBodmFfdG9fcGZuKGtmcCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDQ1LX1cXG4tLVxcbnZpcnQva3ZtL2t2bV9tbS5oPTI3PXN0cnVjdCBrdm1fZm9sbG93X3BmbiB7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaC01OC1cXG52aXJ0L2t2bS9rdm1fbW0uaDo1OTprdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCk7XFxudmlydC9rdm0va3ZtX21tLmgtNjAtXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTEyNz1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTQtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoxNTU6c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxudmlydC9rdm0vcGZuY2FjaGUuYy0xNTYte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yMDgtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoyMDk6XFx0XFx0bmV3X3BmbiA9IGh2YV90b19wZm4oXFx1MDAyNmtmcCk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy0yMTAtXFx0XFx0aWYgKGlzX2Vycm9yX25vc2xvdF9wZm4obmV3X3BmbikpXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTI1Nj1zdGF0aWMgaW50IF9fa3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMjEtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozMjI6XFx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMjMtXFx0Z3BjLVxcdTAwM2V1aHZhICs9IHBhZ2Vfb2Zmc2V0O1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMjktXFx0aWYgKCFncGMtXFx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjMzMDpcXHRcXHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMzEtXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDQ6MjM6NDEuMTg0ODM2MTY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2OTE0Mjk3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYGh2YV90b19wZm5gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgZGVjbGFyZWQgaW4gYGt2bV9tbS5oYCBhbmQgdXNlZCBpbiBgcGZuY2FjaGUuY2AuIFRoYXQgdGVsbHMgbWUgaXQncyBhIG5vbi1zdGF0aWMgQVBJIGZ1bmN0aW9uIHdpdGhpbiB0aGUgS1ZNIHN1YnN5c3RlbS4gR29vZCwgdGhhdCdzIGEgc29saWQgZm9jdXMgc3ltYm9sLiBJJ2xsIGFkZCBgX19rdm1fZmF1bHRpbl9wZm5gIGFuZCBgX19nZm5fdG9fcGFnZWAgYXMgd2VsbCBzaW5jZSB0aG9zZSBmdW5jdGlvbnMgYXJlIGFsc28gZXhwb3J0ZWQgYW5kIGNhbGwgYGh2YV90b19wZm5gIHZpYSBga3ZtX2ZvbGxvd19wZm5gLiBNYWtlcyBzZW5zZSB0byBjb25zaWRlciB0aG9zZSBhcyByZWxhdGVkIHN5bWJvbHMgZm9yIGZ1enppbmcuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaXMgYSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gSXQncyBoYW5kbGluZyBob3N0IHZpcnR1YWwgYWRkcmVzcyB0byBwYWdlIGZyYW1lIG51bWJlciB0cmFuc2xhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBmYWlsdXJlcyBmcm9tIGBnZXRfdXNlcl9wYWdlcygpYCBhbmQgaW5hY2Nlc3NpYmxlIG1hcHBpbmdzLCBsaWtlIHJlYWQtb25seSBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cy4gVGhhdCdzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljLCB3aGljaCBtZWFucyBmdXp6aW5nIGl0IGlzIGEgd29ydGh3aGlsZSBpbnZlc3RtZW50LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgcGF0Y2ggdG91Y2hlcyBjb2RlIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgd2hpY2gsIGZyb20gbWVtb3J5LCBpcyBjb21tb24gS1ZNIGNvZGUsIG5vdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBLVk1gIGlzIGVuYWJsZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuLi4geWVwLCBpdCdzIGEgdHJpc3RhdGUuIFRoYXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkgZG9uJ3Qgc2VlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgaGVyZSwgc28gYEtWTWAgYWxvbmUgaXMgZW5vdWdoIHRvIHJlcHJvZHVjZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTEwLCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNDoyMzo0Ny44NzYyNjgyMDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3MDQwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh2YV90b19wZm5cIixcbiAgICBcIl9fa3ZtX2ZhdWx0aW5fcGZuXCIsXG4gICAgXCJfX2dmbl90b19wYWdlXCIsXG4gICAgXCJfX2t2bV92Y3B1X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBgaHZhX3RvX3BmbigpYCwgd2hpY2ggaGFuZGxlcyB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBhZ2UgZnJhbWUgbnVtYmVycy4gSXQgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBmYWlsZWQgYGdldF91c2VyX3BhZ2VzKClgIGNhbGxzIGFuZCBpbmFjY2Vzc2libGUgbWFwcGluZ3MgKGUuZy4sIFBST1RfUkVBRCBtYXBwaW5ncyBpbiB3cml0YWJsZSBtZW1zbG90cykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHZhX3RvX3BmblwiLFxuICAgIFwiX19rdm1fZmF1bHRpbl9wZm5cIixcbiAgICBcIl9fZ2ZuX3RvX3BhZ2VcIixcbiAgICBcIl9fa3ZtX3ZjcHVfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBodmFfdG9fcGZuKClgLCB3aGljaCBoYW5kbGVzIHRyYW5zbGF0aW5nIGhvc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGFnZSBmcmFtZSBudW1iZXJzLiBJdCBzcGVjaWZpY2FsbHkgY2hhbmdlcyB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGZhaWxlZCBgZ2V0X3VzZXJfcGFnZXMoKWAgY2FsbHMgYW5kIGluYWNjZXNzaWJsZSBtYXBwaW5ncyAoZS5nLiwgUFJPVF9SRUFEIG1hcHBpbmdzIGluIHdyaXRhYmxlIG1lbXNsb3RzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowwv82x[1] Phase: Succeeded StartedAt: 2026-08-02 04:23:59 +0000 UTC FinishedAt: 2026-08-02 04:23:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 04:23:59 +0000 UTC FinishedAt: 2026-08-02 04:23:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2] Phase: Succeeded StartedAt: 2026-08-02 04:23:59 +0000 UTC FinishedAt: 2026-08-02 08:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 04:23:59 +0000 UTC FinishedAt: 2026-08-02 08:09:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:23:59 +0000 UTC FinishedAt: 2026-08-02 04:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:23:59 +0000 UTC FinishedAt: 2026-08-02 04:24:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwv82x/series-workflowwv82x-convert-artifact-286330417/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:24:19 +0000 UTC FinishedAt: 2026-08-02 04:46:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:24:19 +0000 UTC FinishedAt: 2026-08-02 04:46:45 +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:*d52bb6f9-7494-4e14-a4d8-7b9b55f775b5,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-workflowwv82x/series-workflowwv82x-convert-artifact-286330417/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": "7bf8befc-a154-4cd3-8284-4077c00c63d3", "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-workflowwv82x/series-workflowwv82x-build-action-554019935/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:24:19 +0000 UTC FinishedAt: 2026-08-02 04:46:35 +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:*d52bb6f9-7494-4e14-a4d8-7b9b55f775b5,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-workflowwv82x/series-workflowwv82x-convert-artifact-286330417/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": "7bf8befc-a154-4cd3-8284-4077c00c63d3", "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-workflowwv82x/series-workflowwv82x-build-action-554019935/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:46:45 +0000 UTC FinishedAt: 2026-08-02 04:46:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:46:45 +0000 UTC FinishedAt: 2026-08-02 04:46:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:46:45 +0000 UTC FinishedAt: 2026-08-02 04:46:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:46:45 +0000 UTC FinishedAt: 2026-08-02 04:46:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-workflowwv82x/series-workflowwv82x-convert-artifact-685016452/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:46:55 +0000 UTC FinishedAt: 2026-08-02 04:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:46:55 +0000 UTC FinishedAt: 2026-08-02 04:49:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7bf8befc-a154-4cd3-8284-4077c00c63d3,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-workflowwv82x/series-workflowwv82x-build-action-554019935/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-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:49:17 +0000 UTC FinishedAt: 2026-08-02 04:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:49:17 +0000 UTC FinishedAt: 2026-08-02 04:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:49:17 +0000 UTC FinishedAt: 2026-08-02 05:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:49:17 +0000 UTC FinishedAt: 2026-08-02 05:05:15 +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:*d52bb6f9-7494-4e14-a4d8-7b9b55f775b5,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-workflowwv82x/series-workflowwv82x-convert-artifact-685016452/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": "0a2bb745-9f15-4db0-a785-b36a3c3b8898", "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-workflowwv82x/series-workflowwv82x-build-action-170557328/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 04:49:17 +0000 UTC FinishedAt: 2026-08-02 05:05:05 +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:*d52bb6f9-7494-4e14-a4d8-7b9b55f775b5,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-workflowwv82x/series-workflowwv82x-convert-artifact-685016452/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": "0a2bb745-9f15-4db0-a785-b36a3c3b8898", "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-workflowwv82x/series-workflowwv82x-build-action-170557328/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:05:15 +0000 UTC FinishedAt: 2026-08-02 05:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:05:15 +0000 UTC FinishedAt: 2026-08-02 05:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:05:15 +0000 UTC FinishedAt: 2026-08-02 05:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:05:15 +0000 UTC FinishedAt: 2026-08-02 05:07:10 +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:*0a2bb745-9f15-4db0-a785-b36a3c3b8898,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-workflowwv82x/series-workflowwv82x-build-action-170557328/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-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:07:20 +0000 UTC FinishedAt: 2026-08-02 08:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:07:20 +0000 UTC FinishedAt: 2026-08-02 08:09:50 +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":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"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:*7bf8befc-a154-4cd3-8284-4077c00c63d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0a2bb745-9f15-4db0-a785-b36a3c3b8898,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-workflowwv82x/series-workflowwv82x-build-action-554019935/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-workflowwv82x/series-workflowwv82x-build-action-170557328/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:07:20 +0000 UTC FinishedAt: 2026-08-02 05:07:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:07:20 +0000 UTC FinishedAt: 2026-08-02 05:07:25 +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":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"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-workflowwv82x/series-workflowwv82x-convert-artifact-299793037/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:07:20 +0000 UTC FinishedAt: 2026-08-02 05:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:07:20 +0000 UTC FinishedAt: 2026-08-02 05:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:07:20 +0000 UTC FinishedAt: 2026-08-02 05:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:07:30 +0000 UTC FinishedAt: 2026-08-02 08:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv82x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn","__kvm_faultin_pfn","__gfn_to_page","__kvm_vcpu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"9ba89453-cd4e-4667-8ef7-71a9571a9606","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-02 05:07:30 +0000 UTC FinishedAt: 2026-08-02 08:09:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7bf8befc-a154-4cd3-8284-4077c00c63d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0a2bb745-9f15-4db0-a785-b36a3c3b8898,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-workflowwv82x/series-workflowwv82x-build-action-554019935/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-workflowwv82x/series-workflowwv82x-build-action-170557328/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-workflowwv82x/series-workflowwv82x-convert-artifact-299793037/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,}