Name: series-workflowjzqw4 Phase: Succeeded StartedAt: 2026-08-11 15:48:48 +0000 UTC FinishedAt: 2026-08-11 16:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[0] Phase: Succeeded StartedAt: 2026-08-11 15:48:48 +0000 UTC FinishedAt: 2026-08-11 15:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 15:48:48 +0000 UTC FinishedAt: 2026-08-11 15:53:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "26d1779b-1a36-4ef9-83bb-bc1a1523c35c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_arch_vcpu_ioctl", "kvm_arch_vcpu_ioctl_run", "kvm_s390_handle_vsie" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX3ZzaWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMsIG5vbmUgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS01TQU46XG4xLiBga3ZtX3MzOTBfa2V5b3BgOiBGaXhlcyBhIGxvY2tpbmcgaXNzdWUgYnkgbW92aW5nIHRoZSByZWFkIG9mIGBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2VgIGluc2lkZSB0aGUgYG1tdV9sb2NrYCBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugb3IgaW52YWxpZCBhY2Nlc3MsIHdoaWNoIGlzIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUC5cbjIuIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IEZpeGVzIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKClgIGNhbGwgb24gYW4gZXJyb3IgcGF0aC4gVGhpcyBpcyBhIHN0YXRlIG1hbmFnZW1lbnQgYnVnLlxuMy4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBGaXhlcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgYGNvcHlfdG9fdXNlcmAgc28gdGhhdCBgcmNgIGFuZCBgcnJjYCBhcmUgd3JpdHRlbiB0byB0aGUgY29ycmVjdCBvZmZzZXRzIGluIHRoZSB1c2VyIHNwYWNlIHN0cnVjdHVyZS4gVGhlIGNvcGllZCBkYXRhIGl0c2VsZiAoYGNtZC5yY2AgYW5kIGBjbWQucnJjYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYSBwcmVjZWRpbmcgYGNvcHlfZnJvbV91c2VyYCwgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay5cbjQuIGBzZXR1cF9hcGNiMTBgOiBBZGRzIGEgYG1lbXNldGAgdG8gZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYGFwY2IxYCBzdHJ1Y3R1cmUgaW4gdGhlIHNoYWRvdyBDUllDQi4gV2l0aG91dCB0aGlzLCBmaWVsZHMgbGlrZSBgYXBtWzEuLjNdYCBhcmUgbGVmdCB1bmluaXRpYWxpemVkIGFuZCBjb250YWluIHN0YWxlIGRhdGEgZnJvbSBwcmV2aW91cyB1c2VzIG9mIHRoZSBjYWNoZWQgYHZzaWVfcGFnZWAuIFRoaXMgc3RhbGUgZGF0YSBpcyB0aGVuIHJlYWQgYnkgdGhlIGhhcmR3YXJlIChTSUUpIHdoZW4gZXhlY3V0aW5nIGEgbmVzdGVkIGd1ZXN0LCBwb3RlbnRpYWxseSBncmFudGluZyB1bmF1dGhvcml6ZWQgY3J5cHRvIGFjY2Vzcy4gSG93ZXZlciwgYmVjYXVzZSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgZXhjbHVzaXZlbHkgYnkgdGhlIGhhcmR3YXJlIGFuZCBub3QgYnkgdGhlIENQVSwgS01TQU4gY2Fubm90IGRldGVjdCBpdCAoS01TQU4gb25seSBpbnN0cnVtZW50cyBDUFUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGVyZSBhcmUgbm8gZXhwbGljaXQgYGttc2FuX2NoZWNrX21lbW9yeSgpYCBhbm5vdGF0aW9ucyBmb3IgdGhlIFNJRSBibG9jaykuXG5cblRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTAzN2EzYTUyZjc0OWE1ZDRkZThiOTkzZTJiZGMwYmExNThjZjU1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE1OjUwOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggNTE4YTY5YzU1ZTg1Yy4uN2RmZDBhZDM2NzM2OCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNTYyLDExICYjNDM7NTYyLDEyIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX3MzOTBfZXhpdCh2b2lkKVxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXG4ge1xuLVx0dW5pb24gYXNjZSBhc2NlID0ga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlO1xuIFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihhZGRyKTtcbiYjNDM7XHR1bmlvbiBhc2NlIGFzY2U7XG4gXHRpbnQgcjtcbiBcbiBcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRhc2NlID0ga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlO1xuIFxuIFx0c3dpdGNoIChvcCkge1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxuQEAgLTUwNjksNyAmIzQzOzUwNzAsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7Y2FuJiMzOTt0IHJ1biBzdG9wcGVkIHZjcHUgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHQgICB2Y3B1LVx1MDAzZXZjcHVfaWQpO1xuIFx0XHRyYyA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBvdXRfc2lnc2V0O1xuIFx0fVxuIFxuIFx0a2VybmVsX2ZwdV9iZWdpbihcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcbkBAIC01MDk5LDkgJiM0Mzs1MTAwLDExIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdG9yZV9yZWdzKHZjcHUpO1xuIFx0a2VybmVsX2ZwdV9lbmQoXHUwMDI2ZnB1LCBLRVJORUxfRlBDIHwgS0VSTkVMX1ZYUik7XG4gXG4mIzQzO1x0dmNwdS1cdTAwM2VzdGF0LmV4aXRfdXNlcnNwYWNlJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO291dF9zaWdzZXQ6XG4gXHRrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSk7XG4gXG4tXHR2Y3B1LVx1MDAzZXN0YXQuZXhpdF91c2Vyc3BhY2UmIzQzOyYjNDM7O1xuIG91dDpcbiBcdHZjcHVfcHV0KHZjcHUpO1xuIFx0cmV0dXJuIHJjO1xuQEAgLTU3MzIsNyAmIzQzOzU3MzUsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFx1MDAyNmNtZCk7XG4gXG4gXHRcdC8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqL1xuLVx0XHRpZiAoY29weV90b191c2VyKChfX3U4IF9fdXNlciAqKWFyZ3AsIFx1MDAyNmNtZC5yYyxcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCAmIzQzOyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3B2X2NtZCwgcmMpLCBcdTAwMjZjbWQucmMsXG4gXHRcdFx0XHQgc2l6ZW9mKGNtZC5yYykgJiM0Mzsgc2l6ZW9mKGNtZC5ycmMpKSlcbiBcdFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuaW5kZXggZWVhMjQ1NjJlN2RiMi4uMGE3ZDhkZmFiNmI3OSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgc3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcbiBcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiYjNDM7XHRtZW1zZXQoYXBjYl9zLCAwLCBzaXplb2YoKmFwY2JfcykpO1xuIFx0YXBjYl9zLVx1MDAzZWFwbVswXSA9IGFwY2JfaC1cdTAwM2VhcG1bMF0gXHUwMDI2IHRtcC5hcG1bMF07XG4gXHRhcGNiX3MtXHUwMDNlYXFtWzBdID0gYXBjYl9oLVx1MDAzZWFxbVswXSBcdTAwMjYgdG1wLmFxbVswXSBcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XG4gXHRhcGNiX3MtXHUwMDNlYWRtWzBdID0gYXBjYl9oLVx1MDAzZWFkbVswXSBcdTAwMjYgdG1wLmFkbVswXSBcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX3ZzaWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTAzN2EzYTUyZjc0OWE1ZDRkZThiOTkzZTJiZGMwYmExNThjZjU1NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE1OjUwOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDUxOGE2OWM1NWU4NWMuLjdkZmQwYWQzNjczNjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTU2MiwxMSAmIzQzOzU2MiwxMiBAQCBzdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZCkKIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLAogCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSkKIHsKLQl1bmlvbiBhc2NlIGFzY2UgPSBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZTsKIAlnZm5fdCBnZm4gPSBncGFfdG9fZ2ZuKGFkZHIpOwomIzQzOwl1bmlvbiBhc2NlIGFzY2U7CiAJaW50IHI7CiAKIAlndWFyZChyZWFkX2xvY2spKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CWFzY2UgPSBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZTsKIAogCXN3aXRjaCAob3ApIHsKIAljYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6CkBAIC01MDY5LDcgJiM0Mzs1MDcwLDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcHJfZXJyX3JhdGVsaW1pdGVkKCYjMzQ7Y2FuJiMzOTt0IHJ1biBzdG9wcGVkIHZjcHUgJWRcbiYjMzQ7LAogCQkJCSAgIHZjcHUtJmd0O3ZjcHVfaWQpOwogCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfc2lnc2V0OwogCX0KIAogCWtlcm5lbF9mcHVfYmVnaW4oJmFtcDtmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTsKQEAgLTUwOTksOSAmIzQzOzUxMDAsMTEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdG9yZV9yZWdzKHZjcHUpOwogCWtlcm5lbF9mcHVfZW5kKCZhbXA7ZnB1LCBLRVJORUxfRlBDIHwgS0VSTkVMX1ZYUik7CiAKJiM0MzsJdmNwdS0mZ3Q7c3RhdC5leGl0X3VzZXJzcGFjZSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7b3V0X3NpZ3NldDoKIAlrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSk7CiAKLQl2Y3B1LSZndDtzdGF0LmV4aXRfdXNlcnNwYWNlJiM0MzsmIzQzOzsKIG91dDoKIAl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gcmM7CkBAIC01NzMyLDcgJiM0Mzs1NzM1LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQlyID0ga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcCh2Y3B1LCAmYW1wO2NtZCk7CiAKIAkJLyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovCi0JCWlmIChjb3B5X3RvX3VzZXIoKF9fdTggX191c2VyICopYXJncCwgJmFtcDtjbWQucmMsCiYjNDM7CQlpZiAoY29weV90b191c2VyKGFyZ3AgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgJmFtcDtjbWQucmMsCiAJCQkJIHNpemVvZihjbWQucmMpICYjNDM7IHNpemVvZihjbWQucnJjKSkpCiAJCQlyID0gLUVGQVVMVDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jCmluZGV4IGVlYTI0NTYyZTdkYjIuLjBhN2Q4ZGZhYjZiNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jCkBAIC0xNzMsNiAmIzQzOzE3Myw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAomIzQzOwltZW1zZXQoYXBjYl9zLCAwLCBzaXplb2YoKmFwY2JfcykpOwogCWFwY2Jfcy0mZ3Q7YXBtWzBdID0gYXBjYl9oLSZndDthcG1bMF0gJmFtcDsgdG1wLmFwbVswXTsKIAlhcGNiX3MtJmd0O2FxbVswXSA9IGFwY2JfaC0mZ3Q7YXFtWzBdICZhbXA7IHRtcC5hcW1bMF0gJmFtcDsgMHhmZmZmMDAwMDAwMDAwMDAwVUw7CiAJYXBjYl9zLSZndDthZG1bMF0gPSBhcGNiX2gtJmd0O2FkbVswXSAmYW1wOyB0bXAuYWRtWzBdICZhbXA7IDB4ZmZmZjAwMDAwMDAwMDAwMFVMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBzMzkwIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBzb21lIGNvZGUgaW4gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgYW5kIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AuICBUaGlzIGlzIGRlZmluaXRlbHkgczM5MCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIHRoYXQmIzM5O3MgSUJNIFogaGFyZHdhcmUuICBUaGUgY2hhbmdlcyB0aGVtc2VsdmVzIGxvb2sgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogcmVwb3NpdGlvbmluZyBhIGxvY2sgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBjb3VwbGUgb2YgYGdvdG9gIGZpeGVzIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGEgcG90ZW50aWFsIG9mZnNldCBjb3JyZWN0aW9uIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGEgYG1lbXNldGAgaW4gYHNldHVwX2FwY2IxMGAuIFNlZW1zIGZ1bmN0aW9uYWwsIGxpa2VseSBmb3Igc3RhYmlsaXR5IG9yIGNvcnJlY3RuZXNzLgoKVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGZ1enppbmc/ICBOb3JtYWxseSwgczM5MCBpc24mIzM5O3QgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBnZW5lcmFsLXB1cnBvc2UgeDg2XzY0IFFFTVUgZnV6emluZyBzZXR1cHMuIEl0JiMzOTtzIHVzdWFsbHkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIGRlZGljYXRlZCBlbnZpcm9ubWVudCBpZiB5b3UgKmFyZSogZnV6emluZyBpdC4gSG93ZXZlciwgSSBrbm93IHN5emthbGxlciAqZG9lcyogc3VwcG9ydCBzMzkweCwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4KCkhvbGQgb24sIHRoZSBwcm9tcHQgbWVudGlvbnMgc3BlY2lmaWNhbGx5IGF2b2lkaW5nIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEJ1dCB3YWl0LCBzMzkweCAqaXMqIGFuIGFyY2hpdGVjdHVyZSwgYW5kIHNpbmNlIHN5emthbGxlciAqc3VwcG9ydHMqIHMzOTB4LCBpZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBzMzkweCBRRU1VLCB0aGUgZnV6emluZyBpcyBwb3NzaWJsZS4gU28sIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkb2VzIHN5emthbGxlciBmdXp6IHMzOTB4IEtWTT8gIFllcywgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHMzOTB4IHN1cHBvcnQuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBLVk0sIGl0JiMzOTtzIHZlcnkgcHJvYmFibGUuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIEtWTSBpcyBlbmFibGVkIGZvciBzMzkwLiAgSSBrbm93IGBDT05GSUdfS1ZNYCBpcyB0aGUgZ2VuZXJhbCBLVk0gY29uZmlndXJhdGlvbiBvcHRpb24uICBJJiMzOTtsbCBsb29rIGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuIFRoaXMgc2hvdWxkIGdpdmUgYSBjbGVhciBhbnN3ZXIgb24gd2hldGhlciBLVk0gaXMgZXZlbiAqZW5hYmxlZCogb24gczM5MC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBLVk3igKYgdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBwb2ludCwgSSBrbm93IHRoYXQuIEJ1dCBob2xkIG9uLCB0aGUgY29uY2VwdCBvZiAqdmlydHVhbGl6YXRpb24qIGl0c2VsZuKApiBpc24mIzM5O3QgdGhlcmUgc29tZXRoaW5nIGVsc2UgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IEl0IGZlZWxzIGxpa2UgdGhlcmUmIzM5O3MgYSBicm9hZGVyIGNhdGVnb3J5IHRoYXQgdGllcyBpbnRvIHRoaXMsIG9yIG1heWJlIHRoZXJlJiMzOTtzIGEgZmVhdHVyZSBmbGFnIHRoYXQgbWlnaHQgYmUgbmFtZWQgYFZJUlRVQUxJWkFUSU9OYD8gVGltZSB0byBkcmlsbCBkb3duLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgSSBzZWVtIHRvIHJlbWVtYmVyIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGJlaW5nIHRoZSBsaWtlbHkgc3BvdCB0byBmaW5kIGEgZGVwZW5kZW5jeSBvciBjb25maWcgb3B0aW9uIHRoYXQgdXNlcyBgVklSVFVBTElaQVRJT05gLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgZmlsZSBzaGVkcyBzb21lIGxpZ2h0IG9uIHRoZSByZWxhdGlvbnNoaXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVklSVFVBTElaQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5NgoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgS1ZNYCB3aWxsIGJlIHN1ZmZpY2llbnQgZm9yIG15IGN1cnJlbnQgbmVlZHMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXMgY2hhbmdlZCwgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIGltcGFjdCB0aGUgc3lzdGVtLgoKRmlyc3QsIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBJJiMzOTt2ZSBnb3QgYGt2bV9zMzkwX2tleW9wYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBhbmQgYHNldHVwX2FwY2IxMGAgdG8gaW52ZXN0aWdhdGUuCgpOb3csIGEgcXVpY2sgY2hlY2sgb24gYGt2bV9zMzkwX2tleW9wYCBpcyBpbiBvcmRlci4gSXMgaXQgc3RhdGljPyBZZXMsIGl0IGlzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIGhhdmUgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gZGV0ZXJtaW5lIGl0cyB1c2FnZSBjb250ZXh0IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2tleW9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NTA9c3RhdGljIHZvaWQgX19rdm1fczM5MF9leGl0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NjI6c3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5Mjc9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDYyLVx0XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDYzOlx0XHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNjQtXHRcdHVuaW9uIHNrZXkgc2tleTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3NS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc2Olx0XHRyID0ga3ZtX3MzOTBfa2V5b3AobWMsIGt2bSwga29wLm9wZXJhdGlvbiwga29wLmd1ZXN0X2FkZHIsIHNrZXkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzctXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBLVk0gQXJjaGl0ZWN0dXJlIGZvciBQb3RlbnRpYWwgT3B0aW1pemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBLVk0gY29kZSBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgc3RhcnRpbmcgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIFZNLWxldmVsIElPQ1RMcyBvbiB0aGlzIGFyY2hpdGVjdHVyZS4gR29vZC4gTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBgcnVuYCBpb2N0bCBwYXRoLiBJIHNlZSB0aGF0IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXNuJiMzOTt0IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEkgYWx3YXlzIHN0YXJ0IGxvb2tpbmcgYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXMgdGhvc2UgYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGVudHJ5cG9pbnRzIHRvIGEgcGFydGljdWxhciBjYWxsIGZsb3cuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBpbmRpY2F0ZXMgYW55dGhpbmcsIHBlcmhhcHMgaW5kaWNhdGluZyBhIG1vcmUgZmxleGlibGUgaW50ZXJhY3Rpb24uCgpBbmQgc2ltaWxhcmx5LCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXNuJiMzOTt0IHN0YXRpYyBlaXRoZXIuIEludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IGltcG9ydGFudCBlbnRyeSBwb2ludHMgZm9yIHZDUFUtc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgdGhleSYjMzk7cmUgdXNlZC4KCk5vdywgdGhvdWdoLCBJIGRvIHNlZSBgc2V0dXBfYXBjYjEwYC4gQW5kIHRoYXQgKmlzKiBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBhIG1vcmUgbG9jYWwgc2NvcGUuIFNvLCBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSAqaXQqIGlzIGNhbGxlZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgd2l0aCBoZWxwZXIgZnVuY3Rpb25zLiBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIHNlZSB3aGVyZSB0aGF0IGxlYWRzLiBHb3R0YSBzZWUgaWYgaXTigJlzIGEgaGVscGVyIGZvciBzb21lIGNyaXRpY2FsIHBhdGggb3IgaWYgaXQmIzM5O3MgaW52b2x2ZWQgaW4gc29tZXRoaW5nIGxlc3Mgc2lnbmlmaWNhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldHVwX2FwY2IxMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2NS1cdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX2gpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MjUyPXN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY4LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjk6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcwLVx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4Ni1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIENhbGwgU3RhY2sqKgoKT2theSwgc28gYHNldHVwX2FwY2JgIGlzLCBlc3NlbnRpYWxseSwgYSBkZWVwbHkgbmVzdGVkIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IGBzZXR1cF9hcGNiYCBpdHNlbGYsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBzZXR1cF9jcnljYmAsIGFuZCB0aGF0IHVsdGltYXRlbHkgZ2V0cyBpbml0aWF0ZWQgZWl0aGVyIGZyb20gYHZzaWVfcnVuYCBvciBzb21ldGhpbmcgc3RydWN0dXJhbGx5IHNpbWlsYXIgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGlzIGNhbGwgY2hhaW4gYW5kIG1hcCBob3cgdGhpcyBuZXN0ZWQgY2FsbCBnZXRzIGludm9rZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgYW5kIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24sIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgdGltaW5nIGRlcGVuZGVuY2llcyBvciByZXNvdXJjZSBhbGxvY2F0aW9uIGlzc3VlcyB0aGF0IGNvbWUgaW50byBwbGF5LiBJdCB3b3VsZCBiZSB2YWx1YWJsZSB0byB1bmRlcnN0YW5kLCBhdCB0aGlzIHBvaW50LCBob3cgZmFyIGludG8gdGhlIGNhbGwgY2hhaW4gd2UgbmVlZCB0byBnZXQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9hcGNiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmM9MTI1PXN0YXRpYyBpbnQgcHJlcGFyZV9jcHVmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMtLyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2NDpzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY1LVx0XHRcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODUtLyoqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxODY6ICogc2V0dXBfYXBjYjAwIC0gQ29weSB0byBBUENCIEZPUk1BVDAgZnJvbSBBUENCIEZPUk1BVDBcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE4Ny0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTMtICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxOTQ6c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTUtXHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHVuc2lnbmVkIGxvbmcgKmFwY2JfaClcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTEtLyoqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMTI6ICogc2V0dXBfYXBjYjExIC0gQ29weSB0aGUgRk9STUFUMSBBUENCIGZyb20gdGhlIGd1ZXN0IHRvIHRoZSBzaGFkb3cgQ1JZQ0JcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMy0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTktICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjA6c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjEtXHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM4LS8qKlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjM5OiAqIHNldHVwX2FwY2IgLSBDcmVhdGUgYSBzaGFkb3cgY29weSBvZiB0aGUgYXBjYi5cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI0MC0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNTEtICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTI6c3RhdGljIGludCBzZXR1cF9hcGNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1My1cdCAgICAgICBjb25zdCB1MzIgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2Mi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI2MzpcdFx0cmV0dXJuIHNldHVwX2FwY2IxMSh2Y3B1LCAodW5zaWduZWQgbG9uZyAqKVx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjQtXHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzItXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MzpcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzQtXHRcdFx0XHRcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IwLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4Ni1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODktXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMDpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MDpcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yOTEtXHRcdFx0XHRcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IwLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTMxOT1zdGF0aWMgaW50IHNoYWRvd19jcnljYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXHRpZiAoYXBpZV9zKSB7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNTE6XHRcdHJldCA9IHNldHVwX2FwY2IodmNwdSwgXHUwMDI2dnNpZV9wYWdlLVx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzUyLVx0XHRcdFx0IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODA4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRW50cnlwb2ludHMqKgoKT2theSwgc28gYHNoYWRvd19jcnljYmAgaXMgY2FsbGVkIGZyb20gYHZzaWVfcnVuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbi4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN0YW5kYXJkIEtWTSBlbnRyeSBwb2ludHM6IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGBrdm1fYXJjaF92bV9pb2N0bGAuIFllcCwgdGhvc2UgYXJlIGRlZmluaXRlbHkgQVBJIGVudHJ5cG9pbnRzLCBubyBxdWVzdGlvbi4KCkJ1dCB3YWl0IGEgbWludXRlLCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzIGEgKnZlcnkqIGhvdCBwYXRoIGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgcnVubmluZyB0aGUgVkNQVS4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdG9sZCBtZSB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdGluZyBkaXN0cmlidXRpb24gZnJvbSBza2V3aW5nLiBTbyBldmVuIHRob3VnaCBpdCYjMzk7cyBhbiBBUEkgZW50cnlwb2ludCBhbmQgdGhlIG1haW4gb25lIGF0IHRoYXQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgaXNzdWU/CgpMZXQgbWUgc2VlLi4uIGZvciB0aGUgYGt2bV9zMzkwX2tleW9wYCBvcGVyYXRpb24sIGl0IHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBga3ZtX2FyY2hfdm1faW9jdGxgLCB1bmRlciB0aGUgYEtWTV9TMzkwX1pQQ0lfT1BgIGNvbnRyb2wgcGF0aC4gT2theSwgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIHJlLWV4YW1pbmUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgbG9vayBmb3Igb3BlcmF0aW9ucyB1bmRlciBga29wLm9wZXJhdGlvbmAgd2l0aGluIGl0LiBUaGF0IHNlZW1zIGxpa2UgYSBtdWNoIGJldHRlciBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a29wXFwub3BlcmF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3NS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc2Olx0XHRyID0ga3ZtX3MzOTBfa2V5b3AobWMsIGt2bSwga29wLm9wZXJhdGlvbiwga29wLmd1ZXN0X2FkZHIsIHNrZXkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzctXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1OAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdWJqZWN0OgoKKipBbmFseXppbmcgdGhlIEtWTSBBcmNoaXRlY3R1cmUgLSBTcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZtX2lvY3RsYCoqCgpPa2F5LCBzbyB0aGUgZGlyZWN0aW9uIGlzIGNsZWFyOiBXZSYjMzk7cmUgZGl2aW5nIGludG8gYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMDYwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBvaW50LiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3Mgb2YgVmlydHVhbCBNYWNoaW5lIElPIENvbnRyb2xzIHdpdGhpbiBLVk0uIExpbmUgMzA2MC4uLiB3ZWxsLCB0aGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiBzb21lIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBhIHNpZ25pZmljYW50IGJyYW5jaCBpbiBpdHMgZXhlY3V0aW9uIGlzIGxvY2F0ZWQuIFdlIG5lZWQgdG8gZm9jdXMgb24gd2hhdCBoYXBwZW5zIHRoZXJlLiBJcyBpdCBlcnJvciBoYW5kbGluZywgZGlzcGF0Y2hpbmcgdG8gb3RoZXIgYXJjaC1zcGVjaWZpYyBmdW5jdGlvbnMsIG9yIHBlcmhhcHMgYSBzZWN1cml0eSBjaGVjaz8gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgdGhlcmUgaXMgdGhlIGtleS4gR2l2ZW4gdGhlIGV4cGVydGlzZSBoZXJlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzOyBpdCB3b24mIzM5O3QgYmUgZW5vdWdoIHRvIGtub3cgKndoYXQqIHRoZSBjb2RlIGRvZXMsIGJ1dCBhbHNvICp3aHkqIGl0JiMzOTtzIGltcGxlbWVudGVkIHRoaXMgd2F5LiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLiBJIGV4cGVjdCBhIHdlbGwtY3JhZnRlZCBzdHJ1Y3R1cmUsIGFuZCBJJiMzOTttIHJlYWR5IHRvIHBhcnNlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzA1MDpcdFx0XHRicmVhaztcbjMwNTE6XHRcdH1cbjMwNTI6XHRcdGNhc2UgS1ZNX1MzOTBfTUVNX09QOiB7XG4zMDUzOlx0XHRcdHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgbWVtX29wO1xuMzA1NDpcdFxuMzA1NTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2bWVtX29wLCBhcmdwLCBzaXplb2YobWVtX29wKSkgPT0gMClcbjMwNTY6XHRcdFx0XHRyID0ga3ZtX3MzOTBfdm1fbWVtX29wKGt2bSwgXHUwMDI2bWVtX29wKTtcbjMwNTc6XHRcdFx0ZWxzZVxuMzA1ODpcdFx0XHRcdHIgPSAtRUZBVUxUO1xuMzA1OTpcdFx0XHRicmVhaztcbjMwNjA6XHRcdH1cbjMwNjE6XHRcdGNhc2UgS1ZNX1MzOTBfS0VZT1A6IHtcbjMwNjI6XHRcdFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XG4zMDYzOlx0XHRcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XG4zMDY0Olx0XHRcdHVuaW9uIHNrZXkgc2tleTtcbjMwNjU6XHRcbjMwNjY6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmtvcCwgYXJncCwgc2l6ZW9mKGtvcCkpKSB7XG4zMDY3Olx0XHRcdFx0ciA9IC1FRkFVTFQ7XG4zMDY4Olx0XHRcdFx0YnJlYWs7XG4zMDY5Olx0XHRcdH1cbjMwNzA6XHRcdFx0c2tleS5za2V5ID0ga29wLmtleTtcbjMwNzE6XHRcbjMwNzI6XHRcdFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4zMDczOlx0XHRcdGlmICghbWMpXG4zMDc0Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMDc1Olx0XG4zMDc2Olx0XHRcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XG4zMDc3Olx0XHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbjMwNzg6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG4zMDc5Olx0XHRcdFx0YnJlYWs7XG4zMDgwOlx0XG4zMDgxOlx0XHRcdGtvcC5rZXkgPSByO1xuMzA4MjpcdFx0XHRyID0gMDtcbjMwODM6XHRcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZrb3AsIHNpemVvZihrb3ApKSlcbjMwODQ6XHRcdFx0XHRyID0gLUVGQVVMVDtcbjMwODU6XHRcdFx0YnJlYWs7XG4zMDg2Olx0XHR9XG4zMDg3Olx0XHRjYXNlIEtWTV9TMzkwX1pQQ0lfT1A6IHtcbjMwODg6XHRcdFx0c3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgYXJncztcbjMwODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBLVk0vczM5MCBDb2RlYmFzZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBLVk0vczM5MCBjb2RlLCBhbmQgSSBuZWVkIHRvIGNsYXJpZnkgc29tZSBjcnVjaWFsIGlvY3RsIGVudHJ5IHBvaW50cy4gRnJvbSB3aGF0IEkmIzM5O3ZlIGdhdGhlcmVkLCB0aGUgYEtWTV9TMzkwX0tFWU9QYCBpb2N0bCBzZWVtcyB0byBiZSB0aGUga2V5IHRvIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBUaGUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIHNlY3Rpb24sIHdoaWNoIGlzIGdvb2QgdG8gY29uZmlybS4KCk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gVkNQVS1yZWxhdGVkIGlvY3RscywgSSBzZWUgYSBwYXR0ZXJuLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGNvcnJlc3BvbmRzIHRvIGBLVk1fUlVOYCwgdGhhdCBtdWNoIG1ha2VzIHNlbnNlLiBIb3dldmVyLCBJIHdhbnQgdG8gY2xhcmlmeSB0aGUgb3RoZXIgVkNQVSBjb250cm9sIGNvbW1hbmQuIFRoZSBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgZnVuY3Rpb24gaXMgYXNzb2NpYXRlZCB3aXRoIGBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFVgLgoKT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBWQ1BVIGNvbW1hbmRzLiBMZXQgbWUgemVybyBpbiBvbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NzMwIGluIHRoZSBzb3VyY2UuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTcyMDpcdFx0XHRpZiAoIWlzX3Byb3RfdmlydF9ob3N0KCkpXG41NzIxOlx0XHRcdFx0YnJlYWs7XG41NzIyOlx0XG41NzIzOlx0XHRcdHIgPSAtRUZBVUxUO1xuNTcyNDpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y21kLCBhcmdwLCBzaXplb2YoY21kKSkpXG41NzI1Olx0XHRcdFx0YnJlYWs7XG41NzI2Olx0XG41NzI3Olx0XHRcdHIgPSAtRUlOVkFMO1xuNTcyODpcdFx0XHRpZiAoY21kLmZsYWdzKVxuNTcyOTpcdFx0XHRcdGJyZWFrO1xuNTczMDpcdFxuNTczMTpcdFx0XHQvKiBXZSBvbmx5IGhhbmRsZSB0aGlzIGNtZCByaWdodCBub3cgKi9cbjU3MzI6XHRcdFx0aWYgKGNtZC5jbWQgIT0gS1ZNX1BWX0RVTVApXG41NzMzOlx0XHRcdFx0YnJlYWs7XG41NzM0Olx0XG41NzM1Olx0XHRcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFx1MDAyNmNtZCk7XG41NzM2Olx0XG41NzM3Olx0XHRcdC8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqL1xuNTczODpcdFx0XHRpZiAoY29weV90b191c2VyKGFyZ3AgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXHUwMDI2Y21kLnJjLFxuNTczOTpcdFx0XHRcdFx0IHNpemVvZihjbWQucmMpICYjNDM7IHNpemVvZihjbWQucnJjKSkpXG41NzQwOlx0XHRcdFx0ciA9IC1FRkFVTFQ7XG41NzQxOlx0XHRcdGJyZWFrO1xuNTc0MjpcdFx0fVxuNTc0MzpcdFx0ZGVmYXVsdDpcbjU3NDQ6XHRcdFx0ciA9IC1FTk9UVFk7XG41NzQ1Olx0XHR9XG41NzQ2Olx0XG41NzQ3Olx0XHR2Y3B1X3B1dCh2Y3B1KTtcbjU3NDg6XHRcdHJldHVybiByO1xuNTc0OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX1MzOTBfUFZfQ09NTUFORF9WQ1BVIFBhdGgqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFVgIGlzIHByb2Nlc3NlZC4gRnJvbSB3aGF0IEkgc2VlLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXMgdGhlIGhhbmRsZXIsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgcmVhY2ggdGhlIGNvZGUgZm9yIHRoaW5ncyBsaWtlIGBzZXR1cF9hcGNiMTBgLiBJIHNlZSBhIGNvbm5lY3Rpb24g4oCTIGl0IGxvb2tzIGxpa2UgYHNldHVwX2FwY2IxMGAgaXMgdHJpZ2dlcmVkIGZyb20gYHNoYWRvd19jcnljYmAuIE5vdywgdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlIGBzaGFkb3dfY3J5Y2JgIGlzIGNhbGxlZCBmcm9tIGB2c2llX3J1bmAuIE9rYXksIGB2c2llX3J1bmAgaXMgdGhlIG5leHQgZnVuY3Rpb24gSSByZWFsbHkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24uIExldCYjMzk7cyBzZWUgaG93IHRoYXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZzaWVfcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmM9MTEwOD1zdGF0aWMgaW50IHZzaWVfaGFuZGxlX212cGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg3LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTE4ODpzdGF0aWMgaW50IGRvX3ZzaWVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg5LVx0X19yZWxlYXNlcyh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEzODM9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9zaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzk2LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTM5NzpzdGF0aWMgaW50IHZzaWVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM5OC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQxMi1cdFx0XHR1cGRhdGVfaW50ZXJ2ZW50aW9uX3JlcXVlc3RzKHZzaWVfcGFnZSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDEzOlx0XHRcdHJjID0gZG9fdnNpZV9ydW4odmNwdSwgdnNpZV9wYWdlLCBzZyk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDE0LVx0XHR9XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTU1Nz1pbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1OTktXHRyZWdpc3Rlcl9zaGFkb3dfc2NiKHZjcHUsIHZzaWVfcGFnZSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjAwOlx0cmMgPSB2c2llX3J1bih2Y3B1LCB2c2llX3BhZ2UpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYwMS1cdHVucmVnaXN0ZXJfc2hhZG93X3NjYih2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBWU0lFIEhhbmRsZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIGhvdyB3ZSBoYW5kbGUgVmlydHVhbCBTSUUsIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzIG9uIHMzOTAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZXhwb3NlZCBhcyBhIHB1YmxpYyBBUEk/JiMzNDsgTm8sIGl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uIEkmIzM5O2QgZGlyZWN0bHkgY2FsbCwgaXQmIzM5O3MgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlci4gSXQgc2l0cyBsb3dlciBkb3duLCByZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpYyBWU0lFIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgZ3Vlc3QgY29udGV4dC4KCk9rYXksIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBOb3cgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXMgYWN0dWFsbHkgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIFZTSUUgaGFuZGxlciBnZXRzIHRyaWdnZXJlZC4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBWU0lFIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2hhbmRsZV92c2llJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTQ0Mj1pbnQga3ZtX3MzOTBfc2tleV9jaGVja19lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDQ0LS8qIGltcGxlbWVudGVkIGluIHZzaWUuYyAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjQ0NTppbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00NDYtdm9pZCBrdm1fczM5MF92c2llX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz05NTk9aW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTcyLVx0Y2FzZSAweDE0OlxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTczOlx0XHRyZXR1cm4ga3ZtX3MzOTBfaGFuZGxlX3ZzaWUodmNwdSk7XG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzQtXHRjYXNlIDB4MjE6XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTQ4ND1zdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTU2LVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTU1NzppbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU1OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNL3MzOTB4IENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEtWTS9zMzkweCBjb2RlIGFuZCB0cnlpbmcgdG8gbmFycm93IGRvd24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIHRyYWNlIHN0YXJ0cyBpbiBga3ZtX3MzOTBfaGFuZGxlX2IyYCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHRoZSBgYjJgIG9wY29kZSwgYW5kIGJ5IGV4dGVuc2lvbiB0aGUgYFNJRWAgaW5zdHJ1Y3Rpb24uIFRoYXQgcG9pbnRzIG1lIHRvIGBrdm1fczM5MF9oYW5kbGVfYjJgIG9yIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgYXMgbGlrZWx5IGNhbmRpZGF0ZXMgdG8gZm9jdXMgb24gaW5pdGlhbGx5LiBJIGNoZWNrZWQgaWYgZWl0aGVyIG9mIHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBidXQgbm8gZGljZS4KCk1vdmluZyBvdXR3YXJkLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbS4gSSYjMzk7bSBzZWVpbmcgYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBhbmQgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBhcyBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBIb3dldmVyLCBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgYXJlIHZlcnkgZ2VuZXJpYyBhbmQgbGlrZWx5IGhlYXZpbHkgdXNlZCB3aXRoaW4gS1ZNLCBzbyBJIHdhbnQgdG8gYmUgbW9yZSBzcGVjaWZpYyBpZiBwb3NzaWJsZS4KCkxvb2tpbmcgZGVlcGVyIGludG8gdGhlIGlvY3RsIGhhbmRsaW5nLCBga3ZtX2FyY2hfdm1faW9jdGxgIGRlYWxzIHdpdGggYEtWTV9TMzkwX0tFWU9QYCwgYW5kIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBoYW5kbGVzIGBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFVgLiBJIGNvbnNpZGVyZWQgYGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXBgIGJ1dCBpdCBzZWVtcyB0aGUgaXNzdWUgaXMgYWN0dWFsbHkgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBpdHNlbGYsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBvbmUgaW4gbXkgc2lnaHRzLiBMaWtld2lzZSwgd2hpbGUgYGt2bV9zMzkwX2tleW9wYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92bV9pb2N0bGAgaXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBpc3N1ZSB0aGVyZSB0b28sIHNvIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24uIEFuZCBgc2V0dXBfYXBjYjEwYCBpcyBhbHNvIG9mIGludGVyZXN0LCBhcyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCBpcyBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuIEkgc2hvdWxkIHJldmlzaXQgdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgQ09ORklHcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyB0aGUgczM5MHggS1ZNIE1vZHVsZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBUaGUgaW5pdGlhbCBxdWVzdGlvbiB3YXMgYWJvdXQgYEtWTV9TMzkwX1VDT05UUk9MYC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgYXNzdW1lZCwgbm8sIHRob3NlIGNoYW5nZXMgd2VyZSBpbnRlZ3JhdGVkIGludG8gdGhlIGNvcmUgS1ZNLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlLiBJJiMzOTttIHJlY2FsbGluZyBub3cgdGhhdCBga3ZtX3MzOTBfa2V5b3BgIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIGBrdm0tczM5MC5jYC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IGlzIHRoZXJlIG9yIG5vdC4gRnVydGhlciwgSSBzZWUgYHNldHVwX2FwY2IxMGAgaXMgZGVmaW5lZCBpbiBgdnNpZS5jYC4gVGhhdCBtYWtlcyB0aGlzIG11Y2ggbW9yZSBpbnRlcmVzdGluZy4gQmVmb3JlIEkgbWFrZSBhbnkgZGVmaW5pdGl2ZSBjb25jbHVzaW9ucywgSSByZWFsbHkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGB2c2llLmNgIGl0c2VsZiBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBUaGF0IHdpbGwgdGVsbCBtZSBpZiB0aGUgbW9kdWxlIGlzIGFjdHVhbGx5IGluIHBsYXkgaGVyZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgaXMgYSBkZXBlbmRlbmN5IG9uIHRoYXQgZmVhdHVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIGNvbmRpdGlvbmFsIG9yIGFsd2F5cyBjb21waWxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNpZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGU9MTA9a3ZtLXkgJiM0Mzs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMTprdm0teSAmIzQzOz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTEyLWt2bS15ICYjNDM7PSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzc5CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDE2MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS1ZNIHMzOTAgUGF0Y2hlcyBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7dmUgZ290IGEgaGFuZGZ1bCBvZiBmdW5jdGlvbmFsIGZpeGVzIHdpdGhpbiB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRlc3RhYmlsaXR5IGFuZCBmdXp6aW5nIHRhcmdldHMuCgpGaXJzdCwgdGhlIHBhdGNoZXMgYXJlIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGBLVk1gIGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgdGhlIGJhc2UgY29uZmlndXJhdGlvbiB3ZSBuZWVkLgoKVGhlIGZpcnN0IGNoYW5nZSBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzIGludGVyZXN0aW5nLiBJdCBmaXhlcyBhIGJ5cGFzcyBvZiBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKHZjcHUpYCB3aGVuIGEgdkNQVSBpcyBzdG9wcGVkLCB3aGljaCBjYW4gbGVhZCB0byBzaWduYWwgbWFzayBpc3N1ZXMuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyB0aGUgYEtWTV9SVU5gIG9wZXJhdGlvbi4gRXZlbiB0aG91Z2ggaXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbiwgdGhlIGJ1ZyBpcyByaWdodCB0aGVyZS4gSXQmIzM5O3MgYSBrZXkgZW50cnkgcG9pbnQsIHNvIEkmIzM5O20gaW5jbHVkaW5nIGl0IGFzIGEgZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgY2FuIGhpdCB0aGF0IHNwZWNpZmljIGNvZGUgcGF0aC4KClRoZW4sIHRoZXJlJiMzOTtzIGEgZml4IGluIGBrdm1fczM5MF9rZXlvcGAuIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCByYWNlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSByZWxhdGVkIHRvIHRoZSBga3ZtLSZndDthcmNoLmdtYXBgIGFjY2Vzcy4gVGhlIGtleSBpcyB0aGF0IHRoZSBmaXggbW9kaWZpZXMgdGhlIGFjY2VzcyBvZiBhbiBpbXBvcnRhbnQgc2hhcmVkIHN0cnVjdHVyZS4gVGhlIGZpeCBhbHNvIGludm9sdmVzIGEgbG9jayBzbyBJJiMzOTtsbCBpbmNsdWRlIGBrdm1fYXJjaF92bV9pb2N0bGAgdG8gdHJpZ2dlciB0aGlzIGNvZGUuCgpOZXh0LCB0aGUgZml4IGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBjb3JyZWN0cyBhbiBvZmZzZXQgaXNzdWUgd2hlbiBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgYWRkcmVzc2VzIGFuIGluY29ycmVjdCBvZmZzZXQgb2YgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZHVyaW5nIGEgS1ZNX1BWX1ZDUFVfRFVNUCBjb21tYW5kLiBUaGUgcmlnaHQgdGFyZ2V0IGlzIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC4KCkZpbmFsbHksIHdlJiMzOTt2ZSBnb3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZml4ZWQgaW4gYHNldHVwX2FwY2IxMGAuIEkmIzM5O2xsIGZvY3VzIG9uIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgYXMgdGhlIGVudHJ5cG9pbnQgaGVyZS4KCkFsbCB0aGVzZSBjaGFuZ2VzIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIGZ1bmN0aW9uYWxpdHkgYW5kIHNob3VsZCBiZSByZWFjaGFibGUgdGhyb3VnaCBmdXp6aW5nIHdpdGggdGhvc2Ugc3ltYm9scy4KU28gSSBzaG91bGQgZm9jdXMgb246Ci0gICBga3ZtX2FyY2hfdm1faW9jdGxgCi0gICBga3ZtX2FyY2hfdmNwdV9pb2N0bGAKLSAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAKLSAgIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAKCkdpdmVuIHRoZXNlIGlkZW50aWZpZWQgZW50cnlwb2ludHMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIG1vdmUgb24gdG8gY3JhZnRpbmcgdGhlIHJpZ2h0IGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV92c2llJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGlzc3VlcyBpbiBzMzkwIEtWTTogYSBsb2NrIG9yZGVyaW5nIGlzc3VlIGluIGBrdm1fczM5MF9rZXlvcGAsIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlYCBjYWxsIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGFuIGluY29ycmVjdCBgY29weV90b191c2VyYCBvZmZzZXQgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYHNldHVwX2FwY2IxMGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBpb2N0bHMgYW5kIGluc3RydWN0aW9uIGhhbmRsZXJzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfdnNpZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBpc3N1ZXMgaW4gczM5MCBLVk06IGEgbG9jayBvcmRlcmluZyBpc3N1ZSBpbiBga3ZtX3MzOTBfa2V5b3BgLCBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZWAgY2FsbCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCBhbiBpbmNvcnJlY3QgYGNvcHlfdG9fdXNlcmAgb2Zmc2V0IGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBzZXR1cF9hcGNiMTBgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gaW9jdGxzIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzLCBub25lIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtNU0FOOlxuMS4gYGt2bV9zMzkwX2tleW9wYDogRml4ZXMgYSBsb2NraW5nIGlzc3VlIGJ5IG1vdmluZyB0aGUgcmVhZCBvZiBga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlYCBpbnNpZGUgdGhlIGBtbXVfbG9ja2AgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCByYWNlIG9yIGludmFsaWQgYWNjZXNzLCB3aGljaCBpcyB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAuXG4yLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gOiBGaXhlcyBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSgpYCBjYWxsIG9uIGFuIGVycm9yIHBhdGguIFRoaXMgaXMgYSBzdGF0ZSBtYW5hZ2VtZW50IGJ1Zy5cbjMuIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogRml4ZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIGBjb3B5X3RvX3VzZXJgIHNvIHRoYXQgYHJjYCBhbmQgYHJyY2AgYXJlIHdyaXR0ZW4gdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0cyBpbiB0aGUgdXNlciBzcGFjZSBzdHJ1Y3R1cmUuIFRoZSBjb3BpZWQgZGF0YSBpdHNlbGYgKGBjbWQucmNgIGFuZCBgY21kLnJyY2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGEgcHJlY2VkaW5nIGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuXG40LiBgc2V0dXBfYXBjYjEwYDogQWRkcyBhIGBtZW1zZXRgIHRvIGZ1bGx5IGluaXRpYWxpemUgdGhlIGBhcGNiMWAgc3RydWN0dXJlIGluIHRoZSBzaGFkb3cgQ1JZQ0IuIFdpdGhvdXQgdGhpcywgZmllbGRzIGxpa2UgYGFwbVsxLi4zXWAgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBhbmQgY29udGFpbiBzdGFsZSBkYXRhIGZyb20gcHJldmlvdXMgdXNlcyBvZiB0aGUgY2FjaGVkIGB2c2llX3BhZ2VgLiBUaGlzIHN0YWxlIGRhdGEgaXMgdGhlbiByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSB3aGVuIGV4ZWN1dGluZyBhIG5lc3RlZCBndWVzdCwgcG90ZW50aWFsbHkgZ3JhbnRpbmcgdW5hdXRob3JpemVkIGNyeXB0byBhY2Nlc3MuIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBoYXJkd2FyZSBhbmQgbm90IGJ5IHRoZSBDUFUsIEtNU0FOIGNhbm5vdCBkZXRlY3QgaXQgKEtNU0FOIG9ubHkgaW5zdHJ1bWVudHMgQ1BVIGluc3RydWN0aW9ucyBhbmQgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGBrbXNhbl9jaGVja19tZW1vcnkoKWAgYW5ub3RhdGlvbnMgZm9yIHRoZSBTSUUgYmxvY2spLlxuXG5UaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwMzdhM2E1MmY3NDlhNWQ0ZGU4Yjk5M2UyYmRjMGJhMTU4Y2Y1NTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNTo1MDoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCA1MThhNjljNTVlODVjLi43ZGZkMGFkMzY3MzY4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC01NjIsMTEgJiM0Mzs1NjIsMTIgQEAgc3RhdGljIHZvaWQgX19rdm1fczM5MF9leGl0KHZvaWQpCiBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCwKIAkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpCiB7Ci0JdW5pb24gYXNjZSBhc2NlID0ga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2U7CiAJZ2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihhZGRyKTsKJiM0MzsJdW5pb24gYXNjZSBhc2NlOwogCWludCByOwogCiAJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlhc2NlID0ga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2U7CiAKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOgpAQCAtNTA2OSw3ICYjNDM7NTA3MCw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXByX2Vycl9yYXRlbGltaXRlZCgmIzM0O2NhbiYjMzk7dCBydW4gc3RvcHBlZCB2Y3B1ICVkXG4mIzM0OywKIAkJCQkgICB2Y3B1LSZndDt2Y3B1X2lkKTsKIAkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gb3V0X3NpZ3NldDsKIAl9CiAKIAlrZXJuZWxfZnB1X2JlZ2luKCZhbXA7ZnB1LCBLRVJORUxfRlBDIHwgS0VSTkVMX1ZYUik7CkBAIC01MDk5LDkgJiM0Mzs1MTAwLDExIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc3RvcmVfcmVncyh2Y3B1KTsKIAlrZXJuZWxfZnB1X2VuZCgmYW1wO2ZwdSwgS0VSTkVMX0ZQQyB8IEtFUk5FTF9WWFIpOwogCiYjNDM7CXZjcHUtJmd0O3N0YXQuZXhpdF91c2Vyc3BhY2UmIzQzOyYjNDM7OwomIzQzOwomIzQzO291dF9zaWdzZXQ6CiAJa3ZtX3NpZ3NldF9kZWFjdGl2YXRlKHZjcHUpOwogCi0JdmNwdS0mZ3Q7c3RhdC5leGl0X3VzZXJzcGFjZSYjNDM7JiM0Mzs7CiBvdXQ6CiAJdmNwdV9wdXQodmNwdSk7CiAJcmV0dXJuIHJjOwpAQCAtNTczMiw3ICYjNDM7NTczNSw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgJmFtcDtjbWQpOwogCiAJCS8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqLwotCQlpZiAoY29weV90b191c2VyKChfX3U4IF9fdXNlciAqKWFyZ3AsICZhbXA7Y21kLnJjLAomIzQzOwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fcHZfY21kLCByYyksICZhbXA7Y21kLnJjLAogCQkJCSBzaXplb2YoY21kLnJjKSAmIzQzOyBzaXplb2YoY21kLnJyYykpKQogCQkJciA9IC1FRkFVTFQ7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuYwppbmRleCBlZWEyNDU2MmU3ZGIyLi4wYTdkOGRmYWI2Yjc5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuYwpAQCAtMTczLDYgJiM0MzsxNzMsNyBAQCBzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLAogCQkJICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjApKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKJiM0MzsJbWVtc2V0KGFwY2JfcywgMCwgc2l6ZW9mKCphcGNiX3MpKTsKIAlhcGNiX3MtJmd0O2FwbVswXSA9IGFwY2JfaC0mZ3Q7YXBtWzBdICZhbXA7IHRtcC5hcG1bMF07CiAJYXBjYl9zLSZndDthcW1bMF0gPSBhcGNiX2gtJmd0O2FxbVswXSAmYW1wOyB0bXAuYXFtWzBdICZhbXA7IDB4ZmZmZjAwMDAwMDAwMDAwMFVMOwogCWFwY2Jfcy0mZ3Q7YWRtWzBdID0gYXBjYl9oLSZndDthZG1bMF0gJmFtcDsgdG1wLmFkbVswXSAmYW1wOyAweGZmZmYwMDAwMDAwMDAwMDBVTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gczM5MCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIEtWTS1zMzkwIGFyY2hpdGVjdHVyZS4gTGV0IG1lIGJyZWFrIGRvd24gbXkgdGhvdWdodHMgYXMgSSBzZWUgdGhlbS4gRmlyc3QsIHRoZSBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCBmaWxlIGhhcyB0aHJlZSBtb2RpZmljYXRpb25zLiAgVGhlIGZpcnN0LCBpbiBga3ZtX3MzOTBfa2V5b3BgLCBpcyBhIGxvY2tpbmcgZml4LiBUaGV5JiMzOTt2ZSBtb3ZlZCB0aGUgYGFzY2VgIGFzc2lnbm1lbnQsIGBhc2NlID0ga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2U7YCwgdG8gYmUgKmFmdGVyKiB0aGUgYGd1YXJkKHJlYWRfbG9jaykoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTtgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGVuc3VyaW5nIHRoZSBsb2NrIGlzIGhlbGQgYmVmb3JlIGFjY2Vzc2luZyBwb3RlbnRpYWxseSBzaGFyZWQgbWVtb3J5LgoKTmV4dCwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgdGhlIGBnb3RvIG91dDtgIGhhcyBiZWVuIGNoYW5nZWQgdG8gYGdvdG8gb3V0X3NpZ3NldDtgIHdoZW4gdGhlIHZDUFUgaXMgc3RvcHBlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlcyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKHZjcHUpYCBpcyAqYWx3YXlzKiBjYWxsZWQsIHdoaWNoIGlzIGEgZ29vZCBmYWlsc2FmZS4KClRoZSB0aGlyZCBjaGFuZ2UgaGVyZSwgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgbG9va3MgbGlrZSBhIGJ1ZyBmaXguIFRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBgY29weV90b191c2VyYCBjYWxsIHRvIGluY2x1ZGUgYW4gYG9mZnNldG9mYCB3aGVuIGNvcHlpbmcgdGhlIHJldHVybiBjb2RlLCBgY21kLnJjYCwgdG8gdXNlciBzcGFjZS4gIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBjb3B5aW5nIGBjbWQucmNgIHRvIHRoZSAqYmVnaW5uaW5nKiBvZiB0aGUgdXNlci1wcm92aWRlZCBidWZmZXIsIGBhcmdwYCwgcmF0aGVyIHRoYW4gdGhlIGNvcnJlY3QgZmllbGQuIEhtbS4uLiBpdCBsb29rcyBsaWtlIGBjbWQucmNgIGFuZCBgY21kLnJyY2AgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0JiMzOTtzIGFsbC4gQW5kIGl0JiMzOTtzIGFsbCBpbml0aWFsaXplZCBieSBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAgc28gbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay4KCk1vdmluZyBvbiB0byBgYXJjaC9zMzkwL2t2bS92c2llLmNgLCB3ZSBzZWUgYSBjaGFuZ2UgaW4gYHNldHVwX2FwY2IxMGAuIFRoZXkmIzM5O3JlIGFkZGluZyBhIGBtZW1zZXQoYXBjYl9zLCAwLCBzaXplb2YoKmFwY2JfcykpO2AgY2FsbCBiZWZvcmUgc2V0dGluZyBhbnkgZmllbGRzLiBUaGlzIGlzIGluaXRpYWxpemluZyBhIHN0cnVjdCwgd2hpY2ggaXMgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBXYWl0IGEgbWludXRlLi4uIGBhcGNiX3NgIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IGt2bV9zMzkwX2FwY2IxYC4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHNldHVwX2FwY2IxMGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgYXBjYl9zYCBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgY2F1dGlvdXMgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9hcGNiMTAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2My0vKiBDb3B5IHRvIEFQQ0IgRk9STUFUMSBmcm9tIEFQQ0IgRk9STUFUMCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjUtXHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTI1Mj1zdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODQtXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NTpcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODYtXHRcdFx0XHRcdCAgICBjcnljYl9ncGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZW06CgoqKkFuYWx5emluZyBgc2V0dXBfYXBjYmAgYW5kIGBzZXR1cF9hcGNiMTBgIGluIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgYXJjaC9zMzkwL2t2bS92c2llLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhvc2UgdHdvIEFQQ0Igc2V0dXAgZnVuY3Rpb25zOiBgc2V0dXBfYXBjYmAgYW5kIGBzZXR1cF9hcGNiMTBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugcm91dGluZXMgYXJlIGNyYWZ0aW5nIHRoZSBBZGRyZXNzIFNwYWNlIENvbnRyb2wgQmxvY2sgKEFQQ0IpIHN0cnVjdHVyZXMsIHJpZ2h0PyBUaGF0JiMzOTtzIGtleSBmb3IgbWFuYWdpbmcgZ3Vlc3QgYWRkcmVzcyBzcGFjZXMgd2l0aGluIHRoZSBTLzM5MCBLVk0gZW52aXJvbm1lbnQuIAoKSSYjMzk7bSBhc3N1bWluZyBgYXBjYjEwYCBpcyBsaWtlbHkgYSBsYXRlciBpdGVyYXRpb24gb3Igc3BlY2lmaWMgdmVyc2lvbiwgcG9zc2libHkgcmVsYXRlZCB0byBzb21lIGhhcmR3YXJlIGZlYXR1cmUgb3IgYXJjaGl0ZWN0dXJhbCBleHRlbnNpb24uIFNvLCBJIG5lZWQgdG8gY29tcGFyZSB0aGVpciBsb2dpYyBjYXJlZnVsbHkgdG8gc2VlIHRoZSBkaWZmZXJlbmNlcyBhbmQgdW5kZXJzdGFuZCB0aGUgZXZvbHV0aW9uLiBXaGF0IHNwZWNpZmljIGd1ZXN0IHBhcmFtZXRlcnMgb3IgaHlwZXJ2aXNvciBjb25maWd1cmF0aW9ucyBuZWNlc3NpdGF0ZSBzZXBhcmF0ZSBzZXR1cCByb3V0aW5lcz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgbGV2ZWxzIG9mIGFkZHJlc3MgdHJhbnNsYXRpb24gc3VwcG9ydCwgcHJvdGVjdGlvbiBtZWNoYW5pc21zLCBvciBzb21lIG90aGVyIG51YW5jZSBvZiB0aGUgUy8zOTAgYXJjaGl0ZWN0dXJlPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBkaWZmZXJlbmNlcyBpbiBob3cgdGhlIEFQQ0IgZmllbGRzIOKAkyBzdWNoIGFzIHRoZSBhY2Nlc3MgY29udHJvbCBiaXRzLCBzZWdtZW50L3BhZ2UgdGFibGUgYWRkcmVzc2VzLCBhbmQgc3RvcmFnZSBrZXlzIOKAkyBhcmUgcG9wdWxhdGVkLiBBbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhcmUgYWx3YXlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFuZCB0aGUgQVBDQiBpcyBhIHNlbnNpdGl2ZSBhcmVhLgoKTXkgYWltIGlzIHRvIGdyYXNwIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXMsIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIEtWTS1TLzM5MCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGVsLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgYW5kIHNlZSB3aGVyZSB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBWU0lFIGNvbnRleHQuIFBlcmhhcHMgSSYjMzk7bGwgZXZlbiBjb21wYXJlIHRoZW0gYWdhaW5zdCBzaW1pbGFyIEFQQ0Igc2V0dXAgbWVjaGFuaXNtcyBpbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBkaWZmZXJlbnQgZ3Vlc3QgbWVtb3J5IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0XHRhdG9taWNfc2V0KFx1MDAyNnNjYl9zLVx1MDAzZWNwdWZsYWdzLCBuZXdmbGFncyk7XG4gMTYxOlx0XHRyZXR1cm4gMDtcbiAxNjI6XHR9XG4gMTYzOlx0LyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cbiAxNjQ6XHRzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLFxuIDE2NTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcbiAxNjY6XHR7XG4gMTY3Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjAgdG1wO1xuIDE2ODpcdFx0dW5zaWduZWQgbG9uZyBhcGNiX2dwYTtcbiAxNjk6XHRcbiAxNzA6XHRcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcbiAxNzE6XHRcbiAxNzI6XHRcdGlmIChyZWFkX2d1ZXN0X3JlYWwodmNwdSwgYXBjYl9ncGEsIFx1MDAyNnRtcCxcbiAxNzM6XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpKVxuIDE3NDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxNzU6XHRcbiAxNzY6XHRcdG1lbXNldChhcGNiX3MsIDAsIHNpemVvZigqYXBjYl9zKSk7XG4gMTc3Olx0XHRhcGNiX3MtXHUwMDNlYXBtWzBdID0gYXBjYl9oLVx1MDAzZWFwbVswXSBcdTAwMjYgdG1wLmFwbVswXTtcbiAxNzg6XHRcdGFwY2Jfcy1cdTAwM2VhcW1bMF0gPSBhcGNiX2gtXHUwMDNlYXFtWzBdIFx1MDAyNiB0bXAuYXFtWzBdIFx1MDAyNiAweGZmZmYwMDAwMDAwMDAwMDBVTDtcbiAxNzk6XHRcdGFwY2Jfcy1cdTAwM2VhZG1bMF0gPSBhcGNiX2gtXHUwMDNlYWRtWzBdIFx1MDAyNiB0bXAuYWRtWzBdIFx1MDAyNiAweGZmZmYwMDAwMDAwMDAwMDBVTDtcbiAxODA6XHRcbiAxODE6XHRcdHJldHVybiAwO1xuIDE4MjpcdFxuIDE4MzpcdH1cbiAxODQ6XHRcbiAxODU6XHQvKipcbiAxODY6XHQgKiBzZXR1cF9hcGNiMDAgLSBDb3B5IHRvIEFQQ0IgRk9STUFUMCBmcm9tIEFQQ0IgRk9STUFUMFxuIDE4NzpcdCAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuIDE4ODpcdCAqIEBhcGNiX3M6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgc2hhZG93IGNyeWNiXG4gMTg5Olx0ICogQGNyeWNiX2dwYTogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyB0byBzdGFydCBvZiBvcmlnaW5hbCBndWVzdCBjcnljYlxuIDE5MDpcdCAqIEBhcGNiX2g6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgZ3Vlc3QxXG4gMTkxOlx0ICpcbiAxOTI6XHQgKiBSZXR1cm5zIDAgYW5kIC1FRkFVTFQgb24gZXJyb3IgcmVhZGluZyBndWVzdCBhcGNiXG4gMTkzOlx0ICovXG4gMTk0Olx0c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG4gMTk1Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHVuc2lnbmVkIGxvbmcgKmFwY2JfaClcbiAxOTY6XHR7XG4gMTk3Olx0XHR1bnNpZ25lZCBsb25nIGFwY2JfZ3BhO1xuIDE5ODpcdFxuIDE5OTpcdFx0YXBjYl9ncGEgPSBjcnljYl9ncGEgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiwgYXBjYjApO1xuIDIwMDpcdFxuIDIwMTpcdFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgYXBjYl9zLFxuIDIwMjpcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IwKSkpXG4gMjAzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDIwNDpcdFxuIDIwNTpcdFx0Yml0bWFwX2FuZChhcGNiX3MsIGFwY2JfcywgYXBjYl9oLFxuIDIwNjpcdFx0XHQgICBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpO1xuIDIwNzpcdFxuIDIwODpcdFx0cmV0dXJuIDA7XG4gMjA5Olx0fVxuIDIxMDpcdFxuIDIxMTpcdC8qKlxuIDIxMjpcdCAqIHNldHVwX2FwY2IxMSAtIENvcHkgdGhlIEZPUk1BVDEgQVBDQiBmcm9tIHRoZSBndWVzdCB0byB0aGUgc2hhZG93IENSWUNCXG4gMjEzOlx0ICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG4gMjE0Olx0ICogQGFwY2JfczogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBzaGFkb3cgY3J5Y2JcbiAyMTU6XHQgKiBAY3J5Y2JfZ3BhOiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHRvIHN0YXJ0IG9mIG9yaWdpbmFsIGd1ZXN0IGNyeWNiXG4gMjE2Olx0ICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBob3N0XG4gMjE3Olx0ICpcbiAyMTg6XHQgKiBSZXR1cm5zIDAgYW5kIC1FRkFVTFQgb24gZXJyb3IgcmVhZGluZyBndWVzdCBhcGNiXG4gMjE5Olx0ICovXG4gMjIwOlx0c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG4gMjIxOlx0XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsXG4gMjIyOlx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYXBjYl9oKVxuIDIyMzpcdHtcbiAyMjQ6XHRcdHVuc2lnbmVkIGxvbmcgYXBjYl9ncGE7XG4gMjI1Olx0XG4gMjI2Olx0XHRhcGNiX2dwYSA9IGNyeWNiX2dwYSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiLCBhcGNiMSk7XG4gMjI3Olx0XG4gMjI4Olx0XHRpZiAocmVhZF9ndWVzdF9yZWFsKHZjcHUsIGFwY2JfZ3BhLCBhcGNiX3MsXG4gMjI5Olx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEpKSlcbiAyMzA6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMjMxOlx0XG4gMjMyOlx0XHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXG4gMjMzOlx0XHRcdCAgIEJJVFNfUEVSX0JZVEUgKiBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSk7XG4gMjM0Olx0XG4gMjM1Olx0XHRyZXR1cm4gMDtcbiAyMzY6XHR9XG4gMjM3Olx0XG4gMjM4Olx0LyoqXG4gMjM5Olx0ICogc2V0dXBfYXBjYiAtIENyZWF0ZSBhIHNoYWRvdyBjb3B5IG9mIHRoZSBhcGNiLlxuIDI0MDpcdCAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuIDI0MTpcdCAqIEBjcnljYl9zOiBwb2ludGVyIHRvIHNoYWRvdyBjcnljYlxuIDI0MjpcdCAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcbiAyNDM6XHQgKiBAY3J5Y2JfaDogcG9pbnRlciB0byB0aGUgaG9zdCBjcnljYlxuIDI0NDpcdCAqIEBmbXRfbzogZm9ybWF0IG9mIHRoZSBvcmlnaW5hbCBndWVzdCBjcnljYi5cbiAyNDU6XHQgKiBAZm10X2g6IGZvcm1hdCBvZiB0aGUgaG9zdCBjcnljYi5cbiAyNDY6XHQgKlxuIDI0NzpcdCAqIENoZWNrcyB0aGUgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgaG9zdCBjcnljYiBhbmQgY2FsbHMgdGhlXG4gMjQ4Olx0ICogYXBwcm9wcmlhdGUgY29weSBmdW5jdGlvbi5cbiAyNDk6XHQgKlxuIDI1MDpcdCAqIFJldHVybiAwIG9yIGFuIGVycm9yIG51bWJlciBpZiB0aGUgZ3Vlc3QgYW5kIGhvc3QgY3J5Y2IgYXJlIGluY29tcGF0aWJsZS5cbiAyNTE6XHQgKi9cbiAyNTI6XHRzdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxuIDI1MzpcdFx0ICAgICAgIGNvbnN0IHUzMiBjcnljYl9ncGEsXG4gMjU0Olx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfaCxcbiAyNTU6XHRcdCAgICAgICBpbnQgZm10X28sIGludCBmbXRfaClcbiAyNTY6XHR7XG4gMjU3Olx0XHRzd2l0Y2ggKGZtdF9vKSB7XG4gMjU4Olx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG4gMjU5Olx0XHRcdGlmICgoY3J5Y2JfZ3BhIFx1MDAyNiBQQUdFX01BU0spICE9ICgoY3J5Y2JfZ3BhICYjNDM7IDI1NikgXHUwMDI2IFBBR0VfTUFTSykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cmFjaW5nIHRoaXMgYGFwY2Jfc2AgcG9pbnRlci4uLiByaWdodCwgaXQmIzM5O3MgYSBwb2ludGVyIHRvIGBjcnljYl9zLSZndDthcGNiMWAuIEdvdCBpdCwgdGhhdCBtYWtlcyBzZW5zZS4gSGFuZyBvbiwgbGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSBgY3J5Y2Jfc2AgaXMgYWN0dWFsbHkgYWxsb2NhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoYXQgc3RydWN0dXJlIHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGBzZXR1cF9hcGNiYCBpcyBjYWxsZWQgLSB0aGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gVHJhY2tpbmcgZG93biBhbGxvY2F0aW9uIGFuZCB1c2FnZSBpcyB0aGUga2V5IGhlcmUuIExldCBtZSB0cmFjZSB0aGF0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldHVwX2FwY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2My0vKiBDb3B5IHRvIEFQQ0IgRk9STUFUMSBmcm9tIEFQQ0IgRk9STUFUMCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjUtXHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE4NS0vKipcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE4NjogKiBzZXR1cF9hcGNiMDAgLSBDb3B5IHRvIEFQQ0IgRk9STUFUMCBmcm9tIEFQQ0IgRk9STUFUMFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTg3LSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5My0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE5NDpzdGF0aWMgaW50IHNldHVwX2FwY2IwMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5NS1cdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgdW5zaWduZWQgbG9uZyAqYXBjYl9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMS0vKipcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIxMjogKiBzZXR1cF9hcGNiMTEgLSBDb3B5IHRoZSBGT1JNQVQxIEFQQ0IgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIHNoYWRvdyBDUllDQlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjEzLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxOS0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyMDpzdGF0aWMgaW50IHNldHVwX2FwY2IxMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyMS1cdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMzgtLyoqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMzk6ICogc2V0dXBfYXBjYiAtIENyZWF0ZSBhIHNoYWRvdyBjb3B5IG9mIHRoZSBhcGNiLlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQwLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1MS0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1MjpzdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjUzLVx0ICAgICAgIGNvbnN0IHUzMiBjcnljYl9ncGEsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjYyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MjYzOlx0XHRyZXR1cm4gc2V0dXBfYXBjYjExKHZjcHUsICh1bnNpZ25lZCBsb25nICopXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2NC1cdFx0XHRcdCAgICBjcnljYl9ncGEsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY4LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjk6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcwLVx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3Mi1cdFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjczOlx0XHRcdHJldHVybiBzZXR1cF9hcGNiMDAodmNwdSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3NC1cdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjAsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg2LVx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4OS1cdFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjkwOlx0XHRcdHJldHVybiBzZXR1cF9hcGNiMDAodmNwdSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI5MS1cdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjAsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MzE5PXN0YXRpYyBpbnQgc2hhZG93X2NyeWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM1MC1cdGlmIChhcGllX3MpIHtcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MTpcdFx0cmV0ID0gc2V0dXBfYXBjYih2Y3B1LCBcdTAwMjZ2c2llX3BhZ2UtXHUwMDNlY3J5Y2IsIGNyeWNiX2FkZHIsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTItXHRcdFx0XHQgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRlY29uc3RydWN0aW5nIGEgUG9pbnRlciBhbmQgSXRzIENvbnRleHQqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIHRlbGxpbmcgbWUgdGhhdCBgY3J5Y2Jfc2AgaXMgYSBwb2ludGVyIHRvIHNvbWV0aGluZ+KAlHNwZWNpZmljYWxseSwgdGhlIGBjcnljYmAgbWVtYmVyIG9mIGEgYHZzaWVfcGFnZWAgc3RydWN0dXJlLiBPa2F5LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB2c2llX3BhZ2VgICppcyouIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbmF0dXJlIG9mIGB2c2llX3BhZ2VgLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kIGhvdyBgY3J5Y2JgIGlzIGRlZmluZWQuIFRoaXMgaXMgY29tbW9uIHByYWN0aWNlLCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIGZ1bGwgc3RydWN0dXJlIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgd2hhdCBgY3J5Y2Jfc2AgaXMgYWN0dWFsbHkgcmVmZXJlbmNpbmcuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpZiB0aGlzIHBvaW50ZXIgaXMgdmFsaWQgYW5kIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgYWNjZXNzaWJsZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdnNpZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmM9MzA9ZW51bSB2c2llX3BhZ2VfZmxhZ3Mge1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzLVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzQ6c3RydWN0IHZzaWVfcGFnZSB7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNS1cdHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgc2NiX3M7XHQvKiAweDAwMDAgKi9cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03Mi1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjczOnN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpID09IFBBR0VfU0laRSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03NC1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz03Nj1zdGF0aWMgaW50IHNldF92YWxpZGl0eV9pY3B0KHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgKnNjYixcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy04NS0vKiBtYXJrIHRoZSBwcmVmaXggYXMgdW5tYXBwZWQsIHRoaXMgd2lsbCBibG9jayB0aGUgVlNJRSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6ODY6c3RhdGljIHZvaWQgcHJlZml4X3VubWFwcGVkKHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05MS0vKiBtYXJrIHRoZSBwcmVmaXggYXMgdW5tYXBwZWQgYW5kIHdhaXQgdW50aWwgdGhlIFZTSUUgaGFzIGJlZW4gbGVmdCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6OTI6c3RhdGljIHZvaWQgcHJlZml4X3VubWFwcGVkX3N5bmMoc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTMte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMS0vKiBtYXJrIHRoZSBwcmVmaXggYXMgbWFwcGVkLCB0aGlzIHdpbGwgYWxsb3cgdGhlIFZTSUUgdG8gcnVuICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDI6c3RhdGljIHZvaWQgcHJlZml4X21hcHBlZChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDMte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNy0vKiB0ZXN0IGlmIHRoZSBwcmVmaXggaXMgbWFwcGVkIGludG8gdGhlIGdtYXAgc2hhZG93ICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDg6c3RhdGljIGludCBwcmVmaXhfaXNfbWFwcGVkKHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwOS17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTEzLS8qIGNvcHkgdGhlIHVwZGF0ZWQgaW50ZXJ2ZW50aW9uIHJlcXVlc3QgYml0cyBpbnRvIHRoZSBzaGFkb3cgc2NiICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMTQ6c3RhdGljIHZvaWQgdXBkYXRlX2ludGVydmVudGlvbl9yZXF1ZXN0cyhzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTUte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEyNC0vKiBzaGFkb3cgKGZpbHRlciBhbmQgdmFsaWRhdGUpIHRoZSBjcHVmbGFncyAgKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEyNTpzdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMjYte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTI1Mj1zdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxOC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMxOTpzdGF0aWMgaW50IHNoYWRvd19jcnljYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMyMC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzkzLVxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mzk0OnN0YXRpYyB2b2lkIHNoYWRvd19lc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zOTUte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTQwNS0vKiBzaGFkb3cgKHJvdW5kIHVwL2Rvd24pIHRoZSBpYmMgdG8gYXZvaWQgdmFsaWRpdHkgaWNwdCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NDA2OnN0YXRpYyB2b2lkIHByZXBhcmVfaWJjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNDA3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00MjgtLyogdW5zaGFkb3cgdGhlIHNjYiwgY29weWluZyBwYXJhbWV0ZXJzIGJhY2sgdG8gdGhlIHJlYWwgc2NiICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo0Mjk6c3RhdGljIHZvaWQgdW5zaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNDMwLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00NzktICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo0ODA6c3RhdGljIGludCBzaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNDgxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz02MjQ9dm9pZCBrdm1fczM5MF92c2llX2dtYXBfbm90aWZpZXIoc3RydWN0IGdtYXAgKmdtYXAsIGdwYV90IHN0YXJ0LCBncGFfdCBlbmQpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02MjUte1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NjI2Olx0c3RydWN0IHZzaWVfcGFnZSAqY3VyLCAqbmV4dDtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTYyNy1cdHVuc2lnbmVkIGxvbmcgcHJlZml4O1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTY1NC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjY1NTpzdGF0aWMgaW50IG1hcF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTY1Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9NzAzPXN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03MTAtLyogdW5waW4gYWxsIGJsb2NrcyBwcmV2aW91c2x5IHBpbm5lZCBieSBwaW5fYmxvY2tzKCksIG1hcmtpbmcgdGhlbSBkaXJ0eSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NzExOnN0YXRpYyB2b2lkIHVucGluX2Jsb2NrcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTcxMi17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzY2LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NzY3OnN0YXRpYyBpbnQgcGluX2Jsb2NrcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc2OC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtODg0LS8qIHVucGluIHRoZSBzY2IgcHJvdmlkZWQgYnkgZ3Vlc3QgMiwgbWFya2luZyBpdCBhcyBkaXJ0eSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6ODg1OnN0YXRpYyB2b2lkIHVucGluX3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg4Ni1cdFx0ICAgICAgZ3BhX3QgZ3BhKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTkwMC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjkwMTpzdGF0aWMgaW50IHBpbl9zY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05MDItXHRcdCAgIGdwYV90IGdwYSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz05MjM9c3RhdGljIGludCBpbmplY3RfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBfX3UxNiBjb2RlLCBfX3U2NCB2YWRkcixcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05NTItICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo5NTM6c3RhdGljIGludCBoYW5kbGVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk1NC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTc4LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6OTc5OnN0YXRpYyB2b2lkIGhhbmRsZV9sYXN0X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05ODAte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk4NS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjk4NjpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdnNpZV9pY3B0KHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk4Ny17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTkxLS8qIHJld2luZCB0aGUgcHN3IGFuZCBjbGVhciB0aGUgdnNpZSBpY3B0LCBzbyB3ZSBjYW4gcmV0cnkgZXhlY3V0aW9uICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo5OTI6c3RhdGljIHZvaWQgcmV0cnlfdnNpZV9pY3B0KHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk5My17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAwNi1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEwMDc6c3RhdGljIGludCBoYW5kbGVfc3RmbGVfMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMDgtXHRcdFx0ICB1MzIgZmFjX2xpc3Rfb3JpZ2luKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMjMtXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDI0OnN0YXRpYyBpbnQgaGFuZGxlX3N0ZmxlXzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHUzMiBmYWNfbGlzdF9vcmlnaW4pXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDI1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDUyLSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTA1MzpzdGF0aWMgaW50IGhhbmRsZV9zdGZsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNTQte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNjEtXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHZzaWVfcGFnZS1cdTAwM2VmYWMpIFx1MDAzYyAoKFMzOTBfQVJDSF9GQUNfTElTVF9TSVpFX1U2NCAmIzQzOyAxKSAqIHNpemVvZih1NjQpKSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDYyOlx0QlVJTERfQlVHX09OKCFJU19BTElHTkVEKG9mZnNldG9mKHN0cnVjdCB2c2llX3BhZ2UsIGZhYyksIDgpKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNjMtXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTA5My0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEwOTQ6c3RhdGljIHU2NCB2c2llX2dldF9yZWdpc3RlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSwgdTggcmVnKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTA5NS17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTEwNy1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjExMDg6c3RhdGljIGludCB2c2llX2hhbmRsZV9tdnBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTA5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg3LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTE4ODpzdGF0aWMgaW50IGRvX3ZzaWVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg5LVx0X19yZWxlYXNlcyh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEyODQtXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMjg1OnN0YXRpYyB2b2lkIHJlbGVhc2VfZ21hcF9zaGFkb3coc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTI4Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMwMC1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzMDE6c3RhdGljIHN0cnVjdCBnbWFwICphY3F1aXJlX2dtYXBfc2hhZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMwMi17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTM1Mz1zdGF0aWMgdm9pZCByZWdpc3Rlcl9zaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzNTQ6XHRcdFx0XHRzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzU1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMzgzPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM5Ni0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzOTc6c3RhdGljIGludCB2c2llX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEzOTgte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0NjMtLyogVHJ5IGdldHRpbmcgYSBnaXZlbiB2c2llIHBhZ2UsIHJldHVybmluZyBcJiMzNDt0cnVlXCYjMzQ7IG9uIHN1Y2Nlc3MuICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDY0OnN0YXRpYyBpbmxpbmUgYm9vbCB0cnlfZ2V0X3ZzaWVfcGFnZShzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDY1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDcxLS8qIFB1dCBhIHZzaWUgcGFnZSBhY3F1aXJlZCB0aHJvdWdoIGdldF92c2llX3BhZ2UgLyB0cnlfZ2V0X3ZzaWVfcGFnZS4gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE0NzI6c3RhdGljIHZvaWQgcHV0X3ZzaWVfcGFnZShzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDczLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDgzLSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTQ4NDpzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODUte1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTQ4NjpcdHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODctXHRpbnQgbnJfdmNwdXM7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTU1Nz1pbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU1OC17XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTU5Olx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU2MC1cdHVuc2lnbmVkIGxvbmcgc2NiX2FkZHI7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU2OC1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE1Njk6XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTcwLVx0c2NiX2FkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3ModmNwdSwgTlVMTCk7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTYyMT12b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjIyLXtcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2MjM6XHRzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2U7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjI0LVx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDE1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVBDQiBUcmFuc2ZlciBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2c2llX3BhZ2VgIHN0cnVjdHVyZSDigJMgaXQmIzM5O3MgYWxsb2NhdGVkLCBjYWNoZWQsIGFuZCBzZWVtcyBjcnVjaWFsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhY3RpbmcgYXMgYSB0ZW1wb3Jhcnkgc3RvcmFnZSBhcmVhLCBsaWtlbHkgZm9yIGVmZmljaWVuY3kmIzM5O3Mgc2FrZS4gTm93LCBgc2V0dXBfYXBjYjEwYCBpcyBncmFiYmluZyBteSBhdHRlbnRpb24uIEl0IGFwcGVhcnMgdG8gYmUgcmVzcG9uc2libGUgZm9yIGNvcHlpbmcgYGFwY2IwYCBkYXRhIGZyb20gdGhlIGd1ZXN0IG1lbW9yeSBpbnRvIGBhcGNiMWAsIGJ1dCwgaW1wb3J0YW50bHksIHRoaXMgY29weSBpcyBoYXBwZW5pbmcgaW4gdGhlIHNoYWRvdyBjcnljYiB3aXRoaW4gYHZzaWVfcGFnZWAuIFRoZSBzaGFkb3cgY3J5Y2IhIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBhcmVhIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IFNJRSwgdXNlcyB3aGVuIG5lc3RlZCBndWVzdHMgYXJlIHJ1bm5pbmcuIE1ha2VzIHNlbnNlLCBzbyB3ZSBhcmUgc2V0dGluZyB1cCB0aGUgc3RydWN0dXJlIHRoYXQgU0lFIGlzIGdvaW5nIHRvIHVzZSwgYW5kIHdlIGFyZSBjYWNoaW5nIGl0IHRvIHNhdmUgdGltZSBpbiB0aGUgaG90IHBhdGguCgpOb3cgSSBzZWUgYGFwY2Jfc2AgaXMgYSBwb2ludGVyIHRvIGBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjFgLiBJIG5lZWQgdG8gcmV2aWV3IGBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjFgLiBJdCBoYXMgdG8gY29udGFpbiB0aGUgZGF0YSB0aGF0JiMzOTtzIGJlaW5nIHNldCB1cCBhbmQgdGhhdCBTSUUgbmVlZHMsIHdoaWNoIHN1Z2dlc3RzIGl0IGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSBzdGF0ZS4gSSB3aWxsIGdvIGFuZCByZXZpZXcgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrdm1fczM5MF9hcGNiMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9NTQ3PXN0cnVjdCBrdm1fczM5MF9hcGNiMCB7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNTU0LSNkZWZpbmUgQVBDQjFfTUFTS19TSVpFIDRcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjU1NTpzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEge1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNTU2LVx0X191NjQgYXBtW0FQQ0IxX01BU0tfU0laRV07XHRcdC8qIDB4MDAwMCAqL1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTU2Mj1zdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC01NjYtXHRfX3U4ICAgYWVzX3dyYXBwaW5nX2tleV9tYXNrWzMyXTtcdC8qIDB4MDA2MCAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NTY3Olx0c3RydWN0IGt2bV9zMzkwX2FwY2IxIGFwY2IxO1x0XHQvKiAweDAwODAgKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTU2OC19O1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2NTpcdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX2gpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjYte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTIyMD1zdGF0aWMgaW50IHNldHVwX2FwY2IxMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2Jfcyxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjgtXHRpZiAocmVhZF9ndWVzdF9yZWFsKHZjcHUsIGFwY2JfZ3BhLCBhcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjk6XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEpKSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMC1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjMyLVx0Yml0bWFwX2FuZChhcGNiX3MsIGFwY2JfcywgYXBjYl9oLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjMzOlx0XHQgICBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMSkpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGt2bV9zMzkwX2FwY2IxYCBzdHJ1Y3Q6CgoqKkV4YW1pbmluZyB0aGUgYGt2bV9zMzkwX2FwY2IxYCBTdHJ1Y3R1cmUqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEl0JiMzOTtzIGxvY2F0ZWQgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCwgc28gSSYjMzk7bGwgbmVlZCB0byBnbyB0aGVyZSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBmaWVsZHMuIEkga25vdyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIEtWTSBpbXBsZW1lbnRhdGlvbiBvbiBzMzkwLCBzbyBpdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIEFjY2VzcyBQYXJhbWV0ZXIgQ29udHJvbCBCbG9jayAoQVBDQikgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB2aXJ0dWFsaXphdGlvbiwgcGFydGljdWxhcmx5IGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIGVtdWxhdGluZyBpdHMgYmVoYXZpb3IgZm9yIGd1ZXN0IFZNcy4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIGV4YW1pbmUgd2hlcmUgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCwgaG93IGl0JiMzOTtzIGJlaW5nIHBvcHVsYXRlZCwgYW5kIHdoaWNoIGZ1bmN0aW9ucyB1c2UgaXQuIEZyb20gdGhhdCwgSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgaXRzIHJvbGUgaW4gdGhlIHZpcnR1YWxpemF0aW9uIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGl0cyBmaWVsZHMsIHNwZWNpZmljYWxseSwgdG8gZ2V0IGFuIGlkZWEgb2YgdGhlIHR5cGVzIG9mIEFQQ0Igb3BlcmF0aW9ucyBiZWluZyBtYW5hZ2VkIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcm9sZSBpdCBwbGF5cyBpbiB0aGUgb3ZlcmFsbCBLVk0tb24tczM5MCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdFx0X191NjQgYWRtW0FQQ0IwX01BU0tfU0laRV07XHRcdC8qIDB4MDAxMCAqL1xuIDU1MTpcdFx0X191NjQgcmVzZXJ2ZWQxODtcdFx0XHQvKiAweDAwMTggKi9cbiA1NTI6XHR9O1xuIDU1MzpcdFxuIDU1NDpcdCNkZWZpbmUgQVBDQjFfTUFTS19TSVpFIDRcbiA1NTU6XHRzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEge1xuIDU1NjpcdFx0X191NjQgYXBtW0FQQ0IxX01BU0tfU0laRV07XHRcdC8qIDB4MDAwMCAqL1xuIDU1NzpcdFx0X191NjQgYXFtW0FQQ0IxX01BU0tfU0laRV07XHRcdC8qIDB4MDAyMCAqL1xuIDU1ODpcdFx0X191NjQgYWRtW0FQQ0IxX01BU0tfU0laRV07XHRcdC8qIDB4MDA0MCAqL1xuIDU1OTpcdFx0X191NjQgcmVzZXJ2ZWQ2MFs0XTtcdFx0XHQvKiAweDAwNjAgKi9cbiA1NjA6XHR9O1xuIDU2MTpcdFxuIDU2MjpcdHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2Ige1xuIDU2MzpcdFx0c3RydWN0IGt2bV9zMzkwX2FwY2IwIGFwY2IwO1x0XHQvKiAweDAwMDAgKi9cbiA1NjQ6XHRcdF9fdTggICByZXNlcnZlZDIwWzB4MDA0OCAtIDB4MDAyMF07XHQvKiAweDAwMjAgKi9cbiA1NjU6XHRcdF9fdTggICBkZWFfd3JhcHBpbmdfa2V5X21hc2tbMjRdO1x0LyogMHgwMDQ4ICovXG4gNTY2Olx0XHRfX3U4ICAgYWVzX3dyYXBwaW5nX2tleV9tYXNrWzMyXTtcdC8qIDB4MDA2MCAqL1xuIDU2NzpcdFx0c3RydWN0IGt2bV9zMzkwX2FwY2IxIGFwY2IxO1x0XHQvKiAweDAwODAgKi9cbiA1Njg6XHR9O1xuIDU2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA4OAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBrdm1fczM5MF9hcGNiMWAgU3RydWN0dXJlIGFuZCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBvZiBga3ZtX3MzOTBfYXBjYjFgLiBSaWdodCwgaXQgY29udGFpbnMgYGFwbWAsIGBhcW1gLCBhbmQgYGFkbWAgYXJyYXlzLCBlYWNoIG9mIHNpemUgZm91ciwgYW5kIHRoZW4gYHJlc2VydmVkNjBbNF1gLiBFYWNoIG9mIHRob3NlIGFycmF5cyBpcyAzMiBieXRlcyAoNCAqIDgpLCBhbmQgdGhlIHdob2xlIHRoaW5nIHN1bXMgdXAgdG8gMTI4IGJ5dGVzLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZXR1cF9hcGNiMTBgIGZ1bmN0aW9uLiBJIHNlZSB0aGUga2V5IGNoYW5nZS4gUHJldmlvdXNseSwgdGhlIHN0cnVjdHVyZSBgYXBjYl9zYCB3YXNuJiMzOTt0IGluaXRpYWxpemVkIGF0IGFsbC4gVGhlIGNvZGUgc25pcHBldCB1c2VkIHRvIGxvb2sgbGlrZSB0aGlzLCB3aGljaCBpcyBjb25jZXJuaW5nOgoKYGBgYwoJYXBjYl9zLSZndDthcG1bMF0gPSBhcGNiX2gtJmd0O2FwbVswXSAmYW1wOyB0bXAuYXBtWzBdOwoJYXBjYl9zLSZndDthcW1bMF0gPSBhcGNiX2gtJmd0O2FxbVswXSAmYW1wOyB0bXAuYXFtWzBdICZhbXA7IDB4ZmZmZjAwMDAwMDAwMDAwMFVMOwoJYXBjYl9zLSZndDthZG1bMF0gPSBhcGNiX2gtJmd0O2FkbVswXSAmYW1wOyB0bXAuYWRtWzBdICZhbXA7IDB4ZmZmZjAwMDAwMDAwMDAwMFVMOwpgYGAKCk5vdywgdGhlcmUmIzM5O3MgYSBgbWVtc2V0YCBiZWZvcmUgdGhvc2UgYXNzaWdubWVudHMuIFRoYXQmIzM5O3MgYSBnb29kIGZpeCwgYnV0IG5vdyB0aGUgcXVlc3Rpb24gaXM6IHdoYXQgd291bGQgYmUgdGhlIGltcGFjdCBvZiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBpbXBsaWNhdGlvbnMgb2YgKm5vdCogaW5pdGlhbGl6aW5nIGBhcGNiX3NgIG1lYW5zIHRoYXQgYGFwbVsxLi4zXWAsIGBhcW1bMS4uM11gLCBgYWRtWzEuLjNdYCwgYW5kIGByZXNlcnZlZDYwWzAuLjNdYCB3b3VsZCBiZSBsZWZ0IHdpdGggd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5lZCB0byBiZSBpbiB0aGF0IG1lbW9yeSBsb2NhdGlvbi4gVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgcHJldHR5IHVucHJlZGljdGFibGUgYmVoYXZpb3IuCgpUaGUgcGxvdCB0aGlja2VucyB0aG91Z2guIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYGFwY2Jfc2AgaXNuJiMzOTt0IGp1c3QgYSBzdGFuZGFsb25lIHN0cnVjdHVyZS4gSXQmIzM5O3MgYSBwb2ludGVyIHRvIGBjcnljYl9zLSZndDthcGNiMWAsIHdoaWNoIGl0c2VsZiBpcyBuZXN0ZWQgd2l0aGluIGB2c2llX3BhZ2UtJmd0O2NyeWNiYC4gVGhpcyBpcyBpbXBvcnRhbnQuIElmIGB2c2llX3BhZ2VgIGlzbiYjMzk7dCB6ZXJvZWQgd2hlbiBpdCYjMzk7cyBhbGxvY2F0ZWQsIHRoZW4gd2UgY291bGQgc3RpbGwgaGF2ZSB1bmluaXRpYWxpemVkIGRhdGEgcHJvcGFnYXRpbmcgZXZlbiBhZnRlciB0aGUgZml4LCBiZWNhdXNlIGBtZW1zZXRgIHdvdWxkIG9ubHkgYXBwbHkgdG8gdGhlIHN1Yi1zdHJ1Y3R1cmUsIG5vdCB0aGUgd2hvbGUgc3RydWN0dXJlLiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gcGF0aCBmb3IgYHZzaWVfcGFnZWAuIEkgc2hvdWxkIGRpZyBpbnRvIGBnZXRfdnNpZV9wYWdlYCB0byB2ZXJpZnkgaG93IGl0JiMzOTtzIGFsbG9jYXRlZCwgYW5kIGlmIGl0JiMzOTtzIGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDgwOlx0ICogUmV0dXJuczogLSBhZGRyZXNzIG9mIGEgdnNpZSBwYWdlIChjYWNoZWQgb3IgbmV3IG9uZSlcbjE0ODE6XHQgKiAgICAgICAgICAtIE5VTEwgaWYgdGhlIHNhbWUgc2NiIGFkZHJlc3MgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgVkNQVVxuMTQ4MjpcdCAqICAgICAgICAgIC0gRVJSX1BUUigtRU5PTUVNKSBpZiBvdXQgb2YgbWVtb3J5XG4xNDgzOlx0ICovXG4xNDg0Olx0c3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4xNDg1Olx0e1xuMTQ4NjpcdFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xuMTQ4NzpcdFx0aW50IG5yX3ZjcHVzO1xuMTQ4ODpcdFxuMTQ4OTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTQ5MDpcdFx0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIDkpO1xuMTQ5MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xNDkyOlx0XHRpZiAodnNpZV9wYWdlKSB7XG4xNDkzOlx0XHRcdGlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKSB7XG4xNDk0Olx0XHRcdFx0aWYgKHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhID09IGFkZHIpXG4xNDk1Olx0XHRcdFx0XHRyZXR1cm4gdnNpZV9wYWdlO1xuMTQ5NjpcdFx0XHRcdC8qXG4xNDk3Olx0XHRcdFx0ICogV2UgcmFjZWQgd2l0aCBzb21lb25lIHJldXNpbmcgJiM0MzsgcHV0dGluZyB0aGlzIHZzaWVcbjE0OTg6XHRcdFx0XHQgKiBwYWdlIGJlZm9yZSB3ZSBncmFiYmVkIGl0LlxuMTQ5OTpcdFx0XHRcdCAqL1xuMTUwMDpcdFx0XHRcdHB1dF92c2llX3BhZ2UodnNpZV9wYWdlKTtcbjE1MDE6XHRcdFx0fVxuMTUwMjpcdFx0fVxuMTUwMzpcdFxuMTUwNDpcdFx0LypcbjE1MDU6XHRcdCAqIFdlIHdhbnQgYXQgbGVhc3QgI29ubGluZV92Y3B1cyBzaGFkb3dzLCBzbyBldmVyeSBWQ1BVIGNhbiBleGVjdXRlXG4xNTA2Olx0XHQgKiB0aGUgVlNJRSBpbiBwYXJhbGxlbC5cbjE1MDc6XHRcdCAqL1xuMTUwODpcdFx0bnJfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbjE1MDk6XHRcbjE1MTA6XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5tdXRleCk7XG4xNTExOlx0XHRpZiAoa3ZtLVx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50IFx1MDAzYyBucl92Y3B1cykge1xuMTUxMjpcdFx0XHR2c2llX3BhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPIHwgR0ZQX0RNQSk7XG4xNTEzOlx0XHRcdGlmICghdnNpZV9wYWdlKSB7XG4xNTE0Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUubXV0ZXgpO1xuMTUxNTpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTUxNjpcdFx0XHR9XG4xNTE3Olx0XHRcdF9fc2V0X2JpdChWU0lFX1BBR0VfSU5fVVNFLCBcdTAwMjZ2c2llX3BhZ2UtXHUwMDNlZmxhZ3MpO1xuMTUxODpcdFx0XHRrdm0tXHUwMDNlYXJjaC52c2llLnBhZ2VzW2t2bS1cdTAwM2VhcmNoLnZzaWUucGFnZV9jb3VudF0gPSB2c2llX3BhZ2U7XG4xNTE5Olx0XHRcdGt2bS1cdTAwM2VhcmNoLnZzaWUucGFnZV9jb3VudCYjNDM7JiM0Mzs7XG4xNTIwOlx0XHR9IGVsc2Uge1xuMTUyMTpcdFx0XHQvKiByZXVzZSBhbiBleGlzdGluZyBlbnRyeSB0aGF0IGJlbG9uZ3MgdG8gbm9ib2R5ICovXG4xNTIyOlx0XHRcdHdoaWxlICh0cnVlKSB7XG4xNTIzOlx0XHRcdFx0dnNpZV9wYWdlID0ga3ZtLVx1MDAzZWFyY2gudnNpZS5wYWdlc1trdm0tXHUwMDNlYXJjaC52c2llLm5leHRdO1xuMTUyNDpcdFx0XHRcdGlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKVxuMTUyNTpcdFx0XHRcdFx0YnJlYWs7XG4xNTI2Olx0XHRcdFx0a3ZtLVx1MDAzZWFyY2gudnNpZS5uZXh0JiM0MzsmIzQzOztcbjE1Mjc6XHRcdFx0XHRrdm0tXHUwMDNlYXJjaC52c2llLm5leHQgJT0gbnJfdmNwdXM7XG4xNTI4Olx0XHRcdH1cbjE1Mjk6XHRcdFx0aWYgKHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNjEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrYWdlIGluIFZTSUUgUGFnZSBSZXVzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdnNpZV9wYWdlYCBhbGxvY2F0aW9uIGFuZCByZXVzZSBzY2hlbWUuIEkgc2VlIHRoYXQgdGhlIHBhZ2UgaXMgaW5pdGlhbGx5IGFsbG9jYXRlZCB3aXRoIGBfX0dGUF9aRVJPYCwgd2hpY2ggaXMgZ29vZCBmb3IgaW5pdGlhbCBjbGVhbmxpbmVzcy4gSG93ZXZlciwgdGhlIGNydWNpYWwgYml0IGlzIHRoYXQgaXQmIzM5O3MgY2FjaGVkIGFuZCByZXVzZWQuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSAqZG9lc24mIzM5O3QqIHplcm8gdGhlIHBhZ2UgZHVyaW5nIHJldXNlLiBNeSB0aG91Z2h0IHByb2Nlc3MgaW1tZWRpYXRlbHkganVtcHMgdG8gJiMzNDtzdGFsZSBkYXRhISYjMzQ7IFRoaXMgbWVhbnMgYHZzaWVfcGFnZS0mZ3Q7Y3J5Y2JgIGNvdWxkIHJldGFpbiByZW1uYW50cyBmcm9tIGEgcHJpb3IgZ3Vlc3QmIzM5O3MgdXNhZ2UuIEFuZCB0aGlzIGB2c2llX3BhZ2UtJmd0O2NyeWNiYCBpcywgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBkaXJlY3RseSB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBmb3IgbmVzdGVkIGd1ZXN0IGV4ZWN1dGlvbi4KCk5vdywgaWYgYHNldHVwX2FwY2IxMGAgbGVhdmVzIGBhcG1bMS4uM11gLCBgYXFtWzEuLjNdYCwgYGFkbVsxLi4zXWAgdW5pbml0aWFsaXplZCBkdXJpbmcgaXRzIG9wZXJhdGlvbiwgdGhlIGhhcmR3YXJlICp3aWxsKiByZWFkIHRoZXNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGR1cmluZyBuZXN0ZWQgZ3Vlc3QgZXhlY3V0aW9uLiBUaGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIGEgbmVzdGVkIGd1ZXN0IG9ic2VydmUgdGhlIHN0YXRlIGZyb20gdGhvc2UgdW5pbml0aWFsaXplZCBmaWVsZHM/IFRoaXMgc2VlbXMgbGlrZSBhIGRlZmluaXRlIGluZm9ybWF0aW9uIGxlYWsgdmVjdG9yIGlmIHRoZSBoYXJkd2FyZSYjMzk7cyBvcGVyYXRpb24gaXMgaW5mbHVlbmNlZCBhbmQgb2JzZXJ2YWJsZSBieSB0aGUgbmVzdGVkIGd1ZXN0LiBGb3IgZXhhbXBsZSwgaWYgaXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZSBuZXN0ZWQgZ3Vlc3QgdG8gZXhlY3V0ZSBjcnlwdG8gaW5zdHJ1Y3Rpb25zIGl0IHNob3VsZCBub3QgaGF2ZSBhY2Nlc3MgdG8sIG9yIHJlYWQgc29tZSBzdGF0ZSwgaXQgaXMgY2VydGFpbmx5IGFuIGlzc3VlLgoKVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhlIGNvcHkgb3BlcmF0aW9uIGZyb20gYHNldHVwX2FwY2IxMGAgYmV0d2VlbiBmb3JtYXRzPyBUaGF0IGlzLCBgc2V0dXBfYXBjYjEwYCBjb3BpZXMgRk9STUFUMCB0byBGT1JNQVQxPyBObywgYHNldHVwX2FwY2IxMGAgaXMgdXNlZCB0byBjb3B5IGZyb20gQVBDQiBGT1JNQVQwIHRvIEFQQ0IgRk9STUFUMSwgdGhhdCBpcywgd2hlbiBgZm10X28gPT0gQ1JZQ0JfRk9STUFUMGAgYW5kIGBmbXRfaCA9PSBDUllDQl9GT1JNQVQyYC4gSSBuZWVkIHRvIHJldmlldyB3aGVyZSBgc2V0dXBfYXBjYmAgaXMgY2FsbGVkIHRvIGNsYXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUyOlx0c3RhdGljIGludCBzZXR1cF9hcGNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfcyxcbiAyNTM6XHRcdCAgICAgICBjb25zdCB1MzIgY3J5Y2JfZ3BhLFxuIDI1NDpcdFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX2gsXG4gMjU1Olx0XHQgICAgICAgaW50IGZtdF9vLCBpbnQgZm10X2gpXG4gMjU2Olx0e1xuIDI1NzpcdFx0c3dpdGNoIChmbXRfbykge1xuIDI1ODpcdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuIDI1OTpcdFx0XHRpZiAoKGNyeWNiX2dwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKGNyeWNiX2dwYSAmIzQzOyAyNTYpIFx1MDAyNiBQQUdFX01BU0spKVxuIDI2MDpcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIDI2MTpcdFx0XHRpZiAoZm10X2ggIT0gQ1JZQ0JfRk9STUFUMilcbiAyNjI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNjM6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMSh2Y3B1LCAodW5zaWduZWQgbG9uZyAqKVx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjEsXG4gMjY0Olx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuIDI2NTpcdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2Y3J5Y2JfaC1cdTAwM2VhcGNiMSk7XG4gMjY2Olx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG4gMjY3Olx0XHRcdHN3aXRjaCAoZm10X2gpIHtcbiAyNjg6XHRcdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuIDI2OTpcdFx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbiAyNzA6XHRcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbiAyNzE6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuIDI3MjpcdFx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG4gMjczOlx0XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxuIDI3NDpcdFx0XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMCxcbiAyNzU6XHRcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbiAyNzY6XHRcdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjApO1xuIDI3NzpcdFx0XHR9XG4gMjc4Olx0XHRcdGJyZWFrO1xuIDI3OTpcdFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxuIDI4MDpcdFx0XHRpZiAoKGNyeWNiX2dwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKGNyeWNiX2dwYSAmIzQzOyAzMikgXHUwMDI2IFBBR0VfTUFTSykpXG4gMjgxOlx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gMjgyOlx0XG4gMjgzOlx0XHRcdHN3aXRjaCAoZm10X2gpIHtcbiAyODQ6XHRcdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuIDI4NTpcdFx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbiAyODY6XHRcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbiAyODc6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuIDI4ODpcdFx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG4gMjg5Olx0XHRcdGNhc2UgQ1JZQ0JfRk9STUFUMDpcbiAyOTA6XHRcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXG4gMjkxOlx0XHRcdFx0XHRcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IwLFxuIDI5MjpcdFx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuIDI5MzpcdFx0XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXHUwMDI2Y3J5Y2JfaC1cdTAwM2VhcGNiMCk7XG4gMjk0Olx0XHRcdH1cbiAyOTU6XHRcdH1cbiAyOTY6XHRcdHJldHVybiAtRUlOVkFMO1xuIDI5NzpcdH1cbiAyOTg6XHRcbiAyOTk6XHQvKipcbiAzMDA6XHQgKiBzaGFkb3dfY3J5Y2IgLSBDcmVhdGUgYSBzaGFkb3cgY29weSBvZiB0aGUgY3J5Y2IgYmxvY2tcbiAzMDE6XHQgKiBAdmNwdTogYSBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ1JZQ0IgRm9ybWF0IE1pc21hdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGl0IGxvb2tzIGxpa2UgYHNldHVwX2FwY2IxMGAgaXMgdHJpZ2dlcmVkIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBmbXRfb2AgaXMgZWl0aGVyIGBDUllDQl9GT1JNQVQxYCBvciBgQ1JZQ0JfRk9STUFUMGAsIHdoaWxlIGBmbXRfaGAgaXMgYENSWUNCX0ZPUk1BVDJgLiBUaGlzIG1pc21hdGNoIGlzIHRoZSBjb3JlIGlzc3VlLiBUaGUgaG9zdCBpcyBhbnRpY2lwYXRpbmcgYSBgRk9STUFUMmAgQ1JZQ0IsIHdoaWNoIHV0aWxpemVzIGBhcGNiMWAsIGJ1dCB0aGUgZ3Vlc3QgaXMgcHJvdmlkaW5nIGEgYEZPUk1BVDFgIG9yIGBGT1JNQVQwYCBDUllDQiwgdXNpbmcgYGFwY2IwYCBpbnN0ZWFkLiBUaGUgZnVuY3Rpb24gYHNldHVwX2FwY2IxMGAgYWN0cyBhcyBhIHRyYW5zbGF0b3IsIGVmZmVjdGl2ZWx5IGNvbnZlcnRpbmcgYGFwY2IwYCBkYXRhIGludG8gYSBjb21wYXRpYmxlIGBhcGNiMWAgc3RydWN0dXJlLgoKVGhlIGNydXggb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgc3RydWN0dXJhbCBkaWZmZXJlbmNlIGJldHdlZW4gYGFwY2IwYCBhbmQgYGFwY2IxYC4gYGFwY2IwYCBoYXMgYSBzaW5nbGUgZWxlbWVudCBlYWNoIGZvciBgYXBtYCwgYGFxbWAsIGFuZCBgYWRtYCwgd2hlcmVhcyBgYXBjYjFgIGV4cGVjdHMgZm91ciBlbGVtZW50cyBmb3IgZWFjaC4gYHNldHVwX2FwY2IxMGAgZGlsaWdlbnRseSBwb3B1bGF0ZXMgdGhlIGZpcnN0IGVsZW1lbnQgKGBhcG1bMF1gLCBgYXFtWzBdYCwgYGFkbVswXWApIGZyb20gdGhlIGBhcGNiMGAgZGF0YSBidXQgbGVhdmVzIHRoZSBzdWJzZXF1ZW50IGVsZW1lbnRzIChgWzEuLjNdYCkgdW5pbml0aWFsaXplZC4KCk5vdywgYmVjYXVzZSBgdnNpZV9wYWdlYCBpcyByZXVzZWQsIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYSB0aWNraW5nIHRpbWUgYm9tYi4gVGhlIGFycmF5IGVsZW1lbnRzIGBhcG1bMS4uM11gLCBgYXFtWzEuLjNdYCwgYW5kIGBhZG1bMS4uM11gIGFyZSBub3cgc3VzY2VwdGlibGUgdG8gY29udGFpbmluZyBzdGFsZSBkYXRhIGZyb20gYSBwcmV2aW91cyBleGVjdXRpb24sIHBvdGVudGlhbGx5IGZyb20gYSBgRk9STUFUMmAgQ1JZQ0IgdGhhdCAqZnVsbHkqIHV0aWxpemVkIGBhcGNiMWAuCgpUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcy4gQSBuZXN0ZWQgZ3Vlc3QgY291bGQgaW5hZHZlcnRlbnRseSBiZSBncmFudGVkIGFjY2VzcyB0byBjcnlwdG8gcXVldWVzIG9yIGRvbWFpbnMgYXV0aG9yaXplZCBmb3IgYSBwcmV2aW91cyBuZXN0ZWQgZ3Vlc3QuIFRoZSBoYXJkd2FyZSwgaW4gcmVhZGluZyB0aGVzZSBzaGFkb3cgY3J5Y2IgdmFsdWVzLCBjb3VsZCB1c2UgdGhlIGJpdHMgdGhhdCBoYXZlIGJlZW4gc2V0IGluIGBhcG1bMS4uM11gIGZyb20gdGhlIHByZXZpb3VzIGd1ZXN0LCBpZiB0aGV5IHdlcmUgdGhlcmUsIGFsbG93aW5nIGFjY2VzcyBiYXNlZCBvbiB0aG9zZSBzZXQgYml0cyEKCldhaXQsIGlzIHRoaXMgYW4gdW5jaGVja2VkIG1lbW9yeSByZWFkIGJ5IHRoZSBoYXJkd2FyZT8gWWVzLCB0aGUgaGFyZHdhcmUgKmlzKiByZWFkaW5nIHRoZSBzaGFkb3cgQ1JZQ0IuIEEgY2hpbGxpbmcgdGhvdWdodC4KCkkgaW1tZWRpYXRlbHkgY29uc2lkZXIgS01TQU4uIFdpbGwgaXQgY2F0Y2ggdGhpcz8gS01TQU4gaXMgZmFudGFzdGljIGF0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBwZXJmb3JtZWQgYnkgdGhlICpDUFUqIHdoZW4gZXhlY3V0aW5nIGtlcm5lbCBjb2RlLiBCdXQgZG9lcyBpdCBkZXRlY3QgcmVhZHMgaW5pdGlhdGVkIGRpcmVjdGx5IGJ5IGhhcmR3YXJlLCB2aWEgRE1BIG9yIFNJRT8KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBLTVNBTiB3b24mIzM5O3QgYXV0b21hdGljYWxseSBpbnRlcmNlcHQgdGhlc2UgaGFyZHdhcmUtaW5pdGlhdGVkIHJlYWRzLiBJdCBkZXBlbmRzIG9uIGFuIGV4cGxpY2l0IGNoZWNrIG9yIGlmIHRoZSBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGNvdWxkIGJlIG1pc3NlZCBlbnRpcmVseS4KClRoZSB3b3JyeSBpcywgaWYgdGhlIG1lbW9yeSBpcyBwYXNzZWQgdG8gaGFyZHdhcmUsIEtNU0FOIG1heSBub3QgZGV0ZWN0IGl0IHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIEtNU0FOIGFubm90YXRpb24gZm9yIHRoZSBoYXJkd2FyZSBoeXBlcmNhbGwsIHN1Y2ggYXMgYGttc2FuX2NoZWNrX21lbW9yeWAuIE5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBpcyBhbnkgS01TQU4gY2hlY2sgZm9yIFNJRSBibG9jayBvciBDUllDQi4gVGltZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2NoZWNrX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS01TQU4gQ2hlY2sgQmVmb3JlIFNJRSBFeGVjdXRpb24/KioKCkFscmlnaHQsIGJlZm9yZSB3ZSBnZXQgYW55IGZ1cnRoZXIgaW50byB0aGlzLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHZlcmlmeWluZyB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBzdGF0dXMuIEl0JiMzOTtzIGEgY3JpdGljYWwgc2FmZXR5IG5ldCwgYW5kIG15IHByaW1hcnkgY29uY2VybiBpcyB0byBjYXRjaCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzICpiZWZvcmUqIHdlIGV2ZW4gdGhpbmsgYWJvdXQgZXhlY3V0aW5nIHRoZSBTeXN0ZW0gSW50ZWdyaXR5IEV4dGVuc2lvbiAoU0lFKS4gVGhlIFNJRSwgb2YgY291cnNlLCByZWxpZXMgb24gYSByb2NrLXNvbGlkIG1lbW9yeSBmb3VuZGF0aW9uLiBBbnkgaW5zdGFiaWxpdHksIGFueSBwb3NzaWJpbGl0eSBvZiB1bmRlZmluZWQgYmVoYXZpb3IgY3JlZXBpbmcgaW4gYXQgdGhhdCBzdGFnZSwgaXMgYSBkaXNhc3RlciB3YWl0aW5nIHRvIGhhcHBlbi4gU28sIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGFsd2F5cyBncmF2aXRhdGVzIHRvd2FyZHMgY29uZmlybWluZyB0aGF0IEtNU0FOIGlzIGFjdGl2ZSBhbmQgdGhhdCBhbnkgcmVsZXZhbnQgY2hlY2tzIGhhdmUgYmVlbiBwZXJmb3JtZWQuIFdlIG5lZWQgdGhhdCBndWFyYW50ZWUgb2YgYSBjbGVhbiBzbGF0ZSBiZWZvcmUgd2UgZXZlbiBlbnRlcnRhaW4gdGhlIGlkZWEgb2YgcnVubmluZyB0aGUgU0lFLiBJdCYjMzk7cyBhbGwgYWJvdXQgcmlzayBtaXRpZ2F0aW9uIGFuZCBlbnN1cmluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBzeXN0ZW0mIzM5O3MgZXhlY3V0aW9uIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxOTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqS01TQU4gQ29tcGF0aWJpbGl0eSDigJMgQSBRdWljayBSZWFsaXR5IENoZWNrKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBJJiMzOTttIHByZXR0eSBzdXJlIEtNU0FOLCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciwgaXNuJiMzOTt0IGZ1bGx5IGJha2VkIG9yIGV2ZW4gKnN1cHBvcnRlZCogb24gczM5MHguIE15IGd1dCYjMzk7cyB0ZWxsaW5nIG1lIHRoYXQmIzM5O3MgYSByZWQgZmxhZy4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoaXMuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHRoZSBwcm9qZWN0IHRvIHJ1biBvbiBzMzkweCwgc28gbGV0JiMzOTtzIGNoZWNrIHRoZSBzdXBwb3J0IG1hdHJpeCBhZ2Fpbi4gTmVlZCB0byBjb25maXJtIEtNU0FOJiMzOTtzIGNhcGFiaWxpdGllcyBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tNU0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTE4NS1cdHNlbGVjdCBIQVZFX0FSQ0hfS0NTQU5cbmFyY2gvczM5MC9LY29uZmlnOjE4NjpcdHNlbGVjdCBIQVZFX0FSQ0hfS01TQU5cbmFyY2gvczM5MC9LY29uZmlnLTE4Ny1cdHNlbGVjdCBIQVZFX0FSQ0hfS0ZFTkNFXG4tLVxuYXJjaC9zMzkwL01ha2VmaWxlPTQwPVVUU19NQUNISU5FXHQ6PSBzMzkweFxuYXJjaC9zMzkwL01ha2VmaWxlOjQxOlNUQUNLX1NJWkVcdDo9ICQoaWYgJChDT05GSUdfS0FTQU4pLDY1NTM2LCQoaWYgJChDT05GSUdfS01TQU4pLDY1NTM2LDE2Mzg0KSlcbmFyY2gvczM5MC9NYWtlZmlsZS00Mi1DSEVDS0ZMQUdTXHQmIzQzOz0gLURfX3MzOTBfXyAtRF9fczM5MHhfX1xuLS1cbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTExPUtDU0FOX1NBTklUSVpFIDo9IG5cbmFyY2gvczM5MC9ib290L01ha2VmaWxlOjEyOktNU0FOX1NBTklUSVpFIDo9IG5cbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTEzLVxuLS1cbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTM5PW9iai0kKENPTkZJR19LRVJORUxfWlNURCkgJiM0Mzs9IGNsel9jdHoub1xuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX0tNU0FOKSAmIzQzOz0ga21zYW4ub1xuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUtNDEtb2JqLSQoQ09ORklHX1NUQUNLUFJPVEVDVE9SKSAmIzQzOz0gc3RhY2twcm90ZWN0b3Iub1xuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYz0zMDU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3ZtZW1fc2l6ZSh1bnNpZ25lZCBsb25nIGlkZW50aXR5X3NpemUsXG4tLVxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTMxNS1cdFx0RklYTUFQX1NJWkUgJiM0MzsgTU9EVUxFU19MRU4gJiM0MzsgS0FTTFJfTEVOO1xuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jOjMxNjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtMzE3LVx0XHR2c2l6ZSAmIzQzOz0gTU9EVUxFU19MRU4gKiAyO1xuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYz0zMjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0dXBfa2VybmVsX21lbW9yeV9sYXlvdXQodW5zaWduZWQgbG9uZyBrZXJuZWxfc2l6ZSlcbi0tXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtMzk5LVx0Vk1BTExPQ19FTkQgPSBNT0RVTEVTX1ZBRERSO1xuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jOjQwMDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNDAxLVx0XHRWTUFMTE9DX0VORCAtPSBNT0RVTEVTX0xFTiAqIDI7XG4tLVxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTQwNy1cdHZtYWxsb2Nfc2l6ZSA9IG1pbih2bWFsbG9jX3NpemUsIHZzaXplKTtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo0MDg6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS01TQU4pKSB7XG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6NDA5Olx0XHQvKiB0YWtlIDIvMyBvZiB2bWFsbG9jIGFyZWEgZm9yIEtNU0FOIHNoYWRvdyBhbmQgb3JpZ2lucyAqL1xuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTQxMC1cdFx0dm1hbGxvY19zaXplID0gcm91bmRfZG93bih2bWFsbG9jX3NpemUgLyAzLCBfU0VHTUVOVF9TSVpFKTtcbi0tXG5hcmNoL3MzOTAvYm9vdC9zdHJpbmcuYy03LSN1bmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuYXJjaC9zMzkwL2Jvb3Qvc3RyaW5nLmM6ODojdW5kZWYgQ09ORklHX0tNU0FOXG5hcmNoL3MzOTAvYm9vdC9zdHJpbmcuYy05LSNpbmNsdWRlIFwmIzM0Oy4uL2xpYi9zdHJpbmcuY1wmIzM0O1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oPTM1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2FyY2hfbG9jYWxfaXJxX3NzbSh1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oLTM5LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmg6NDA6I2lmZGVmIENPTkZJR19LTVNBTlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgtNDEtI2RlZmluZSBhcmNoX2xvY2FsX2lycV9hdHRyaWJ1dGVzIG5vaW5saW5lIG5vdHJhY2UgX19ub19zYW5pdGl6ZV9tZW1vcnkgX19tYXliZV91bnVzZWRcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaDoyOiNpZm5kZWYgX0FTTV9TMzkwX0tNU0FOX0hcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oOjM6I2RlZmluZSBfQVNNX1MzOTBfS01TQU5fSFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtNC1cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaD0xOT1zdGF0aWMgaW5saW5lIHZvaWQgKmFyY2hfa21zYW5fZ2V0X21ldGFfb3JfbnVsbCh2b2lkICphZGRyLCBib29sIGlzX29yaWdpbilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC0yOC1cdFx0XHQodm9pZCAqKWdldF9sb3djb3JlKCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaDoyOTpcdFx0aWYgKEtNU0FOX1dBUk5fT04oaXNfbG93Y29yZV9hZGRyKGFkZHIpKSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTMwLVx0XHRcdHJldHVybiBOVUxMO1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oPTM2PXN0YXRpYyBpbmxpbmUgYm9vbCBrbXNhbl92aXJ0X2FkZHJfdmFsaWQodm9pZCAqYWRkcilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC00Mi1cdCAqIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBIb3dldmVyLCB0aGlzIHdvdWxkIHJlc3VsdCBpbiByZWN1cnNpb24gd2l0aFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg6NDM6XHQgKiBLTVNBTi4gVGhlcmVmb3JlLCBkaXNhYmxlIHByZWVtcHRpb24gaGVyZSwgYW5kIHJlLWVuYWJsZSBwcmVlbXB0aW9uXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC00NC1cdCAqIGJlbG93IHdoaWxlIHN1cHByZXNzaW5nIHJlc2NoZWR1bGVzIHRvIGF2b2lkIHJlY3Vyc2lvbi5cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC00Ni1cdCAqIE5vdGUsIHRoaXMgc2FjcmlmaWNlcyBvY2Nhc2lvbmFsbHkgYnJlYWtpbmcgc2NoZWR1bGluZyBndWFyYW50ZWVzLlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg6NDc6XHQgKiBBbHRob3VnaCwgYSBrZXJuZWwgY29tcGlsZWQgd2l0aCBLTVNBTiBoYXMgYWxyZWFkeSBnaXZlbiB1cCBvbiBhbnlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQ4LVx0ICogcGVyZm9ybWFuY2UgZ3VhcmFudGVlcyBkdWUgdG8gYmVpbmcgaGVhdmlseSBpbnN0cnVtZW50ZWQuXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtNTgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaDo1OTojZW5kaWYgLyogX0FTTV9TMzkwX0tNU0FOX0ggKi9cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEwMj1zdGF0aWMgaW5saW5lIGludCBpc19tb2R1bGVfYWRkcih2b2lkICphZGRyKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTExLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTI6I2lmZGVmIENPTkZJR19LTVNBTlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTM6I2RlZmluZSBLTVNBTl9WTUFMTE9DX1NJWkUgKFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TVEFSVClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE0OiNkZWZpbmUgS01TQU5fVk1BTExPQ19TSEFET1dfU1RBUlQgVk1BTExPQ19FTkRcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE1OiNkZWZpbmUgS01TQU5fVk1BTExPQ19TSEFET1dfRU5EIChLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCAmIzQzOyBLTVNBTl9WTUFMTE9DX1NJWkUpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjExNjojZGVmaW5lIEtNU0FOX1ZNQUxMT0NfT1JJR0lOX1NUQVJUIEtNU0FOX1ZNQUxMT0NfU0hBRE9XX0VORFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTc6I2RlZmluZSBLTVNBTl9WTUFMTE9DX09SSUdJTl9FTkQgKEtNU0FOX1ZNQUxMT0NfT1JJR0lOX1NUQVJUICYjNDM7IEtNU0FOX1ZNQUxMT0NfU0laRSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE4OiNkZWZpbmUgS01TQU5fTU9EVUxFU19TSEFET1dfU1RBUlQgS01TQU5fVk1BTExPQ19PUklHSU5fRU5EXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjExOTojZGVmaW5lIEtNU0FOX01PRFVMRVNfU0hBRE9XX0VORCAoS01TQU5fTU9EVUxFU19TSEFET1dfU1RBUlQgJiM0MzsgTU9EVUxFU19MRU4pXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEyMDojZGVmaW5lIEtNU0FOX01PRFVMRVNfT1JJR0lOX1NUQVJUIEtNU0FOX01PRFVMRVNfU0hBRE9XX0VORFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjE6I2RlZmluZSBLTVNBTl9NT0RVTEVTX09SSUdJTl9FTkQgKEtNU0FOX01PRFVMRVNfT1JJR0lOX1NUQVJUICYjNDM7IE1PRFVMRVNfTEVOKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjItI2VuZGlmXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oPTIxPXZvaWQgKm1lbW1vdmUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtMjItXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmg6MjM6I2lmICFkZWZpbmVkKENPTkZJR19LQVNBTikgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19LTVNBTilcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaC0yNC0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNIUlx0LyogaW5saW5lIFx1MDAyNiBhcmNoIGZ1bmN0aW9uICovXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oPTQxPWNoYXIgKnN0cnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oOjQyOiNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfS0FTQU4pIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChDT05GSUdfS01TQU4pICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDMtXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgtMTYtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaDoxNzojaWYgZGVmaW5lZChDT05GSUdfS0FTQU4pIHx8IGRlZmluZWQoQ09ORklHX0tNU0FOKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgtMTgtI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiA0XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaD0yNT12b2lkIGRlYnVnX3VzZXJfYXNjZShpbnQgZXhpdCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTI2LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDoyNzojaWZkZWYgQ09ORklHX0tNU0FOXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTI4LSNkZWZpbmUgdWFjY2Vzc19rbXNhbl9vcl9pbmxpbmUgbm9pbmxpbmUgX19tYXliZV91bnVzZWQgX19ub19zYW5pdGl6ZV9tZW1vcnlcbi0tXG5hcmNoL3MzOTAva2VybmVsL3Vud2luZF9iYy5jPTQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19maW5hbF9wdF9yZWdzKHN0cnVjdCB1bndpbmRfc3RhdGUgKnN0YXRlLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmMtNTMtXG5hcmNoL3MzOTAva2VybmVsL3Vud2luZF9iYy5jOjU0Oi8qIEF2b2lkIEtNU0FOIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgZnJhbWVzLiAqL1xuYXJjaC9zMzkwL2tlcm5lbC91bndpbmRfYmMuYy01NS1fX25vX2ttc2FuX2NoZWNrc1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmM9MTIzPUVYUE9SVF9TWU1CT0xfR1BMKHVud2luZF9uZXh0X2ZyYW1lKTtcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmMtMTI0LVxuYXJjaC9zMzkwL2tlcm5lbC91bndpbmRfYmMuYzoxMjU6LyogQXZvaWQgS01TQU4gZmFsc2UgcG9zaXRpdmVzIGZyb20gdG91Y2hpbmcgdW5pbml0aWFsaXplZCBmcmFtZXMuICovXG5hcmNoL3MzOTAva2VybmVsL3Vud2luZF9iYy5jLTEyNi1fX25vX2ttc2FuX2NoZWNrc1xuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0zMTU9c3RhdGljIGludCBwdF9kdW1wX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzQzLSNlbmRpZlxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM0NDojaWZkZWYgQ09ORklHX0tNU0FOXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzQ1Olx0cmMgfD0gYWRkX21hcmtlcihLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCwgS01TQU5fVk1BTExPQ19TSEFET1dfRU5ELCBcJiMzNDtLbXNhbiB2bWFsbG9jIFNoYWRvd1wmIzM0Oyk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzQ2Olx0cmMgfD0gYWRkX21hcmtlcihLTVNBTl9WTUFMTE9DX09SSUdJTl9TVEFSVCwgS01TQU5fVk1BTExPQ19PUklHSU5fRU5ELCBcJiMzNDtLbXNhbiB2bWFsbG9jIE9yaWdpbnNcJiMzNDspO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM0NzpcdHJjIHw9IGFkZF9tYXJrZXIoS01TQU5fTU9EVUxFU19TSEFET1dfU1RBUlQsIEtNU0FOX01PRFVMRVNfU0hBRE9XX0VORCwgXCYjMzQ7S21zYW4gTW9kdWxlcyBTaGFkb3dcJiMzNDspO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM0ODpcdHJjIHw9IGFkZF9tYXJrZXIoS01TQU5fTU9EVUxFU19PUklHSU5fU1RBUlQsIEtNU0FOX01PRFVMRVNfT1JJR0lOX0VORCwgXCYjMzQ7S21zYW4gTW9kdWxlcyBPcmlnaW5zXCYjMzQ7KTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNDktI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKktNU0FOIG9uIHMzOTB4IGFuZCBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBzbyBLTVNBTiAqZG9lcyogc3VwcG9ydCBzMzkweC4gVGhhdCYjMzk7cyBnb29kIG5ld3MuIEJ1dCBteSBpbW1lZGlhdGUgY29uY2VybiBpcywgZG9lcyBLTVNBTiBlZmZlY3RpdmVseSBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB0aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBTeXN0ZW0gSW5zdHJ1Y3Rpb24gRXh0ZW5zaW9uIChTSUUpPwoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoaXM6IEtNU0FOIG9wZXJhdGVzIGJ5IGluc3RydW1lbnRpbmcgQ1BVIGluc3RydWN0aW9ucy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZGV0ZWN0IHdoZW4gdGhlICpDUFUqIGl0c2VsZiBhdHRlbXB0cyB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBTbywgaWYgdGhlIENQVSB0cmllcyB0byBsb2FkIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgZGlyZWN0bHksIEtNU0FOIHNob3VsZCBmbGFnIGl0LiBCdXQgd2hhdCBhYm91dCBhIHNjZW5hcmlvIHdoZXJlIHRoZSBDUFUgaGFuZHMgb2ZmIGEgKnBvaW50ZXIqIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBoYXJkd2FyZSwgdXNpbmcgU0lFIGluc3RydWN0aW9ucz8gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreS4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCwgd2l0aG91dCBleHBsaWNpdCBpbnN0cnVtZW50YXRpb24sIEtNU0FOICp3b24mIzM5O3QqIGNhdGNoIHRoYXQuIEl0JiMzOTtzIHRoZSBoYXJkd2FyZSBkb2luZyB0aGUgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIHJlYWQgbm93LCBub3QgdGhlIENQVSBpbnN0cnVjdGlvbiBzdHJlYW0gdGhhdCBLTVNBTiBpcyB3YXRjaGluZy4gVGhlIGtleSBoZXJlLCBhbmQgd2hhdCBJIG5lZWQgdG8gbG9vayBmb3IsIGlzIGEgYGttc2FuX2NoZWNrX21lbW9yeWAgY2FsbC4gSWYgdGhlcmUmIzM5O3MgYW4gZXhwbGljaXQgY2FsbCB0byBga21zYW5fY2hlY2tfbWVtb3J5YCBiZWZvcmUgdGhlIGhhcmR3YXJlIGV4ZWN1dGlvbiBoYXBwZW5zLCB0aGF0ICpzaG91bGQqIGZvcmNlIEtNU0FOIHRvIGNoZWNrIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSB0aGUgQ1BVIGJlZm9yZSB0aGUgaGFyZHdhcmUgZ2V0cyBpdHMgaGFuZHMgb24gaXQuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBTSUUgYmxvY2sgb3IgQ1JZQ0IuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGlkZW50aWZ5aW5nIGlmIHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHNhZmVndWFyZHMgaW4gcGxhY2UuIEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBwcm9hY3RpdmVseSBjaGVja2luZyB0aGUgbWVtb3J5IGFyZWEgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2NoZWNrX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMjcKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2sgYW5kIFVzZXIgU3BhY2UgQ29weWluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBtZW1vcnkgc2FmZXR5IHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUmIzM5O3MgS1ZNIGltcGxlbWVudGF0aW9uLiBGaXJzdCB0aG91Z2h0OiB3aGVyZSBpcyBga21zYW5fY2hlY2tfbWVtb3J5YCBkZWZpbmVkLCBvciByYXRoZXIgKm5vdCogZGVmaW5lZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgYXJjaC9zMzkwL2t2bS9gIGRpcmVjdG9yeT8gSG1tLCBJIGNhbiYjMzk7dCBmaW5kIGl0LiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBjb25zaWRlciB0aGUgYGNvcHlfdG9fdXNlcmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgaG90c3BvdCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgSSYjMzk7dmUgbG9jYXRlZCB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0IGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgLiBJbnRlcmVzdGluZy4gTGluZSA1NzMyIGlzIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gVGhleSYjMzk7cmUgY29weWluZyBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIHRvIHVzZXIgc3BhY2UsIHJpZ2h0IGFmdGVyIGhhbmRsaW5nIGEgYGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXBgIGNhbGwuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIHBhc3NpbmcgYmFjayByZXR1cm4gY29kZXMgYW5kIHJlc3VsdHMgZnJvbSB0aGUgaHlwZXJ2aXNvci4gQnV0LCBob3cgYXJlIHRoZXkgaGFuZGxpbmcgdGhlIG1lbW9yeSBjb3B5PwoKQWgsIHJpZ2h0LCBub3cgSSBzZWUgdGhleSBhcmUgdXNpbmcgYG9mZnNldG9mYCB0byBjYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGBhcmdwYC4gU28gaXQmIzM5O3MgY29weWluZyB0byB0aGUgYHJjYCBmaWVsZCBvZiBhIGBrdm1fcHZfY21kYCBzdHJ1Y3QuIFRoYXQmIzM5O3MgYmV0dGVyIHRoYW4gZGlyZWN0bHkgd3JpdGluZyB0byBgYXJncGAsIHByZXZlbnRpbmcgd3JpdGluZyB0byBhcmJpdHJhcnkgbWVtb3J5IGxvY2F0aW9ucy4gTm93LCBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGBjbWRgIHN0cnVjdCBjb21lcyBmcm9tIHRvIGV2YWx1YXRlIHRoZSBzYWZldHkgaGVyZS4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgd2hlcmUgdGhpcyBgY21kYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gaXMga2V5IHRvIGNvbmZpcm1pbmcgdGhlcmUgYXJlIG5vIG91dC1vZi1ib3VuZHMgd3JpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX3B2X2NtZCBjbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MzI9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE2LVx0Y2FzZSBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORDoge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MTc6XHRcdHN0cnVjdCBrdm1fcHZfY21kIGNtZDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg2MgoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtWTV9TMzkwX1BWX0NQVV9DT01NQU5EIENvZGUqKgoKT2theSwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIGBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgY29tbWFuZCBpcyAqZG9pbmcqLiBNeSBpbW1lZGlhdGUgbWVudGFsIG1hcCBpcyBzdGFydGluZyB0byBidWlsZCDigJMgdGhpcyBpcyBsaWtlbHkgYSBwcml2aWxlZ2VkIFZNIGNvbW1hbmQgc3BlY2lmaWMgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBsaWtlbHkgcmVsYXRlZCB0byBwYXJhdmlydHVhbGl6ZWQgb3BlcmF0aW9ucyBmb3IgdGhlIENQVS4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBXaGF0IHN0cnVjdHVyZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGllZCB0byBpdHMgaW1wbGVtZW50YXRpb24/JiMzNDsKCkkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMsIGxvb2tpbmcgZm9yIGl0cyBkZWZpbml0aW9uLCBhbnkgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzIChsaWtlIGBrdm1fczM5MF9wdl9jcHVfY29tbWFuZF9hcmdzYCBwZXJoYXBzPyksIGFuZCBpdHMgdXNhZ2UuIEkmIzM5O2xsIG1lbnRhbGx5IG5vdGUgYW55IGZsYWdzIG9yIGFyZ3VtZW50cyB0aGlzIGNvbW1hbmQgdGFrZXM7IGEgZGVlcCBkaXZlIGluIHRoZSBrZXJuZWwgY29kZSB1c3VhbGx5IHJldmVhbHMgd2hhdCB0aG9zZSB0aGluZ3MgYXJlIGJlaW5nIHVzZWQgZm9yLgoKU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gaWRlbnRpZnk6CgoqICAgKipJdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBzMzkwIEtWTSBhcmNoaXRlY3R1cmU6KiogSXMgdGhpcyByZWxhdGVkIHRvIENQVSBob3RwbHVnLCB2aXJ0dWFsaXphdGlvbiBjb250cm9sLCBndWVzdCByZWdpc3RlciBtYW5pcHVsYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoqICAgKipQcml2aWxlZ2UgTGV2ZWw6KiogV2hvIGNhbiBjYWxsIHRoaXM/IERvZXMgaXQgcmVxdWlyZSByb290IHByaXZpbGVnZXMsIG9yIGlzIHRoZXJlIGEgbW9yZSBudWFuY2VkIGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbSBhdCBwbGF5PwoqICAgKipJbnRlcmFjdGlvbiB3aXRoIEhhcmR3YXJlOioqIERvZXMgaXQgdHJhbnNsYXRlIGRpcmVjdGx5IGludG8gaHlwZXJjYWxscywgb3IgZG9lcyBpdCBvcGVyYXRlIHRocm91Z2ggc29mdHdhcmUgZW11bGF0aW9uPyBVbmRlcnN0YW5kaW5nIHRoaXMgaW1wYWN0cyBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGNvbW1hbmQgZmFpbHM/IEFyZSBlcnJvciBjb2RlcyB3ZWxsLWRlZmluZWQgYW5kIHByb3BhZ2F0ZWQgY29ycmVjdGx5PwoqICAgKipDb25jdXJyZW5jeSBJc3N1ZXM6KiogRG9lcyB0aGUgY29kZSBoYW5kbGUgbXVsdGlwbGUgdkNQVXMgY29uY3VycmVudGx5PyBBcmUgdGhlcmUgYW55IHNwaW5sb2NrcyBvciBtdXRleGVzIHRoYXQgY291bGQgaW50cm9kdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yLCB3b3JzZSwgcmFjZSBjb25kaXRpb25zPwoKRXNzZW50aWFsbHksIEkmIzM5O20gc2V0dGluZyBvdXQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgdGhlIG1lY2hhbmljcyBvZiBpdHMgaW1wbGVtZW50YXRpb24sIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBzZWN1cml0eS4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgaXQgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzE1Olx0XHR9XG41NzE2Olx0XHRjYXNlIEtWTV9TMzkwX1BWX0NQVV9DT01NQU5EOiB7XG41NzE3Olx0XHRcdHN0cnVjdCBrdm1fcHZfY21kIGNtZDtcbjU3MTg6XHRcbjU3MTk6XHRcdFx0ciA9IC1FSU5WQUw7XG41NzIwOlx0XHRcdGlmICghaXNfcHJvdF92aXJ0X2hvc3QoKSlcbjU3MjE6XHRcdFx0XHRicmVhaztcbjU3MjI6XHRcbjU3MjM6XHRcdFx0ciA9IC1FRkFVTFQ7XG41NzI0Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjbWQsIGFyZ3AsIHNpemVvZihjbWQpKSlcbjU3MjU6XHRcdFx0XHRicmVhaztcbjU3MjY6XHRcbjU3Mjc6XHRcdFx0ciA9IC1FSU5WQUw7XG41NzI4Olx0XHRcdGlmIChjbWQuZmxhZ3MpXG41NzI5Olx0XHRcdFx0YnJlYWs7XG41NzMwOlx0XG41NzMxOlx0XHRcdC8qIFdlIG9ubHkgaGFuZGxlIHRoaXMgY21kIHJpZ2h0IG5vdyAqL1xuNTczMjpcdFx0XHRpZiAoY21kLmNtZCAhPSBLVk1fUFZfRFVNUClcbjU3MzM6XHRcdFx0XHRicmVhaztcbjU3MzQ6XHRcbjU3MzU6XHRcdFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgXHUwMDI2Y21kKTtcbjU3MzY6XHRcbjU3Mzc6XHRcdFx0LyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovXG41NzM4Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCAmIzQzOyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3B2X2NtZCwgcmMpLCBcdTAwMjZjbWQucmMsXG41NzM5Olx0XHRcdFx0XHQgc2l6ZW9mKGNtZC5yYykgJiM0Mzsgc2l6ZW9mKGNtZC5ycmMpKSlcbjU3NDA6XHRcdFx0XHRyID0gLUVGQVVMVDtcbjU3NDE6XHRcdFx0YnJlYWs7XG41NzQyOlx0XHR9XG41NzQzOlx0XHRkZWZhdWx0OlxuNTc0NDpcdFx0XHRyID0gLUVOT1RUWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFMzOTAgVmlydHVhbCBDUFUgRHVtcCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYGNtZGAgc3RydWN0dXJlIGlzIGhhbmRsZWQgaGVyZS4gVGhlIGNydWNpYWwgcG9pbnQgc2VlbXMgdG8gYmUgdGhhdCBgY21kYCBnZXRzIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9mcm9tX3VzZXIoJmFtcDtjbWQsIGFyZ3AsIHNpemVvZihjbWQpKWAuIFRoaXMgaXMga2V5LiBUaGVuIGBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsICZhbXA7Y21kKWAgZ2V0cyBpbnZva2VkLiBUaGUgcG90ZW50aWFsIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBtaWdodCBtb2RpZnkgYGNtZC5yY2AgYW5kIGBjbWQucnJjYC4gRmluYWxseSwgdGhvc2UgbW9kaWZpZWQgdmFsdWVzIGFyZSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgdGhlIGVudGlyZSBgY21kYCBzdHJ1Y3R1cmUgb3JpZ2luYXRlcyBmcm9tIHVzZXIgc3BhY2UsIHdlIHNob3VsZG4mIzM5O3QgaGF2ZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgbGVha3MgaGVyZS4gVGhhdCYjMzk7cyBnb29kLgoKQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhpcy4gSSYjMzk7bSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nLiBJcyB0aGVyZSBhbnkgcGFkZGluZyB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAgaXRzZWxmPyBJZiB0aGVyZSAqaXMqIHBhZGRpbmcsIGFuZCBpZiBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAgc29tZWhvdyBtYW5pcHVsYXRlcyB0aGF0IHBhZGRpbmcsIGV2ZW4gaWYgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgdXNlZCBpbiB0aGUgY29weS1iYWNrLCB0aGF0IGNvdWxkIGNyZWF0ZSBhIHByb2JsZW0uIEkgYmV0dGVyIHZlcmlmeSB0aGUgc3RydWN0dXJlJiMzOTtzIGxheW91dC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9wdl9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTI4MD1lbnVtIHB2X2NtZF9pZCB7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtMjkzLVxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6Mjk0OnN0cnVjdCBrdm1fcHZfY21kIHtcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTI5NS1cdF9fdTMyIGNtZDtcdC8qIENvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgKi9cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjQ4MD1zdGF0aWMgc3NpemVfdCBrdm1fczM5MF9oYW5kbGVfcHZfaW5mbyhzdHJ1Y3Qga3ZtX3MzOTBfcHZfaW5mbyAqaW5mbylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjUxOC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNTE5OnN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfZG1wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wdl9jbWQgKmNtZCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTIwLVx0XHRcdCAgIHN0cnVjdCBrdm1fczM5MF9wdl9kbXAgZG1wKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTgwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI1ODE6c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHYoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1ODIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAyNi1cdGNhc2UgS1ZNX1MzOTBfUFZfQ09NTUFORDoge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwMjc6XHRcdHN0cnVjdCBrdm1fcHZfY21kIGFyZ3M7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAyOC1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ5MD1zdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0OTE6XHRcdFx0XHRcdHN0cnVjdCBrdm1fcHZfY21kICpjbWQpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ5Mi17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MzI9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE2LVx0Y2FzZSBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORDoge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MTc6XHRcdHN0cnVjdCBrdm1fcHZfY21kIGNtZDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE4LVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzM3LVx0XHQvKiBBbHdheXMgY29weSBvdmVyIFVWIHJjIC8gcnJjIGRhdGEgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzM4Olx0XHRpZiAoY29weV90b191c2VyKGFyZ3AgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXHUwMDI2Y21kLnJjLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MzktXHRcdFx0XHQgc2l6ZW9mKGNtZC5yYykgJiM0Mzsgc2l6ZW9mKGNtZC5ycmMpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyOTYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHN0cnVjdCBrdm1fcHZfY21kYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGt2bV9wdl9jbWRgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IHN0cnVjdHVyZSBob2xkcyBhbmQgaXRzIHJvbGUgd2l0aGluIEtWTSYjMzk7cyBwYXJhLXZpcnR1YWxpemVkIGludGVyZmFjZS4gSXQmIzM5O3MgdGhlIGNvbW1hbmQgc3RydWN0dXJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0IHZpYSBoeXBlcmNhbGxzLCBpc24mIzM5O3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsYXlvdXQgdG8gcmVjYWxsIGhvdyBpdCYjMzk7cyB1c2VkIGZvciB2YXJpb3VzIG9wZXJhdGlvbnM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IG1lbW9yeSBtYXBwaW5nLCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGJpdGZpZWxkcyB3aXRoaW4gaXQgYXJlIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0OyB0aGV5IHVzdWFsbHkgZW5jb2RlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbW1hbmQgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBjaGFuZ2VzIGFjcm9zcyBrZXJuZWwgdmVyc2lvbnMgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCB0aGUgb2xkZXIgZ3Vlc3QvbmV3ZXIgaG9zdCBjb21wYXRpYmlsaXR5LiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgZmllbGRzIHRoYXQgZGljdGF0ZSB0aGUgYmVoYXZpb3I/IFRoZSBjb21tYW5kIElELCBjZXJ0YWlubHkuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIGFzc29jaWF0ZWQgZGF0YSBwb2ludGVyLCBpdHMgc2l6ZSBhbmQsIG9mIGNvdXJzZSwgYW55IHN0YXR1cyByZXBvcnRpbmcgZmllbGRzIHRvIGNoZWNrIHRoYXQgaHlwZXJjYWxsIGhhcyBiZWVuIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuIEkgbWlnaHQgYWxzbyBiZSBpbnRlcmVzdGVkIGluIHdoYXQgdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBsb2dpYy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBhICYjMzk7bWFnaWMgbnVtYmVyJiMzOTsgaW4gdGhlIGhlYWRlciB0byBlbnN1cmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIG5vdCB0aGUgZGVmaW5pdGlvbiwgdG8gc2VlIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0S1ZNX1BWX0FTWU5DX0NMRUFOVVBfUFJFUEFSRSxcbiAyOTE6XHRcdEtWTV9QVl9BU1lOQ19DTEVBTlVQX1BFUkZPUk0sXG4gMjkyOlx0fTtcbiAyOTM6XHRcbiAyOTQ6XHRzdHJ1Y3Qga3ZtX3B2X2NtZCB7XG4gMjk1Olx0XHRfX3UzMiBjbWQ7XHQvKiBDb21tYW5kIHRvIGJlIGV4ZWN1dGVkICovXG4gMjk2Olx0XHRfX3UxNiByYztcdC8qIFVsdHJhdmlzb3IgcmV0dXJuIGNvZGUgKi9cbiAyOTc6XHRcdF9fdTE2IHJyYztcdC8qIFVsdHJhdmlzb3IgcmV0dXJuIHJlYXNvbiBjb2RlICovXG4gMjk4Olx0XHRfX3U2NCBkYXRhO1x0LyogRGF0YSBvciBhZGRyZXNzICovXG4gMjk5Olx0XHRfX3UzMiBmbGFnczsgICAgLyogZmxhZ3MgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBNdXN0IGJlIDAgZm9yIG5vdyAqL1xuIDMwMDpcdFx0X191MzIgcmVzZXJ2ZWRbM107XG4gMzAxOlx0fTtcbiAzMDI6XHRcbiAzMDM6XHRzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCB7XG4gMzA0Olx0XHQvKiBpbiAqL1xuIDMwNTpcdFx0X191MzIgZmg7ICAgICAgICAgICAgICAgLyogdGFyZ2V0IGRldmljZSAqL1xuIDMwNjpcdFx0X191OCAgb3A7ICAgICAgICAgICAgICAgLyogb3BlcmF0aW9uIHRvIHBlcmZvcm0gKi9cbiAzMDc6XHRcdF9fdTggIHBhZFszXTtcbiAzMDg6XHRcdHVuaW9uIHtcbiAzMDk6XHRcdFx0LyogZm9yIEtWTV9TMzkwX1pQQ0lPUF9SRUdfQUVOICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgd2l0aCB0aGUgaW5pdGlhbCBjaGVjayBjb25jZXJuaW5nIGByY2AgYW5kIGBycmNgLCB0aG9zZSBhcmUgYF9fdTE2YCwgc28gdGhleSYjMzk7cmUgY29udGlndW91cyBhbmQgdGhlIHRvdGFsIHNpemUgaXMgNCBieXRlcy4gYHNpemVvZihjbWQucmMpICYjNDM7IHNpemVvZihjbWQucnJjKWAgY29uZmlybXMgdGhpcywgYW5kIHRoZXJlJiMzOTtzIG5vIHBhZGRpbmcuIFRoZXkmIzM5O3JlIGNvcGllZCBmcm9tIGAmYW1wO2NtZC5yY2AsIHdoaWNoIG1lYW5zIHRoZXJlJiMzOTtzIG5vIGltbWVkaWF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGluIHRoYXQgYXJlYS4KCk5vdywgbG9va2luZyBhdCBga3ZtX3MzOTBfa2V5b3BgLCBpdCBzZWVtcyBsaWtlIGEgbG9ja2luZyBmaXguIFRoZSBga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2VgIHJlYWQgaXMgcHJvdGVjdGVkIGJ5IGEgbG9jaywgYW5kIHRoZSBhc2NlIGlzIGRlY2xhcmVkIGxvY2FsbHkuIE5vIGltbWVkaWF0ZSBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKTmV4dCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBqdXN0IGFkZHJlc3NlcyBzaWduYWwgaGFuZGxpbmcsIGVuc3VyaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSlgIGlzIGFsd2F5cyBjYWxsZWQuIE5vIGlzc3VlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGp1bXBpbmcgb3V0IGhlcmUgZWl0aGVyLgoKRmluYWxseSwgYHNldHVwX2FwY2IxMGAgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSByZW1lbWJlciBhbmFseXppbmcgdGhpcyBiZWZvcmUsIGBhcGNiX3NgIHBvaW50cyB0byBgJmFtcDtjcnljYl9zLSZndDthcGNiMWAgaW5zaWRlIGB2c2llX3BhZ2UtJmd0O2NyeWNiYC4gSSBzZWUgdGhhdCBgdnNpZV9wYWdlYCBpcyByZXVzZWQgd2l0aG91dCB6ZXJvaW5nLCBhbmQgbm93IHRoZSBjb2RlICpkb2VzKiBgbWVtc2V0YCBgYXBjYl9zYC4gVGhhdCBzdGlsbCBkb2VzIG5vdCBmaXggdGhlIG9yaWdpbmFsIHByb2JsZW0uIFRoZSBpc3N1ZSBpcyB0aGF0IG5vdywgYGFwY2Jfcy0mZ3Q7YXBtWzEuLjNdYCwgYGFxbVsxLi4zXWAsIGBhZG1bMS4uM11gIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgY29udGFpbmluZyBkYXRhIGZyb20gcHJldmlvdXMgdXNlIG9mIGB2c2llX3BhZ2VgLiBUaGlzIHN0YWxlIGRhdGEgaXMgdGhlbiB1c2VkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSB3aGVuIGV4ZWN1dGluZyB0aGUgbmVzdGVkIGd1ZXN0LiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBzZWN1cml0eSBpc3N1ZSwgcG90ZW50aWFsbHkgYWxsb3dpbmcgYSBuZXN0ZWQgZ3Vlc3QgdG8gYWNjZXNzIHJlc291cmNlcyBpdCBzaG91bGRuJiMzOTt0LiBUaGUgcmVhbCBwcm9ibGVtIGlzIHRoYXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBkb2VzbiYjMzk7dCBkZXRlY3QgdGhpcyBpc3N1ZSBiZWNhdXNlIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSBhbmQgbm90IGJ5IHRoZSBDUFUuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQhIEJ1dCB3YWl0Li4uIGlzIHRoZXJlICphbnkqIGNoYW5jZSB0aGUgQ1BVIGxhdGVyIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBkZXJpdmVkIHZhbHVlcyBiYXNlZCBvbiB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbWFraW5nIGl0IHZ1bG5lcmFibGUgdG8gZGV0ZWN0aW9uPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgbW9yZSBjYXJlZnVsbHkgdG8gZW5zdXJlIHRoYXQgYGFwY2Jfc2AgKG9yIGB2c2llX3BhZ2UtJmd0O2NyeWNiYCkgaXMgKm5vdCogcmVhZCBieSB0aGUgQ1BVIGxhdGVyIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcGNiMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTU5PXZvaWQga3ZtX2FyY2hfY3J5cHRvX3NldF9tYXNrcyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKmFwbSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2Ny1cdGNhc2UgQ1JZQ0JfRk9STUFUMjogLyogQVBDQjEgdXNlIDI1NiBiaXRzICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE2ODpcdFx0bWVtY3B5KGNyeWNiLVx1MDAzZWFwY2IxLmFwbSwgYXBtLCAzMik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2OS1cdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcJiMzNDtTRVQgQ1JZQ0I6IGFwbSAlMDE2bHggJTAxNmx4ICUwMTZseCAlMDE2bHhcJiMzNDssXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3MC1cdFx0XHQgYXBtWzBdLCBhcG1bMV0sIGFwbVsyXSwgYXBtWzNdKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTcxOlx0XHRtZW1jcHkoY3J5Y2ItXHUwMDNlYXBjYjEuYXFtLCBhcW0sIDMyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTcyLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0O1NFVCBDUllDQjogYXFtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFwmIzM0OyxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTczLVx0XHRcdCBhcW1bMF0sIGFxbVsxXSwgYXFtWzJdLCBhcW1bM10pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNzQ6XHRcdG1lbWNweShjcnljYi1cdTAwM2VhcGNiMS5hZG0sIGFkbSwgMzIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzUtXHRcdFZNX0VWRU5UKGt2bSwgMywgXCYjMzQ7U0VUIENSWUNCOiBhZG0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XCYjMzQ7LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMjA5PXZvaWQga3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIxNC1cdCAgICAgICBzaXplb2Yoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFwY2IwKSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNTpcdG1lbXNldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXHUwMDNlYXBjYjEsIDAsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNjpcdCAgICAgICBzaXplb2Yoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFwY2IxKSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIxNy1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2My0vKiBDb3B5IHRvIEFQQ0IgRk9STUFUMSBmcm9tIEFQQ0IgRk9STUFUMCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjU6XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xOTQ9c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjExLS8qKlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjEyOiAqIHNldHVwX2FwY2IxMSAtIENvcHkgdGhlIEZPUk1BVDEgQVBDQiBmcm9tIHRoZSBndWVzdCB0byB0aGUgc2hhZG93IENSWUNCXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTMtICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjE5LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MjIwOnN0YXRpYyBpbnQgc2V0dXBfYXBjYjExKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqYXBjYl9zLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjIxLVx0XHRcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyNjpcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IxKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNy1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyOC1cdGlmIChyZWFkX2d1ZXN0X3JlYWwodmNwdSwgYXBjYl9ncGEsIGFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyOTpcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMSkpKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjMwLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMzItXHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMzM6XHRcdCAgIEJJVFNfUEVSX0JZVEUgKiBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMzQtXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MjUyPXN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjYyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MjYzOlx0XHRyZXR1cm4gc2V0dXBfYXBjYjExKHZjcHUsICh1bnNpZ25lZCBsb25nICopXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2NC1cdFx0XHRcdCAgICBjcnljYl9ncGEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjU6XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZjcnljYl9oLVx1MDAzZWFwY2IxKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2Ni1cdGNhc2UgQ1JZQ0JfRk9STUFUMTpcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjgtXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI2OTpcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzAtXHRcdFx0XHRcdCAgICBjcnljYl9ncGEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNzE6XHRcdFx0XHRcdCAgICBcdTAwMjZjcnljYl9oLVx1MDAzZWFwY2IxKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3Mi1cdFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4Ni1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NzpcdFx0XHRcdFx0ICAgIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg4LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVlZCBmb3IgS01TQU4gaW4gVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgQ1BVIGlzbiYjMzk7dCBhY3R1YWxseSByZWFkaW5nIGBhcGNiMWAgYWZ0ZXIgSSBzZXQgaXQgdXA7IHRoZSBoYXJkd2FyZSAoU0lFKSBpcyBkb2luZyB0aGF0LiBLTVNBTiBvbmx5IGluc3RydW1lbnRzIENQVSBpbnN0cnVjdGlvbnMsIHNvIGl0JiMzOTtzIG5vdCBnb2luZyB0byBjYXRjaCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBIbW0sIGxldCBtZSByZS1yZWFkIHRoZSBwcm9tcHQuIEl0IHNheXMgdG8gc2V0IGBOZWVkc0tNU0FOPXRydWVgICpvbmx5IGlmKiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2VydGFpbiByaXNrcywgc3BlY2lmaWNhbGx5OiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJzLCBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzICpjb3VsZCogYmUgcmVhZCBsYXRlciwgb3IgbmV3IGJvdW5kcyBjaGVja3MgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGlzIHBhdGNoICpkb2VzKiBtb2RpZnkgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBhcGNiX3NgICh3aGljaCBpcyB0aGUgc2FtZSBhcyBga3ZtX3MzOTBfYXBjYjFgKSwgYSBjb21wbGV4IGRhdGEgc3RydWN0dXJlLCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyAqY291bGQqIGJlIHJlYWQgbGF0ZXIgYnkgdGhlIGhhcmR3YXJlLiBCdXQsIHdhaXQsIEkgYWxyZWFkeSBrbm93IEtNU0FOIGRvZXNuJiMzOTt0IGRldGVjdCBoYXJkd2FyZSByZWFkcy4gVGhlIHJ1bGVzIHNwZWNpZmljYWxseSBzdGF0ZSwgYW5kIEkmIzM5O20gcGFyYXBocmFzaW5nIGhlcmUsICYjMzQ7RG9uJiMzOTt0IGJvdGhlciB3aXRoIEtNU0FOIGlmIEtBU0FOIG9yIG90aGVyIHRvb2xzIGNhbiBjYXRjaCB0aGUgYnVnLiBLTVNBTiBpcyBleHBlbnNpdmUuJiMzNDsgU28sIGlmIEtNU0FOIGNhbiYjMzk7dCBkZXRlY3QgdGhpcywgaXMgcnVubmluZyBLTVNBTiBwb2ludGxlc3M/CgpMZXQgbWUgdGhpbmsgaXQgdGhyb3VnaC4gSXMgdGhlcmUgZXZlbiBhIHJlbW90ZSBjaGFuY2UgS01TQU4gKmNvdWxkKiBkZXRlY3QgdGhpcz8gSXQgdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiBtZW1vcnksIGJ1dCB3aGVuIG1lbW9yeSBpcyBwYXNzZWQgdG8gaGFyZHdhcmUgbGlrZSBETUEsIEtNU0FOJiMzOTtzIGJsaW5kIHRvIHRoZSBoYXJkd2FyZSByZWFkIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBleHBsaWNpdCBjaGVjayBsaWtlIGBrbXNhbl9jaGVja19tZW1vcnkoKWAuIEFuZCB0aGVyZSYjMzk7cyBubyBga21zYW5fY2hlY2tfbWVtb3J5KClgIGZvciB0aGUgU0lFIGJsb2NrIG9yIHRoZSBDUllDQiwgcmlnaHQ/IFNvLCBubywgS01TQU4gd29uJiMzOTt0IHJlcG9ydCBhbiBlcnJvci4KCk9rYXksIGlzIHRoZSBgYXBjYjFgIGV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2U/IEkgc2hvdWxkIGNoZWNrIGlmIGBjcnljYmAgaXMgZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aG91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NyeWNiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEwOTA9dm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19yZXNldF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDk4LVx0XHRrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cCh2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMDk5Olx0XHQvKiByZWNyZWF0ZSB0aGUgc2hhZG93IGNyeWNiIGJ5IGxlYXZpbmcgdGhlIFZTSUUgaGFuZGxlciAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMDAtXHRcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdChLVk1fUkVRX1ZTSUVfUkVTVEFSVCwgdmNwdSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTExMDY9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfY3J5cHRvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTExNS1cdFx0Z2V0X3JhbmRvbV9ieXRlcyhcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTE2Olx0XHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VhZXNfd3JhcHBpbmdfa2V5X21hc2ssXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTExNzpcdFx0XHRzaXplb2Yoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzaykpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMTgtXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5hZXNfa3cgPSAxO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTI2LVx0XHRnZXRfcmFuZG9tX2J5dGVzKFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExMjc6XHRcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWRlYV93cmFwcGluZ19rZXlfbWFzayxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTI4Olx0XHRcdHNpemVvZihrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXHUwMDNlZGVhX3dyYXBwaW5nX2tleV9tYXNrKSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTEyOS1cdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmRlYV9rdyA9IDE7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMzctXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5hZXNfa3cgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExMzg6XHRcdG1lbXNldChrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXHUwMDNlYWVzX3dyYXBwaW5nX2tleV9tYXNrLCAwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExMzk6XHRcdFx0c2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VhZXNfd3JhcHBpbmdfa2V5X21hc2spKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTQwLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtESVNBQkxFOiBBRVMga2V5d3JhcHBpbmcgc3VwcG9ydFwmIzM0Oyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNDctXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5kZWFfa3cgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNDg6XHRcdG1lbXNldChrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXHUwMDNlZGVhX3dyYXBwaW5nX2tleV9tYXNrLCAwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNDk6XHRcdFx0c2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2spKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUwLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtESVNBQkxFOiBERUEga2V5d3JhcHBpbmcgc3VwcG9ydFwmIzM0Oyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMDc9c3RhdGljIGludCBrdm1fczM5MF9hcHhhX2luc3RhbGxlZCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTI2LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMjc6c3RhdGljIHZvaWQga3ZtX3MzOTBfc2V0X2NyeWNiX2Zvcm1hdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEyOC17XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEyOTpcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgPSB2aXJ0X3RvX3BoeXMoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTMwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMzEtXHQvKiBDbGVhciB0aGUgQ1JZQ0IgZm9ybWF0IGJpdHMgLSBpLmUuLCBzZXQgZm9ybWF0IDAgYnkgZGVmYXVsdCAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMzI6XHRrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkIFx1MDAyNj0gfihDUllDQl9GT1JNQVRfTUFTSyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEzMy1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEzOC1cdGlmIChrdm1fczM5MF9hcHhhX2luc3RhbGxlZCgpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMzk6XHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgfD0gQ1JZQ0JfRk9STUFUMjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTQwLVx0ZWxzZVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNDE6XHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgfD0gQ1JZQ0JfRk9STUFUMTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTQyLX1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzE1OT12b2lkIGt2bV9hcmNoX2NyeXB0b19zZXRfbWFza3Moc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICphcG0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNjEte1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNjI6XHRzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYiA9IGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTYzLVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTY1LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNjY6XHRzd2l0Y2ggKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgXHUwMDI2IENSWUNCX0ZPUk1BVF9NQVNLKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2Ny1cdGNhc2UgQ1JZQ0JfRk9STUFUMjogLyogQVBDQjEgdXNlIDI1NiBiaXRzICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE2ODpcdFx0bWVtY3B5KGNyeWNiLVx1MDAzZWFwY2IxLmFwbSwgYXBtLCAzMik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2OS1cdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcJiMzNDtTRVQgQ1JZQ0I6IGFwbSAlMDE2bHggJTAxNmx4ICUwMTZseCAlMDE2bHhcJiMzNDssXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3MC1cdFx0XHQgYXBtWzBdLCBhcG1bMV0sIGFwbVsyXSwgYXBtWzNdKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTcxOlx0XHRtZW1jcHkoY3J5Y2ItXHUwMDNlYXBjYjEuYXFtLCBhcW0sIDMyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTcyLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0O1NFVCBDUllDQjogYXFtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFwmIzM0OyxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTczLVx0XHRcdCBhcW1bMF0sIGFxbVsxXSwgYXFtWzJdLCBhcW1bM10pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNzQ6XHRcdG1lbWNweShjcnljYi1cdTAwM2VhcGNiMS5hZG0sIGFkbSwgMzIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzUtXHRcdFZNX0VWRU5UKGt2bSwgMywgXCYjMzQ7U0VUIENSWUNCOiBhZG0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XCYjMzQ7LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTc5LVx0Y2FzZSBDUllDQl9GT1JNQVQwOiAvKiBGYWxsIHRocm91Z2ggYm90aCB1c2UgQVBDQjAgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTgwOlx0XHRtZW1jcHkoY3J5Y2ItXHUwMDNlYXBjYjAuYXBtLCBhcG0sIDgpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxODE6XHRcdG1lbWNweShjcnljYi1cdTAwM2VhcGNiMC5hcW0sIGFxbSwgMik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE4MjpcdFx0bWVtY3B5KGNyeWNiLVx1MDAzZWFwY2IwLmFkbSwgYWRtLCAyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTgzLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0O1NFVCBDUllDQjogYXBtICUwMTZseCBhcW0gJTA0eCBhZG0gJTA0eFwmIzM0Oyxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5MC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTkxOlx0LyogcmVjcmVhdGUgdGhlIHNoYWRvdyBjcnljYiBmb3IgZWFjaCB2Y3B1ICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5Mi1cdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1ZTSUVfUkVTVEFSVCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMyMDk9dm9pZCBrdm1fYXJjaF9jcnlwdG9fY2xlYXJfbWFza3Moc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjEyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTM6XHRtZW1zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFwY2IwLCAwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTQ6XHQgICAgICAgc2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VhcGNiMCkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTU6XHRtZW1zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFwY2IxLCAwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTY6XHQgICAgICAgc2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VhcGNiMSkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIxOC1cdFZNX0VWRU5UKGt2bSwgMywgXCYjMzQ7JXNcJiMzNDssIFwmIzM0O0NMUiBDUllDQjpcJiMzNDspO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTk6XHQvKiByZWNyZWF0ZSB0aGUgc2hhZG93IGNyeWNiIGZvciBlYWNoIHZjcHUgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjIwLVx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfVlNJRV9SRVNUQVJUKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzIzND1zdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIzNS17XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIzNjpcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYiA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnNpZV9wYWdlMi1cdTAwM2VjcnljYjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjM3Olx0a3ZtX3MzOTBfc2V0X2NyeWNiX2Zvcm1hdChrdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMzgtXHRpbml0X3J3c2VtKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjQ1LVx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmRlYV9rdyA9IDE7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI0NjpcdGdldF9yYW5kb21fYnl0ZXMoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzayxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjQ3Olx0XHRcdCBzaXplb2Yoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzaykpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyNDg6XHRnZXRfcmFuZG9tX2J5dGVzKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2ssXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI0OTpcdFx0XHQgc2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2spKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjUwLX1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzY1Mj1zdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2NjAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzY2MTpcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY3J5Y2JkID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2NjItXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWVjYjMgXHUwMDI2PSB+KEVDQjNfQUVTIHwgRUNCM19ERUEpO1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTU5Mz1zdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MzEtXHQvKiBBUFhBIG5vdCBpbnN0YWxsZWQgYW5kIEFQSUQgZ3JlYXRlciA2NCBvciBBUFFJIGdyZWF0ZXIgMTYgKi9cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjYzMjpcdGlmICghKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCBcdTAwMjYgMHgwMikgXHUwMDI2XHUwMDI2IChyZWcwIFx1MDAyNiAweDAwMDBjMGYwVUwpKVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjMzLVx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0zND1zdHJ1Y3QgdnNpZV9wYWdlIHtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02OC1cdF9fdTggcmVzZXJ2ZWRbMHgwNmY4IC0gMHgwMjc4XTtcdFx0LyogMHgwMjc4ICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo2OTpcdHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgY3J5Y2I7XHQvKiAweDA2ZjggKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTcwLVx0X191OCBmYWNbOCAmIzQzOyBTMzkwX0FSQ0hfRkFDX0xJU1RfU0laRV9CWVRFXTsvKiAweDA3ZjggKi9cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNjQ9c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2NTpcdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX2gpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjYte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2OS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE3MDpcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE3MS1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODctICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxODg6ICogQGFwY2JfczogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBzaGFkb3cgY3J5Y2JcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE4OTogKiBAY3J5Y2JfZ3BhOiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHRvIHN0YXJ0IG9mIG9yaWdpbmFsIGd1ZXN0IGNyeWNiXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTAtICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBndWVzdDFcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xOTQ9c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxOTU6XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHVuc2lnbmVkIGxvbmcgKmFwY2JfaClcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTk4LVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTk5Olx0YXBjYl9ncGEgPSBjcnljYl9ncGEgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiwgYXBjYjApO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjAwLVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMy0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIxNDogKiBAYXBjYl9zOiBwb2ludGVyIHRvIHN0YXJ0IG9mIGFwY2IgaW4gdGhlIHNoYWRvdyBjcnljYlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjE1OiAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxNi0gKiBAYXBjYl9oOiBwb2ludGVyIHRvIHN0YXJ0IG9mIGFwY2IgaW4gdGhlIGhvc3Rcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0yMjA9c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjE6XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjItXHRcdFx0dW5zaWduZWQgbG9uZyAqYXBjYl9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyNjpcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IxKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNy1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNDAtICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDE6ICogQGNyeWNiX3M6IHBvaW50ZXIgdG8gc2hhZG93IGNyeWNiXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDI6ICogQGNyeWNiX2dwYTogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBvZiBvcmlnaW5hbCBndWVzdCBjcnljYlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjQzOiAqIEBjcnljYl9oOiBwb2ludGVyIHRvIHRoZSBob3N0IGNyeWNiXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDQ6ICogQGZtdF9vOiBmb3JtYXQgb2YgdGhlIG9yaWdpbmFsIGd1ZXN0IGNyeWNiLlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjQ1OiAqIEBmbXRfaDogZm9ybWF0IG9mIHRoZSBob3N0IGNyeWNiLlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQ2LSAqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDc6ICogQ2hlY2tzIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIGd1ZXN0IGFuZCBob3N0IGNyeWNiIGFuZCBjYWxscyB0aGVcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI0OC0gKiBhcHByb3ByaWF0ZSBjb3B5IGZ1bmN0aW9uLlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQ5LSAqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTA6ICogUmV0dXJuIDAgb3IgYW4gZXJyb3IgbnVtYmVyIGlmIHRoZSBndWVzdCBhbmQgaG9zdCBjcnljYiBhcmUgaW5jb21wYXRpYmxlLlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjUxLSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MjUyOnN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTM6XHQgICAgICAgY29uc3QgdTMyIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1NDpcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9oLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjU1LVx0ICAgICAgIGludCBmbXRfbywgaW50IGZtdF9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1OC1cdGNhc2UgQ1JZQ0JfRk9STUFUMjpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1OTpcdFx0aWYgKChjcnljYl9ncGEgXHUwMDI2IFBBR0VfTUFTSykgIT0gKChjcnljYl9ncGEgJiM0MzsgMjU2KSBcdTAwMjYgUEFHRV9NQVNLKSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2MC1cdFx0XHRyZXR1cm4gLUVBQ0NFUztcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjM6XHRcdHJldHVybiBzZXR1cF9hcGNiMTEodmNwdSwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY0Olx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI2NTpcdFx0XHRcdCAgICAodW5zaWduZWQgbG9uZyAqKVx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY2LVx0Y2FzZSBDUllDQl9GT1JNQVQxOlxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MDpcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MTpcdFx0XHRcdFx0ICAgIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcyLVx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzMtXHRcdFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjc0Olx0XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMCxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3NTpcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3NjpcdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjApO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjc3LVx0XHR9XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjc5LVx0Y2FzZSBDUllDQl9GT1JNQVQwOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjgwOlx0XHRpZiAoKGNyeWNiX2dwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKGNyeWNiX2dwYSAmIzQzOyAzMikgXHUwMDI2IFBBR0VfTUFTSykpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODEtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg2Olx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg3Olx0XHRcdFx0XHQgICAgXHUwMDI2Y3J5Y2JfaC1cdTAwM2VhcGNiMSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODgtXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yOTAtXHRcdFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjkxOlx0XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMCxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MjpcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MzpcdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjApO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjk0LVx0XHR9XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjk5LS8qKlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzAwOiAqIHNoYWRvd19jcnljYiAtIENyZWF0ZSBhIHNoYWRvdyBjb3B5IG9mIHRoZSBjcnljYiBibG9ja1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMzAxLSAqIEB2Y3B1OiBhIHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzAzLSAqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMDQ6ICogQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGNyeWNiIGJsb2NrIGFuZCBzZXR1cCBrZXkgd3JhcHBpbmcsIGlmXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMDUtICogcmVxdWVzdGVkIGZvciBndWVzdCAzIGFuZCBlbmFibGVkIGZvciBndWVzdCAyLlxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxMy0gKiBUaGlzIGZ1bmN0aW9uIGNlbnRyYWxpemUgdGhlIGlzc3Vpbmcgb2Ygc2V0X3ZhbGlkaXR5X2ljcHQoKSBmb3IgYWxsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMTQ6ICogdGhlIHN1YmZ1bmN0aW9ucyB3b3JraW5nIG9uIHRoZSBjcnljYi5cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxNS0gKlxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxOC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMxOTpzdGF0aWMgaW50IHNoYWRvd19jcnljYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMyMC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzIyLVx0c3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayAqc2NiX28gPSB2c2llX3BhZ2UtXHUwMDNlc2NiX287XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMjM6XHRjb25zdCB1aW50MzJfdCBjcnljYmRfbyA9IFJFQURfT05DRShzY2Jfby1cdTAwM2VjcnljYmQpO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MzI0Olx0Y29uc3QgdTMyIGNyeWNiX2FkZHIgPSBjcnljYmRfbyBcdTAwMjYgMHg3ZmZmZmZmOFU7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMjUtXHR1bnNpZ25lZCBsb25nICpiMSwgKmIyO1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzMC1cdGludCBrZXlfbXNrID0gdGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc2KTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMzMTpcdGludCBmbXRfbyA9IGNyeWNiZF9vIFx1MDAyNiBDUllDQl9GT1JNQVRfTUFTSztcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMzMjpcdGludCBmbXRfaCA9IHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY3J5Y2JkIFx1MDAyNiBDUllDQl9GT1JNQVRfTUFTSztcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzMy1cdGludCByZXQgPSAwO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMzM0LVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzM1Olx0c2NiX3MtXHUwMDNlY3J5Y2JkID0gMDtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzNi1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDEtXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNDI6XHRpZiAoIWNyeWNiX2FkZHIpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDMtXHRcdHJldHVybiBzZXRfdmFsaWRpdHlfaWNwdChzY2JfcywgMHgwMDM5VSk7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzQ1LVx0aWYgKGZtdF9vID09IENSWUNCX0ZPUk1BVDEpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNDY6XHRcdGlmICgoY3J5Y2JfYWRkciBcdTAwMjYgUEFHRV9NQVNLKSAhPVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzQ3Olx0XHQgICAgKChjcnljYl9hZGRyICYjNDM7IDEyOCkgXHUwMDI2IFBBR0VfTUFTSykpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDgtXHRcdFx0cmV0dXJuIHNldF92YWxpZGl0eV9pY3B0KHNjYl9zLCAweDAwM0NVKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXHRpZiAoYXBpZV9zKSB7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNTE6XHRcdHJldCA9IHNldHVwX2FwY2IodmNwdSwgXHUwMDI2dnNpZV9wYWdlLVx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzUyOlx0XHRcdFx0IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzUzLVx0XHRcdFx0IGZtdF9vLCBmbXRfaCk7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzY3LVx0LyogY29weSBvbmx5IHRoZSB3cmFwcGluZyBrZXlzICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNjg6XHRpZiAocmVhZF9ndWVzdF9yZWFsKHZjcHUsIGNyeWNiX2FkZHIgJiM0MzsgNzIsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNjk6XHRcdFx0ICAgIHZzaWVfcGFnZS1cdTAwM2VjcnljYi5kZWFfd3JhcHBpbmdfa2V5X21hc2ssIDU2KSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM3MC1cdFx0cmV0dXJuIHNldF92YWxpZGl0eV9pY3B0KHNjYl9zLCAweDAwMzVVKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNzUtXHQvKiB4b3IgYm90aCBibG9ja3MgaW4gb25lIHJ1biAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6Mzc2Olx0YjEgPSAodW5zaWduZWQgbG9uZyAqKSB2c2llX3BhZ2UtXHUwMDNlY3J5Y2IuZGVhX3dyYXBwaW5nX2tleV9tYXNrO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMzc3LVx0YjIgPSAodW5zaWduZWQgbG9uZyAqKVxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mzc4Olx0XHRcdCAgICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2s7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNzktXHQvKiBhcyA1NiU4ID09IDAsIGJpdG1hcF94b3Igd29uJiMzOTt0IG92ZXJ3cml0ZSBhbnkgZGF0YSAqL1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM4OS1cdH1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM5MDpcdHNjYl9zLVx1MDAzZWNyeWNiZCA9ICh1MzIpdmlydF90b19waHlzKFx1MDAyNnZzaWVfcGFnZS1cdTAwM2VjcnljYikgfCBDUllDQl9GT1JNQVQyO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMzkxLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9NDgwPXN0YXRpYyBpbnQgc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02MTYtXHRwcmVwYXJlX2liYyh2Y3B1LCB2c2llX3BhZ2UpO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NjE3Olx0cmMgPSBzaGFkb3dfY3J5Y2IodmNwdSwgdnNpZV9wYWdlKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTYxOC1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzI4CgkJCQkJCQlvdXRwdXQ6IDM5NAoJCQkJCQkJdGhvdWdodHM6IDI3MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQSBXYXN0ZSBvZiBSZXNvdXJjZXM/KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IHRoZSBgY3J5Y2JgIGFyZWEsIHNwZWNpZmljYWxseSBgYXBjYjFgLCBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UsIGl0JiMzOTtzIHN0cmljdGx5IGhhcmR3YXJlLWZhY2luZyAoU0lFKS4gVGh1cywgdGhlIG9ubHkgcmVhZCBpcyBmcm9tIHRoZSBoYXJkd2FyZSwgbm90IHRoZSBDUFUuIEtNU0FOLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGZsYWdzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpieSB0aGUgQ1BVKiBvciB0aG9zZSB0aGF0IGFyZSBwYXNzZWQgdG8gYGNvcHlfdG9fdXNlcmAgb3IgZXhwbGljaXRseSBjaGVja2VkIHdpdGggYGttc2FuX2NoZWNrX21lbW9yeWAuIFNpbmNlIHRoaXMgaXNuJiMzOTt0IHRoZSBjYXNlIGhlcmUsIHJ1bm5pbmcgYSBLTVNBTiBzZXNzaW9uIGZvciB0aGlzIHNwZWNpZmljIHBhdGNoIHNlZW1zIHBvaW50bGVzcywgYXMgcGVyIHRoZSBydWxlOiBhdm9pZCBLTVNBTiBpZiBzdGFuZGFyZCBkZXRlY3RvcnMgY2F0Y2ggdGhlIGlzc3VlLiBUaGUgb25seSB3YXkgaXQgY291bGQgY2F0Y2ggYW55dGhpbmcgaXMgdmlhIGBrbXNhbl9jaGVja19tZW1vcnlgIGFubm90YXRpb25zLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IGNoZWNrIHdoZXRoZXIgdGhvc2UgZXZlbiBleGlzdCBmb3IgdGhlIGFyZWFzIHRoYXQgYXJlIGJlaW5nIGNoYW5nZWQuIAoKTXkgbWVtb3J5IHRoZW4gYnJvdWdodCBtZSB0byB0aGUgcG9pbnQgd2hlcmUgSSBiZWdhbiBzZWFyY2hpbmcgdGhlIGBzZXR1cF9hcGNiMTBgIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGBhcGNiX3NgIGRhdGEgc3RydWN0dXJlIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBtaXRpZ2F0ZWQuIEkgY2hlY2tlZCBgc2V0dXBfYXBjYjExYCwgd2hlcmUgYGFwY2Jfc2AgaXMgcmVhZCB0aHJvdWdoIGBiaXRtYXBfYW5kYCBhbmQgaW5pdGlhbGl6ZWQgYnkgYHJlYWRfZ3Vlc3RfcmVhbGAsIHNvIGFsc28gbm8gaXNzdWUgdGhlcmUuIFRoZSBzYW1lIHRoaW5nIGZvciBgc2V0dXBfYXBjYjAwYC4gVGhlbiBJIHdlbnQgYmFjayB0byBgc2V0dXBfYXBjYjEwYCwgdG8gbWFrZSBzdXJlIHRoYXQgYGFwY2Jfc2AgaXMgbm90IHJlYWQgYnkgdGhlIENQVSwgaXQgaXMgb25seSB3cml0dGVuIHRvLiBTbywgS01TQU4gaXMgZGVmaW5pdGVseSBub3QgZ29pbmcgdG8gY2F0Y2ggdGhpcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBhcGNiX3NgIGlzICpuZXZlciogY29waWVkIHRvIHVzZXIgc3BhY2UgZWl0aGVyLiBJdCYjMzk7cyBwYXJ0IG9mIGB2c2llX3BhZ2UtJmd0O2NyeWNiYCwgaW50ZXJuYWwga2VybmVsLXNpZGUgc3RydWN0dXJlLiBUaGVyZWZvcmUgS01TQU4gaXMgKmFic29sdXRlbHkqIG5vdCBhcHBsaWNhYmxlIGhlcmUuCgpJIHRoZW4gZGlkIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSAqb3RoZXIqIGNvZGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2g6CgoxLiAgYGt2bV9zMzkwX2tleW9wYDogVGhpcyBmaXhlcyBhIGxvY2tpbmcgaXNzdWU7IGEgcG90ZW50aWFsIHJhY2UvdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uIHdoZW4gYWNjZXNzaW5nIGBrdm0tJmd0O2FyY2guZ21hcGAuIExvY2tpbmcgYnVncyBhcmUgS0FTQU4vTE9DS0RFUCB0ZXJyaXRvcnksIG5vdCBLTVNBTi4KMi4gIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IFRoaXMgZml4ZXMgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwuIFRoaXMgaXMgYSBsb2dpYyBlcnJvciBhbmQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4KMy4gIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogVGhpcyBmaXhlcyBhbiBhZGRyZXNzIGVycm9yIGluIGBjb3B5X3RvX3VzZXJgLCBlbnN1cmluZyBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIGFyZSBjb3BpZWQgdG8gdGhlIGNvcnJlY3QgdXNlci1zcGFjZSBvZmZzZXQuIFRoZSBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIHZhbHVlcyB0aGVtc2VsdmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAsIHNvIG5vIGluZm9ybWF0aW9uIGxlYWsuCgpUaGVyZWZvcmUsICpub25lKiBvZiB0aGUgY2hhbmdlcyBhcmUgYWRkcmVzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiBjYW4gZGV0ZWN0LiBLTVNBTiYjMzk7cyBwdXJwb3NlIHdvdWxkIG5vdCBiZSBzZXJ2ZWQgaGVyZS4KClRoZSBgbWVtc2V0YCBpbiBgc2V0dXBfYXBjYjEwYCBkb2VzIGZpeCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgc3VyZSwgYnV0IGl0JiMzOTtzIGFuIGlzc3VlIHdpdGggdGhlIGhhcmR3YXJlIHJlYWRpbmcgdGhlIHN0YWxlIGBhcGNiMWAsIG5vdCB0aGUgQ1BVISBLTVNBTiBpcyBibGluZCB0byBoYXJkd2FyZSByZWFkcyB1bmxlc3MgZXhwbGljaXQgYGttc2FuX2NoZWNrX21lbW9yeWAgY2FsbHMgYXJlIHByZXNlbnQsIHdoaWNoIGFyZSBub3QgaW4gdGhlIFNJRSBibG9jayBhbmQgY3J5Y2IuCgpMZXQgbWUgZG91YmxlLWNoZWNrIGZvciBga21zYW5fY2hlY2tfbWVtb3J5YCBpbiB0aGUgczM5MCBLVk0gY29kZS4gSSYjMzk7bGwgc2VhcmNoIGZvciBpdCBhbmQgYGttc2FuX2Agc3BlY2lmaWNhbGx5IGluIHRoZSBgYXJjaC9zMzkwL2t2bS9gIGRpcmVjdG9yeS4gTm8gbWF0Y2hlcy4gU28gS01TQU4gd2lsbCBkZWZpbml0ZWx5IG5vdCBoYXZlIHBpY2tlZCB1cCBvbiB0aGUgcG90ZW50aWFsIGlzc3VlLgoKKipDb25jbHVzaW9uOioqIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4gVGhpcyBwYXRjaCBkZWFscyB3aXRoOiAxKSBsb2NraW5nIGlzc3VlcyAoS0FTQU4vTE9DS0RFUCksIDIpIHN0YXRlIG1hbmFnZW1lbnQgKGxvZ2ljIGVycm9ycyksIGFuZCAzKSB1c2VyLXNwYWNlIEFQSSBhZGRyZXNzaW5nLiBUaGUgb25seSBjb2RlIGNoYW5nZSBhZGRyZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcmVhZHMgKG5vdCBDUFUgcmVhZHMpLCBhbmQgdGhlcmUgYXJlIG5vIEtNU0FOIGluc3RydW1lbnRhdGlvbiBwb2ludHMgZm9yIHRoZSBTSUUgb3IgY3J5Y2IgYXJlYS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBpcnJlbGV2YW50LiBJIHdpbGwgYWxzbyBjaGVjayBhZ2FpbiB0aGF0IGBjbWRgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbWFrZSBzdXJlIHRoYXQgdGhpcyBkYXRhIGlzIG5vdCBzdGFsZS4gTm8gaXNzdWVzIHRoZXJlIGVpdGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzLCBub25lIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtNU0FOOlxuMS4gYGt2bV9zMzkwX2tleW9wYDogRml4ZXMgYSBsb2NraW5nIGlzc3VlIGJ5IG1vdmluZyB0aGUgcmVhZCBvZiBga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlYCBpbnNpZGUgdGhlIGBtbXVfbG9ja2AgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCByYWNlIG9yIGludmFsaWQgYWNjZXNzLCB3aGljaCBpcyB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAuXG4yLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gOiBGaXhlcyBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSgpYCBjYWxsIG9uIGFuIGVycm9yIHBhdGguIFRoaXMgaXMgYSBzdGF0ZSBtYW5hZ2VtZW50IGJ1Zy5cbjMuIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogRml4ZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIGBjb3B5X3RvX3VzZXJgIHNvIHRoYXQgYHJjYCBhbmQgYHJyY2AgYXJlIHdyaXR0ZW4gdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0cyBpbiB0aGUgdXNlciBzcGFjZSBzdHJ1Y3R1cmUuIFRoZSBjb3BpZWQgZGF0YSBpdHNlbGYgKGBjbWQucmNgIGFuZCBgY21kLnJyY2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGEgcHJlY2VkaW5nIGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuXG40LiBgc2V0dXBfYXBjYjEwYDogQWRkcyBhIGBtZW1zZXRgIHRvIGZ1bGx5IGluaXRpYWxpemUgdGhlIGBhcGNiMWAgc3RydWN0dXJlIGluIHRoZSBzaGFkb3cgQ1JZQ0IuIFdpdGhvdXQgdGhpcywgZmllbGRzIGxpa2UgYGFwbVsxLi4zXWAgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBhbmQgY29udGFpbiBzdGFsZSBkYXRhIGZyb20gcHJldmlvdXMgdXNlcyBvZiB0aGUgY2FjaGVkIGB2c2llX3BhZ2VgLiBUaGlzIHN0YWxlIGRhdGEgaXMgdGhlbiByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSB3aGVuIGV4ZWN1dGluZyBhIG5lc3RlZCBndWVzdCwgcG90ZW50aWFsbHkgZ3JhbnRpbmcgdW5hdXRob3JpemVkIGNyeXB0byBhY2Nlc3MuIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBoYXJkd2FyZSBhbmQgbm90IGJ5IHRoZSBDUFUsIEtNU0FOIGNhbm5vdCBkZXRlY3QgaXQgKEtNU0FOIG9ubHkgaW5zdHJ1bWVudHMgQ1BVIGluc3RydWN0aW9ucyBhbmQgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGBrbXNhbl9jaGVja19tZW1vcnkoKWAgYW5ub3RhdGlvbnMgZm9yIHRoZSBTSUUgYmxvY2spLlxuXG5UaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMsIG5vbmUgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS01TQU46XG4xLiBga3ZtX3MzOTBfa2V5b3BgOiBGaXhlcyBhIGxvY2tpbmcgaXNzdWUgYnkgbW92aW5nIHRoZSByZWFkIG9mIGBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2VgIGluc2lkZSB0aGUgYG1tdV9sb2NrYCBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugb3IgaW52YWxpZCBhY2Nlc3MsIHdoaWNoIGlzIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUC5cbjIuIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IEZpeGVzIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKClgIGNhbGwgb24gYW4gZXJyb3IgcGF0aC4gVGhpcyBpcyBhIHN0YXRlIG1hbmFnZW1lbnQgYnVnLlxuMy4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBGaXhlcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgYGNvcHlfdG9fdXNlcmAgc28gdGhhdCBgcmNgIGFuZCBgcnJjYCBhcmUgd3JpdHRlbiB0byB0aGUgY29ycmVjdCBvZmZzZXRzIGluIHRoZSB1c2VyIHNwYWNlIHN0cnVjdHVyZS4gVGhlIGNvcGllZCBkYXRhIGl0c2VsZiAoYGNtZC5yY2AgYW5kIGBjbWQucnJjYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYSBwcmVjZWRpbmcgYGNvcHlfZnJvbV91c2VyYCwgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay5cbjQuIGBzZXR1cF9hcGNiMTBgOiBBZGRzIGEgYG1lbXNldGAgdG8gZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYGFwY2IxYCBzdHJ1Y3R1cmUgaW4gdGhlIHNoYWRvdyBDUllDQi4gV2l0aG91dCB0aGlzLCBmaWVsZHMgbGlrZSBgYXBtWzEuLjNdYCBhcmUgbGVmdCB1bmluaXRpYWxpemVkIGFuZCBjb250YWluIHN0YWxlIGRhdGEgZnJvbSBwcmV2aW91cyB1c2VzIG9mIHRoZSBjYWNoZWQgYHZzaWVfcGFnZWAuIFRoaXMgc3RhbGUgZGF0YSBpcyB0aGVuIHJlYWQgYnkgdGhlIGhhcmR3YXJlIChTSUUpIHdoZW4gZXhlY3V0aW5nIGEgbmVzdGVkIGd1ZXN0LCBwb3RlbnRpYWxseSBncmFudGluZyB1bmF1dGhvcml6ZWQgY3J5cHRvIGFjY2Vzcy4gSG93ZXZlciwgYmVjYXVzZSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgZXhjbHVzaXZlbHkgYnkgdGhlIGhhcmR3YXJlIGFuZCBub3QgYnkgdGhlIENQVSwgS01TQU4gY2Fubm90IGRldGVjdCBpdCAoS01TQU4gb25seSBpbnN0cnVtZW50cyBDUFUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGVyZSBhcmUgbm8gZXhwbGljaXQgYGttc2FuX2NoZWNrX21lbW9yeSgpYCBhbm5vdGF0aW9ucyBmb3IgdGhlIFNJRSBibG9jaykuXG5cblRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6MTUuNzAzNDY5ODU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MTE3OTgwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3J1blwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX3ZzaWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3Vlcywgbm9uZSBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLTVNBTjpcXG4xLiBga3ZtX3MzOTBfa2V5b3BgOiBGaXhlcyBhIGxvY2tpbmcgaXNzdWUgYnkgbW92aW5nIHRoZSByZWFkIG9mIGBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZWAgaW5zaWRlIHRoZSBgbW11X2xvY2tgIGNyaXRpY2FsIHNlY3Rpb24uIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZSBvciBpbnZhbGlkIGFjY2Vzcywgd2hpY2ggaXMgdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLlxcbjIuIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IEZpeGVzIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKClgIGNhbGwgb24gYW4gZXJyb3IgcGF0aC4gVGhpcyBpcyBhIHN0YXRlIG1hbmFnZW1lbnQgYnVnLlxcbjMuIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogRml4ZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIGBjb3B5X3RvX3VzZXJgIHNvIHRoYXQgYHJjYCBhbmQgYHJyY2AgYXJlIHdyaXR0ZW4gdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0cyBpbiB0aGUgdXNlciBzcGFjZSBzdHJ1Y3R1cmUuIFRoZSBjb3BpZWQgZGF0YSBpdHNlbGYgKGBjbWQucmNgIGFuZCBgY21kLnJyY2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGEgcHJlY2VkaW5nIGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuXFxuNC4gYHNldHVwX2FwY2IxMGA6IEFkZHMgYSBgbWVtc2V0YCB0byBmdWxseSBpbml0aWFsaXplIHRoZSBgYXBjYjFgIHN0cnVjdHVyZSBpbiB0aGUgc2hhZG93IENSWUNCLiBXaXRob3V0IHRoaXMsIGZpZWxkcyBsaWtlIGBhcG1bMS4uM11gIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgYW5kIGNvbnRhaW4gc3RhbGUgZGF0YSBmcm9tIHByZXZpb3VzIHVzZXMgb2YgdGhlIGNhY2hlZCBgdnNpZV9wYWdlYC4gVGhpcyBzdGFsZSBkYXRhIGlzIHRoZW4gcmVhZCBieSB0aGUgaGFyZHdhcmUgKFNJRSkgd2hlbiBleGVjdXRpbmcgYSBuZXN0ZWQgZ3Vlc3QsIHBvdGVudGlhbGx5IGdyYW50aW5nIHVuYXV0aG9yaXplZCBjcnlwdG8gYWNjZXNzLiBIb3dldmVyLCBiZWNhdXNlIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBleGNsdXNpdmVseSBieSB0aGUgaGFyZHdhcmUgYW5kIG5vdCBieSB0aGUgQ1BVLCBLTVNBTiBjYW5ub3QgZGV0ZWN0IGl0IChLTVNBTiBvbmx5IGluc3RydW1lbnRzIENQVSBpbnN0cnVjdGlvbnMgYW5kIHRoZXJlIGFyZSBubyBleHBsaWNpdCBga21zYW5fY2hlY2tfbWVtb3J5KClgIGFubm90YXRpb25zIGZvciB0aGUgU0lFIGJsb2NrKS5cXG5cXG5UaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDoxNS43MDM0NzQ1MDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE2MjU4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMDM3YTNhNTJmNzQ5YTVkNGRlOGI5OTNlMmJkYzBiYTE1OGNmNTU0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDE1OjUwOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IDUxOGE2OWM1NWU4NWMuLjdkZmQwYWQzNjczNjggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTU2MiwxMSArNTYyLDEyIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX3MzOTBfZXhpdCh2b2lkKVxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSlcXG4ge1xcbi1cXHR1bmlvbiBhc2NlIGFzY2UgPSBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZTtcXG4gXFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihhZGRyKTtcXG4rXFx0dW5pb24gYXNjZSBhc2NlO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdGd1YXJkKHJlYWRfbG9jaykoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXHRhc2NlID0ga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2U7XFxuIFxcbiBcXHRzd2l0Y2ggKG9wKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcXG5AQCAtNTA2OSw3ICs1MDcwLDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0cHJfZXJyX3JhdGVsaW1pdGVkKFxcXCJjYW4ndCBydW4gc3RvcHBlZCB2Y3B1ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkKTtcXG4gXFx0XFx0cmMgPSAtRUlOVkFMO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBvdXRfc2lnc2V0O1xcbiBcXHR9XFxuIFxcbiBcXHRrZXJuZWxfZnB1X2JlZ2luKFxcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcXG5AQCAtNTA5OSw5ICs1MTAwLDExIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0b3JlX3JlZ3ModmNwdSk7XFxuIFxcdGtlcm5lbF9mcHVfZW5kKFxcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcXG4gXFxuK1xcdHZjcHUtXFx1MDAzZXN0YXQuZXhpdF91c2Vyc3BhY2UrKztcXG4rXFxuK291dF9zaWdzZXQ6XFxuIFxcdGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSh2Y3B1KTtcXG4gXFxuLVxcdHZjcHUtXFx1MDAzZXN0YXQuZXhpdF91c2Vyc3BhY2UrKztcXG4gb3V0OlxcbiBcXHR2Y3B1X3B1dCh2Y3B1KTtcXG4gXFx0cmV0dXJuIHJjO1xcbkBAIC01NzMyLDcgKzU3MzUsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFxcdTAwMjZjbWQpO1xcbiBcXG4gXFx0XFx0LyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovXFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIoKF9fdTggX191c2VyICopYXJncCwgXFx1MDAyNmNtZC5yYyxcXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXFx1MDAyNmNtZC5yYyxcXG4gXFx0XFx0XFx0XFx0IHNpemVvZihjbWQucmMpICsgc2l6ZW9mKGNtZC5ycmMpKSlcXG4gXFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGJyZWFrO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXFxuaW5kZXggZWVhMjQ1NjJlN2RiMi4uMGE3ZDhkZmFiNmI3OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXFxuQEAgLTE3Myw2ICsxNzMsNyBAQCBzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLFxcbiBcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuK1xcdG1lbXNldChhcGNiX3MsIDAsIHNpemVvZigqYXBjYl9zKSk7XFxuIFxcdGFwY2Jfcy1cXHUwMDNlYXBtWzBdID0gYXBjYl9oLVxcdTAwM2VhcG1bMF0gXFx1MDAyNiB0bXAuYXBtWzBdO1xcbiBcXHRhcGNiX3MtXFx1MDAzZWFxbVswXSA9IGFwY2JfaC1cXHUwMDNlYXFtWzBdIFxcdTAwMjYgdG1wLmFxbVswXSBcXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xcbiBcXHRhcGNiX3MtXFx1MDAzZWFkbVswXSA9IGFwY2JfaC1cXHUwMDNlYWRtWzBdIFxcdTAwMjYgdG1wLmFkbVswXSBcXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDoxNy4xODU3OTk1NjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NDY1MDQ0MjEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5cIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV92c2llXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMDM3YTNhNTJmNzQ5YTVkNGRlOGI5OTNlMmJkYzBiYTE1OGNmNTU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTU6NTA6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDUxOGE2OWM1NWU4NWMuLjdkZmQwYWQzNjczNjggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTU2MiwxMSArNTYyLDEyIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX3MzOTBfZXhpdCh2b2lkKVxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXG4ge1xuLVx0dW5pb24gYXNjZSBhc2NlID0ga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlO1xuIFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihhZGRyKTtcbitcdHVuaW9uIGFzY2UgYXNjZTtcbiBcdGludCByO1xuIFxuIFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0YXNjZSA9IGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZTtcbiBcbiBcdHN3aXRjaCAob3ApIHtcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcbkBAIC01MDY5LDcgKzUwNzAsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCJjYW4ndCBydW4gc3RvcHBlZCB2Y3B1ICVkXFxuXCIsXG4gXHRcdFx0XHQgICB2Y3B1LVx1MDAzZXZjcHVfaWQpO1xuIFx0XHRyYyA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIG91dF9zaWdzZXQ7XG4gXHR9XG4gXG4gXHRrZXJuZWxfZnB1X2JlZ2luKFx1MDAyNmZwdSwgS0VSTkVMX0ZQQyB8IEtFUk5FTF9WWFIpO1xuQEAgLTUwOTksOSArNTEwMCwxMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RvcmVfcmVncyh2Y3B1KTtcbiBcdGtlcm5lbF9mcHVfZW5kKFx1MDAyNmZwdSwgS0VSTkVMX0ZQQyB8IEtFUk5FTF9WWFIpO1xuIFxuK1x0dmNwdS1cdTAwM2VzdGF0LmV4aXRfdXNlcnNwYWNlKys7XG4rXG4rb3V0X3NpZ3NldDpcbiBcdGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSh2Y3B1KTtcbiBcbi1cdHZjcHUtXHUwMDNlc3RhdC5leGl0X3VzZXJzcGFjZSsrO1xuIG91dDpcbiBcdHZjcHVfcHV0KHZjcHUpO1xuIFx0cmV0dXJuIHJjO1xuQEAgLTU3MzIsNyArNTczNSw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgXHUwMDI2Y21kKTtcbiBcbiBcdFx0LyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIoKF9fdTggX191c2VyICopYXJncCwgXHUwMDI2Y21kLnJjLFxuK1x0XHRpZiAoY29weV90b191c2VyKGFyZ3AgKyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3B2X2NtZCwgcmMpLCBcdTAwMjZjbWQucmMsXG4gXHRcdFx0XHQgc2l6ZW9mKGNtZC5yYykgKyBzaXplb2YoY21kLnJyYykpKVxuIFx0XHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXG5pbmRleCBlZWEyNDU2MmU3ZGIyLi4wYTdkOGRmYWI2Yjc5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS92c2llLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXG5AQCAtMTczLDYgKzE3Myw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXG4gXHRcdFx0ICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjApKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4rXHRtZW1zZXQoYXBjYl9zLCAwLCBzaXplb2YoKmFwY2JfcykpO1xuIFx0YXBjYl9zLVx1MDAzZWFwbVswXSA9IGFwY2JfaC1cdTAwM2VhcG1bMF0gXHUwMDI2IHRtcC5hcG1bMF07XG4gXHRhcGNiX3MtXHUwMDNlYXFtWzBdID0gYXBjYl9oLVx1MDAzZWFxbVswXSBcdTAwMjYgdG1wLmFxbVswXSBcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XG4gXHRhcGNiX3MtXHUwMDNlYWRtWzBdID0gYXBjYl9oLVx1MDAzZWFkbVswXSBcdTAwMjYgdG1wLmFkbVswXSBcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDoxNy4xODU4MDA3OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODEyNzc0OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBzMzkwIEtWTSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3Mgc29tZSBjb2RlIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIGFuZCBgYXJjaC9zMzkwL2t2bS92c2llLmNgLiAgVGhpcyBpcyBkZWZpbml0ZWx5IHMzOTAgYXJjaGl0ZWN0dXJlIHNwZWNpZmljLCB0aGF0J3MgSUJNIFogaGFyZHdhcmUuICBUaGUgY2hhbmdlcyB0aGVtc2VsdmVzIGxvb2sgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogcmVwb3NpdGlvbmluZyBhIGxvY2sgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBjb3VwbGUgb2YgYGdvdG9gIGZpeGVzIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGEgcG90ZW50aWFsIG9mZnNldCBjb3JyZWN0aW9uIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGEgYG1lbXNldGAgaW4gYHNldHVwX2FwY2IxMGAuIFNlZW1zIGZ1bmN0aW9uYWwsIGxpa2VseSBmb3Igc3RhYmlsaXR5IG9yIGNvcnJlY3RuZXNzLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gIE5vcm1hbGx5LCBzMzkwIGlzbid0IHRoZSBwcmltYXJ5IHRhcmdldCBmb3IgZ2VuZXJhbC1wdXJwb3NlIHg4Nl82NCBRRU1VIGZ1enppbmcgc2V0dXBzLiBJdCdzIHVzdWFsbHkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIGRlZGljYXRlZCBlbnZpcm9ubWVudCBpZiB5b3UgKmFyZSogZnV6emluZyBpdC4gSG93ZXZlciwgSSBrbm93IHN5emthbGxlciAqZG9lcyogc3VwcG9ydCBzMzkweCwgYW5kIHRoYXQncyB0aGUga2V5LlxuXG5Ib2xkIG9uLCB0aGUgcHJvbXB0IG1lbnRpb25zIHNwZWNpZmljYWxseSBhdm9pZGluZyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBCdXQgd2FpdCwgczM5MHggKmlzKiBhbiBhcmNoaXRlY3R1cmUsIGFuZCBzaW5jZSBzeXprYWxsZXIgKnN1cHBvcnRzKiBzMzkweCwgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgb24gczM5MHggUUVNVSwgdGhlIGZ1enppbmcgaXMgcG9zc2libGUuIFNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyBzeXprYWxsZXIgZnV6eiBzMzkweCBLVk0/ICBZZXMsIHN5emthbGxlciAqZG9lcyogaGF2ZSBzMzkweCBzdXBwb3J0LiBHaXZlbiB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gS1ZNLCBpdCdzIHZlcnkgcHJvYmFibGUuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSBLVk0gaXMgZW5hYmxlZCBmb3IgczM5MC4gIEkga25vdyBgQ09ORklHX0tWTWAgaXMgdGhlIGdlbmVyYWwgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiAgSSdsbCBsb29rIGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuIFRoaXMgc2hvdWxkIGdpdmUgYSBjbGVhciBhbnN3ZXIgb24gd2hldGhlciBLVk0gaXMgZXZlbiAqZW5hYmxlZCogb24gczM5MC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjI0Ljk5ODU3ODA3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUyNzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjI1LjA0OTExMTc4OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDAzOTM4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIEtWTeKApiB0aGF0J3MgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnQsIEkga25vdyB0aGF0LiBCdXQgaG9sZCBvbiwgdGhlIGNvbmNlcHQgb2YgKnZpcnR1YWxpemF0aW9uKiBpdHNlbGbigKYgaXNuJ3QgdGhlcmUgc29tZXRoaW5nIGVsc2UgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IEl0IGZlZWxzIGxpa2UgdGhlcmUncyBhIGJyb2FkZXIgY2F0ZWdvcnkgdGhhdCB0aWVzIGludG8gdGhpcywgb3IgbWF5YmUgdGhlcmUncyBhIGZlYXR1cmUgZmxhZyB0aGF0IG1pZ2h0IGJlIG5hbWVkIGBWSVJUVUFMSVpBVElPTmA/IFRpbWUgdG8gZHJpbGwgZG93bi4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIEkgc2VlbSB0byByZW1lbWJlciBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBiZWluZyB0aGUgbGlrZWx5IHNwb3QgdG8gZmluZCBhIGRlcGVuZGVuY3kgb3IgY29uZmlnIG9wdGlvbiB0aGF0IHVzZXMgYFZJUlRVQUxJWkFUSU9OYC4gTGV0J3Mgc2VlIGlmIHRoYXQgZmlsZSBzaGVkcyBzb21lIGxpZ2h0IG9uIHRoZSByZWxhdGlvbnNoaXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjI4LjI4OTUwODI3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIzNTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDoyOC4zMzc3NTUyMTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkyNjYzMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEtWTWAgd2lsbCBiZSBzdWZmaWNpZW50IGZvciBteSBjdXJyZW50IG5lZWRzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFzIGNoYW5nZWQsIGFuZCBob3cgdGhvc2UgY2hhbmdlcyBpbXBhY3QgdGhlIHN5c3RlbS5cblxuRmlyc3QsIGxldCdzIGlkZW50aWZ5IHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IEkndmUgZ290IGBrdm1fczM5MF9rZXlvcGAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGBzZXR1cF9hcGNiMTBgIHRvIGludmVzdGlnYXRlLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gYGt2bV9zMzkwX2tleW9wYCBpcyBpbiBvcmRlci4gSXMgaXQgc3RhdGljPyBZZXMsIGl0IGlzLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIEkgaGF2ZSB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgaXRzIHVzYWdlIGNvbnRleHQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hlcmUgdGhhdCBsZWFkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5NiwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDozMi4xMzA0MjA4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkwMzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9rZXlvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA2Mi1cXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA2MzpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDY0LVxcdFxcdHVuaW9uIHNrZXkgc2tleTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDc1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc2OlxcdFxcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzctXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDozMi4xNzgzMzMxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjg0NDI0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgS1ZNIEFyY2hpdGVjdHVyZSBmb3IgUG90ZW50aWFsIE9wdGltaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIGRpdmluZyBpbnRvIHRoaXMgS1ZNIGNvZGUgYW5kIGl0IGxvb2tzIGxpa2Ugd2UncmUgc3RhcnRpbmcgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLiBSaWdodCwgdGhhdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgVk0tbGV2ZWwgSU9DVExzIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBHb29kLiBOb3csIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgYHJ1bmAgaW9jdGwgcGF0aC4gSSBzZWUgdGhhdCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzbid0IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEkgYWx3YXlzIHN0YXJ0IGxvb2tpbmcgYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXMgdGhvc2UgYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGVudHJ5cG9pbnRzIHRvIGEgcGFydGljdWxhciBjYWxsIGZsb3cuIExldCdzIHNlZSBpZiB0aGF0IGluZGljYXRlcyBhbnl0aGluZywgcGVyaGFwcyBpbmRpY2F0aW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmFjdGlvbi5cblxuQW5kIHNpbWlsYXJseSwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGlzbid0IHN0YXRpYyBlaXRoZXIuIEludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IGltcG9ydGFudCBlbnRyeSBwb2ludHMgZm9yIHZDUFUtc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyB0aGV5J3JlIHVzZWQuXG5cbk5vdywgdGhvdWdoLCBJIGRvIHNlZSBgc2V0dXBfYXBjYjEwYC4gQW5kIHRoYXQgKmlzKiBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBhIG1vcmUgbG9jYWwgc2NvcGUuIFNvLCBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSAqaXQqIGlzIGNhbGxlZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgd2l0aCBoZWxwZXIgZnVuY3Rpb25zLiBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuIEdvdHRhIHNlZSBpZiBpdOKAmXMgYSBoZWxwZXIgZm9yIHNvbWUgY3JpdGljYWwgcGF0aCBvciBpZiBpdCdzIGludm9sdmVkIGluIHNvbWV0aGluZyBsZXNzIHNpZ25pZmljYW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6MzYuMzA2Nzc3OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTA4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldHVwX2FwY2IxMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY1LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTI1Mj1zdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY4LVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjk6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcwLVxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODQtXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NTpcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODYtXFx0XFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6MzYuMzc5NjkyODI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTA3NTYwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgU3RhY2sqKlxuXG5Pa2F5LCBzbyBgc2V0dXBfYXBjYmAgaXMsIGVzc2VudGlhbGx5LCBhIGRlZXBseSBuZXN0ZWQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEl0IGxvb2tzIGxpa2UgaXQncyBjYWxsZWQgaW50ZXJuYWxseSBieSBgc2V0dXBfYXBjYmAgaXRzZWxmLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgc2V0dXBfY3J5Y2JgLCBhbmQgdGhhdCB1bHRpbWF0ZWx5IGdldHMgaW5pdGlhdGVkIGVpdGhlciBmcm9tIGB2c2llX3J1bmAgb3Igc29tZXRoaW5nIHN0cnVjdHVyYWxseSBzaW1pbGFyIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhpcyBjYWxsIGNoYWluIGFuZCBtYXAgaG93IHRoaXMgbmVzdGVkIGNhbGwgZ2V0cyBpbnZva2VkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uLCBwYXJ0aWN1bGFybHkgaWYgdGhlcmUgYXJlIHRpbWluZyBkZXBlbmRlbmNpZXMgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBpc3N1ZXMgdGhhdCBjb21lIGludG8gcGxheS4gSXQgd291bGQgYmUgdmFsdWFibGUgdG8gdW5kZXJzdGFuZCwgYXQgdGhpcyBwb2ludCwgaG93IGZhciBpbnRvIHRoZSBjYWxsIGNoYWluIHdlIG5lZWQgdG8gZ2V0IHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjQwLjIzMDQ1MjMxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NTc3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfYXBjYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY1LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE4NS0vKipcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxODY6ICogc2V0dXBfYXBjYjAwIC0gQ29weSB0byBBUENCIEZPUk1BVDAgZnJvbSBBUENCIEZPUk1BVDBcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODctICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTMtICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTk0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjAwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqYXBjYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5NS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgdW5zaWduZWQgbG9uZyAqYXBjYl9oKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjExLS8qKlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIxMjogKiBzZXR1cF9hcGNiMTEgLSBDb3B5IHRoZSBGT1JNQVQxIEFQQ0IgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIHNoYWRvdyBDUllDQlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMy0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxOS0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjA6c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjIxLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM4LS8qKlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIzOTogKiBzZXR1cF9hcGNiIC0gQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGFwY2IuXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQwLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjUxLSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1MjpzdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1My1cXHQgICAgICAgY29uc3QgdTMyIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2Mi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjM6XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMSh2Y3B1LCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjQtXFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcyLVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNzM6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3NC1cXHRcXHRcXHRcXHRcXHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg2LVxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODktXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MDpcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjkxLVxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0zMTk9c3RhdGljIGludCBzaGFkb3dfY3J5Y2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXFx0aWYgKGFwaWVfcykge1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MTpcXHRcXHRyZXQgPSBzZXR1cF9hcGNiKHZjcHUsIFxcdTAwMjZ2c2llX3BhZ2UtXFx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM1Mi1cXHRcXHRcXHRcXHQgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NDAuMjc4MjE1MjYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzkyNzI5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIGBzaGFkb3dfY3J5Y2JgIGlzIGNhbGxlZCBmcm9tIGB2c2llX3J1bmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gZm9jdXMgb24uIExldCdzIGxvb2sgYXQgdGhlIHN0YW5kYXJkIEtWTSBlbnRyeSBwb2ludHM6IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGBrdm1fYXJjaF92bV9pb2N0bGAuIFllcCwgdGhvc2UgYXJlIGRlZmluaXRlbHkgQVBJIGVudHJ5cG9pbnRzLCBubyBxdWVzdGlvbi5cblxuQnV0IHdhaXQgYSBtaW51dGUsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXMgYSAqdmVyeSogaG90IHBhdGggZnVuY3Rpb24g4oCTIGl0J3MgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIHJ1bm5pbmcgdGhlIFZDUFUuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHRvbGQgbWUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RpbmcgZGlzdHJpYnV0aW9uIGZyb20gc2tld2luZy4gU28gZXZlbiB0aG91Z2ggaXQncyBhbiBBUEkgZW50cnlwb2ludCBhbmQgdGhlIG1haW4gb25lIGF0IHRoYXQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgaXNzdWU/XG5cbkxldCBtZSBzZWUuLi4gZm9yIHRoZSBga3ZtX3MzOTBfa2V5b3BgIG9wZXJhdGlvbiwgaXQgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIGBrdm1fYXJjaF92bV9pb2N0bGAsIHVuZGVyIHRoZSBgS1ZNX1MzOTBfWlBDSV9PUGAgY29udHJvbCBwYXRoLiBPa2F5LCBsZXQncyBnbyBiYWNrIGFuZCByZS1leGFtaW5lIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGxvb2sgZm9yIG9wZXJhdGlvbnMgdW5kZXIgYGtvcC5vcGVyYXRpb25gIHdpdGhpbiBpdC4gVGhhdCBzZWVtcyBsaWtlIGEgbXVjaCBiZXR0ZXIgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NDYuOTU3NDkwNzM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc0ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrb3BcXFxcLm9wZXJhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5Mjc9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzUtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNzY6XFx0XFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3Ny1cXHRcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjQ3LjAwNDI0NjI4OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkwNzY0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1YmplY3Q6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0gQXJjaGl0ZWN0dXJlIC0gU3BlY2lmaWNhbGx5IGBrdm1fYXJjaF92bV9pb2N0bGAqKlxuXG5Pa2F5LCBzbyB0aGUgZGlyZWN0aW9uIGlzIGNsZWFyOiBXZSdyZSBkaXZpbmcgaW50byBga3ZtX2FyY2hfdm1faW9jdGxgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMwNjAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIG9mIFZpcnR1YWwgTWFjaGluZSBJTyBDb250cm9scyB3aXRoaW4gS1ZNLiBMaW5lIDMwNjAuLi4gd2VsbCwgdGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiBzb21lIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBhIHNpZ25pZmljYW50IGJyYW5jaCBpbiBpdHMgZXhlY3V0aW9uIGlzIGxvY2F0ZWQuIFdlIG5lZWQgdG8gZm9jdXMgb24gd2hhdCBoYXBwZW5zIHRoZXJlLiBJcyBpdCBlcnJvciBoYW5kbGluZywgZGlzcGF0Y2hpbmcgdG8gb3RoZXIgYXJjaC1zcGVjaWZpYyBmdW5jdGlvbnMsIG9yIHBlcmhhcHMgYSBzZWN1cml0eSBjaGVjaz8gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgdGhlcmUgaXMgdGhlIGtleS4gR2l2ZW4gdGhlIGV4cGVydGlzZSBoZXJlLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXM7IGl0IHdvbid0IGJlIGVub3VnaCB0byBrbm93ICp3aGF0KiB0aGUgY29kZSBkb2VzLCBidXQgYWxzbyAqd2h5KiBpdCdzIGltcGxlbWVudGVkIHRoaXMgd2F5LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEkgZXhwZWN0IGEgd2VsbC1jcmFmdGVkIHN0cnVjdHVyZSwgYW5kIEknbSByZWFkeSB0byBwYXJzZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1OCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjUxLjI5NTAxMzg4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNTA6XFx0XFx0XFx0YnJlYWs7XFxuMzA1MTpcXHRcXHR9XFxuMzA1MjpcXHRcXHRjYXNlIEtWTV9TMzkwX01FTV9PUDoge1xcbjMwNTM6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX21lbV9vcCBtZW1fb3A7XFxuMzA1NDpcXHRcXG4zMDU1OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2bWVtX29wLCBhcmdwLCBzaXplb2YobWVtX29wKSkgPT0gMClcXG4zMDU2OlxcdFxcdFxcdFxcdHIgPSBrdm1fczM5MF92bV9tZW1fb3Aoa3ZtLCBcXHUwMDI2bWVtX29wKTtcXG4zMDU3OlxcdFxcdFxcdGVsc2VcXG4zMDU4OlxcdFxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjMwNTk6XFx0XFx0XFx0YnJlYWs7XFxuMzA2MDpcXHRcXHR9XFxuMzA2MTpcXHRcXHRjYXNlIEtWTV9TMzkwX0tFWU9QOiB7XFxuMzA2MjpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG4zMDYzOlxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XFxuMzA2NDpcXHRcXHRcXHR1bmlvbiBza2V5IHNrZXk7XFxuMzA2NTpcXHRcXG4zMDY2OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2a29wLCBhcmdwLCBzaXplb2Yoa29wKSkpIHtcXG4zMDY3OlxcdFxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjMwNjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzA2OTpcXHRcXHRcXHR9XFxuMzA3MDpcXHRcXHRcXHRza2V5LnNrZXkgPSBrb3Aua2V5O1xcbjMwNzE6XFx0XFxuMzA3MjpcXHRcXHRcXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4zMDczOlxcdFxcdFxcdGlmICghbWMpXFxuMzA3NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMDc1OlxcdFxcbjMwNzY6XFx0XFx0XFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcXG4zMDc3OlxcdFxcdFxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4zMDc4OlxcdFxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4zMDc5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMwODA6XFx0XFxuMzA4MTpcXHRcXHRcXHRrb3Aua2V5ID0gcjtcXG4zMDgyOlxcdFxcdFxcdHIgPSAwO1xcbjMwODM6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2a29wLCBzaXplb2Yoa29wKSkpXFxuMzA4NDpcXHRcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG4zMDg1OlxcdFxcdFxcdGJyZWFrO1xcbjMwODY6XFx0XFx0fVxcbjMwODc6XFx0XFx0Y2FzZSBLVk1fUzM5MF9aUENJX09QOiB7XFxuMzA4ODpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCBhcmdzO1xcbjMwODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjUxLjI5NTM5MzQyN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTA4NjM1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtWTS9zMzkwIENvZGViYXNlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBkaWdnaW5nIGludG8gdGhlIEtWTS9zMzkwIGNvZGUsIGFuZCBJIG5lZWQgdG8gY2xhcmlmeSBzb21lIGNydWNpYWwgaW9jdGwgZW50cnkgcG9pbnRzLiBGcm9tIHdoYXQgSSd2ZSBnYXRoZXJlZCwgdGhlIGBLVk1fUzM5MF9LRVlPUGAgaW9jdGwgc2VlbXMgdG8gYmUgdGhlIGtleSB0byB3aGF0IEknbSBpbnRlcmVzdGVkIGluLiBUaGUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIHNlY3Rpb24sIHdoaWNoIGlzIGdvb2QgdG8gY29uZmlybS5cblxuTm93LCBzaGlmdGluZyBnZWFycyB0byBWQ1BVLXJlbGF0ZWQgaW9jdGxzLCBJIHNlZSBhIHBhdHRlcm4uIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgY29ycmVzcG9uZHMgdG8gYEtWTV9SVU5gLCB0aGF0IG11Y2ggbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIEkgd2FudCB0byBjbGFyaWZ5IHRoZSBvdGhlciBWQ1BVIGNvbnRyb2wgY29tbWFuZC4gVGhlIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBmdW5jdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggYEtWTV9TMzkwX1BWX0NPTU1BTkRfVkNQVWAuXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgVkNQVSBjb21tYW5kcy4gTGV0IG1lIHplcm8gaW4gb24gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTczMCBpbiB0aGUgc291cmNlLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB3aGF0IEknbSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NTUuNDA0MDMxODM4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTcyMDpcXHRcXHRcXHRpZiAoIWlzX3Byb3RfdmlydF9ob3N0KCkpXFxuNTcyMTpcXHRcXHRcXHRcXHRicmVhaztcXG41NzIyOlxcdFxcbjU3MjM6XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuNTcyNDpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmNtZCwgYXJncCwgc2l6ZW9mKGNtZCkpKVxcbjU3MjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTcyNjpcXHRcXG41NzI3OlxcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbjU3Mjg6XFx0XFx0XFx0aWYgKGNtZC5mbGFncylcXG41NzI5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjU3MzA6XFx0XFxuNTczMTpcXHRcXHRcXHQvKiBXZSBvbmx5IGhhbmRsZSB0aGlzIGNtZCByaWdodCBub3cgKi9cXG41NzMyOlxcdFxcdFxcdGlmIChjbWQuY21kICE9IEtWTV9QVl9EVU1QKVxcbjU3MzM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTczNDpcXHRcXG41NzM1OlxcdFxcdFxcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFxcdTAwMjZjbWQpO1xcbjU3MzY6XFx0XFxuNTczNzpcXHRcXHRcXHQvKiBBbHdheXMgY29weSBvdmVyIFVWIHJjIC8gcnJjIGRhdGEgKi9cXG41NzM4OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoYXJncCArIG9mZnNldG9mKHN0cnVjdCBrdm1fcHZfY21kLCByYyksIFxcdTAwMjZjbWQucmMsXFxuNTczOTpcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKGNtZC5yYykgKyBzaXplb2YoY21kLnJyYykpKVxcbjU3NDA6XFx0XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuNTc0MTpcXHRcXHRcXHRicmVhaztcXG41NzQyOlxcdFxcdH1cXG41NzQzOlxcdFxcdGRlZmF1bHQ6XFxuNTc0NDpcXHRcXHRcXHRyID0gLUVOT1RUWTtcXG41NzQ1OlxcdFxcdH1cXG41NzQ2OlxcdFxcbjU3NDc6XFx0XFx0dmNwdV9wdXQodmNwdSk7XFxuNTc0ODpcXHRcXHRyZXR1cm4gcjtcXG41NzQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NTUuNDA0Mzc0NzI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mjc0MjUxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFVgIGlzIHByb2Nlc3NlZC4gRnJvbSB3aGF0IEkgc2VlLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXMgdGhlIGhhbmRsZXIsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgcmVhY2ggdGhlIGNvZGUgZm9yIHRoaW5ncyBsaWtlIGBzZXR1cF9hcGNiMTBgLiBJIHNlZSBhIGNvbm5lY3Rpb24g4oCTIGl0IGxvb2tzIGxpa2UgYHNldHVwX2FwY2IxMGAgaXMgdHJpZ2dlcmVkIGZyb20gYHNoYWRvd19jcnljYmAuIE5vdywgdGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgYHNoYWRvd19jcnljYmAgaXMgY2FsbGVkIGZyb20gYHZzaWVfcnVuYC4gT2theSwgYHZzaWVfcnVuYCBpcyB0aGUgbmV4dCBmdW5jdGlvbiBJIHJlYWxseSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbi4gTGV0J3Mgc2VlIGhvdyB0aGF0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NTguOTMxODAyMjY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMwMTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c2llX3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMTA4PXN0YXRpYyBpbnQgdnNpZV9oYW5kbGVfbXZwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSwgc3RydWN0IGdtYXAgKnNnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTE4Ny0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMTg4OnN0YXRpYyBpbnQgZG9fdnNpZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg5LVxcdF9fcmVsZWFzZXModmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTM4Mz1zdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3NoYWRvd19zY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM5Ni0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMzk3OnN0YXRpYyBpbnQgdnNpZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM5OC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDEyLVxcdFxcdFxcdHVwZGF0ZV9pbnRlcnZlbnRpb25fcmVxdWVzdHModnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDEzOlxcdFxcdFxcdHJjID0gZG9fdnNpZV9ydW4odmNwdSwgdnNpZV9wYWdlLCBzZyk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQxNC1cXHRcXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNTU3PWludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTk5LVxcdHJlZ2lzdGVyX3NoYWRvd19zY2IodmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjAwOlxcdHJjID0gdnNpZV9ydW4odmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjAxLVxcdHVucmVnaXN0ZXJfc2hhZG93X3NjYih2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NTguOTc5MTExMDYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mjk1NDcyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgVlNJRSBIYW5kbGVyKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBrdm1fczM5MF9oYW5kbGVfdnNpZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHdlIGhhbmRsZSBWaXJ0dWFsIFNJRSwgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMgb24gczM5MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBleHBvc2VkIGFzIGEgcHVibGljIEFQST9cIiBObywgaXQncyBub3QgYSBmdW5jdGlvbiBJJ2QgZGlyZWN0bHkgY2FsbCwgaXQncyBhbiBpbnN0cnVjdGlvbiBoYW5kbGVyLiBJdCBzaXRzIGxvd2VyIGRvd24sIHJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmljIFZTSUUgaW5zdHJ1Y3Rpb24gd2l0aGluIHRoZSBndWVzdCBjb250ZXh0LlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzLiBOb3cgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXMgYWN0dWFsbHkgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIFZTSUUgaGFuZGxlciBnZXRzIHRyaWdnZXJlZC4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFZTSUUgaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIEtWTS9zMzkwIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTowMi44MDg2NjA0MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDc2ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2hhbmRsZV92c2llXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD00NDI9aW50IGt2bV9zMzkwX3NrZXlfY2hlY2tfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDQ0LS8qIGltcGxlbWVudGVkIGluIHZzaWUuYyAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDo0NDU6aW50IGt2bV9zMzkwX2hhbmRsZV92c2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQ0Ni12b2lkIGt2bV9zMzkwX3ZzaWVfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9OTU5PWludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTcyLVxcdGNhc2UgMHgxNDpcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5NzM6XFx0XFx0cmV0dXJuIGt2bV9zMzkwX2hhbmRsZV92c2llKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk3NC1cXHRjYXNlIDB4MjE6XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNDg0PXN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU1Ni1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTU3OmludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjAyLjg1NzE0NTA2NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDk1ODY1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNL3MzOTB4IENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0vczM5MHggY29kZSBhbmQgdHJ5aW5nIHRvIG5hcnJvdyBkb3duIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFRoZSB0cmFjZSBzdGFydHMgaW4gYGt2bV9zMzkwX2hhbmRsZV9iMmAsIHNwZWNpZmljYWxseSBoYW5kbGluZyB0aGUgYGIyYCBvcGNvZGUsIGFuZCBieSBleHRlbnNpb24gdGhlIGBTSUVgIGluc3RydWN0aW9uLiBUaGF0IHBvaW50cyBtZSB0byBga3ZtX3MzOTBfaGFuZGxlX2IyYCBvciBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGFzIGxpa2VseSBjYW5kaWRhdGVzIHRvIGZvY3VzIG9uIGluaXRpYWxseS4gSSBjaGVja2VkIGlmIGVpdGhlciBvZiB0aG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgYnV0IG5vIGRpY2UuXG5cbk1vdmluZyBvdXR3YXJkLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbS4gSSdtIHNlZWluZyBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGFzIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBhcmUgdmVyeSBnZW5lcmljIGFuZCBsaWtlbHkgaGVhdmlseSB1c2VkIHdpdGhpbiBLVk0sIHNvIEkgd2FudCB0byBiZSBtb3JlIHNwZWNpZmljIGlmIHBvc3NpYmxlLlxuXG5Mb29raW5nIGRlZXBlciBpbnRvIHRoZSBpb2N0bCBoYW5kbGluZywgYGt2bV9hcmNoX3ZtX2lvY3RsYCBkZWFscyB3aXRoIGBLVk1fUzM5MF9LRVlPUGAsIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaGFuZGxlcyBgS1ZNX1MzOTBfUFZfQ09NTUFORF9WQ1BVYC4gSSBjb25zaWRlcmVkIGBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wYCBidXQgaXQgc2VlbXMgdGhlIGlzc3VlIGlzIGFjdHVhbGx5IHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXRzZWxmLCBzbyBJJ2xsIGtlZXAgdGhhdCBvbmUgaW4gbXkgc2lnaHRzLiBMaWtld2lzZSwgd2hpbGUgYGt2bV9zMzkwX2tleW9wYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92bV9pb2N0bGAgaXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBpc3N1ZSB0aGVyZSB0b28sIHNvIHRoYXQncyBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbi4gQW5kIGBzZXR1cF9hcGNiMTBgIGlzIGFsc28gb2YgaW50ZXJlc3QsIGFzIGl0J3MgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2hhbmRsZV92c2llYC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCBpcyBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuIEkgc2hvdWxkIHJldmlzaXQgdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgQ09ORklHcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjEwLjM1MzAxMzQyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3OTYxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MToxMC40MDA4MTUzMTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMzE3NjUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgdGhlIHMzOTB4IEtWTSBNb2R1bGUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIHdhcyBhYm91dCBgS1ZNX1MzOTBfVUNPTlRST0xgLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSBpbW1lZGlhdGVseSBhc3N1bWVkLCBubywgdGhvc2UgY2hhbmdlcyB3ZXJlIGludGVncmF0ZWQgaW50byB0aGUgY29yZSBLVk0uIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UuIEknbSByZWNhbGxpbmcgbm93IHRoYXQgYGt2bV9zMzkwX2tleW9wYCBpcyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiBga3ZtLXMzOTAuY2AuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZGVwZW5kZW5jeSBpcyB0aGVyZSBvciBub3QuIEZ1cnRoZXIsIEkgc2VlIGBzZXR1cF9hcGNiMTBgIGlzIGRlZmluZWQgaW4gYHZzaWUuY2AuIFRoYXQgbWFrZXMgdGhpcyBtdWNoIG1vcmUgaW50ZXJlc3RpbmcuIEJlZm9yZSBJIG1ha2UgYW55IGRlZmluaXRpdmUgY29uY2x1c2lvbnMsIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgd2hldGhlciBgdnNpZS5jYCBpdHNlbGYgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gVGhhdCB3aWxsIHRlbGwgbWUgaWYgdGhlIG1vZHVsZSBpcyBhY3R1YWxseSBpbiBwbGF5IGhlcmUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgaXMgYSBkZXBlbmRlbmN5IG9uIHRoYXQgZmVhdHVyZS4gTGV0J3Mgc2VlIGlmIHRoYXQncyBjb25kaXRpb25hbCBvciBhbHdheXMgY29tcGlsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6MTQuMzAzOTk1Mjc3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIyMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c2llXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSArPSBrdm0tczM5MC5vIGludGVyY2VwdC5vIGludGVycnVwdC5vIHByaXYubyBzaWdwLm9cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICs9IGRpYWcubyBnYWNjZXNzLm8gZ3Vlc3RkYmcubyB2c2llLm8gcHYub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgKz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MToxNC4zNTAyMjE4MTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0MDAwNjgwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIHMzOTAgUGF0Y2hlcyBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UndmUgZ290IGEgaGFuZGZ1bCBvZiBmdW5jdGlvbmFsIGZpeGVzIHdpdGhpbiB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGVzdGFiaWxpdHkgYW5kIGZ1enppbmcgdGFyZ2V0cy5cblxuRmlyc3QsIHRoZSBwYXRjaGVzIGFyZSB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBgS1ZNYCBlbmFibGVkLCBzbyB0aGF0J3MgdGhlIGJhc2UgY29uZmlndXJhdGlvbiB3ZSBuZWVkLlxuXG5UaGUgZmlyc3QgY2hhbmdlIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXMgaW50ZXJlc3RpbmcuIEl0IGZpeGVzIGEgYnlwYXNzIG9mIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSlgIHdoZW4gYSB2Q1BVIGlzIHN0b3BwZWQsIHdoaWNoIGNhbiBsZWFkIHRvIHNpZ25hbCBtYXNrIGlzc3Vlcy4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHRoZSBgS1ZNX1JVTmAgb3BlcmF0aW9uLiBFdmVuIHRob3VnaCBpdCdzIGEgaG90LXBhdGggZnVuY3Rpb24sIHRoZSBidWcgaXMgcmlnaHQgdGhlcmUuIEl0J3MgYSBrZXkgZW50cnkgcG9pbnQsIHNvIEknbSBpbmNsdWRpbmcgaXQgYXMgYSBmb2N1cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjYW4gaGl0IHRoYXQgc3BlY2lmaWMgY29kZSBwYXRoLlxuXG5UaGVuLCB0aGVyZSdzIGEgZml4IGluIGBrdm1fczM5MF9rZXlvcGAuIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCByYWNlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSByZWxhdGVkIHRvIHRoZSBga3ZtLVx1MDAzZWFyY2guZ21hcGAgYWNjZXNzLiBUaGUga2V5IGlzIHRoYXQgdGhlIGZpeCBtb2RpZmllcyB0aGUgYWNjZXNzIG9mIGFuIGltcG9ydGFudCBzaGFyZWQgc3RydWN0dXJlLiBUaGUgZml4IGFsc28gaW52b2x2ZXMgYSBsb2NrIHNvIEknbGwgaW5jbHVkZSBga3ZtX2FyY2hfdm1faW9jdGxgIHRvIHRyaWdnZXIgdGhpcyBjb2RlLlxuXG5OZXh0LCB0aGUgZml4IGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBjb3JyZWN0cyBhbiBvZmZzZXQgaXNzdWUgd2hlbiBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgYWRkcmVzc2VzIGFuIGluY29ycmVjdCBvZmZzZXQgb2YgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZHVyaW5nIGEgS1ZNX1BWX1ZDUFVfRFVNUCBjb21tYW5kLiBUaGUgcmlnaHQgdGFyZ2V0IGlzIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC5cblxuRmluYWxseSwgd2UndmUgZ290IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGZpeGVkIGluIGBzZXR1cF9hcGNiMTBgLiBJJ2xsIGZvY3VzIG9uIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgYXMgdGhlIGVudHJ5cG9pbnQgaGVyZS5cblxuQWxsIHRoZXNlIGNoYW5nZXMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gZnVuY3Rpb25hbGl0eSBhbmQgc2hvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGZ1enppbmcgd2l0aCB0aG9zZSBzeW1ib2xzLlxuU28gSSBzaG91bGQgZm9jdXMgb246XG4tICAgYGt2bV9hcmNoX3ZtX2lvY3RsYFxuLSAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsYFxuLSAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmBcbi0gICBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgXG5cbkdpdmVuIHRoZXNlIGlkZW50aWZpZWQgZW50cnlwb2ludHMsIEknbSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbiB0byBjcmFmdGluZyB0aGUgcmlnaHQgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzksIk91dHB1dFRva2VucyI6MTk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTozMS43NTAyOTM0MTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk0NTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuXCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfdnNpZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGlzc3VlcyBpbiBzMzkwIEtWTTogYSBsb2NrIG9yZGVyaW5nIGlzc3VlIGluIGBrdm1fczM5MF9rZXlvcGAsIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlYCBjYWxsIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGFuIGluY29ycmVjdCBgY29weV90b191c2VyYCBvZmZzZXQgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYHNldHVwX2FwY2IxMGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBpb2N0bHMgYW5kIGluc3RydWN0aW9uIGhhbmRsZXJzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5cIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV92c2llXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTozMS44MzYyNDU3OTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjk4NTE5NTM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjMxLjgzNjk1NzQwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzI5ODQ0ODA1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3Vlcywgbm9uZSBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLTVNBTjpcXG4xLiBga3ZtX3MzOTBfa2V5b3BgOiBGaXhlcyBhIGxvY2tpbmcgaXNzdWUgYnkgbW92aW5nIHRoZSByZWFkIG9mIGBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZWAgaW5zaWRlIHRoZSBgbW11X2xvY2tgIGNyaXRpY2FsIHNlY3Rpb24uIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZSBvciBpbnZhbGlkIGFjY2Vzcywgd2hpY2ggaXMgdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLlxcbjIuIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IEZpeGVzIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKClgIGNhbGwgb24gYW4gZXJyb3IgcGF0aC4gVGhpcyBpcyBhIHN0YXRlIG1hbmFnZW1lbnQgYnVnLlxcbjMuIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogRml4ZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIGBjb3B5X3RvX3VzZXJgIHNvIHRoYXQgYHJjYCBhbmQgYHJyY2AgYXJlIHdyaXR0ZW4gdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0cyBpbiB0aGUgdXNlciBzcGFjZSBzdHJ1Y3R1cmUuIFRoZSBjb3BpZWQgZGF0YSBpdHNlbGYgKGBjbWQucmNgIGFuZCBgY21kLnJyY2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGEgcHJlY2VkaW5nIGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuXFxuNC4gYHNldHVwX2FwY2IxMGA6IEFkZHMgYSBgbWVtc2V0YCB0byBmdWxseSBpbml0aWFsaXplIHRoZSBgYXBjYjFgIHN0cnVjdHVyZSBpbiB0aGUgc2hhZG93IENSWUNCLiBXaXRob3V0IHRoaXMsIGZpZWxkcyBsaWtlIGBhcG1bMS4uM11gIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgYW5kIGNvbnRhaW4gc3RhbGUgZGF0YSBmcm9tIHByZXZpb3VzIHVzZXMgb2YgdGhlIGNhY2hlZCBgdnNpZV9wYWdlYC4gVGhpcyBzdGFsZSBkYXRhIGlzIHRoZW4gcmVhZCBieSB0aGUgaGFyZHdhcmUgKFNJRSkgd2hlbiBleGVjdXRpbmcgYSBuZXN0ZWQgZ3Vlc3QsIHBvdGVudGlhbGx5IGdyYW50aW5nIHVuYXV0aG9yaXplZCBjcnlwdG8gYWNjZXNzLiBIb3dldmVyLCBiZWNhdXNlIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBleGNsdXNpdmVseSBieSB0aGUgaGFyZHdhcmUgYW5kIG5vdCBieSB0aGUgQ1BVLCBLTVNBTiBjYW5ub3QgZGV0ZWN0IGl0IChLTVNBTiBvbmx5IGluc3RydW1lbnRzIENQVSBpbnN0cnVjdGlvbnMgYW5kIHRoZXJlIGFyZSBubyBleHBsaWNpdCBga21zYW5fY2hlY2tfbWVtb3J5KClgIGFubm90YXRpb25zIGZvciB0aGUgU0lFIGJsb2NrKS5cXG5cXG5UaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTAzN2EzYTUyZjc0OWE1ZDRkZThiOTkzZTJiZGMwYmExNThjZjU1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE1OjUwOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCA1MThhNjljNTVlODVjLi43ZGZkMGFkMzY3MzY4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC01NjIsMTEgKzU2MiwxMiBAQCBzdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcbiBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5pb24gc2tleSBza2V5KVxuIHtcbi1cdHVuaW9uIGFzY2UgYXNjZSA9IGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oYWRkcik7XG4rXHR1bmlvbiBhc2NlIGFzY2U7XG4gXHRpbnQgcjtcbiBcbiBcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdGFzY2UgPSBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2U7XG4gXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG5AQCAtNTA2OSw3ICs1MDcwLDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cHJfZXJyX3JhdGVsaW1pdGVkKFwiY2FuJ3QgcnVuIHN0b3BwZWQgdmNwdSAlZFxcblwiLFxuIFx0XHRcdFx0ICAgdmNwdS1cdTAwM2V2Y3B1X2lkKTtcbiBcdFx0cmMgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfc2lnc2V0O1xuIFx0fVxuIFxuIFx0a2VybmVsX2ZwdV9iZWdpbihcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcbkBAIC01MDk5LDkgKzUxMDAsMTEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0b3JlX3JlZ3ModmNwdSk7XG4gXHRrZXJuZWxfZnB1X2VuZChcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcbiBcbitcdHZjcHUtXHUwMDNlc3RhdC5leGl0X3VzZXJzcGFjZSsrO1xuK1xuK291dF9zaWdzZXQ6XG4gXHRrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSk7XG4gXG4tXHR2Y3B1LVx1MDAzZXN0YXQuZXhpdF91c2Vyc3BhY2UrKztcbiBvdXQ6XG4gXHR2Y3B1X3B1dCh2Y3B1KTtcbiBcdHJldHVybiByYztcbkBAIC01NzMyLDcgKzU3MzUsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFx1MDAyNmNtZCk7XG4gXG4gXHRcdC8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqL1xuLVx0XHRpZiAoY29weV90b191c2VyKChfX3U4IF9fdXNlciAqKWFyZ3AsIFx1MDAyNmNtZC5yYyxcbitcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXHUwMDI2Y21kLnJjLFxuIFx0XHRcdFx0IHNpemVvZihjbWQucmMpICsgc2l6ZW9mKGNtZC5ycmMpKSlcbiBcdFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuaW5kZXggZWVhMjQ1NjJlN2RiMi4uMGE3ZDhkZmFiNmI3OSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuQEAgLTE3Myw2ICsxNzMsNyBAQCBzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLFxuIFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IwKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuK1x0bWVtc2V0KGFwY2JfcywgMCwgc2l6ZW9mKCphcGNiX3MpKTtcbiBcdGFwY2Jfcy1cdTAwM2VhcG1bMF0gPSBhcGNiX2gtXHUwMDNlYXBtWzBdIFx1MDAyNiB0bXAuYXBtWzBdO1xuIFx0YXBjYl9zLVx1MDAzZWFxbVswXSA9IGFwY2JfaC1cdTAwM2VhcW1bMF0gXHUwMDI2IHRtcC5hcW1bMF0gXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xuIFx0YXBjYl9zLVx1MDAzZWFkbVswXSA9IGFwY2JfaC1cdTAwM2VhZG1bMF0gXHUwMDI2IHRtcC5hZG1bMF0gXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6MzEuODM2OTU4NTM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNTk1MzkxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gczM5MCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUgS1ZNLXMzOTAgYXJjaGl0ZWN0dXJlLiBMZXQgbWUgYnJlYWsgZG93biBteSB0aG91Z2h0cyBhcyBJIHNlZSB0aGVtLiBGaXJzdCwgdGhlIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIGZpbGUgaGFzIHRocmVlIG1vZGlmaWNhdGlvbnMuICBUaGUgZmlyc3QsIGluIGBrdm1fczM5MF9rZXlvcGAsIGlzIGEgbG9ja2luZyBmaXguIFRoZXkndmUgbW92ZWQgdGhlIGBhc2NlYCBhc3NpZ25tZW50LCBgYXNjZSA9IGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZTtgLCB0byBiZSAqYWZ0ZXIqIHRoZSBgZ3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO2AuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgZW5zdXJpbmcgdGhlIGxvY2sgaXMgaGVsZCBiZWZvcmUgYWNjZXNzaW5nIHBvdGVudGlhbGx5IHNoYXJlZCBtZW1vcnkuXG5cbk5leHQsIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIHRoZSBgZ290byBvdXQ7YCBoYXMgYmVlbiBjaGFuZ2VkIHRvIGBnb3RvIG91dF9zaWdzZXQ7YCB3aGVuIHRoZSB2Q1BVIGlzIHN0b3BwZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXMgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSh2Y3B1KWAgaXMgKmFsd2F5cyogY2FsbGVkLCB3aGljaCBpcyBhIGdvb2QgZmFpbHNhZmUuXG5cblRoZSB0aGlyZCBjaGFuZ2UgaGVyZSwgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgbG9va3MgbGlrZSBhIGJ1ZyBmaXguIFRoZXkncmUgY2hhbmdpbmcgdGhlIGBjb3B5X3RvX3VzZXJgIGNhbGwgdG8gaW5jbHVkZSBhbiBgb2Zmc2V0b2ZgIHdoZW4gY29weWluZyB0aGUgcmV0dXJuIGNvZGUsIGBjbWQucmNgLCB0byB1c2VyIHNwYWNlLiAgSXQgc2VlbXMgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIGNvcHlpbmcgYGNtZC5yY2AgdG8gdGhlICpiZWdpbm5pbmcqIG9mIHRoZSB1c2VyLXByb3ZpZGVkIGJ1ZmZlciwgYGFyZ3BgLCByYXRoZXIgdGhhbiB0aGUgY29ycmVjdCBmaWVsZC4gSG1tLi4uIGl0IGxvb2tzIGxpa2UgYGNtZC5yY2AgYW5kIGBjbWQucnJjYCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoYXQncyBhbGwuIEFuZCBpdCdzIGFsbCBpbml0aWFsaXplZCBieSBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAgc28gbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay5cblxuTW92aW5nIG9uIHRvIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AsIHdlIHNlZSBhIGNoYW5nZSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhleSdyZSBhZGRpbmcgYSBgbWVtc2V0KGFwY2JfcywgMCwgc2l6ZW9mKCphcGNiX3MpKTtgIGNhbGwgYmVmb3JlIHNldHRpbmcgYW55IGZpZWxkcy4gVGhpcyBpcyBpbml0aWFsaXppbmcgYSBzdHJ1Y3QsIHdoaWNoIGlzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIHByZXZlbnQgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gV2FpdCBhIG1pbnV0ZS4uLiBgYXBjYl9zYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBzZXR1cF9hcGNiMTBgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBgYXBjYl9zYCBhbmQgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIGNhdXRpb3VzIHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjM5LjE5NjUwMDY4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5Nzk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfYXBjYjEwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vdnNpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMtLyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjUtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MjUyPXN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjgtXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI2OTpcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzAtXFx0XFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4Ni1cXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTozOS4yNDc0ODU0NjhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzNTkwNDgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlbTpcblxuKipBbmFseXppbmcgYHNldHVwX2FwY2JgIGFuZCBgc2V0dXBfYXBjYjEwYCBpbiBgYXJjaC9zMzkwL2t2bS92c2llLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aG9zZSB0d28gQVBDQiBzZXR1cCBmdW5jdGlvbnM6IGBzZXR1cF9hcGNiYCBhbmQgYHNldHVwX2FwY2IxMGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByb3V0aW5lcyBhcmUgY3JhZnRpbmcgdGhlIEFkZHJlc3MgU3BhY2UgQ29udHJvbCBCbG9jayAoQVBDQikgc3RydWN0dXJlcywgcmlnaHQ/IFRoYXQncyBrZXkgZm9yIG1hbmFnaW5nIGd1ZXN0IGFkZHJlc3Mgc3BhY2VzIHdpdGhpbiB0aGUgUy8zOTAgS1ZNIGVudmlyb25tZW50LiBcblxuSSdtIGFzc3VtaW5nIGBhcGNiMTBgIGlzIGxpa2VseSBhIGxhdGVyIGl0ZXJhdGlvbiBvciBzcGVjaWZpYyB2ZXJzaW9uLCBwb3NzaWJseSByZWxhdGVkIHRvIHNvbWUgaGFyZHdhcmUgZmVhdHVyZSBvciBhcmNoaXRlY3R1cmFsIGV4dGVuc2lvbi4gU28sIEkgbmVlZCB0byBjb21wYXJlIHRoZWlyIGxvZ2ljIGNhcmVmdWxseSB0byBzZWUgdGhlIGRpZmZlcmVuY2VzIGFuZCB1bmRlcnN0YW5kIHRoZSBldm9sdXRpb24uIFdoYXQgc3BlY2lmaWMgZ3Vlc3QgcGFyYW1ldGVycyBvciBoeXBlcnZpc29yIGNvbmZpZ3VyYXRpb25zIG5lY2Vzc2l0YXRlIHNlcGFyYXRlIHNldHVwIHJvdXRpbmVzPyBBcmUgd2UgZGVhbGluZyB3aXRoIGRpZmZlcmVudCBsZXZlbHMgb2YgYWRkcmVzcyB0cmFuc2xhdGlvbiBzdXBwb3J0LCBwcm90ZWN0aW9uIG1lY2hhbmlzbXMsIG9yIHNvbWUgb3RoZXIgbnVhbmNlIG9mIHRoZSBTLzM5MCBhcmNoaXRlY3R1cmU/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgZGlmZmVyZW5jZXMgaW4gaG93IHRoZSBBUENCIGZpZWxkcyDigJMgc3VjaCBhcyB0aGUgYWNjZXNzIGNvbnRyb2wgYml0cywgc2VnbWVudC9wYWdlIHRhYmxlIGFkZHJlc3NlcywgYW5kIHN0b3JhZ2Uga2V5cyDigJMgYXJlIHBvcHVsYXRlZC4gQW55IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGFsd2F5cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIEFQQ0IgaXMgYSBzZW5zaXRpdmUgYXJlYS5cblxuTXkgYWltIGlzIHRvIGdyYXNwIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXMsIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIEtWTS1TLzM5MCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGVsLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgc2VlIHdoZXJlIHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIFZTSUUgY29udGV4dC4gUGVyaGFwcyBJJ2xsIGV2ZW4gY29tcGFyZSB0aGVtIGFnYWluc3Qgc2ltaWxhciBBUENCIHNldHVwIG1lY2hhbmlzbXMgaW4gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0byBnZXQgYSBicm9hZGVyIHBlcnNwZWN0aXZlLiBMZXQncyBzZWUgaG93IHdlbGwgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBkaWZmZXJlbnQgZ3Vlc3QgbWVtb3J5IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6NDMuNjgzMzkzMzc1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnNjYl9zLVxcdTAwM2VjcHVmbGFncywgbmV3ZmxhZ3MpO1xcbiAxNjE6XFx0XFx0cmV0dXJuIDA7XFxuIDE2MjpcXHR9XFxuIDE2MzpcXHQvKiBDb3B5IHRvIEFQQ0IgRk9STUFUMSBmcm9tIEFQQ0IgRk9STUFUMCAqL1xcbiAxNjQ6XFx0c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcXG4gMTY1OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG4gMTY2OlxcdHtcXG4gMTY3OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9hcGNiMCB0bXA7XFxuIDE2ODpcXHRcXHR1bnNpZ25lZCBsb25nIGFwY2JfZ3BhO1xcbiAxNjk6XFx0XFxuIDE3MDpcXHRcXHRhcGNiX2dwYSA9IGNyeWNiX2dwYSArIG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgXFx1MDAyNnRtcCxcXG4gMTczOlxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IwKSkpXFxuIDE3NDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0bWVtc2V0KGFwY2JfcywgMCwgc2l6ZW9mKCphcGNiX3MpKTtcXG4gMTc3OlxcdFxcdGFwY2Jfcy1cXHUwMDNlYXBtWzBdID0gYXBjYl9oLVxcdTAwM2VhcG1bMF0gXFx1MDAyNiB0bXAuYXBtWzBdO1xcbiAxNzg6XFx0XFx0YXBjYl9zLVxcdTAwM2VhcW1bMF0gPSBhcGNiX2gtXFx1MDAzZWFxbVswXSBcXHUwMDI2IHRtcC5hcW1bMF0gXFx1MDAyNiAweGZmZmYwMDAwMDAwMDAwMDBVTDtcXG4gMTc5OlxcdFxcdGFwY2Jfcy1cXHUwMDNlYWRtWzBdID0gYXBjYl9oLVxcdTAwM2VhZG1bMF0gXFx1MDAyNiB0bXAuYWRtWzBdIFxcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHJldHVybiAwO1xcbiAxODI6XFx0XFxuIDE4MzpcXHR9XFxuIDE4NDpcXHRcXG4gMTg1OlxcdC8qKlxcbiAxODY6XFx0ICogc2V0dXBfYXBjYjAwIC0gQ29weSB0byBBUENCIEZPUk1BVDAgZnJvbSBBUENCIEZPUk1BVDBcXG4gMTg3OlxcdCAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxcbiAxODg6XFx0ICogQGFwY2JfczogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBzaGFkb3cgY3J5Y2JcXG4gMTg5OlxcdCAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG4gMTkwOlxcdCAqIEBhcGNiX2g6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgZ3Vlc3QxXFxuIDE5MTpcXHQgKlxcbiAxOTI6XFx0ICogUmV0dXJucyAwIGFuZCAtRUZBVUxUIG9uIGVycm9yIHJlYWRpbmcgZ3Vlc3QgYXBjYlxcbiAxOTM6XFx0ICovXFxuIDE5NDpcXHRzdGF0aWMgaW50IHNldHVwX2FwY2IwMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcXG4gMTk1OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCB1bnNpZ25lZCBsb25nICphcGNiX2gpXFxuIDE5NjpcXHR7XFxuIDE5NzpcXHRcXHR1bnNpZ25lZCBsb25nIGFwY2JfZ3BhO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRhcGNiX2dwYSA9IGNyeWNiX2dwYSArIG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgYXBjYl9zLFxcbiAyMDI6XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjApKSlcXG4gMjAzOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXFxuIDIwNjpcXHRcXHRcXHQgICBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRyZXR1cm4gMDtcXG4gMjA5OlxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0LyoqXFxuIDIxMjpcXHQgKiBzZXR1cF9hcGNiMTEgLSBDb3B5IHRoZSBGT1JNQVQxIEFQQ0IgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIHNoYWRvdyBDUllDQlxcbiAyMTM6XFx0ICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuIDIxNDpcXHQgKiBAYXBjYl9zOiBwb2ludGVyIHRvIHN0YXJ0IG9mIGFwY2IgaW4gdGhlIHNoYWRvdyBjcnljYlxcbiAyMTU6XFx0ICogQGNyeWNiX2dwYTogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyB0byBzdGFydCBvZiBvcmlnaW5hbCBndWVzdCBjcnljYlxcbiAyMTY6XFx0ICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBob3N0XFxuIDIxNzpcXHQgKlxcbiAyMTg6XFx0ICogUmV0dXJucyAwIGFuZCAtRUZBVUxUIG9uIGVycm9yIHJlYWRpbmcgZ3Vlc3QgYXBjYlxcbiAyMTk6XFx0ICovXFxuIDIyMDpcXHRzdGF0aWMgaW50IHNldHVwX2FwY2IxMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcXG4gMjIxOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxcbiAyMjI6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqYXBjYl9oKVxcbiAyMjM6XFx0e1xcbiAyMjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBhcGNiX2dwYTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0YXBjYl9ncGEgPSBjcnljYl9ncGEgKyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiLCBhcGNiMSk7XFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdGlmIChyZWFkX2d1ZXN0X3JlYWwodmNwdSwgYXBjYl9ncGEsIGFwY2JfcyxcXG4gMjI5OlxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSkpXFxuIDIzMDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0Yml0bWFwX2FuZChhcGNiX3MsIGFwY2JfcywgYXBjYl9oLFxcbiAyMzM6XFx0XFx0XFx0ICAgQklUU19QRVJfQllURSAqIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEpKTtcXG4gMjM0OlxcdFxcbiAyMzU6XFx0XFx0cmV0dXJuIDA7XFxuIDIzNjpcXHR9XFxuIDIzNzpcXHRcXG4gMjM4OlxcdC8qKlxcbiAyMzk6XFx0ICogc2V0dXBfYXBjYiAtIENyZWF0ZSBhIHNoYWRvdyBjb3B5IG9mIHRoZSBhcGNiLlxcbiAyNDA6XFx0ICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuIDI0MTpcXHQgKiBAY3J5Y2JfczogcG9pbnRlciB0byBzaGFkb3cgY3J5Y2JcXG4gMjQyOlxcdCAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG4gMjQzOlxcdCAqIEBjcnljYl9oOiBwb2ludGVyIHRvIHRoZSBob3N0IGNyeWNiXFxuIDI0NDpcXHQgKiBAZm10X286IGZvcm1hdCBvZiB0aGUgb3JpZ2luYWwgZ3Vlc3QgY3J5Y2IuXFxuIDI0NTpcXHQgKiBAZm10X2g6IGZvcm1hdCBvZiB0aGUgaG9zdCBjcnljYi5cXG4gMjQ2OlxcdCAqXFxuIDI0NzpcXHQgKiBDaGVja3MgdGhlIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIGhvc3QgY3J5Y2IgYW5kIGNhbGxzIHRoZVxcbiAyNDg6XFx0ICogYXBwcm9wcmlhdGUgY29weSBmdW5jdGlvbi5cXG4gMjQ5OlxcdCAqXFxuIDI1MDpcXHQgKiBSZXR1cm4gMCBvciBhbiBlcnJvciBudW1iZXIgaWYgdGhlIGd1ZXN0IGFuZCBob3N0IGNyeWNiIGFyZSBpbmNvbXBhdGlibGUuXFxuIDI1MTpcXHQgKi9cXG4gMjUyOlxcdHN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXFxuIDI1MzpcXHRcXHQgICAgICAgY29uc3QgdTMyIGNyeWNiX2dwYSxcXG4gMjU0OlxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9oLFxcbiAyNTU6XFx0XFx0ICAgICAgIGludCBmbXRfbywgaW50IGZtdF9oKVxcbiAyNTY6XFx0e1xcbiAyNTc6XFx0XFx0c3dpdGNoIChmbXRfbykge1xcbiAyNTg6XFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxcbiAyNTk6XFx0XFx0XFx0aWYgKChjcnljYl9ncGEgXFx1MDAyNiBQQUdFX01BU0spICE9ICgoY3J5Y2JfZ3BhICsgMjU2KSBcXHUwMDI2IFBBR0VfTUFTSykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjQzLjY4MzUxOTEyNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1NjAwODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIEknbSB0cmFjaW5nIHRoaXMgYGFwY2Jfc2AgcG9pbnRlci4uLiByaWdodCwgaXQncyBhIHBvaW50ZXIgdG8gYGNyeWNiX3MtXHUwMDNlYXBjYjFgLiBHb3QgaXQsIHRoYXQgbWFrZXMgc2Vuc2UuIEhhbmcgb24sIGxldCBtZSBqdXN0IGNvbmZpcm0gd2hlcmUgYGNyeWNiX3NgIGlzIGFjdHVhbGx5IGFsbG9jYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGF0IHN0cnVjdHVyZSB0byBiZSBzdXJlLiBBbHJpZ2h0LCBsZXQncyBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGBzZXR1cF9hcGNiYCBpcyBjYWxsZWQgLSB0aGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gVHJhY2tpbmcgZG93biBhbGxvY2F0aW9uIGFuZCB1c2FnZSBpcyB0aGUga2V5IGhlcmUuIExldCBtZSB0cmFjZSB0aGF0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjQ3LjEyOTEyMjQ3MloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3OTY3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfYXBjYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY1LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE4NS0vKipcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxODY6ICogc2V0dXBfYXBjYjAwIC0gQ29weSB0byBBUENCIEZPUk1BVDAgZnJvbSBBUENCIEZPUk1BVDBcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODctICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTMtICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTk0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjAwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqYXBjYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5NS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgdW5zaWduZWQgbG9uZyAqYXBjYl9oKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjExLS8qKlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIxMjogKiBzZXR1cF9hcGNiMTEgLSBDb3B5IHRoZSBGT1JNQVQxIEFQQ0IgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIHNoYWRvdyBDUllDQlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMy0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxOS0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjA6c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjIxLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM4LS8qKlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIzOTogKiBzZXR1cF9hcGNiIC0gQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGFwY2IuXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQwLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjUxLSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1MjpzdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1My1cXHQgICAgICAgY29uc3QgdTMyIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2Mi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjM6XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMSh2Y3B1LCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjQtXFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcyLVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNzM6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3NC1cXHRcXHRcXHRcXHRcXHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg2LVxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODktXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MDpcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjkxLVxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0zMTk9c3RhdGljIGludCBzaGFkb3dfY3J5Y2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXFx0aWYgKGFwaWVfcykge1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MTpcXHRcXHRyZXQgPSBzZXR1cF9hcGNiKHZjcHUsIFxcdTAwMjZ2c2llX3BhZ2UtXFx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM1Mi1cXHRcXHRcXHRcXHQgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6NDcuMTc1OTI1NjEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDU1ODA4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWNvbnN0cnVjdGluZyBhIFBvaW50ZXIgYW5kIEl0cyBDb250ZXh0KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyB0ZWxsaW5nIG1lIHRoYXQgYGNyeWNiX3NgIGlzIGEgcG9pbnRlciB0byBzb21ldGhpbmfigJRzcGVjaWZpY2FsbHksIHRoZSBgY3J5Y2JgIG1lbWJlciBvZiBhIGB2c2llX3BhZ2VgIHN0cnVjdHVyZS4gT2theSwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB2c2llX3BhZ2VgICppcyouIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbmF0dXJlIG9mIGB2c2llX3BhZ2VgLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kIGhvdyBgY3J5Y2JgIGlzIGRlZmluZWQuIFRoaXMgaXMgY29tbW9uIHByYWN0aWNlLCBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgZnVsbCBzdHJ1Y3R1cmUgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB3aGF0IGBjcnljYl9zYCBpcyBhY3R1YWxseSByZWZlcmVuY2luZy4gSSdsbCBuZWVkIHRvIGtub3cgaWYgdGhpcyBwb2ludGVyIGlzIHZhbGlkIGFuZCBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGlzIGFjY2Vzc2libGUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzYwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6NTAuNjgxNTA4OTg4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA0NTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdnNpZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vdnNpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vdnNpZS5jPTMwPWVudW0gdnNpZV9wYWdlX2ZsYWdzIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM0OnN0cnVjdCB2c2llX3BhZ2Uge1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM1LVxcdHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgc2NiX3M7XFx0LyogMHgwMDAwICovXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03Mi1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo3MzpzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgdnNpZV9wYWdlKSA9PSBQQUdFX1NJWkUpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9NzY9c3RhdGljIGludCBzZXRfdmFsaWRpdHlfaWNwdChzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrICpzY2IsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy04NS0vKiBtYXJrIHRoZSBwcmVmaXggYXMgdW5tYXBwZWQsIHRoaXMgd2lsbCBibG9jayB0aGUgVlNJRSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjg2OnN0YXRpYyB2b2lkIHByZWZpeF91bm1hcHBlZChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtODcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTEtLyogbWFyayB0aGUgcHJlZml4IGFzIHVubWFwcGVkIGFuZCB3YWl0IHVudGlsIHRoZSBWU0lFIGhhcyBiZWVuIGxlZnQgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo5MjpzdGF0aWMgdm9pZCBwcmVmaXhfdW5tYXBwZWRfc3luYyhzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAxLS8qIG1hcmsgdGhlIHByZWZpeCBhcyBtYXBwZWQsIHRoaXMgd2lsbCBhbGxvdyB0aGUgVlNJRSB0byBydW4gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDI6c3RhdGljIHZvaWQgcHJlZml4X21hcHBlZChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNy0vKiB0ZXN0IGlmIHRoZSBwcmVmaXggaXMgbWFwcGVkIGludG8gdGhlIGdtYXAgc2hhZG93ICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTA4OnN0YXRpYyBpbnQgcHJlZml4X2lzX21hcHBlZChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTA5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTExMy0vKiBjb3B5IHRoZSB1cGRhdGVkIGludGVydmVudGlvbiByZXF1ZXN0IGJpdHMgaW50byB0aGUgc2hhZG93IHNjYiAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjExNDpzdGF0aWMgdm9pZCB1cGRhdGVfaW50ZXJ2ZW50aW9uX3JlcXVlc3RzKHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTI0LS8qIHNoYWRvdyAoZmlsdGVyIGFuZCB2YWxpZGF0ZSkgdGhlIGNwdWZsYWdzICAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEyNTpzdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTI2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTI1Mj1zdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzE4LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMxOTpzdGF0aWMgaW50IHNoYWRvd19jcnljYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMjAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzkzLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM5NDpzdGF0aWMgdm9pZCBzaGFkb3dfZXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM5NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00MDUtLyogc2hhZG93IChyb3VuZCB1cC9kb3duKSB0aGUgaWJjIHRvIGF2b2lkIHZhbGlkaXR5IGljcHQgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo0MDY6c3RhdGljIHZvaWQgcHJlcGFyZV9pYmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNDA3LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTQyOC0vKiB1bnNoYWRvdyB0aGUgc2NiLCBjb3B5aW5nIHBhcmFtZXRlcnMgYmFjayB0byB0aGUgcmVhbCBzY2IgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo0Mjk6c3RhdGljIHZvaWQgdW5zaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTQzMC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00NzktICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6NDgwOnN0YXRpYyBpbnQgc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00ODEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9NjI0PXZvaWQga3ZtX3MzOTBfdnNpZV9nbWFwX25vdGlmaWVyKHN0cnVjdCBnbWFwICpnbWFwLCBncGFfdCBzdGFydCwgZ3BhX3QgZW5kKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTYyNS17XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6NjI2OlxcdHN0cnVjdCB2c2llX3BhZ2UgKmN1ciwgKm5leHQ7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNjI3LVxcdHVuc2lnbmVkIGxvbmcgcHJlZml4O1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNjU0LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjY1NTpzdGF0aWMgaW50IG1hcF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02NTYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9NzAzPXN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTcxMC0vKiB1bnBpbiBhbGwgYmxvY2tzIHByZXZpb3VzbHkgcGlubmVkIGJ5IHBpbl9ibG9ja3MoKSwgbWFya2luZyB0aGVtIGRpcnR5ICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6NzExOnN0YXRpYyB2b2lkIHVucGluX2Jsb2NrcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03MTIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzY2LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjc2NzpzdGF0aWMgaW50IHBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzY4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg4NC0vKiB1bnBpbiB0aGUgc2NiIHByb3ZpZGVkIGJ5IGd1ZXN0IDIsIG1hcmtpbmcgaXQgYXMgZGlydHkgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo4ODU6c3RhdGljIHZvaWQgdW5waW5fc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg4Ni1cXHRcXHQgICAgICBncGFfdCBncGEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05MDAtICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6OTAxOnN0YXRpYyBpbnQgcGluX3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05MDItXFx0XFx0ICAgZ3BhX3QgZ3BhKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9OTIzPXN0YXRpYyBpbnQgaW5qZWN0X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgX191MTYgY29kZSwgX191NjQgdmFkZHIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05NTItICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6OTUzOnN0YXRpYyBpbnQgaGFuZGxlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTU0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk3OC0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo5Nzk6c3RhdGljIHZvaWQgaGFuZGxlX2xhc3RfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05ODAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTg1LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjk4NjpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdnNpZV9pY3B0KHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05ODcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTkxLS8qIHJld2luZCB0aGUgcHN3IGFuZCBjbGVhciB0aGUgdnNpZSBpY3B0LCBzbyB3ZSBjYW4gcmV0cnkgZXhlY3V0aW9uICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6OTkyOnN0YXRpYyB2b2lkIHJldHJ5X3ZzaWVfaWNwdChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTkzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMDYtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTAwNzpzdGF0aWMgaW50IGhhbmRsZV9zdGZsZV8wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMDgtXFx0XFx0XFx0ICB1MzIgZmFjX2xpc3Rfb3JpZ2luKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAyMy1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDI0OnN0YXRpYyBpbnQgaGFuZGxlX3N0ZmxlXzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHUzMiBmYWNfbGlzdF9vcmlnaW4pXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAyNS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDUyLSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEwNTM6c3RhdGljIGludCBoYW5kbGVfc3RmbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTA1NC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDYxLVxcdEJVSUxEX0JVR19PTihzaXplb2YodnNpZV9wYWdlLVxcdTAwM2VmYWMpIFxcdTAwM2MgKChTMzkwX0FSQ0hfRkFDX0xJU1RfU0laRV9VNjQgKyAxKSAqIHNpemVvZih1NjQpKSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTA2MjpcXHRCVUlMRF9CVUdfT04oIUlTX0FMSUdORUQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgZmFjKSwgOCkpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNjMtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDkzLSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEwOTQ6c3RhdGljIHU2NCB2c2llX2dldF9yZWdpc3RlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSwgdTggcmVnKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwOTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTEwNy1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMTA4OnN0YXRpYyBpbnQgdnNpZV9oYW5kbGVfbXZwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSwgc3RydWN0IGdtYXAgKnNnKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTExMDkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTE4Ny0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMTg4OnN0YXRpYyBpbnQgZG9fdnNpZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg5LVxcdF9fcmVsZWFzZXModmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTI4NC1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMjg1OnN0YXRpYyB2b2lkIHJlbGVhc2VfZ21hcF9zaGFkb3coc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEyODYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMwMC1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMzAxOnN0YXRpYyBzdHJ1Y3QgZ21hcCAqYWNxdWlyZV9nbWFwX3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzAyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEzNTM9c3RhdGljIHZvaWQgcmVnaXN0ZXJfc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTM1NDpcXHRcXHRcXHRcXHRzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM1NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMzgzPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzk2LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzOTc6c3RhdGljIGludCB2c2llX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzk4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0NjMtLyogVHJ5IGdldHRpbmcgYSBnaXZlbiB2c2llIHBhZ2UsIHJldHVybmluZyBcXFwidHJ1ZVxcXCIgb24gc3VjY2Vzcy4gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDY0OnN0YXRpYyBpbmxpbmUgYm9vbCB0cnlfZ2V0X3ZzaWVfcGFnZShzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQ2NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDcxLS8qIFB1dCBhIHZzaWUgcGFnZSBhY3F1aXJlZCB0aHJvdWdoIGdldF92c2llX3BhZ2UgLyB0cnlfZ2V0X3ZzaWVfcGFnZS4gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDcyOnN0YXRpYyB2b2lkIHB1dF92c2llX3BhZ2Uoc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0NzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQ4My0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDg0OnN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODUte1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE0ODY6XFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODctXFx0aW50IG5yX3ZjcHVzO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTU1Nz1pbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1NTgte1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE1NTk6XFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1NjAtXFx0dW5zaWduZWQgbG9uZyBzY2JfYWRkcjtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1NjgtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTU2OTpcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU3MC1cXHRzY2JfYWRkciA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1LCBOVUxMKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTE2MjE9dm9pZCBrdm1fczM5MF92c2llX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2MjIte1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2MjM6XFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2MjQtXFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjUwLjczMTU2MjI0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQzNTIzNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVBDQiBUcmFuc2ZlciBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdnNpZV9wYWdlYCBzdHJ1Y3R1cmUg4oCTIGl0J3MgYWxsb2NhdGVkLCBjYWNoZWQsIGFuZCBzZWVtcyBjcnVjaWFsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGFjdGluZyBhcyBhIHRlbXBvcmFyeSBzdG9yYWdlIGFyZWEsIGxpa2VseSBmb3IgZWZmaWNpZW5jeSdzIHNha2UuIE5vdywgYHNldHVwX2FwY2IxMGAgaXMgZ3JhYmJpbmcgbXkgYXR0ZW50aW9uLiBJdCBhcHBlYXJzIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjb3B5aW5nIGBhcGNiMGAgZGF0YSBmcm9tIHRoZSBndWVzdCBtZW1vcnkgaW50byBgYXBjYjFgLCBidXQsIGltcG9ydGFudGx5LCB0aGlzIGNvcHkgaXMgaGFwcGVuaW5nIGluIHRoZSBzaGFkb3cgY3J5Y2Igd2l0aGluIGB2c2llX3BhZ2VgLiBUaGUgc2hhZG93IGNyeWNiISBSaWdodCwgdGhhdCdzIHRoZSBhcmVhIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IFNJRSwgdXNlcyB3aGVuIG5lc3RlZCBndWVzdHMgYXJlIHJ1bm5pbmcuIE1ha2VzIHNlbnNlLCBzbyB3ZSBhcmUgc2V0dGluZyB1cCB0aGUgc3RydWN0dXJlIHRoYXQgU0lFIGlzIGdvaW5nIHRvIHVzZSwgYW5kIHdlIGFyZSBjYWNoaW5nIGl0IHRvIHNhdmUgdGltZSBpbiB0aGUgaG90IHBhdGguXG5cbk5vdyBJIHNlZSBgYXBjYl9zYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEkgbmVlZCB0byByZXZpZXcgYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEl0IGhhcyB0byBjb250YWluIHRoZSBkYXRhIHRoYXQncyBiZWluZyBzZXQgdXAgYW5kIHRoYXQgU0lFIG5lZWRzLCB3aGljaCBzdWdnZXN0cyBpdCBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGUgc3RhdGUuIEkgd2lsbCBnbyBhbmQgcmV2aWV3IHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAxNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTo1NC45NzUwODgxMDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyOTY0OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fczM5MF9hcGNiMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTU0Nz1zdHJ1Y3Qga3ZtX3MzOTBfYXBjYjAge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNTU0LSNkZWZpbmUgQVBDQjFfTUFTS19TSVpFIDRcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo1NTU6c3RydWN0IGt2bV9zMzkwX2FwY2IxIHtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC01NTYtXFx0X191NjQgYXBtW0FQQ0IxX01BU0tfU0laRV07XFx0XFx0LyogMHgwMDAwICovXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD01NjI9c3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiB7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC01NjYtXFx0X191OCAgIGFlc193cmFwcGluZ19rZXlfbWFza1szMl07XFx0LyogMHgwMDYwICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NTY3OlxcdHN0cnVjdCBrdm1fczM5MF9hcGNiMSBhcGNiMTtcXHRcXHQvKiAweDAwODAgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC01NjgtfTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMtLyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0yMjA9c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjgtXFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgYXBjYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyOTpcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMSkpKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMi1cXHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjMzOlxcdFxcdCAgIEJJVFNfUEVSX0JZVEUgKiBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTo1NS4wMjgwNTcxMzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MjE5ODkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGt2bV9zMzkwX2FwY2IxYCBzdHJ1Y3Q6XG5cbioqRXhhbWluaW5nIHRoZSBga3ZtX3MzOTBfYXBjYjFgIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEl0J3MgbG9jYXRlZCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCBzbyBJJ2xsIG5lZWQgdG8gZ28gdGhlcmUgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgZmllbGRzLiBJIGtub3cgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBLVk0gaW1wbGVtZW50YXRpb24gb24gczM5MCwgc28gaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIEFjY2VzcyBQYXJhbWV0ZXIgQ29udHJvbCBCbG9jayAoQVBDQikgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdmlydHVhbGl6YXRpb24sIHBhcnRpY3VsYXJseSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIGVtdWxhdGluZyBpdHMgYmVoYXZpb3IgZm9yIGd1ZXN0IFZNcy4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIGV4YW1pbmUgd2hlcmUgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCwgaG93IGl0J3MgYmVpbmcgcG9wdWxhdGVkLCBhbmQgd2hpY2ggZnVuY3Rpb25zIHVzZSBpdC4gRnJvbSB0aGF0LCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlZHVjZSBpdHMgcm9sZSBpbiB0aGUgdmlydHVhbGl6YXRpb24gc3lzdGVtLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgZmllbGRzLCBzcGVjaWZpY2FsbHksIHRvIGdldCBhbiBpZGVhIG9mIHRoZSB0eXBlcyBvZiBBUENCIG9wZXJhdGlvbnMgYmVpbmcgbWFuYWdlZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJvbGUgaXQgcGxheXMgaW4gdGhlIG92ZXJhbGwgS1ZNLW9uLXMzOTAgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIzOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjU5LjMxMDI1ODExNloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFx0X191NjQgYWRtW0FQQ0IwX01BU0tfU0laRV07XFx0XFx0LyogMHgwMDEwICovXFxuIDU1MTpcXHRcXHRfX3U2NCByZXNlcnZlZDE4O1xcdFxcdFxcdC8qIDB4MDAxOCAqL1xcbiA1NTI6XFx0fTtcXG4gNTUzOlxcdFxcbiA1NTQ6XFx0I2RlZmluZSBBUENCMV9NQVNLX1NJWkUgNFxcbiA1NTU6XFx0c3RydWN0IGt2bV9zMzkwX2FwY2IxIHtcXG4gNTU2OlxcdFxcdF9fdTY0IGFwbVtBUENCMV9NQVNLX1NJWkVdO1xcdFxcdC8qIDB4MDAwMCAqL1xcbiA1NTc6XFx0XFx0X191NjQgYXFtW0FQQ0IxX01BU0tfU0laRV07XFx0XFx0LyogMHgwMDIwICovXFxuIDU1ODpcXHRcXHRfX3U2NCBhZG1bQVBDQjFfTUFTS19TSVpFXTtcXHRcXHQvKiAweDAwNDAgKi9cXG4gNTU5OlxcdFxcdF9fdTY0IHJlc2VydmVkNjBbNF07XFx0XFx0XFx0LyogMHgwMDYwICovXFxuIDU2MDpcXHR9O1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiIHtcXG4gNTYzOlxcdFxcdHN0cnVjdCBrdm1fczM5MF9hcGNiMCBhcGNiMDtcXHRcXHQvKiAweDAwMDAgKi9cXG4gNTY0OlxcdFxcdF9fdTggICByZXNlcnZlZDIwWzB4MDA0OCAtIDB4MDAyMF07XFx0LyogMHgwMDIwICovXFxuIDU2NTpcXHRcXHRfX3U4ICAgZGVhX3dyYXBwaW5nX2tleV9tYXNrWzI0XTtcXHQvKiAweDAwNDggKi9cXG4gNTY2OlxcdFxcdF9fdTggICBhZXNfd3JhcHBpbmdfa2V5X21hc2tbMzJdO1xcdC8qIDB4MDA2MCAqL1xcbiA1Njc6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2FwY2IxIGFwY2IxO1xcdFxcdC8qIDB4MDA4MCAqL1xcbiA1Njg6XFx0fTtcXG4gNTY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTo1OS4zMTAzNDA4ODZaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMwODc5Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBrdm1fczM5MF9hcGNiMWAgU3RydWN0dXJlIGFuZCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlY2FsbCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gb2YgYGt2bV9zMzkwX2FwY2IxYC4gUmlnaHQsIGl0IGNvbnRhaW5zIGBhcG1gLCBgYXFtYCwgYW5kIGBhZG1gIGFycmF5cywgZWFjaCBvZiBzaXplIGZvdXIsIGFuZCB0aGVuIGByZXNlcnZlZDYwWzRdYC4gRWFjaCBvZiB0aG9zZSBhcnJheXMgaXMgMzIgYnl0ZXMgKDQgKiA4KSwgYW5kIHRoZSB3aG9sZSB0aGluZyBzdW1zIHVwIHRvIDEyOCBieXRlcy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZXR1cF9hcGNiMTBgIGZ1bmN0aW9uLiBJIHNlZSB0aGUga2V5IGNoYW5nZS4gUHJldmlvdXNseSwgdGhlIHN0cnVjdHVyZSBgYXBjYl9zYCB3YXNuJ3QgaW5pdGlhbGl6ZWQgYXQgYWxsLiBUaGUgY29kZSBzbmlwcGV0IHVzZWQgdG8gbG9vayBsaWtlIHRoaXMsIHdoaWNoIGlzIGNvbmNlcm5pbmc6XG5cbmBgYGNcblx0YXBjYl9zLVx1MDAzZWFwbVswXSA9IGFwY2JfaC1cdTAwM2VhcG1bMF0gXHUwMDI2IHRtcC5hcG1bMF07XG5cdGFwY2Jfcy1cdTAwM2VhcW1bMF0gPSBhcGNiX2gtXHUwMDNlYXFtWzBdIFx1MDAyNiB0bXAuYXFtWzBdIFx1MDAyNiAweGZmZmYwMDAwMDAwMDAwMDBVTDtcblx0YXBjYl9zLVx1MDAzZWFkbVswXSA9IGFwY2JfaC1cdTAwM2VhZG1bMF0gXHUwMDI2IHRtcC5hZG1bMF0gXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xuYGBgXG5cbk5vdywgdGhlcmUncyBhIGBtZW1zZXRgIGJlZm9yZSB0aG9zZSBhc3NpZ25tZW50cy4gVGhhdCdzIGEgZ29vZCBmaXgsIGJ1dCBub3cgdGhlIHF1ZXN0aW9uIGlzOiB3aGF0IHdvdWxkIGJlIHRoZSBpbXBhY3Qgb2YgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgaW1wbGljYXRpb25zIG9mICpub3QqIGluaXRpYWxpemluZyBgYXBjYl9zYCBtZWFucyB0aGF0IGBhcG1bMS4uM11gLCBgYXFtWzEuLjNdYCwgYGFkbVsxLi4zXWAsIGFuZCBgcmVzZXJ2ZWQ2MFswLi4zXWAgd291bGQgYmUgbGVmdCB3aXRoIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVuZWQgdG8gYmUgaW4gdGhhdCBtZW1vcnkgbG9jYXRpb24uIFRoYXQgY291bGQgbGVhZCB0byBzb21lIHByZXR0eSB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLlxuXG5UaGUgcGxvdCB0aGlja2VucyB0aG91Z2guIEknbSByZWNhbGxpbmcgdGhhdCBgYXBjYl9zYCBpc24ndCBqdXN0IGEgc3RhbmRhbG9uZSBzdHJ1Y3R1cmUuIEl0J3MgYSBwb2ludGVyIHRvIGBjcnljYl9zLVx1MDAzZWFwY2IxYCwgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCB3aXRoaW4gYHZzaWVfcGFnZS1cdTAwM2VjcnljYmAuIFRoaXMgaXMgaW1wb3J0YW50LiBJZiBgdnNpZV9wYWdlYCBpc24ndCB6ZXJvZWQgd2hlbiBpdCdzIGFsbG9jYXRlZCwgdGhlbiB3ZSBjb3VsZCBzdGlsbCBoYXZlIHVuaW5pdGlhbGl6ZWQgZGF0YSBwcm9wYWdhdGluZyBldmVuIGFmdGVyIHRoZSBmaXgsIGJlY2F1c2UgYG1lbXNldGAgd291bGQgb25seSBhcHBseSB0byB0aGUgc3ViLXN0cnVjdHVyZSwgbm90IHRoZSB3aG9sZSBzdHJ1Y3R1cmUuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbiBwYXRoIGZvciBgdnNpZV9wYWdlYC4gSSBzaG91bGQgZGlnIGludG8gYGdldF92c2llX3BhZ2VgIHRvIHZlcmlmeSBob3cgaXQncyBhbGxvY2F0ZWQsIGFuZCBpZiBpdCdzIGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA4OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjA2LjYxOTEzOTc1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS92c2llLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ4MDpcXHQgKiBSZXR1cm5zOiAtIGFkZHJlc3Mgb2YgYSB2c2llIHBhZ2UgKGNhY2hlZCBvciBuZXcgb25lKVxcbjE0ODE6XFx0ICogICAgICAgICAgLSBOVUxMIGlmIHRoZSBzYW1lIHNjYiBhZGRyZXNzIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIFZDUFVcXG4xNDgyOlxcdCAqICAgICAgICAgIC0gRVJSX1BUUigtRU5PTUVNKSBpZiBvdXQgb2YgbWVtb3J5XFxuMTQ4MzpcXHQgKi9cXG4xNDg0OlxcdHN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbjE0ODU6XFx0e1xcbjE0ODY6XFx0XFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xcbjE0ODc6XFx0XFx0aW50IG5yX3ZjcHVzO1xcbjE0ODg6XFx0XFxuMTQ4OTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTQ5MDpcXHRcXHR2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFxcdTAwM2VcXHUwMDNlIDkpO1xcbjE0OTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTQ5MjpcXHRcXHRpZiAodnNpZV9wYWdlKSB7XFxuMTQ5MzpcXHRcXHRcXHRpZiAodHJ5X2dldF92c2llX3BhZ2UodnNpZV9wYWdlKSkge1xcbjE0OTQ6XFx0XFx0XFx0XFx0aWYgKHZzaWVfcGFnZS1cXHUwMDNlc2NiX2dwYSA9PSBhZGRyKVxcbjE0OTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHZzaWVfcGFnZTtcXG4xNDk2OlxcdFxcdFxcdFxcdC8qXFxuMTQ5NzpcXHRcXHRcXHRcXHQgKiBXZSByYWNlZCB3aXRoIHNvbWVvbmUgcmV1c2luZyArIHB1dHRpbmcgdGhpcyB2c2llXFxuMTQ5ODpcXHRcXHRcXHRcXHQgKiBwYWdlIGJlZm9yZSB3ZSBncmFiYmVkIGl0LlxcbjE0OTk6XFx0XFx0XFx0XFx0ICovXFxuMTUwMDpcXHRcXHRcXHRcXHRwdXRfdnNpZV9wYWdlKHZzaWVfcGFnZSk7XFxuMTUwMTpcXHRcXHRcXHR9XFxuMTUwMjpcXHRcXHR9XFxuMTUwMzpcXHRcXG4xNTA0OlxcdFxcdC8qXFxuMTUwNTpcXHRcXHQgKiBXZSB3YW50IGF0IGxlYXN0ICNvbmxpbmVfdmNwdXMgc2hhZG93cywgc28gZXZlcnkgVkNQVSBjYW4gZXhlY3V0ZVxcbjE1MDY6XFx0XFx0ICogdGhlIFZTSUUgaW4gcGFyYWxsZWwuXFxuMTUwNzpcXHRcXHQgKi9cXG4xNTA4OlxcdFxcdG5yX3ZjcHVzID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG4xNTA5OlxcdFxcbjE1MTA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZzaWUubXV0ZXgpO1xcbjE1MTE6XFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52c2llLnBhZ2VfY291bnQgXFx1MDAzYyBucl92Y3B1cykge1xcbjE1MTI6XFx0XFx0XFx0dnNpZV9wYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyB8IEdGUF9ETUEpO1xcbjE1MTM6XFx0XFx0XFx0aWYgKCF2c2llX3BhZ2UpIHtcXG4xNTE0OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZzaWUubXV0ZXgpO1xcbjE1MTU6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTUxNjpcXHRcXHRcXHR9XFxuMTUxNzpcXHRcXHRcXHRfX3NldF9iaXQoVlNJRV9QQUdFX0lOX1VTRSwgXFx1MDAyNnZzaWVfcGFnZS1cXHUwMDNlZmxhZ3MpO1xcbjE1MTg6XFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZzaWUucGFnZXNba3ZtLVxcdTAwM2VhcmNoLnZzaWUucGFnZV9jb3VudF0gPSB2c2llX3BhZ2U7XFxuMTUxOTpcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50Kys7XFxuMTUyMDpcXHRcXHR9IGVsc2Uge1xcbjE1MjE6XFx0XFx0XFx0LyogcmV1c2UgYW4gZXhpc3RpbmcgZW50cnkgdGhhdCBiZWxvbmdzIHRvIG5vYm9keSAqL1xcbjE1MjI6XFx0XFx0XFx0d2hpbGUgKHRydWUpIHtcXG4xNTIzOlxcdFxcdFxcdFxcdHZzaWVfcGFnZSA9IGt2bS1cXHUwMDNlYXJjaC52c2llLnBhZ2VzW2t2bS1cXHUwMDNlYXJjaC52c2llLm5leHRdO1xcbjE1MjQ6XFx0XFx0XFx0XFx0aWYgKHRyeV9nZXRfdnNpZV9wYWdlKHZzaWVfcGFnZSkpXFxuMTUyNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xNTI2OlxcdFxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC52c2llLm5leHQrKztcXG4xNTI3OlxcdFxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC52c2llLm5leHQgJT0gbnJfdmNwdXM7XFxuMTUyODpcXHRcXHRcXHR9XFxuMTUyOTpcXHRcXHRcXHRpZiAodnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MDYuNjE5MjU0MTA2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MDgxMDIwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrYWdlIGluIFZTSUUgUGFnZSBSZXVzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHZzaWVfcGFnZWAgYWxsb2NhdGlvbiBhbmQgcmV1c2Ugc2NoZW1lLiBJIHNlZSB0aGF0IHRoZSBwYWdlIGlzIGluaXRpYWxseSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIHdoaWNoIGlzIGdvb2QgZm9yIGluaXRpYWwgY2xlYW5saW5lc3MuIEhvd2V2ZXIsIHRoZSBjcnVjaWFsIGJpdCBpcyB0aGF0IGl0J3MgY2FjaGVkIGFuZCByZXVzZWQuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSAqZG9lc24ndCogemVybyB0aGUgcGFnZSBkdXJpbmcgcmV1c2UuIE15IHRob3VnaHQgcHJvY2VzcyBpbW1lZGlhdGVseSBqdW1wcyB0byBcInN0YWxlIGRhdGEhXCIgVGhpcyBtZWFucyBgdnNpZV9wYWdlLVx1MDAzZWNyeWNiYCBjb3VsZCByZXRhaW4gcmVtbmFudHMgZnJvbSBhIHByaW9yIGd1ZXN0J3MgdXNhZ2UuIEFuZCB0aGlzIGB2c2llX3BhZ2UtXHUwMDNlY3J5Y2JgIGlzLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGRpcmVjdGx5IHVzZWQgYnkgdGhlIGhhcmR3YXJlIGZvciBuZXN0ZWQgZ3Vlc3QgZXhlY3V0aW9uLlxuXG5Ob3csIGlmIGBzZXR1cF9hcGNiMTBgIGxlYXZlcyBgYXBtWzEuLjNdYCwgYGFxbVsxLi4zXWAsIGBhZG1bMS4uM11gIHVuaW5pdGlhbGl6ZWQgZHVyaW5nIGl0cyBvcGVyYXRpb24sIHRoZSBoYXJkd2FyZSAqd2lsbCogcmVhZCB0aGVzZSB1bmluaXRpYWxpemVkIGZpZWxkcyBkdXJpbmcgbmVzdGVkIGd1ZXN0IGV4ZWN1dGlvbi4gVGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBhIG5lc3RlZCBndWVzdCBvYnNlcnZlIHRoZSBzdGF0ZSBmcm9tIHRob3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBUaGlzIHNlZW1zIGxpa2UgYSBkZWZpbml0ZSBpbmZvcm1hdGlvbiBsZWFrIHZlY3RvciBpZiB0aGUgaGFyZHdhcmUncyBvcGVyYXRpb24gaXMgaW5mbHVlbmNlZCBhbmQgb2JzZXJ2YWJsZSBieSB0aGUgbmVzdGVkIGd1ZXN0LiBGb3IgZXhhbXBsZSwgaWYgaXQncyBwb3NzaWJsZSBmb3IgdGhlIG5lc3RlZCBndWVzdCB0byBleGVjdXRlIGNyeXB0byBpbnN0cnVjdGlvbnMgaXQgc2hvdWxkIG5vdCBoYXZlIGFjY2VzcyB0bywgb3IgcmVhZCBzb21lIHN0YXRlLCBpdCBpcyBjZXJ0YWlubHkgYW4gaXNzdWUuXG5cblRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoZSBjb3B5IG9wZXJhdGlvbiBmcm9tIGBzZXR1cF9hcGNiMTBgIGJldHdlZW4gZm9ybWF0cz8gVGhhdCBpcywgYHNldHVwX2FwY2IxMGAgY29waWVzIEZPUk1BVDAgdG8gRk9STUFUMT8gTm8sIGBzZXR1cF9hcGNiMTBgIGlzIHVzZWQgdG8gY29weSBmcm9tIEFQQ0IgRk9STUFUMCB0byBBUENCIEZPUk1BVDEsIHRoYXQgaXMsIHdoZW4gYGZtdF9vID09IENSWUNCX0ZPUk1BVDBgIGFuZCBgZm10X2ggPT0gQ1JZQ0JfRk9STUFUMmAuIEkgbmVlZCB0byByZXZpZXcgd2hlcmUgYHNldHVwX2FwY2JgIGlzIGNhbGxlZCB0byBjbGFyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDYxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MTQuMTI3MzU5MjY0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTI6XFx0c3RhdGljIGludCBzZXR1cF9hcGNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfcyxcXG4gMjUzOlxcdFxcdCAgICAgICBjb25zdCB1MzIgY3J5Y2JfZ3BhLFxcbiAyNTQ6XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX2gsXFxuIDI1NTpcXHRcXHQgICAgICAgaW50IGZtdF9vLCBpbnQgZm10X2gpXFxuIDI1NjpcXHR7XFxuIDI1NzpcXHRcXHRzd2l0Y2ggKGZtdF9vKSB7XFxuIDI1ODpcXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuIDI1OTpcXHRcXHRcXHRpZiAoKGNyeWNiX2dwYSBcXHUwMDI2IFBBR0VfTUFTSykgIT0gKChjcnljYl9ncGEgKyAyNTYpIFxcdTAwMjYgUEFHRV9NQVNLKSlcXG4gMjYwOlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiAyNjE6XFx0XFx0XFx0aWYgKGZtdF9oICE9IENSWUNCX0ZPUk1BVDIpXFxuIDI2MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjYzOlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTEodmNwdSwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuIDI2NDpcXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbiAyNjU6XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG4gMjY2OlxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG4gMjY3OlxcdFxcdFxcdHN3aXRjaCAoZm10X2gpIHtcXG4gMjY4OlxcdFxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG4gMjY5OlxcdFxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbiAyNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG4gMjcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y3J5Y2JfaC1cXHUwMDNlYXBjYjEpO1xcbiAyNzI6XFx0XFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxcbiAyNzM6XFx0XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxcbiAyNzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMCxcXG4gMjc1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuIDI3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IwKTtcXG4gMjc3OlxcdFxcdFxcdH1cXG4gMjc4OlxcdFxcdFxcdGJyZWFrO1xcbiAyNzk6XFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxcbiAyODA6XFx0XFx0XFx0aWYgKChjcnljYl9ncGEgXFx1MDAyNiBQQUdFX01BU0spICE9ICgoY3J5Y2JfZ3BhICsgMzIpIFxcdTAwMjYgUEFHRV9NQVNLKSlcXG4gMjgxOlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRcXHRzd2l0Y2ggKGZtdF9oKSB7XFxuIDI4NDpcXHRcXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuIDI4NTpcXHRcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG4gMjg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuIDI4NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG4gMjg4OlxcdFxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG4gMjg5OlxcdFxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMDpcXG4gMjkwOlxcdFxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMDAodmNwdSxcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjAsXFxuIDI5MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbiAyOTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopIFxcdTAwMjZjcnljYl9oLVxcdTAwM2VhcGNiMCk7XFxuIDI5NDpcXHRcXHRcXHR9XFxuIDI5NTpcXHRcXHR9XFxuIDI5NjpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0LyoqXFxuIDMwMDpcXHQgKiBzaGFkb3dfY3J5Y2IgLSBDcmVhdGUgYSBzaGFkb3cgY29weSBvZiB0aGUgY3J5Y2IgYmxvY2tcXG4gMzAxOlxcdCAqIEB2Y3B1OiBhIHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjE0LjEyNzUzNjI0NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA4MTU3NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDUllDQiBGb3JtYXQgTWlzbWF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGl0IGxvb2tzIGxpa2UgYHNldHVwX2FwY2IxMGAgaXMgdHJpZ2dlcmVkIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBmbXRfb2AgaXMgZWl0aGVyIGBDUllDQl9GT1JNQVQxYCBvciBgQ1JZQ0JfRk9STUFUMGAsIHdoaWxlIGBmbXRfaGAgaXMgYENSWUNCX0ZPUk1BVDJgLiBUaGlzIG1pc21hdGNoIGlzIHRoZSBjb3JlIGlzc3VlLiBUaGUgaG9zdCBpcyBhbnRpY2lwYXRpbmcgYSBgRk9STUFUMmAgQ1JZQ0IsIHdoaWNoIHV0aWxpemVzIGBhcGNiMWAsIGJ1dCB0aGUgZ3Vlc3QgaXMgcHJvdmlkaW5nIGEgYEZPUk1BVDFgIG9yIGBGT1JNQVQwYCBDUllDQiwgdXNpbmcgYGFwY2IwYCBpbnN0ZWFkLiBUaGUgZnVuY3Rpb24gYHNldHVwX2FwY2IxMGAgYWN0cyBhcyBhIHRyYW5zbGF0b3IsIGVmZmVjdGl2ZWx5IGNvbnZlcnRpbmcgYGFwY2IwYCBkYXRhIGludG8gYSBjb21wYXRpYmxlIGBhcGNiMWAgc3RydWN0dXJlLlxuXG5UaGUgY3J1eCBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBzdHJ1Y3R1cmFsIGRpZmZlcmVuY2UgYmV0d2VlbiBgYXBjYjBgIGFuZCBgYXBjYjFgLiBgYXBjYjBgIGhhcyBhIHNpbmdsZSBlbGVtZW50IGVhY2ggZm9yIGBhcG1gLCBgYXFtYCwgYW5kIGBhZG1gLCB3aGVyZWFzIGBhcGNiMWAgZXhwZWN0cyBmb3VyIGVsZW1lbnRzIGZvciBlYWNoLiBgc2V0dXBfYXBjYjEwYCBkaWxpZ2VudGx5IHBvcHVsYXRlcyB0aGUgZmlyc3QgZWxlbWVudCAoYGFwbVswXWAsIGBhcW1bMF1gLCBgYWRtWzBdYCkgZnJvbSB0aGUgYGFwY2IwYCBkYXRhIGJ1dCBsZWF2ZXMgdGhlIHN1YnNlcXVlbnQgZWxlbWVudHMgKGBbMS4uM11gKSB1bmluaXRpYWxpemVkLlxuXG5Ob3csIGJlY2F1c2UgYHZzaWVfcGFnZWAgaXMgcmV1c2VkLCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGEgdGlja2luZyB0aW1lIGJvbWIuIFRoZSBhcnJheSBlbGVtZW50cyBgYXBtWzEuLjNdYCwgYGFxbVsxLi4zXWAsIGFuZCBgYWRtWzEuLjNdYCBhcmUgbm93IHN1c2NlcHRpYmxlIHRvIGNvbnRhaW5pbmcgc3RhbGUgZGF0YSBmcm9tIGEgcHJldmlvdXMgZXhlY3V0aW9uLCBwb3RlbnRpYWxseSBmcm9tIGEgYEZPUk1BVDJgIENSWUNCIHRoYXQgKmZ1bGx5KiB1dGlsaXplZCBgYXBjYjFgLlxuXG5UaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcy4gQSBuZXN0ZWQgZ3Vlc3QgY291bGQgaW5hZHZlcnRlbnRseSBiZSBncmFudGVkIGFjY2VzcyB0byBjcnlwdG8gcXVldWVzIG9yIGRvbWFpbnMgYXV0aG9yaXplZCBmb3IgYSBwcmV2aW91cyBuZXN0ZWQgZ3Vlc3QuIFRoZSBoYXJkd2FyZSwgaW4gcmVhZGluZyB0aGVzZSBzaGFkb3cgY3J5Y2IgdmFsdWVzLCBjb3VsZCB1c2UgdGhlIGJpdHMgdGhhdCBoYXZlIGJlZW4gc2V0IGluIGBhcG1bMS4uM11gIGZyb20gdGhlIHByZXZpb3VzIGd1ZXN0LCBpZiB0aGV5IHdlcmUgdGhlcmUsIGFsbG93aW5nIGFjY2VzcyBiYXNlZCBvbiB0aG9zZSBzZXQgYml0cyFcblxuV2FpdCwgaXMgdGhpcyBhbiB1bmNoZWNrZWQgbWVtb3J5IHJlYWQgYnkgdGhlIGhhcmR3YXJlPyBZZXMsIHRoZSBoYXJkd2FyZSAqaXMqIHJlYWRpbmcgdGhlIHNoYWRvdyBDUllDQi4gQSBjaGlsbGluZyB0aG91Z2h0LlxuXG5JIGltbWVkaWF0ZWx5IGNvbnNpZGVyIEtNU0FOLiBXaWxsIGl0IGNhdGNoIHRoaXM/IEtNU0FOIGlzIGZhbnRhc3RpYyBhdCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgcGVyZm9ybWVkIGJ5IHRoZSAqQ1BVKiB3aGVuIGV4ZWN1dGluZyBrZXJuZWwgY29kZS4gQnV0IGRvZXMgaXQgZGV0ZWN0IHJlYWRzIGluaXRpYXRlZCBkaXJlY3RseSBieSBoYXJkd2FyZSwgdmlhIERNQSBvciBTSUU/XG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBLTVNBTiB3b24ndCBhdXRvbWF0aWNhbGx5IGludGVyY2VwdCB0aGVzZSBoYXJkd2FyZS1pbml0aWF0ZWQgcmVhZHMuIEl0IGRlcGVuZHMgb24gYW4gZXhwbGljaXQgY2hlY2sgb3IgaWYgdGhlIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXQgY291bGQgYmUgbWlzc2VkIGVudGlyZWx5LlxuXG5UaGUgd29ycnkgaXMsIGlmIHRoZSBtZW1vcnkgaXMgcGFzc2VkIHRvIGhhcmR3YXJlLCBLTVNBTiBtYXkgbm90IGRldGVjdCBpdCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIEtNU0FOIGFubm90YXRpb24gZm9yIHRoZSBoYXJkd2FyZSBoeXBlcmNhbGwsIHN1Y2ggYXMgYGttc2FuX2NoZWNrX21lbW9yeWAuIE5vdywgbGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBLTVNBTiBjaGVjayBmb3IgU0lFIGJsb2NrIG9yIENSWUNCLiBUaW1lIHRvIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MjIuNDM1Njk3MDc0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIwOTU1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21zYW5fY2hlY2tfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MjoyMi40ODM5MTkzOTRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NDQ5NjY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktNU0FOIENoZWNrIEJlZm9yZSBTSUUgRXhlY3V0aW9uPyoqXG5cbkFscmlnaHQsIGJlZm9yZSB3ZSBnZXQgYW55IGZ1cnRoZXIgaW50byB0aGlzLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHZlcmlmeWluZyB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBzdGF0dXMuIEl0J3MgYSBjcml0aWNhbCBzYWZldHkgbmV0LCBhbmQgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGNhdGNoIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgKmJlZm9yZSogd2UgZXZlbiB0aGluayBhYm91dCBleGVjdXRpbmcgdGhlIFN5c3RlbSBJbnRlZ3JpdHkgRXh0ZW5zaW9uIChTSUUpLiBUaGUgU0lFLCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBhIHJvY2stc29saWQgbWVtb3J5IGZvdW5kYXRpb24uIEFueSBpbnN0YWJpbGl0eSwgYW55IHBvc3NpYmlsaXR5IG9mIHVuZGVmaW5lZCBiZWhhdmlvciBjcmVlcGluZyBpbiBhdCB0aGF0IHN0YWdlLCBpcyBhIGRpc2FzdGVyIHdhaXRpbmcgdG8gaGFwcGVuLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgYWx3YXlzIGdyYXZpdGF0ZXMgdG93YXJkcyBjb25maXJtaW5nIHRoYXQgS01TQU4gaXMgYWN0aXZlIGFuZCB0aGF0IGFueSByZWxldmFudCBjaGVja3MgaGF2ZSBiZWVuIHBlcmZvcm1lZC4gV2UgbmVlZCB0aGF0IGd1YXJhbnRlZSBvZiBhIGNsZWFuIHNsYXRlIGJlZm9yZSB3ZSBldmVuIGVudGVydGFpbiB0aGUgaWRlYSBvZiBydW5uaW5nIHRoZSBTSUUuIEl0J3MgYWxsIGFib3V0IHJpc2sgbWl0aWdhdGlvbiBhbmQgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgc3lzdGVtJ3MgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjI1Ljg3ODQxOTkwMloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MzQ5ODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttc2FuX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MjUuOTI3MTYzMzYxWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDgyMTQzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKktNU0FOIENvbXBhdGliaWxpdHkg4oCTIEEgUXVpY2sgUmVhbGl0eSBDaGVjayoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2Vzbid0IGZlZWwgcmlnaHQuIEknbSBwcmV0dHkgc3VyZSBLTVNBTiwgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIsIGlzbid0IGZ1bGx5IGJha2VkIG9yIGV2ZW4gKnN1cHBvcnRlZCogb24gczM5MHguIE15IGd1dCdzIHRlbGxpbmcgbWUgdGhhdCdzIGEgcmVkIGZsYWcuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGlzLiBJdCdzIGNydWNpYWwgZm9yIHRoZSBwcm9qZWN0IHRvIHJ1biBvbiBzMzkweCwgc28gbGV0J3MgY2hlY2sgdGhlIHN1cHBvcnQgbWF0cml4IGFnYWluLiBOZWVkIHRvIGNvbmZpcm0gS01TQU4ncyBjYXBhYmlsaXRpZXMgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE5OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjI4LjkzNTM3OTgzMloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyNjY1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS01TQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMTg1LVxcdHNlbGVjdCBIQVZFX0FSQ0hfS0NTQU5cXG5hcmNoL3MzOTAvS2NvbmZpZzoxODY6XFx0c2VsZWN0IEhBVkVfQVJDSF9LTVNBTlxcbmFyY2gvczM5MC9LY29uZmlnLTE4Ny1cXHRzZWxlY3QgSEFWRV9BUkNIX0tGRU5DRVxcbi0tXFxuYXJjaC9zMzkwL01ha2VmaWxlPTQwPVVUU19NQUNISU5FXFx0Oj0gczM5MHhcXG5hcmNoL3MzOTAvTWFrZWZpbGU6NDE6U1RBQ0tfU0laRVxcdDo9ICQoaWYgJChDT05GSUdfS0FTQU4pLDY1NTM2LCQoaWYgJChDT05GSUdfS01TQU4pLDY1NTM2LDE2Mzg0KSlcXG5hcmNoL3MzOTAvTWFrZWZpbGUtNDItQ0hFQ0tGTEFHU1xcdCs9IC1EX19zMzkwX18gLURfX3MzOTB4X19cXG4tLVxcbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTExPUtDU0FOX1NBTklUSVpFIDo9IG5cXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZToxMjpLTVNBTl9TQU5JVElaRSA6PSBuXFxuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUtMTMtXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZT0zOT1vYmotJChDT05GSUdfS0VSTkVMX1pTVEQpICs9IGNsel9jdHoub1xcbmFyY2gvczM5MC9ib290L01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19LTVNBTikgKz0ga21zYW4ub1xcbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTQxLW9iai0kKENPTkZJR19TVEFDS1BST1RFQ1RPUikgKz0gc3RhY2twcm90ZWN0b3Iub1xcbi0tXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jPTMwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdm1lbV9zaXplKHVuc2lnbmVkIGxvbmcgaWRlbnRpdHlfc2l6ZSxcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy0zMTUtXFx0XFx0RklYTUFQX1NJWkUgKyBNT0RVTEVTX0xFTiArIEtBU0xSX0xFTjtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6MzE2OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTMxNy1cXHRcXHR2c2l6ZSArPSBNT0RVTEVTX0xFTiAqIDI7XFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9MzIxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNldHVwX2tlcm5lbF9tZW1vcnlfbGF5b3V0KHVuc2lnbmVkIGxvbmcga2VybmVsX3NpemUpXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtMzk5LVxcdFZNQUxMT0NfRU5EID0gTU9EVUxFU19WQUREUjtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6NDAwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTQwMS1cXHRcXHRWTUFMTE9DX0VORCAtPSBNT0RVTEVTX0xFTiAqIDI7XFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNDA3LVxcdHZtYWxsb2Nfc2l6ZSA9IG1pbih2bWFsbG9jX3NpemUsIHZzaXplKTtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6NDA4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpIHtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6NDA5OlxcdFxcdC8qIHRha2UgMi8zIG9mIHZtYWxsb2MgYXJlYSBmb3IgS01TQU4gc2hhZG93IGFuZCBvcmlnaW5zICovXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTQxMC1cXHRcXHR2bWFsbG9jX3NpemUgPSByb3VuZF9kb3duKHZtYWxsb2Nfc2l6ZSAvIDMsIF9TRUdNRU5UX1NJWkUpO1xcbi0tXFxuYXJjaC9zMzkwL2Jvb3Qvc3RyaW5nLmMtNy0jdW5kZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcXG5hcmNoL3MzOTAvYm9vdC9zdHJpbmcuYzo4OiN1bmRlZiBDT05GSUdfS01TQU5cXG5hcmNoL3MzOTAvYm9vdC9zdHJpbmcuYy05LSNpbmNsdWRlIFxcXCIuLi9saWIvc3RyaW5nLmNcXFwiXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaD0zNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19hcmNoX2xvY2FsX2lycV9zc20odW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oLTM5LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oOjQwOiNpZmRlZiBDT05GSUdfS01TQU5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaC00MS0jZGVmaW5lIGFyY2hfbG9jYWxfaXJxX2F0dHJpYnV0ZXMgbm9pbmxpbmUgbm90cmFjZSBfX25vX3Nhbml0aXplX21lbW9yeSBfX21heWJlX3VudXNlZFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oOjI6I2lmbmRlZiBfQVNNX1MzOTBfS01TQU5fSFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oOjM6I2RlZmluZSBfQVNNX1MzOTBfS01TQU5fSFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQtXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaD0xOT1zdGF0aWMgaW5saW5lIHZvaWQgKmFyY2hfa21zYW5fZ2V0X21ldGFfb3JfbnVsbCh2b2lkICphZGRyLCBib29sIGlzX29yaWdpbilcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTI4LVxcdFxcdFxcdCh2b2lkICopZ2V0X2xvd2NvcmUoKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaDoyOTpcXHRcXHRpZiAoS01TQU5fV0FSTl9PTihpc19sb3djb3JlX2FkZHIoYWRkcikpKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTMwLVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg9MzY9c3RhdGljIGlubGluZSBib29sIGttc2FuX3ZpcnRfYWRkcl92YWxpZCh2b2lkICphZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtNDItXFx0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24uIEhvd2V2ZXIsIHRoaXMgd291bGQgcmVzdWx0IGluIHJlY3Vyc2lvbiB3aXRoXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg6NDM6XFx0ICogS01TQU4uIFRoZXJlZm9yZSwgZGlzYWJsZSBwcmVlbXB0aW9uIGhlcmUsIGFuZCByZS1lbmFibGUgcHJlZW1wdGlvblxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQ0LVxcdCAqIGJlbG93IHdoaWxlIHN1cHByZXNzaW5nIHJlc2NoZWR1bGVzIHRvIGF2b2lkIHJlY3Vyc2lvbi5cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQ2LVxcdCAqIE5vdGUsIHRoaXMgc2FjcmlmaWNlcyBvY2Nhc2lvbmFsbHkgYnJlYWtpbmcgc2NoZWR1bGluZyBndWFyYW50ZWVzLlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oOjQ3OlxcdCAqIEFsdGhvdWdoLCBhIGtlcm5lbCBjb21waWxlZCB3aXRoIEtNU0FOIGhhcyBhbHJlYWR5IGdpdmVuIHVwIG9uIGFueVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQ4LVxcdCAqIHBlcmZvcm1hbmNlIGd1YXJhbnRlZXMgZHVlIHRvIGJlaW5nIGhlYXZpbHkgaW5zdHJ1bWVudGVkLlxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtNTgtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg6NTk6I2VuZGlmIC8qIF9BU01fUzM5MF9LTVNBTl9IICovXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEwMj1zdGF0aWMgaW5saW5lIGludCBpc19tb2R1bGVfYWRkcih2b2lkICphZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMTEtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTI6I2lmZGVmIENPTkZJR19LTVNBTlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTEzOiNkZWZpbmUgS01TQU5fVk1BTExPQ19TSVpFIChWTUFMTE9DX0VORCAtIFZNQUxMT0NfU1RBUlQpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTQ6I2RlZmluZSBLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCBWTUFMTE9DX0VORFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE1OiNkZWZpbmUgS01TQU5fVk1BTExPQ19TSEFET1dfRU5EIChLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCArIEtNU0FOX1ZNQUxMT0NfU0laRSlcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjExNjojZGVmaW5lIEtNU0FOX1ZNQUxMT0NfT1JJR0lOX1NUQVJUIEtNU0FOX1ZNQUxMT0NfU0hBRE9XX0VORFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE3OiNkZWZpbmUgS01TQU5fVk1BTExPQ19PUklHSU5fRU5EIChLTVNBTl9WTUFMTE9DX09SSUdJTl9TVEFSVCArIEtNU0FOX1ZNQUxMT0NfU0laRSlcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjExODojZGVmaW5lIEtNU0FOX01PRFVMRVNfU0hBRE9XX1NUQVJUIEtNU0FOX1ZNQUxMT0NfT1JJR0lOX0VORFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE5OiNkZWZpbmUgS01TQU5fTU9EVUxFU19TSEFET1dfRU5EIChLTVNBTl9NT0RVTEVTX1NIQURPV19TVEFSVCArIE1PRFVMRVNfTEVOKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTIwOiNkZWZpbmUgS01TQU5fTU9EVUxFU19PUklHSU5fU1RBUlQgS01TQU5fTU9EVUxFU19TSEFET1dfRU5EXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjE6I2RlZmluZSBLTVNBTl9NT0RVTEVTX09SSUdJTl9FTkQgKEtNU0FOX01PRFVMRVNfT1JJR0lOX1NUQVJUICsgTU9EVUxFU19MRU4pXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjItI2VuZGlmXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmg9MjE9dm9pZCAqbWVtbW92ZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtMjItXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oOjIzOiNpZiAhZGVmaW5lZChDT05GSUdfS0FTQU4pIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19LTVNBTilcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtMjQtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DSFJcXHQvKiBpbmxpbmUgXFx1MDAyNiBhcmNoIGZ1bmN0aW9uICovXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDE9Y2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oOjQyOiNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfS0FTQU4pIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19LTVNBTikgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDMtXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaC0xNi0gKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaDoxNzojaWYgZGVmaW5lZChDT05GSUdfS0FTQU4pIHx8IGRlZmluZWQoQ09ORklHX0tNU0FOKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTE4LSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgNFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaD0yNT12b2lkIGRlYnVnX3VzZXJfYXNjZShpbnQgZXhpdCk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0yNi1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjI3OiNpZmRlZiBDT05GSUdfS01TQU5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTI4LSNkZWZpbmUgdWFjY2Vzc19rbXNhbl9vcl9pbmxpbmUgbm9pbmxpbmUgX19tYXliZV91bnVzZWQgX19ub19zYW5pdGl6ZV9tZW1vcnlcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmM9NDE9c3RhdGljIGlubGluZSBib29sIGlzX2ZpbmFsX3B0X3JlZ3Moc3RydWN0IHVud2luZF9zdGF0ZSAqc3RhdGUsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3Vud2luZF9iYy5jLTUzLVxcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmM6NTQ6LyogQXZvaWQgS01TQU4gZmFsc2UgcG9zaXRpdmVzIGZyb20gdG91Y2hpbmcgdW5pbml0aWFsaXplZCBmcmFtZXMuICovXFxuYXJjaC9zMzkwL2tlcm5lbC91bndpbmRfYmMuYy01NS1fX25vX2ttc2FuX2NoZWNrc1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91bndpbmRfYmMuYz0xMjM9RVhQT1JUX1NZTUJPTF9HUEwodW53aW5kX25leHRfZnJhbWUpO1xcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmMtMTI0LVxcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmM6MTI1Oi8qIEF2b2lkIEtNU0FOIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgZnJhbWVzLiAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmMtMTI2LV9fbm9fa21zYW5fY2hlY2tzXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MzE1PXN0YXRpYyBpbnQgcHRfZHVtcF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzQzLSNlbmRpZlxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNDQ6I2lmZGVmIENPTkZJR19LTVNBTlxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNDU6XFx0cmMgfD0gYWRkX21hcmtlcihLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCwgS01TQU5fVk1BTExPQ19TSEFET1dfRU5ELCBcXFwiS21zYW4gdm1hbGxvYyBTaGFkb3dcXFwiKTtcXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzQ2OlxcdHJjIHw9IGFkZF9tYXJrZXIoS01TQU5fVk1BTExPQ19PUklHSU5fU1RBUlQsIEtNU0FOX1ZNQUxMT0NfT1JJR0lOX0VORCwgXFxcIkttc2FuIHZtYWxsb2MgT3JpZ2luc1xcXCIpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNDc6XFx0cmMgfD0gYWRkX21hcmtlcihLTVNBTl9NT0RVTEVTX1NIQURPV19TVEFSVCwgS01TQU5fTU9EVUxFU19TSEFET1dfRU5ELCBcXFwiS21zYW4gTW9kdWxlcyBTaGFkb3dcXFwiKTtcXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzQ4OlxcdHJjIHw9IGFkZF9tYXJrZXIoS01TQU5fTU9EVUxFU19PUklHSU5fU1RBUlQsIEtNU0FOX01PRFVMRVNfT1JJR0lOX0VORCwgXFxcIkttc2FuIE1vZHVsZXMgT3JpZ2luc1xcXCIpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNDktI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjI4Ljk4OTY1MTkzMloiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQyOTE3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipLTVNBTiBvbiBzMzkweCBhbmQgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyBLTVNBTiAqZG9lcyogc3VwcG9ydCBzMzkweC4gVGhhdCdzIGdvb2QgbmV3cy4gQnV0IG15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBkb2VzIEtNU0FOIGVmZmVjdGl2ZWx5IGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgbWlnaHQgYmUgaGFwcGVuaW5nIGF0IHRoZSBoYXJkd2FyZSBsZXZlbCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIFN5c3RlbSBJbnN0cnVjdGlvbiBFeHRlbnNpb24gKFNJRSk/XG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGlzOiBLTVNBTiBvcGVyYXRlcyBieSBpbnN0cnVtZW50aW5nIENQVSBpbnN0cnVjdGlvbnMuIEl0J3MgZGVzaWduZWQgdG8gZGV0ZWN0IHdoZW4gdGhlICpDUFUqIGl0c2VsZiBhdHRlbXB0cyB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBTbywgaWYgdGhlIENQVSB0cmllcyB0byBsb2FkIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgZGlyZWN0bHksIEtNU0FOIHNob3VsZCBmbGFnIGl0LiBCdXQgd2hhdCBhYm91dCBhIHNjZW5hcmlvIHdoZXJlIHRoZSBDUFUgaGFuZHMgb2ZmIGEgKnBvaW50ZXIqIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBoYXJkd2FyZSwgdXNpbmcgU0lFIGluc3RydWN0aW9ucz8gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQsIHdpdGhvdXQgZXhwbGljaXQgaW5zdHJ1bWVudGF0aW9uLCBLTVNBTiAqd29uJ3QqIGNhdGNoIHRoYXQuIEl0J3MgdGhlIGhhcmR3YXJlIGRvaW5nIHRoZSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgcmVhZCBub3csIG5vdCB0aGUgQ1BVIGluc3RydWN0aW9uIHN0cmVhbSB0aGF0IEtNU0FOIGlzIHdhdGNoaW5nLiBUaGUga2V5IGhlcmUsIGFuZCB3aGF0IEkgbmVlZCB0byBsb29rIGZvciwgaXMgYSBga21zYW5fY2hlY2tfbWVtb3J5YCBjYWxsLiBJZiB0aGVyZSdzIGFuIGV4cGxpY2l0IGNhbGwgdG8gYGttc2FuX2NoZWNrX21lbW9yeWAgYmVmb3JlIHRoZSBoYXJkd2FyZSBleGVjdXRpb24gaGFwcGVucywgdGhhdCAqc2hvdWxkKiBmb3JjZSBLTVNBTiB0byBjaGVjayB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgdGhlIENQVSBiZWZvcmUgdGhlIGhhcmR3YXJlIGdldHMgaXRzIGhhbmRzIG9uIGl0LlxuXG5TbywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBTSUUgYmxvY2sgb3IgQ1JZQ0IuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGlkZW50aWZ5aW5nIGlmIHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHNhZmVndWFyZHMgaW4gcGxhY2UuIEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBwcm9hY3RpdmVseSBjaGVja2luZyB0aGUgbWVtb3J5IGFyZWEgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUwMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MjozMy45MzI1NzI3NjRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDExNTM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9jaGVja19tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjMzLjk4MDk5Mjc4NFoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU3ODgwNDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENoZWNrIGFuZCBVc2VyIFNwYWNlIENvcHlpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIG1lbW9yeSBzYWZldHkgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIEtWTSBpbXBsZW1lbnRhdGlvbi4gRmlyc3QgdGhvdWdodDogd2hlcmUgaXMgYGttc2FuX2NoZWNrX21lbW9yeWAgZGVmaW5lZCwgb3IgcmF0aGVyICpub3QqIGRlZmluZWQsIHNwZWNpZmljYWxseSBpbiB0aGUgYGFyY2gvczM5MC9rdm0vYCBkaXJlY3Rvcnk/IEhtbSwgSSBjYW4ndCBmaW5kIGl0LiBBbHJpZ2h0LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGNvbnNpZGVyIHRoZSBgY29weV90b191c2VyYCBmdW5jdGlvbi4gVGhhdCdzIHVzdWFsbHkgdGhlIGhvdHNwb3QgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgSSd2ZSBsb2NhdGVkIHRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQgaW4gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AuIEludGVyZXN0aW5nLiBMaW5lIDU3MzIgaXMgZ3JhYmJpbmcgbXkgYXR0ZW50aW9uLiBUaGV5J3JlIGNvcHlpbmcgYGNtZC5yY2AgYW5kIGBjbWQucnJjYCB0byB1c2VyIHNwYWNlLCByaWdodCBhZnRlciBoYW5kbGluZyBhIGBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wYCBjYWxsLiBUaGF0IG1ha2VzIHNlbnNlIGZvciBwYXNzaW5nIGJhY2sgcmV0dXJuIGNvZGVzIGFuZCByZXN1bHRzIGZyb20gdGhlIGh5cGVydmlzb3IuIEJ1dCwgaG93IGFyZSB0aGV5IGhhbmRsaW5nIHRoZSBtZW1vcnkgY29weT9cblxuQWgsIHJpZ2h0LCBub3cgSSBzZWUgdGhleSBhcmUgdXNpbmcgYG9mZnNldG9mYCB0byBjYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGBhcmdwYC4gU28gaXQncyBjb3B5aW5nIHRvIHRoZSBgcmNgIGZpZWxkIG9mIGEgYGt2bV9wdl9jbWRgIHN0cnVjdC4gVGhhdCdzIGJldHRlciB0aGFuIGRpcmVjdGx5IHdyaXRpbmcgdG8gYGFyZ3BgLCBwcmV2ZW50aW5nIHdyaXRpbmcgdG8gYXJiaXRyYXJ5IG1lbW9yeSBsb2NhdGlvbnMuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBgY21kYCBzdHJ1Y3QgY29tZXMgZnJvbSB0byBldmFsdWF0ZSB0aGUgc2FmZXR5IGhlcmUuIExldCdzIHRyYWNlIGJhY2sgd2hlcmUgdGhpcyBgY21kYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gaXMga2V5IHRvIGNvbmZpcm1pbmcgdGhlcmUgYXJlIG5vIG91dC1vZi1ib3VuZHMgd3JpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAyNywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MjozOS45Mzg4NzY0MjdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDQxMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fcHZfY21kIGNtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MzI9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MTYtXFx0Y2FzZSBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORDoge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzE3OlxcdFxcdHN0cnVjdCBrdm1fcHZfY21kIGNtZDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTcxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MzkuOTkwMzIxNjM3WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDE2MjMzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTV9TMzkwX1BWX0NQVV9DT01NQU5EIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBgS1ZNX1MzOTBfUFZfQ1BVX0NPTU1BTkRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIGNvbW1hbmQgaXMgKmRvaW5nKi4gTXkgaW1tZWRpYXRlIG1lbnRhbCBtYXAgaXMgc3RhcnRpbmcgdG8gYnVpbGQg4oCTIHRoaXMgaXMgbGlrZWx5IGEgcHJpdmlsZWdlZCBWTSBjb21tYW5kIHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcGFyYXZpcnR1YWxpemVkIG9wZXJhdGlvbnMgZm9yIHRoZSBDUFUuXG5cbkknbSB0aGlua2luZywgXCJXaGVyZSBpcyB0aGlzIGRlZmluZWQ/IFdoYXQgc3RydWN0dXJlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aWVkIHRvIGl0cyBpbXBsZW1lbnRhdGlvbj9cIlxuXG5JJ20gZ29pbmcgdG8gc2NhbiB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMsIGxvb2tpbmcgZm9yIGl0cyBkZWZpbml0aW9uLCBhbnkgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzIChsaWtlIGBrdm1fczM5MF9wdl9jcHVfY29tbWFuZF9hcmdzYCBwZXJoYXBzPyksIGFuZCBpdHMgdXNhZ2UuIEknbGwgbWVudGFsbHkgbm90ZSBhbnkgZmxhZ3Mgb3IgYXJndW1lbnRzIHRoaXMgY29tbWFuZCB0YWtlczsgYSBkZWVwIGRpdmUgaW4gdGhlIGtlcm5lbCBjb2RlIHVzdWFsbHkgcmV2ZWFscyB3aGF0IHRob3NlIHRoaW5ncyBhcmUgYmVpbmcgdXNlZCBmb3IuXG5cblNwZWNpZmljYWxseSwgSSB3YW50IHRvIGlkZW50aWZ5OlxuXG4qICAgKipJdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBzMzkwIEtWTSBhcmNoaXRlY3R1cmU6KiogSXMgdGhpcyByZWxhdGVkIHRvIENQVSBob3RwbHVnLCB2aXJ0dWFsaXphdGlvbiBjb250cm9sLCBndWVzdCByZWdpc3RlciBtYW5pcHVsYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuKiAgICoqUHJpdmlsZWdlIExldmVsOioqIFdobyBjYW4gY2FsbCB0aGlzPyBEb2VzIGl0IHJlcXVpcmUgcm9vdCBwcml2aWxlZ2VzLCBvciBpcyB0aGVyZSBhIG1vcmUgbnVhbmNlZCBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc20gYXQgcGxheT9cbiogICAqKkludGVyYWN0aW9uIHdpdGggSGFyZHdhcmU6KiogRG9lcyBpdCB0cmFuc2xhdGUgZGlyZWN0bHkgaW50byBoeXBlcmNhbGxzLCBvciBkb2VzIGl0IG9wZXJhdGUgdGhyb3VnaCBzb2Z0d2FyZSBlbXVsYXRpb24/IFVuZGVyc3RhbmRpbmcgdGhpcyBpbXBhY3RzIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdGllcy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGNvbW1hbmQgZmFpbHM/IEFyZSBlcnJvciBjb2RlcyB3ZWxsLWRlZmluZWQgYW5kIHByb3BhZ2F0ZWQgY29ycmVjdGx5P1xuKiAgICoqQ29uY3VycmVuY3kgSXNzdWVzOioqIERvZXMgdGhlIGNvZGUgaGFuZGxlIG11bHRpcGxlIHZDUFVzIGNvbmN1cnJlbnRseT8gQXJlIHRoZXJlIGFueSBzcGlubG9ja3Mgb3IgbXV0ZXhlcyB0aGF0IGNvdWxkIGludHJvZHVjZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciwgd29yc2UsIHJhY2UgY29uZGl0aW9ucz9cblxuRXNzZW50aWFsbHksIEknbSBzZXR0aW5nIG91dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCB0aGUgbWVjaGFuaWNzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiwgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiB0aGUgY29kZSBhbmQgc2VlIHdoZXJlIGl0IGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg2MiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjQ1LjI5MTk0OTE5NloiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3MTU6XFx0XFx0fVxcbjU3MTY6XFx0XFx0Y2FzZSBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORDoge1xcbjU3MTc6XFx0XFx0XFx0c3RydWN0IGt2bV9wdl9jbWQgY21kO1xcbjU3MTg6XFx0XFxuNTcxOTpcXHRcXHRcXHRyID0gLUVJTlZBTDtcXG41NzIwOlxcdFxcdFxcdGlmICghaXNfcHJvdF92aXJ0X2hvc3QoKSlcXG41NzIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjU3MjI6XFx0XFxuNTcyMzpcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG41NzI0OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2Y21kLCBhcmdwLCBzaXplb2YoY21kKSkpXFxuNTcyNTpcXHRcXHRcXHRcXHRicmVhaztcXG41NzI2OlxcdFxcbjU3Mjc6XFx0XFx0XFx0ciA9IC1FSU5WQUw7XFxuNTcyODpcXHRcXHRcXHRpZiAoY21kLmZsYWdzKVxcbjU3Mjk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTczMDpcXHRcXG41NzMxOlxcdFxcdFxcdC8qIFdlIG9ubHkgaGFuZGxlIHRoaXMgY21kIHJpZ2h0IG5vdyAqL1xcbjU3MzI6XFx0XFx0XFx0aWYgKGNtZC5jbWQgIT0gS1ZNX1BWX0RVTVApXFxuNTczMzpcXHRcXHRcXHRcXHRicmVhaztcXG41NzM0OlxcdFxcbjU3MzU6XFx0XFx0XFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgXFx1MDAyNmNtZCk7XFxuNTczNjpcXHRcXG41NzM3OlxcdFxcdFxcdC8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqL1xcbjU3Mzg6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXFx1MDAyNmNtZC5yYyxcXG41NzM5OlxcdFxcdFxcdFxcdFxcdCBzaXplb2YoY21kLnJjKSArIHNpemVvZihjbWQucnJjKSkpXFxuNTc0MDpcXHRcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG41NzQxOlxcdFxcdFxcdGJyZWFrO1xcbjU3NDI6XFx0XFx0fVxcbjU3NDM6XFx0XFx0ZGVmYXVsdDpcXG41NzQ0OlxcdFxcdFxcdHIgPSAtRU5PVFRZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1Mjo0NS4yOTIxNjcxMjZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0Nzk4OTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUzM5MCBWaXJ0dWFsIENQVSBEdW1wIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYGNtZGAgc3RydWN0dXJlIGlzIGhhbmRsZWQgaGVyZS4gVGhlIGNydWNpYWwgcG9pbnQgc2VlbXMgdG8gYmUgdGhhdCBgY21kYCBnZXRzIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9mcm9tX3VzZXIoXHUwMDI2Y21kLCBhcmdwLCBzaXplb2YoY21kKSlgLiBUaGlzIGlzIGtleS4gVGhlbiBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcCh2Y3B1LCBcdTAwMjZjbWQpYCBnZXRzIGludm9rZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG1pZ2h0IG1vZGlmeSBgY21kLnJjYCBhbmQgYGNtZC5ycmNgLiBGaW5hbGx5LCB0aG9zZSBtb2RpZmllZCB2YWx1ZXMgYXJlIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIHRoZSBlbnRpcmUgYGNtZGAgc3RydWN0dXJlIG9yaWdpbmF0ZXMgZnJvbSB1c2VyIHNwYWNlLCB3ZSBzaG91bGRuJ3QgaGF2ZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgbGVha3MgaGVyZS4gVGhhdCdzIGdvb2QuXG5cbkJ1dCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMuIEknbSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nLiBJcyB0aGVyZSBhbnkgcGFkZGluZyB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAgaXRzZWxmPyBJZiB0aGVyZSAqaXMqIHBhZGRpbmcsIGFuZCBpZiBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAgc29tZWhvdyBtYW5pcHVsYXRlcyB0aGF0IHBhZGRpbmcsIGV2ZW4gaWYgaXQncyBub3QgZXhwbGljaXRseSB1c2VkIGluIHRoZSBjb3B5LWJhY2ssIHRoYXQgY291bGQgY3JlYXRlIGEgcHJvYmxlbS4gSSBiZXR0ZXIgdmVyaWZ5IHRoZSBzdHJ1Y3R1cmUncyBsYXlvdXQuIExldCdzIGRpZyBpbnRvIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1Mjo1MC4yNDAxNTg4MjhaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTk0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fcHZfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9MjgwPWVudW0gcHZfY21kX2lkIHtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTI5My1cXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDoyOTQ6c3RydWN0IGt2bV9wdl9jbWQge1xcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTI5NS1cXHRfX3UzMiBjbWQ7XFx0LyogQ29tbWFuZCB0byBiZSBleGVjdXRlZCAqL1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI0ODA9c3RhdGljIHNzaXplX3Qga3ZtX3MzOTBfaGFuZGxlX3B2X2luZm8oc3RydWN0IGt2bV9zMzkwX3B2X2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjUxOC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjUxOTpzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2RtcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHZfY21kICpjbWQsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1MjAtXFx0XFx0XFx0ICAgc3RydWN0IGt2bV9zMzkwX3B2X2RtcCBkbXApXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjU4MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjU4MTpzdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHZfY21kICpjbWQpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1ODIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5Mjc9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwMjYtXFx0Y2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwMjc6XFx0XFx0c3RydWN0IGt2bV9wdl9jbWQgYXJncztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAyOC1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDkwPXN0YXRpYyBpbnQga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0OTE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9wdl9jbWQgKmNtZClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ5Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUzMj1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTcxNi1cXHRjYXNlIEtWTV9TMzkwX1BWX0NQVV9DT01NQU5EOiB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MTc6XFx0XFx0c3RydWN0IGt2bV9wdl9jbWQgY21kO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE4LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MzctXFx0XFx0LyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3Mzg6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXFx1MDAyNmNtZC5yYyxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTczOS1cXHRcXHRcXHRcXHQgc2l6ZW9mKGNtZC5yYykgKyBzaXplb2YoY21kLnJyYykpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1Mjo1MC4yOTIzNTY4OThaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NjEyNTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzdHJ1Y3R1cmUgaG9sZHMgYW5kIGl0cyByb2xlIHdpdGhpbiBLVk0ncyBwYXJhLXZpcnR1YWxpemVkIGludGVyZmFjZS4gSXQncyB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgdmlhIGh5cGVyY2FsbHMsIGlzbid0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGF5b3V0IHRvIHJlY2FsbCBob3cgaXQncyB1c2VkIGZvciB2YXJpb3VzIG9wZXJhdGlvbnM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IG1lbW9yeSBtYXBwaW5nLCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGJpdGZpZWxkcyB3aXRoaW4gaXQgYXJlIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0OyB0aGV5IHVzdWFsbHkgZW5jb2RlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbW1hbmQgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBjaGFuZ2VzIGFjcm9zcyBrZXJuZWwgdmVyc2lvbnMgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCB0aGUgb2xkZXIgZ3Vlc3QvbmV3ZXIgaG9zdCBjb21wYXRpYmlsaXR5LiBMZXQncyBzZWUuLi4gd2hhdCBhcmUgdGhlIGtleSBmaWVsZHMgdGhhdCBkaWN0YXRlIHRoZSBiZWhhdmlvcj8gVGhlIGNvbW1hbmQgSUQsIGNlcnRhaW5seS4gVGhlbiB0aGVyZSdzIHRoZSBhc3NvY2lhdGVkIGRhdGEgcG9pbnRlciwgaXRzIHNpemUgYW5kLCBvZiBjb3Vyc2UsIGFueSBzdGF0dXMgcmVwb3J0aW5nIGZpZWxkcyB0byBjaGVjayB0aGF0IGh5cGVyY2FsbCBoYXMgYmVlbiBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5LiBJIG1pZ2h0IGFsc28gYmUgaW50ZXJlc3RlZCBpbiB3aGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgbG9naWMuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSAnbWFnaWMgbnVtYmVyJyBpbiB0aGUgaGVhZGVyIHRvIGVuc3VyZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBhbmQgbm90IHRoZSBkZWZpbml0aW9uLCB0byBzZWUgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyOTYsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1Mjo1NC4xNzg0ODQ1MDFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcdEtWTV9QVl9BU1lOQ19DTEVBTlVQX1BSRVBBUkUsXFxuIDI5MTpcXHRcXHRLVk1fUFZfQVNZTkNfQ0xFQU5VUF9QRVJGT1JNLFxcbiAyOTI6XFx0fTtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0c3RydWN0IGt2bV9wdl9jbWQge1xcbiAyOTU6XFx0XFx0X191MzIgY21kO1xcdC8qIENvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgKi9cXG4gMjk2OlxcdFxcdF9fdTE2IHJjO1xcdC8qIFVsdHJhdmlzb3IgcmV0dXJuIGNvZGUgKi9cXG4gMjk3OlxcdFxcdF9fdTE2IHJyYztcXHQvKiBVbHRyYXZpc29yIHJldHVybiByZWFzb24gY29kZSAqL1xcbiAyOTg6XFx0XFx0X191NjQgZGF0YTtcXHQvKiBEYXRhIG9yIGFkZHJlc3MgKi9cXG4gMjk5OlxcdFxcdF9fdTMyIGZsYWdzOyAgICAvKiBmbGFncyBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIE11c3QgYmUgMCBmb3Igbm93ICovXFxuIDMwMDpcXHRcXHRfX3UzMiByZXNlcnZlZFszXTtcXG4gMzAxOlxcdH07XFxuIDMwMjpcXHRcXG4gMzAzOlxcdHN0cnVjdCBrdm1fczM5MF96cGNpX29wIHtcXG4gMzA0OlxcdFxcdC8qIGluICovXFxuIDMwNTpcXHRcXHRfX3UzMiBmaDsgICAgICAgICAgICAgICAvKiB0YXJnZXQgZGV2aWNlICovXFxuIDMwNjpcXHRcXHRfX3U4ICBvcDsgICAgICAgICAgICAgICAvKiBvcGVyYXRpb24gdG8gcGVyZm9ybSAqL1xcbiAzMDc6XFx0XFx0X191OCAgcGFkWzNdO1xcbiAzMDg6XFx0XFx0dW5pb24ge1xcbiAzMDk6XFx0XFx0XFx0LyogZm9yIEtWTV9TMzkwX1pQQ0lPUF9SRUdfQUVOICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjU0LjE3ODU2NjU4MVoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ4ODc1NjQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIHdpdGggdGhlIGluaXRpYWwgY2hlY2sgY29uY2VybmluZyBgcmNgIGFuZCBgcnJjYCwgdGhvc2UgYXJlIGBfX3UxNmAsIHNvIHRoZXkncmUgY29udGlndW91cyBhbmQgdGhlIHRvdGFsIHNpemUgaXMgNCBieXRlcy4gYHNpemVvZihjbWQucmMpICsgc2l6ZW9mKGNtZC5ycmMpYCBjb25maXJtcyB0aGlzLCBhbmQgdGhlcmUncyBubyBwYWRkaW5nLiBUaGV5J3JlIGNvcGllZCBmcm9tIGBcdTAwMjZjbWQucmNgLCB3aGljaCBtZWFucyB0aGVyZSdzIG5vIGltbWVkaWF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGluIHRoYXQgYXJlYS5cblxuTm93LCBsb29raW5nIGF0IGBrdm1fczM5MF9rZXlvcGAsIGl0IHNlZW1zIGxpa2UgYSBsb2NraW5nIGZpeC4gVGhlIGBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2VgIHJlYWQgaXMgcHJvdGVjdGVkIGJ5IGEgbG9jaywgYW5kIHRoZSBhc2NlIGlzIGRlY2xhcmVkIGxvY2FsbHkuIE5vIGltbWVkaWF0ZSBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLlxuXG5OZXh0LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGp1c3QgYWRkcmVzc2VzIHNpZ25hbCBoYW5kbGluZywgZW5zdXJpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSh2Y3B1KWAgaXMgYWx3YXlzIGNhbGxlZC4gTm8gaXNzdWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkganVtcGluZyBvdXQgaGVyZSBlaXRoZXIuXG5cbkZpbmFsbHksIGBzZXR1cF9hcGNiMTBgIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgcmVtZW1iZXIgYW5hbHl6aW5nIHRoaXMgYmVmb3JlLCBgYXBjYl9zYCBwb2ludHMgdG8gYFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjFgIGluc2lkZSBgdnNpZV9wYWdlLVx1MDAzZWNyeWNiYC4gSSBzZWUgdGhhdCBgdnNpZV9wYWdlYCBpcyByZXVzZWQgd2l0aG91dCB6ZXJvaW5nLCBhbmQgbm93IHRoZSBjb2RlICpkb2VzKiBgbWVtc2V0YCBgYXBjYl9zYC4gVGhhdCBzdGlsbCBkb2VzIG5vdCBmaXggdGhlIG9yaWdpbmFsIHByb2JsZW0uIFRoZSBpc3N1ZSBpcyB0aGF0IG5vdywgYGFwY2Jfcy1cdTAwM2VhcG1bMS4uM11gLCBgYXFtWzEuLjNdYCwgYGFkbVsxLi4zXWAgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBjb250YWluaW5nIGRhdGEgZnJvbSBwcmV2aW91cyB1c2Ugb2YgYHZzaWVfcGFnZWAuIFRoaXMgc3RhbGUgZGF0YSBpcyB0aGVuIHVzZWQgYnkgdGhlIGhhcmR3YXJlIChTSUUpIHdoZW4gZXhlY3V0aW5nIHRoZSBuZXN0ZWQgZ3Vlc3QuIFRoaXMgY291bGQgbGVhZCB0byBhIHNlY3VyaXR5IGlzc3VlLCBwb3RlbnRpYWxseSBhbGxvd2luZyBhIG5lc3RlZCBndWVzdCB0byBhY2Nlc3MgcmVzb3VyY2VzIGl0IHNob3VsZG4ndC4gVGhlIHJlYWwgcHJvYmxlbSBpcyB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgZG9lc24ndCBkZXRlY3QgdGhpcyBpc3N1ZSBiZWNhdXNlIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSBhbmQgbm90IGJ5IHRoZSBDUFUuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQhIEJ1dCB3YWl0Li4uIGlzIHRoZXJlICphbnkqIGNoYW5jZSB0aGUgQ1BVIGxhdGVyIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBkZXJpdmVkIHZhbHVlcyBiYXNlZCBvbiB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbWFraW5nIGl0IHZ1bG5lcmFibGUgdG8gZGV0ZWN0aW9uPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgbW9yZSBjYXJlZnVsbHkgdG8gZW5zdXJlIHRoYXQgYGFwY2Jfc2AgKG9yIGB2c2llX3BhZ2UtXHUwMDNlY3J5Y2JgKSBpcyAqbm90KiByZWFkIGJ5IHRoZSBDUFUgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDA3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUzOjA4LjY2NzMyNTk1MloiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MDY1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXBjYjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxNTk9dm9pZCBrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqYXBtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNjctXFx0Y2FzZSBDUllDQl9GT1JNQVQyOiAvKiBBUENCMSB1c2UgMjU2IGJpdHMgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE2ODpcXHRcXHRtZW1jcHkoY3J5Y2ItXFx1MDAzZWFwY2IxLmFwbSwgYXBtLCAzMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNjktXFx0XFx0Vk1fRVZFTlQoa3ZtLCAzLCBcXFwiU0VUIENSWUNCOiBhcG0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XFxcIixcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3MC1cXHRcXHRcXHQgYXBtWzBdLCBhcG1bMV0sIGFwbVsyXSwgYXBtWzNdKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE3MTpcXHRcXHRtZW1jcHkoY3J5Y2ItXFx1MDAzZWFwY2IxLmFxbSwgYXFtLCAzMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzItXFx0XFx0Vk1fRVZFTlQoa3ZtLCAzLCBcXFwiU0VUIENSWUNCOiBhcW0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XFxcIixcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3My1cXHRcXHRcXHQgYXFtWzBdLCBhcW1bMV0sIGFxbVsyXSwgYXFtWzNdKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE3NDpcXHRcXHRtZW1jcHkoY3J5Y2ItXFx1MDAzZWFwY2IxLmFkbSwgYWRtLCAzMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzUtXFx0XFx0Vk1fRVZFTlQoa3ZtLCAzLCBcXFwiU0VUIENSWUNCOiBhZG0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XFxcIixcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMjA5PXZvaWQga3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjE0LVxcdCAgICAgICBzaXplb2Yoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlYXBjYjApKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNTpcXHRtZW1zZXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFwY2IxLCAwLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjE2OlxcdCAgICAgICBzaXplb2Yoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlYXBjYjEpKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIxNy1cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMtLyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xOTQ9c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTEtLyoqXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjEyOiAqIHNldHVwX2FwY2IxMSAtIENvcHkgdGhlIEZPUk1BVDEgQVBDQiBmcm9tIHRoZSBndWVzdCB0byB0aGUgc2hhZG93IENSWUNCXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjEzLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjE5LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyMDpzdGF0aWMgaW50IHNldHVwX2FwY2IxMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjEtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjUtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjI2OlxcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiwgYXBjYjEpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNy1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjgtXFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgYXBjYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyOTpcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMSkpKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMi1cXHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjMzOlxcdFxcdCAgIEJJVFNfUEVSX0JZVEUgKiBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MjUyPXN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjYzOlxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTEodmNwdSwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY0LVxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY1OlxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZjcnljYl9oLVxcdTAwM2VhcGNiMSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY2LVxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzItXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg2LVxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg3OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y3J5Y2JfaC1cXHUwMDNlYXBjYjEpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDE6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUzOjA4LjcxNzAzODA1MVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjM5Njk2MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmVlZCBmb3IgS01TQU4gaW4gVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBDUFUgaXNuJ3QgYWN0dWFsbHkgcmVhZGluZyBgYXBjYjFgIGFmdGVyIEkgc2V0IGl0IHVwOyB0aGUgaGFyZHdhcmUgKFNJRSkgaXMgZG9pbmcgdGhhdC4gS01TQU4gb25seSBpbnN0cnVtZW50cyBDUFUgaW5zdHJ1Y3Rpb25zLCBzbyBpdCdzIG5vdCBnb2luZyB0byBjYXRjaCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBIbW0sIGxldCBtZSByZS1yZWFkIHRoZSBwcm9tcHQuIEl0IHNheXMgdG8gc2V0IGBOZWVkc0tNU0FOPXRydWVgICpvbmx5IGlmKiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2VydGFpbiByaXNrcywgc3BlY2lmaWNhbGx5OiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJzLCBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzICpjb3VsZCogYmUgcmVhZCBsYXRlciwgb3IgbmV3IGJvdW5kcyBjaGVja3MgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGFwY2Jfc2AgKHdoaWNoIGlzIHRoZSBzYW1lIGFzIGBrdm1fczM5MF9hcGNiMWApLCBhIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUsIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzICpjb3VsZCogYmUgcmVhZCBsYXRlciBieSB0aGUgaGFyZHdhcmUuIEJ1dCwgd2FpdCwgSSBhbHJlYWR5IGtub3cgS01TQU4gZG9lc24ndCBkZXRlY3QgaGFyZHdhcmUgcmVhZHMuIFRoZSBydWxlcyBzcGVjaWZpY2FsbHkgc3RhdGUsIGFuZCBJJ20gcGFyYXBocmFzaW5nIGhlcmUsIFwiRG9uJ3QgYm90aGVyIHdpdGggS01TQU4gaWYgS0FTQU4gb3Igb3RoZXIgdG9vbHMgY2FuIGNhdGNoIHRoZSBidWcuIEtNU0FOIGlzIGV4cGVuc2l2ZS5cIiBTbywgaWYgS01TQU4gY2FuJ3QgZGV0ZWN0IHRoaXMsIGlzIHJ1bm5pbmcgS01TQU4gcG9pbnRsZXNzP1xuXG5MZXQgbWUgdGhpbmsgaXQgdGhyb3VnaC4gSXMgdGhlcmUgZXZlbiBhIHJlbW90ZSBjaGFuY2UgS01TQU4gKmNvdWxkKiBkZXRlY3QgdGhpcz8gSXQgdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiBtZW1vcnksIGJ1dCB3aGVuIG1lbW9yeSBpcyBwYXNzZWQgdG8gaGFyZHdhcmUgbGlrZSBETUEsIEtNU0FOJ3MgYmxpbmQgdG8gdGhlIGhhcmR3YXJlIHJlYWQgdW5sZXNzIHRoZXJlJ3MgYW4gZXhwbGljaXQgY2hlY2sgbGlrZSBga21zYW5fY2hlY2tfbWVtb3J5KClgLiBBbmQgdGhlcmUncyBubyBga21zYW5fY2hlY2tfbWVtb3J5KClgIGZvciB0aGUgU0lFIGJsb2NrIG9yIHRoZSBDUllDQiwgcmlnaHQ/IFNvLCBubywgS01TQU4gd29uJ3QgcmVwb3J0IGFuIGVycm9yLlxuXG5Pa2F5LCBpcyB0aGUgYGFwY2IxYCBldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlPyBJIHNob3VsZCBjaGVjayBpZiBgY3J5Y2JgIGlzIGV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTYzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MzoxNi4zNTY3MzcyOThaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzMyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyeWNiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMDkwPXZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fcmVzZXRfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDk4LVxcdFxcdGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMDk5OlxcdFxcdC8qIHJlY3JlYXRlIHRoZSBzaGFkb3cgY3J5Y2IgYnkgbGVhdmluZyB0aGUgVlNJRSBoYW5kbGVyICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMDAtXFx0XFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0KEtWTV9SRVFfVlNJRV9SRVNUQVJULCB2Y3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTA2PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2NyeXB0byhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTExNS1cXHRcXHRnZXRfcmFuZG9tX2J5dGVzKFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTE2OlxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzayxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTExNzpcXHRcXHRcXHRzaXplb2Yoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlYWVzX3dyYXBwaW5nX2tleV9tYXNrKSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMTgtXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5hZXNfa3cgPSAxO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMjYtXFx0XFx0Z2V0X3JhbmRvbV9ieXRlcyhcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTEyNzpcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2ssXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExMjg6XFx0XFx0XFx0c2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWRlYV93cmFwcGluZ19rZXlfbWFzaykpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTI5LVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uZGVhX2t3ID0gMTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTM3LVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uYWVzX2t3ID0gMDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTEzODpcXHRcXHRtZW1zZXQoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlYWVzX3dyYXBwaW5nX2tleV9tYXNrLCAwLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTM5OlxcdFxcdFxcdHNpemVvZihrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VhZXNfd3JhcHBpbmdfa2V5X21hc2spKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE0MC1cXHRcXHRWTV9FVkVOVChrdm0sIDMsIFxcXCIlc1xcXCIsIFxcXCJESVNBQkxFOiBBRVMga2V5d3JhcHBpbmcgc3VwcG9ydFxcXCIpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNDctXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5kZWFfa3cgPSAwO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTQ4OlxcdFxcdG1lbXNldChrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2ssIDAsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNDk6XFx0XFx0XFx0c2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWRlYV93cmFwcGluZ19rZXlfbWFzaykpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUwLVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIiVzXFxcIiwgXFxcIkRJU0FCTEU6IERFQSBrZXl3cmFwcGluZyBzdXBwb3J0XFxcIik7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEwNz1zdGF0aWMgaW50IGt2bV9zMzkwX2FweGFfaW5zdGFsbGVkKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEyNi0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEyNzpzdGF0aWMgdm9pZCBrdm1fczM5MF9zZXRfY3J5Y2JfZm9ybWF0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEyOC17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMjk6XFx0a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgPSB2aXJ0X3RvX3BoeXMoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMzAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMzEtXFx0LyogQ2xlYXIgdGhlIENSWUNCIGZvcm1hdCBiaXRzIC0gaS5lLiwgc2V0IGZvcm1hdCAwIGJ5IGRlZmF1bHQgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEzMjpcXHRrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCBcXHUwMDI2PSB+KENSWUNCX0ZPUk1BVF9NQVNLKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEzMy1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTM4LVxcdGlmIChrdm1fczM5MF9hcHhhX2luc3RhbGxlZCgpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTM5OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkIHw9IENSWUNCX0ZPUk1BVDI7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNDAtXFx0ZWxzZVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTQxOlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkIHw9IENSWUNCX0ZPUk1BVDE7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNDItfVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxNTk9dm9pZCBrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqYXBtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNjEte1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTYyOlxcdHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiID0ga3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYjtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2My1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTY1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTY2OlxcdHN3aXRjaCAoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgXFx1MDAyNiBDUllDQl9GT1JNQVRfTUFTSykge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTY3LVxcdGNhc2UgQ1JZQ0JfRk9STUFUMjogLyogQVBDQjEgdXNlIDI1NiBiaXRzICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNjg6XFx0XFx0bWVtY3B5KGNyeWNiLVxcdTAwM2VhcGNiMS5hcG0sIGFwbSwgMzIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTY5LVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIlNFVCBDUllDQjogYXBtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFxcXCIsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzAtXFx0XFx0XFx0IGFwbVswXSwgYXBtWzFdLCBhcG1bMl0sIGFwbVszXSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNzE6XFx0XFx0bWVtY3B5KGNyeWNiLVxcdTAwM2VhcGNiMS5hcW0sIGFxbSwgMzIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTcyLVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIlNFVCBDUllDQjogYXFtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFxcXCIsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzMtXFx0XFx0XFx0IGFxbVswXSwgYXFtWzFdLCBhcW1bMl0sIGFxbVszXSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNzQ6XFx0XFx0bWVtY3B5KGNyeWNiLVxcdTAwM2VhcGNiMS5hZG0sIGFkbSwgMzIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTc1LVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIlNFVCBDUllDQjogYWRtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFxcXCIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3OS1cXHRjYXNlIENSWUNCX0ZPUk1BVDA6IC8qIEZhbGwgdGhyb3VnaCBib3RoIHVzZSBBUENCMCAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTgwOlxcdFxcdG1lbWNweShjcnljYi1cXHUwMDNlYXBjYjAuYXBtLCBhcG0sIDgpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTgxOlxcdFxcdG1lbWNweShjcnljYi1cXHUwMDNlYXBjYjAuYXFtLCBhcW0sIDIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTgyOlxcdFxcdG1lbWNweShjcnljYi1cXHUwMDNlYXBjYjAuYWRtLCBhZG0sIDIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTgzLVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIlNFVCBDUllDQjogYXBtICUwMTZseCBhcW0gJTA0eCBhZG0gJTA0eFxcXCIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE5MTpcXHQvKiByZWNyZWF0ZSB0aGUgc2hhZG93IGNyeWNiIGZvciBlYWNoIHZjcHUgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5Mi1cXHRrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KGt2bSwgS1ZNX1JFUV9WU0lFX1JFU1RBUlQpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMyMDk9dm9pZCBrdm1fYXJjaF9jcnlwdG9fY2xlYXJfbWFza3Moc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMTItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTM6XFx0bWVtc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VhcGNiMCwgMCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNDpcXHQgICAgICAgc2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFwY2IwKSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTU6XFx0bWVtc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VhcGNiMSwgMCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNjpcXHQgICAgICAgc2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFwY2IxKSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMTctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMTgtXFx0Vk1fRVZFTlQoa3ZtLCAzLCBcXFwiJXNcXFwiLCBcXFwiQ0xSIENSWUNCOlxcXCIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjE5OlxcdC8qIHJlY3JlYXRlIHRoZSBzaGFkb3cgY3J5Y2IgZm9yIGVhY2ggdmNwdSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjIwLVxcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1ZTSUVfUkVTVEFSVCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzIzND1zdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMzUte1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjM2OlxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2IgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnNpZV9wYWdlMi1cXHUwMDNlY3J5Y2I7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMzc6XFx0a3ZtX3MzOTBfc2V0X2NyeWNiX2Zvcm1hdChrdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjM4LVxcdGluaXRfcndzZW0oXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjQ1LVxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uZGVhX2t3ID0gMTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI0NjpcXHRnZXRfcmFuZG9tX2J5dGVzKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzayxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI0NzpcXHRcXHRcXHQgc2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzaykpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjQ4OlxcdGdldF9yYW5kb21fYnl0ZXMoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlZGVhX3dyYXBwaW5nX2tleV9tYXNrLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjQ5OlxcdFxcdFxcdCBzaXplb2Yoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlZGVhX3dyYXBwaW5nX2tleV9tYXNrKSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyNTAtfVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM2NTI9c3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2NjAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM2NjE6XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNyeWNiZCA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjYyLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2IzIFxcdTAwMjY9IH4oRUNCM19BRVMgfCBFQ0IzX0RFQSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTM9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MzEtXFx0LyogQVBYQSBub3QgaW5zdGFsbGVkIGFuZCBBUElEIGdyZWF0ZXIgNjQgb3IgQVBRSSBncmVhdGVyIDE2ICovXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NjMyOlxcdGlmICghKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkIFxcdTAwMjYgMHgwMikgXFx1MDAyNlxcdTAwMjYgKHJlZzAgXFx1MDAyNiAweDAwMDBjMGYwVUwpKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYzMy1cXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTM0PXN0cnVjdCB2c2llX3BhZ2Uge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNjgtXFx0X191OCByZXNlcnZlZFsweDA2ZjggLSAweDAyNzhdO1xcdFxcdC8qIDB4MDI3OCAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjY5OlxcdHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgY3J5Y2I7XFx0LyogMHgwNmY4ICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzAtXFx0X191OCBmYWNbOCArIFMzOTBfQVJDSF9GQUNfTElTVF9TSVpFX0JZVEVdOy8qIDB4MDdmOCAqL1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTY0PXN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY5LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE3MDpcXHRhcGNiX2dwYSA9IGNyeWNiX2dwYSArIG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNzEtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODctICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTg4OiAqIEBhcGNiX3M6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgc2hhZG93IGNyeWNiXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTg5OiAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTAtICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBndWVzdDFcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTE5ND1zdGF0aWMgaW50IHNldHVwX2FwY2IwMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxOTU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHVuc2lnbmVkIGxvbmcgKmFwY2JfaClcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTk4LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE5OTpcXHRhcGNiX2dwYSA9IGNyeWNiX2dwYSArIG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMDAtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTMtICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjE0OiAqIEBhcGNiX3M6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgc2hhZG93IGNyeWNiXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjE1OiAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTYtICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBob3N0XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0yMjA9c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjIxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyMi1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICphcGNiX2gpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjUtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjI2OlxcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiwgYXBjYjEpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNy1cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI0MC0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDE6ICogQGNyeWNiX3M6IHBvaW50ZXIgdG8gc2hhZG93IGNyeWNiXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjQyOiAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDM6ICogQGNyeWNiX2g6IHBvaW50ZXIgdG8gdGhlIGhvc3QgY3J5Y2JcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDQ6ICogQGZtdF9vOiBmb3JtYXQgb2YgdGhlIG9yaWdpbmFsIGd1ZXN0IGNyeWNiLlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI0NTogKiBAZm10X2g6IGZvcm1hdCBvZiB0aGUgaG9zdCBjcnljYi5cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNDYtICpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDc6ICogQ2hlY2tzIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIGd1ZXN0IGFuZCBob3N0IGNyeWNiIGFuZCBjYWxscyB0aGVcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNDgtICogYXBwcm9wcmlhdGUgY29weSBmdW5jdGlvbi5cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNDktICpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTA6ICogUmV0dXJuIDAgb3IgYW4gZXJyb3IgbnVtYmVyIGlmIHRoZSBndWVzdCBhbmQgaG9zdCBjcnljYiBhcmUgaW5jb21wYXRpYmxlLlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1MS0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTI6c3RhdGljIGludCBzZXR1cF9hcGNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTM6XFx0ICAgICAgIGNvbnN0IHUzMiBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjU0OlxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9oLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1NS1cXHQgICAgICAgaW50IGZtdF9vLCBpbnQgZm10X2gpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNTgtXFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1OTpcXHRcXHRpZiAoKGNyeWNiX2dwYSBcXHUwMDI2IFBBR0VfTUFTSykgIT0gKChjcnljYl9ncGEgKyAyNTYpIFxcdTAwMjYgUEFHRV9NQVNLKSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjAtXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjYzOlxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTEodmNwdSwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY0OlxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY1OlxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZjcnljYl9oLVxcdTAwM2VhcGNiMSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY2LVxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MDpcXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzItXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3My1cXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjc0OlxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjAsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjc1OlxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjc2OlxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2JfaC1cXHUwMDNlYXBjYjApO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3Ny1cXHRcXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzktXFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4MDpcXHRcXHRpZiAoKGNyeWNiX2dwYSBcXHUwMDI2IFBBR0VfTUFTSykgIT0gKChjcnljYl9ncGEgKyAzMikgXFx1MDAyNiBQQUdFX01BU0spKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4MS1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NjpcXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODgtXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjkwLVxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMDAodmNwdSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyOTE6XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMCxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyOTI6XFx0XFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyOTM6XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopIFxcdTAwMjZjcnljYl9oLVxcdTAwM2VhcGNiMCk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjk0LVxcdFxcdH1cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI5OS0vKipcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMDA6ICogc2hhZG93X2NyeWNiIC0gQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGNyeWNiIGJsb2NrXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzAxLSAqIEB2Y3B1OiBhIHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMDMtICpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMDQ6ICogQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGNyeWNiIGJsb2NrIGFuZCBzZXR1cCBrZXkgd3JhcHBpbmcsIGlmXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzA1LSAqIHJlcXVlc3RlZCBmb3IgZ3Vlc3QgMyBhbmQgZW5hYmxlZCBmb3IgZ3Vlc3QgMi5cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxMy0gKiBUaGlzIGZ1bmN0aW9uIGNlbnRyYWxpemUgdGhlIGlzc3Vpbmcgb2Ygc2V0X3ZhbGlkaXR5X2ljcHQoKSBmb3IgYWxsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzE0OiAqIHRoZSBzdWJmdW5jdGlvbnMgd29ya2luZyBvbiB0aGUgY3J5Y2IuXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzE1LSAqXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMTgtICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzE5OnN0YXRpYyBpbnQgc2hhZG93X2NyeWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMyMC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMjItXFx0c3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayAqc2NiX28gPSB2c2llX3BhZ2UtXFx1MDAzZXNjYl9vO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMyMzpcXHRjb25zdCB1aW50MzJfdCBjcnljYmRfbyA9IFJFQURfT05DRShzY2Jfby1cXHUwMDNlY3J5Y2JkKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMjQ6XFx0Y29uc3QgdTMyIGNyeWNiX2FkZHIgPSBjcnljYmRfbyBcXHUwMDI2IDB4N2ZmZmZmZjhVO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMyNS1cXHR1bnNpZ25lZCBsb25nICpiMSwgKmIyO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzMwLVxcdGludCBrZXlfbXNrID0gdGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cXHUwMDNla3ZtLCA3Nik7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzMxOlxcdGludCBmbXRfbyA9IGNyeWNiZF9vIFxcdTAwMjYgQ1JZQ0JfRk9STUFUX01BU0s7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzMyOlxcdGludCBmbXRfaCA9IHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjcnljYmQgXFx1MDAyNiBDUllDQl9GT1JNQVRfTUFTSztcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMzMtXFx0aW50IHJldCA9IDA7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzM0LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMzNTpcXHRzY2Jfcy1cXHUwMDNlY3J5Y2JkID0gMDtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMzYtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDEtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzQyOlxcdGlmICghY3J5Y2JfYWRkcilcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDMtXFx0XFx0cmV0dXJuIHNldF92YWxpZGl0eV9pY3B0KHNjYl9zLCAweDAwMzlVKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM0NS1cXHRpZiAoZm10X28gPT0gQ1JZQ0JfRk9STUFUMSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNDY6XFx0XFx0aWYgKChjcnljYl9hZGRyIFxcdTAwMjYgUEFHRV9NQVNLKSAhPVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM0NzpcXHRcXHQgICAgKChjcnljYl9hZGRyICsgMTI4KSBcXHUwMDI2IFBBR0VfTUFTSykpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzQ4LVxcdFxcdFxcdHJldHVybiBzZXRfdmFsaWRpdHlfaWNwdChzY2JfcywgMHgwMDNDVSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXFx0aWYgKGFwaWVfcykge1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MTpcXHRcXHRyZXQgPSBzZXR1cF9hcGNiKHZjcHUsIFxcdTAwMjZ2c2llX3BhZ2UtXFx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MjpcXHRcXHRcXHRcXHQgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYixcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTMtXFx0XFx0XFx0XFx0IGZtdF9vLCBmbXRfaCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNjctXFx0LyogY29weSBvbmx5IHRoZSB3cmFwcGluZyBrZXlzICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzY4OlxcdGlmIChyZWFkX2d1ZXN0X3JlYWwodmNwdSwgY3J5Y2JfYWRkciArIDcyLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM2OTpcXHRcXHRcXHQgICAgdnNpZV9wYWdlLVxcdTAwM2VjcnljYi5kZWFfd3JhcHBpbmdfa2V5X21hc2ssIDU2KSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNzAtXFx0XFx0cmV0dXJuIHNldF92YWxpZGl0eV9pY3B0KHNjYl9zLCAweDAwMzVVKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM3NS1cXHQvKiB4b3IgYm90aCBibG9ja3MgaW4gb25lIHJ1biAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM3NjpcXHRiMSA9ICh1bnNpZ25lZCBsb25nICopIHZzaWVfcGFnZS1cXHUwMDNlY3J5Y2IuZGVhX3dyYXBwaW5nX2tleV9tYXNrO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM3Ny1cXHRiMiA9ICh1bnNpZ25lZCBsb25nICopXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mzc4OlxcdFxcdFxcdCAgICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2s7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzc5LVxcdC8qIGFzIDU2JTggPT0gMCwgYml0bWFwX3hvciB3b24ndCBvdmVyd3JpdGUgYW55IGRhdGEgKi9cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM4OS1cXHR9XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzkwOlxcdHNjYl9zLVxcdTAwM2VjcnljYmQgPSAodTMyKXZpcnRfdG9fcGh5cyhcXHUwMDI2dnNpZV9wYWdlLVxcdTAwM2VjcnljYikgfCBDUllDQl9GT1JNQVQyO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM5MS1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTQ4MD1zdGF0aWMgaW50IHNoYWRvd19zY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02MTYtXFx0cHJlcGFyZV9pYmModmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo2MTc6XFx0cmMgPSBzaGFkb3dfY3J5Y2IodmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02MTgtb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MzoxNi40MDQ0NzUxODhaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0MTY5NDA5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQSBXYXN0ZSBvZiBSZXNvdXJjZXM/KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgYGNyeWNiYCBhcmVhLCBzcGVjaWZpY2FsbHkgYGFwY2IxYCwgaXMgbm90IGNvcGllZCB0byB1c2VyIHNwYWNlLCBpdCdzIHN0cmljdGx5IGhhcmR3YXJlLWZhY2luZyAoU0lFKS4gVGh1cywgdGhlIG9ubHkgcmVhZCBpcyBmcm9tIHRoZSBoYXJkd2FyZSwgbm90IHRoZSBDUFUuIEtNU0FOLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGZsYWdzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpieSB0aGUgQ1BVKiBvciB0aG9zZSB0aGF0IGFyZSBwYXNzZWQgdG8gYGNvcHlfdG9fdXNlcmAgb3IgZXhwbGljaXRseSBjaGVja2VkIHdpdGggYGttc2FuX2NoZWNrX21lbW9yeWAuIFNpbmNlIHRoaXMgaXNuJ3QgdGhlIGNhc2UgaGVyZSwgcnVubmluZyBhIEtNU0FOIHNlc3Npb24gZm9yIHRoaXMgc3BlY2lmaWMgcGF0Y2ggc2VlbXMgcG9pbnRsZXNzLCBhcyBwZXIgdGhlIHJ1bGU6IGF2b2lkIEtNU0FOIGlmIHN0YW5kYXJkIGRldGVjdG9ycyBjYXRjaCB0aGUgaXNzdWUuIFRoZSBvbmx5IHdheSBpdCBjb3VsZCBjYXRjaCBhbnl0aGluZyBpcyB2aWEgYGttc2FuX2NoZWNrX21lbW9yeWAgYW5ub3RhdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3QgY2hlY2sgd2hldGhlciB0aG9zZSBldmVuIGV4aXN0IGZvciB0aGUgYXJlYXMgdGhhdCBhcmUgYmVpbmcgY2hhbmdlZC4gXG5cbk15IG1lbW9yeSB0aGVuIGJyb3VnaHQgbWUgdG8gdGhlIHBvaW50IHdoZXJlIEkgYmVnYW4gc2VhcmNoaW5nIHRoZSBgc2V0dXBfYXBjYjEwYCBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBgYXBjYl9zYCBkYXRhIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXRgLCBlbnN1cmluZyB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgbWl0aWdhdGVkLiBJIGNoZWNrZWQgYHNldHVwX2FwY2IxMWAsIHdoZXJlIGBhcGNiX3NgIGlzIHJlYWQgdGhyb3VnaCBgYml0bWFwX2FuZGAgYW5kIGluaXRpYWxpemVkIGJ5IGByZWFkX2d1ZXN0X3JlYWxgLCBzbyBhbHNvIG5vIGlzc3VlIHRoZXJlLiBUaGUgc2FtZSB0aGluZyBmb3IgYHNldHVwX2FwY2IwMGAuIFRoZW4gSSB3ZW50IGJhY2sgdG8gYHNldHVwX2FwY2IxMGAsIHRvIG1ha2Ugc3VyZSB0aGF0IGBhcGNiX3NgIGlzIG5vdCByZWFkIGJ5IHRoZSBDUFUsIGl0IGlzIG9ubHkgd3JpdHRlbiB0by4gU28sIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IGdvaW5nIHRvIGNhdGNoIHRoaXMuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBhcGNiX3NgIGlzICpuZXZlciogY29waWVkIHRvIHVzZXIgc3BhY2UgZWl0aGVyLiBJdCdzIHBhcnQgb2YgYHZzaWVfcGFnZS1cdTAwM2VjcnljYmAsIGludGVybmFsIGtlcm5lbC1zaWRlIHN0cnVjdHVyZS4gVGhlcmVmb3JlIEtNU0FOIGlzICphYnNvbHV0ZWx5KiBub3QgYXBwbGljYWJsZSBoZXJlLlxuXG5JIHRoZW4gZGlkIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSAqb3RoZXIqIGNvZGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2g6XG5cbjEuICBga3ZtX3MzOTBfa2V5b3BgOiBUaGlzIGZpeGVzIGEgbG9ja2luZyBpc3N1ZTsgYSBwb3RlbnRpYWwgcmFjZS91c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gd2hlbiBhY2Nlc3NpbmcgYGt2bS1cdTAwM2VhcmNoLmdtYXBgLiBMb2NraW5nIGJ1Z3MgYXJlIEtBU0FOL0xPQ0tERVAgdGVycml0b3J5LCBub3QgS01TQU4uXG4yLiAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYDogVGhpcyBmaXhlcyBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZWAgY2FsbC4gVGhpcyBpcyBhIGxvZ2ljIGVycm9yIGFuZCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLlxuMy4gIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogVGhpcyBmaXhlcyBhbiBhZGRyZXNzIGVycm9yIGluIGBjb3B5X3RvX3VzZXJgLCBlbnN1cmluZyBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIGFyZSBjb3BpZWQgdG8gdGhlIGNvcnJlY3QgdXNlci1zcGFjZSBvZmZzZXQuIFRoZSBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIHZhbHVlcyB0aGVtc2VsdmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAsIHNvIG5vIGluZm9ybWF0aW9uIGxlYWsuXG5cblRoZXJlZm9yZSwgKm5vbmUqIG9mIHRoZSBjaGFuZ2VzIGFyZSBhZGRyZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIGNhbiBkZXRlY3QuIEtNU0FOJ3MgcHVycG9zZSB3b3VsZCBub3QgYmUgc2VydmVkIGhlcmUuXG5cblRoZSBgbWVtc2V0YCBpbiBgc2V0dXBfYXBjYjEwYCBkb2VzIGZpeCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgc3VyZSwgYnV0IGl0J3MgYW4gaXNzdWUgd2l0aCB0aGUgaGFyZHdhcmUgcmVhZGluZyB0aGUgc3RhbGUgYGFwY2IxYCwgbm90IHRoZSBDUFUhIEtNU0FOIGlzIGJsaW5kIHRvIGhhcmR3YXJlIHJlYWRzIHVubGVzcyBleHBsaWNpdCBga21zYW5fY2hlY2tfbWVtb3J5YCBjYWxscyBhcmUgcHJlc2VudCwgd2hpY2ggYXJlIG5vdCBpbiB0aGUgU0lFIGJsb2NrIGFuZCBjcnljYi5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBmb3IgYGttc2FuX2NoZWNrX21lbW9yeWAgaW4gdGhlIHMzOTAgS1ZNIGNvZGUuIEknbGwgc2VhcmNoIGZvciBpdCBhbmQgYGttc2FuX2Agc3BlY2lmaWNhbGx5IGluIHRoZSBgYXJjaC9zMzkwL2t2bS9gIGRpcmVjdG9yeS4gTm8gbWF0Y2hlcy4gU28gS01TQU4gd2lsbCBkZWZpbml0ZWx5IG5vdCBoYXZlIHBpY2tlZCB1cCBvbiB0aGUgcG90ZW50aWFsIGlzc3VlLlxuXG4qKkNvbmNsdXNpb246KiogQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiBUaGlzIHBhdGNoIGRlYWxzIHdpdGg6IDEpIGxvY2tpbmcgaXNzdWVzIChLQVNBTi9MT0NLREVQKSwgMikgc3RhdGUgbWFuYWdlbWVudCAobG9naWMgZXJyb3JzKSwgYW5kIDMpIHVzZXItc3BhY2UgQVBJIGFkZHJlc3NpbmcuIFRoZSBvbmx5IGNvZGUgY2hhbmdlIGFkZHJlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVsYXRlZCB0byBoYXJkd2FyZSByZWFkcyAobm90IENQVSByZWFkcyksIGFuZCB0aGVyZSBhcmUgbm8gS01TQU4gaW5zdHJ1bWVudGF0aW9uIHBvaW50cyBmb3IgdGhlIFNJRSBvciBjcnljYiBhcmVhLiBUaGVyZWZvcmUsIEtNU0FOIGlzIGlycmVsZXZhbnQuIEkgd2lsbCBhbHNvIGNoZWNrIGFnYWluIHRoYXQgYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGlzIGRhdGEgaXMgbm90IHN0YWxlLiBObyBpc3N1ZXMgdGhlcmUgZWl0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDcyOCwiT3V0cHV0VG9rZW5zIjozOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUzOjQ0LjgyMTQxOTk4NloiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzLCBub25lIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtNU0FOOlxcbjEuIGBrdm1fczM5MF9rZXlvcGA6IEZpeGVzIGEgbG9ja2luZyBpc3N1ZSBieSBtb3ZpbmcgdGhlIHJlYWQgb2YgYGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlYCBpbnNpZGUgdGhlIGBtbXVfbG9ja2AgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCByYWNlIG9yIGludmFsaWQgYWNjZXNzLCB3aGljaCBpcyB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAuXFxuMi4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYDogRml4ZXMgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGUoKWAgY2FsbCBvbiBhbiBlcnJvciBwYXRoLiBUaGlzIGlzIGEgc3RhdGUgbWFuYWdlbWVudCBidWcuXFxuMy4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBGaXhlcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgYGNvcHlfdG9fdXNlcmAgc28gdGhhdCBgcmNgIGFuZCBgcnJjYCBhcmUgd3JpdHRlbiB0byB0aGUgY29ycmVjdCBvZmZzZXRzIGluIHRoZSB1c2VyIHNwYWNlIHN0cnVjdHVyZS4gVGhlIGNvcGllZCBkYXRhIGl0c2VsZiAoYGNtZC5yY2AgYW5kIGBjbWQucnJjYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYSBwcmVjZWRpbmcgYGNvcHlfZnJvbV91c2VyYCwgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay5cXG40LiBgc2V0dXBfYXBjYjEwYDogQWRkcyBhIGBtZW1zZXRgIHRvIGZ1bGx5IGluaXRpYWxpemUgdGhlIGBhcGNiMWAgc3RydWN0dXJlIGluIHRoZSBzaGFkb3cgQ1JZQ0IuIFdpdGhvdXQgdGhpcywgZmllbGRzIGxpa2UgYGFwbVsxLi4zXWAgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBhbmQgY29udGFpbiBzdGFsZSBkYXRhIGZyb20gcHJldmlvdXMgdXNlcyBvZiB0aGUgY2FjaGVkIGB2c2llX3BhZ2VgLiBUaGlzIHN0YWxlIGRhdGEgaXMgdGhlbiByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSB3aGVuIGV4ZWN1dGluZyBhIG5lc3RlZCBndWVzdCwgcG90ZW50aWFsbHkgZ3JhbnRpbmcgdW5hdXRob3JpemVkIGNyeXB0byBhY2Nlc3MuIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBoYXJkd2FyZSBhbmQgbm90IGJ5IHRoZSBDUFUsIEtNU0FOIGNhbm5vdCBkZXRlY3QgaXQgKEtNU0FOIG9ubHkgaW5zdHJ1bWVudHMgQ1BVIGluc3RydWN0aW9ucyBhbmQgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGBrbXNhbl9jaGVja19tZW1vcnkoKWAgYW5ub3RhdGlvbnMgZm9yIHRoZSBTSUUgYmxvY2spLlxcblxcblRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMsIG5vbmUgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS01TQU46XFxuMS4gYGt2bV9zMzkwX2tleW9wYDogRml4ZXMgYSBsb2NraW5nIGlzc3VlIGJ5IG1vdmluZyB0aGUgcmVhZCBvZiBga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2VgIGluc2lkZSB0aGUgYG1tdV9sb2NrYCBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugb3IgaW52YWxpZCBhY2Nlc3MsIHdoaWNoIGlzIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUC5cXG4yLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gOiBGaXhlcyBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSgpYCBjYWxsIG9uIGFuIGVycm9yIHBhdGguIFRoaXMgaXMgYSBzdGF0ZSBtYW5hZ2VtZW50IGJ1Zy5cXG4zLiBga3ZtX2FyY2hfdmNwdV9pb2N0bGA6IEZpeGVzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBgY29weV90b191c2VyYCBzbyB0aGF0IGByY2AgYW5kIGBycmNgIGFyZSB3cml0dGVuIHRvIHRoZSBjb3JyZWN0IG9mZnNldHMgaW4gdGhlIHVzZXIgc3BhY2Ugc3RydWN0dXJlLiBUaGUgY29waWVkIGRhdGEgaXRzZWxmIChgY21kLnJjYCBhbmQgYGNtZC5ycmNgKSBpcyBmdWxseSBpbml0aWFsaXplZCBieSBhIHByZWNlZGluZyBgY29weV9mcm9tX3VzZXJgLCBzbyB0aGVyZSBpcyBubyBrZXJuZWwgaW5mby1sZWFrLlxcbjQuIGBzZXR1cF9hcGNiMTBgOiBBZGRzIGEgYG1lbXNldGAgdG8gZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYGFwY2IxYCBzdHJ1Y3R1cmUgaW4gdGhlIHNoYWRvdyBDUllDQi4gV2l0aG91dCB0aGlzLCBmaWVsZHMgbGlrZSBgYXBtWzEuLjNdYCBhcmUgbGVmdCB1bmluaXRpYWxpemVkIGFuZCBjb250YWluIHN0YWxlIGRhdGEgZnJvbSBwcmV2aW91cyB1c2VzIG9mIHRoZSBjYWNoZWQgYHZzaWVfcGFnZWAuIFRoaXMgc3RhbGUgZGF0YSBpcyB0aGVuIHJlYWQgYnkgdGhlIGhhcmR3YXJlIChTSUUpIHdoZW4gZXhlY3V0aW5nIGEgbmVzdGVkIGd1ZXN0LCBwb3RlbnRpYWxseSBncmFudGluZyB1bmF1dGhvcml6ZWQgY3J5cHRvIGFjY2Vzcy4gSG93ZXZlciwgYmVjYXVzZSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgZXhjbHVzaXZlbHkgYnkgdGhlIGhhcmR3YXJlIGFuZCBub3QgYnkgdGhlIENQVSwgS01TQU4gY2Fubm90IGRldGVjdCBpdCAoS01TQU4gb25seSBpbnN0cnVtZW50cyBDUFUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGVyZSBhcmUgbm8gZXhwbGljaXQgYGttc2FuX2NoZWNrX21lbW9yeSgpYCBhbm5vdGF0aW9ucyBmb3IgdGhlIFNJRSBibG9jaykuXFxuXFxuVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzqw4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 15:48:48 +0000 UTC FinishedAt: 2026-08-11 15:53:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "26d1779b-1a36-4ef9-83bb-bc1a1523c35c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vm_ioctl", "kvm_arch_vcpu_ioctl", "kvm_arch_vcpu_ioctl_run", "kvm_s390_handle_vsie" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX3ZzaWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMsIG5vbmUgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS01TQU46XG4xLiBga3ZtX3MzOTBfa2V5b3BgOiBGaXhlcyBhIGxvY2tpbmcgaXNzdWUgYnkgbW92aW5nIHRoZSByZWFkIG9mIGBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2VgIGluc2lkZSB0aGUgYG1tdV9sb2NrYCBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugb3IgaW52YWxpZCBhY2Nlc3MsIHdoaWNoIGlzIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUC5cbjIuIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IEZpeGVzIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKClgIGNhbGwgb24gYW4gZXJyb3IgcGF0aC4gVGhpcyBpcyBhIHN0YXRlIG1hbmFnZW1lbnQgYnVnLlxuMy4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBGaXhlcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgYGNvcHlfdG9fdXNlcmAgc28gdGhhdCBgcmNgIGFuZCBgcnJjYCBhcmUgd3JpdHRlbiB0byB0aGUgY29ycmVjdCBvZmZzZXRzIGluIHRoZSB1c2VyIHNwYWNlIHN0cnVjdHVyZS4gVGhlIGNvcGllZCBkYXRhIGl0c2VsZiAoYGNtZC5yY2AgYW5kIGBjbWQucnJjYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYSBwcmVjZWRpbmcgYGNvcHlfZnJvbV91c2VyYCwgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay5cbjQuIGBzZXR1cF9hcGNiMTBgOiBBZGRzIGEgYG1lbXNldGAgdG8gZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYGFwY2IxYCBzdHJ1Y3R1cmUgaW4gdGhlIHNoYWRvdyBDUllDQi4gV2l0aG91dCB0aGlzLCBmaWVsZHMgbGlrZSBgYXBtWzEuLjNdYCBhcmUgbGVmdCB1bmluaXRpYWxpemVkIGFuZCBjb250YWluIHN0YWxlIGRhdGEgZnJvbSBwcmV2aW91cyB1c2VzIG9mIHRoZSBjYWNoZWQgYHZzaWVfcGFnZWAuIFRoaXMgc3RhbGUgZGF0YSBpcyB0aGVuIHJlYWQgYnkgdGhlIGhhcmR3YXJlIChTSUUpIHdoZW4gZXhlY3V0aW5nIGEgbmVzdGVkIGd1ZXN0LCBwb3RlbnRpYWxseSBncmFudGluZyB1bmF1dGhvcml6ZWQgY3J5cHRvIGFjY2Vzcy4gSG93ZXZlciwgYmVjYXVzZSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgZXhjbHVzaXZlbHkgYnkgdGhlIGhhcmR3YXJlIGFuZCBub3QgYnkgdGhlIENQVSwgS01TQU4gY2Fubm90IGRldGVjdCBpdCAoS01TQU4gb25seSBpbnN0cnVtZW50cyBDUFUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGVyZSBhcmUgbm8gZXhwbGljaXQgYGttc2FuX2NoZWNrX21lbW9yeSgpYCBhbm5vdGF0aW9ucyBmb3IgdGhlIFNJRSBibG9jaykuXG5cblRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTAzN2EzYTUyZjc0OWE1ZDRkZThiOTkzZTJiZGMwYmExNThjZjU1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE1OjUwOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggNTE4YTY5YzU1ZTg1Yy4uN2RmZDBhZDM2NzM2OCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNTYyLDExICYjNDM7NTYyLDEyIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX3MzOTBfZXhpdCh2b2lkKVxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXG4ge1xuLVx0dW5pb24gYXNjZSBhc2NlID0ga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlO1xuIFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihhZGRyKTtcbiYjNDM7XHR1bmlvbiBhc2NlIGFzY2U7XG4gXHRpbnQgcjtcbiBcbiBcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRhc2NlID0ga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlO1xuIFxuIFx0c3dpdGNoIChvcCkge1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxuQEAgLTUwNjksNyAmIzQzOzUwNzAsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7Y2FuJiMzOTt0IHJ1biBzdG9wcGVkIHZjcHUgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHQgICB2Y3B1LVx1MDAzZXZjcHVfaWQpO1xuIFx0XHRyYyA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBvdXRfc2lnc2V0O1xuIFx0fVxuIFxuIFx0a2VybmVsX2ZwdV9iZWdpbihcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcbkBAIC01MDk5LDkgJiM0Mzs1MTAwLDExIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdG9yZV9yZWdzKHZjcHUpO1xuIFx0a2VybmVsX2ZwdV9lbmQoXHUwMDI2ZnB1LCBLRVJORUxfRlBDIHwgS0VSTkVMX1ZYUik7XG4gXG4mIzQzO1x0dmNwdS1cdTAwM2VzdGF0LmV4aXRfdXNlcnNwYWNlJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO291dF9zaWdzZXQ6XG4gXHRrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSk7XG4gXG4tXHR2Y3B1LVx1MDAzZXN0YXQuZXhpdF91c2Vyc3BhY2UmIzQzOyYjNDM7O1xuIG91dDpcbiBcdHZjcHVfcHV0KHZjcHUpO1xuIFx0cmV0dXJuIHJjO1xuQEAgLTU3MzIsNyAmIzQzOzU3MzUsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFx1MDAyNmNtZCk7XG4gXG4gXHRcdC8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqL1xuLVx0XHRpZiAoY29weV90b191c2VyKChfX3U4IF9fdXNlciAqKWFyZ3AsIFx1MDAyNmNtZC5yYyxcbiYjNDM7XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCAmIzQzOyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3B2X2NtZCwgcmMpLCBcdTAwMjZjbWQucmMsXG4gXHRcdFx0XHQgc2l6ZW9mKGNtZC5yYykgJiM0Mzsgc2l6ZW9mKGNtZC5ycmMpKSlcbiBcdFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuaW5kZXggZWVhMjQ1NjJlN2RiMi4uMGE3ZDhkZmFiNmI3OSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgc3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcbiBcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiYjNDM7XHRtZW1zZXQoYXBjYl9zLCAwLCBzaXplb2YoKmFwY2JfcykpO1xuIFx0YXBjYl9zLVx1MDAzZWFwbVswXSA9IGFwY2JfaC1cdTAwM2VhcG1bMF0gXHUwMDI2IHRtcC5hcG1bMF07XG4gXHRhcGNiX3MtXHUwMDNlYXFtWzBdID0gYXBjYl9oLVx1MDAzZWFxbVswXSBcdTAwMjYgdG1wLmFxbVswXSBcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XG4gXHRhcGNiX3MtXHUwMDNlYWRtWzBdID0gYXBjYl9oLVx1MDAzZWFkbVswXSBcdTAwMjYgdG1wLmFkbVswXSBcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZtX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX3ZzaWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTAzN2EzYTUyZjc0OWE1ZDRkZThiOTkzZTJiZGMwYmExNThjZjU1NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE1OjUwOjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDUxOGE2OWM1NWU4NWMuLjdkZmQwYWQzNjczNjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTU2MiwxMSAmIzQzOzU2MiwxMiBAQCBzdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZCkKIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLAogCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSkKIHsKLQl1bmlvbiBhc2NlIGFzY2UgPSBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZTsKIAlnZm5fdCBnZm4gPSBncGFfdG9fZ2ZuKGFkZHIpOwomIzQzOwl1bmlvbiBhc2NlIGFzY2U7CiAJaW50IHI7CiAKIAlndWFyZChyZWFkX2xvY2spKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CWFzY2UgPSBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZTsKIAogCXN3aXRjaCAob3ApIHsKIAljYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6CkBAIC01MDY5LDcgJiM0Mzs1MDcwLDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcHJfZXJyX3JhdGVsaW1pdGVkKCYjMzQ7Y2FuJiMzOTt0IHJ1biBzdG9wcGVkIHZjcHUgJWRcbiYjMzQ7LAogCQkJCSAgIHZjcHUtJmd0O3ZjcHVfaWQpOwogCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfc2lnc2V0OwogCX0KIAogCWtlcm5lbF9mcHVfYmVnaW4oJmFtcDtmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTsKQEAgLTUwOTksOSAmIzQzOzUxMDAsMTEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdG9yZV9yZWdzKHZjcHUpOwogCWtlcm5lbF9mcHVfZW5kKCZhbXA7ZnB1LCBLRVJORUxfRlBDIHwgS0VSTkVMX1ZYUik7CiAKJiM0MzsJdmNwdS0mZ3Q7c3RhdC5leGl0X3VzZXJzcGFjZSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7b3V0X3NpZ3NldDoKIAlrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSk7CiAKLQl2Y3B1LSZndDtzdGF0LmV4aXRfdXNlcnNwYWNlJiM0MzsmIzQzOzsKIG91dDoKIAl2Y3B1X3B1dCh2Y3B1KTsKIAlyZXR1cm4gcmM7CkBAIC01NzMyLDcgJiM0Mzs1NzM1LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQlyID0ga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcCh2Y3B1LCAmYW1wO2NtZCk7CiAKIAkJLyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovCi0JCWlmIChjb3B5X3RvX3VzZXIoKF9fdTggX191c2VyICopYXJncCwgJmFtcDtjbWQucmMsCiYjNDM7CQlpZiAoY29weV90b191c2VyKGFyZ3AgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgJmFtcDtjbWQucmMsCiAJCQkJIHNpemVvZihjbWQucmMpICYjNDM7IHNpemVvZihjbWQucnJjKSkpCiAJCQlyID0gLUVGQVVMVDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jCmluZGV4IGVlYTI0NTYyZTdkYjIuLjBhN2Q4ZGZhYjZiNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jCkBAIC0xNzMsNiAmIzQzOzE3Myw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAomIzQzOwltZW1zZXQoYXBjYl9zLCAwLCBzaXplb2YoKmFwY2JfcykpOwogCWFwY2Jfcy0mZ3Q7YXBtWzBdID0gYXBjYl9oLSZndDthcG1bMF0gJmFtcDsgdG1wLmFwbVswXTsKIAlhcGNiX3MtJmd0O2FxbVswXSA9IGFwY2JfaC0mZ3Q7YXFtWzBdICZhbXA7IHRtcC5hcW1bMF0gJmFtcDsgMHhmZmZmMDAwMDAwMDAwMDAwVUw7CiAJYXBjYl9zLSZndDthZG1bMF0gPSBhcGNiX2gtJmd0O2FkbVswXSAmYW1wOyB0bXAuYWRtWzBdICZhbXA7IDB4ZmZmZjAwMDAwMDAwMDAwMFVMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBzMzkwIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBzb21lIGNvZGUgaW4gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgYW5kIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AuICBUaGlzIGlzIGRlZmluaXRlbHkgczM5MCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIHRoYXQmIzM5O3MgSUJNIFogaGFyZHdhcmUuICBUaGUgY2hhbmdlcyB0aGVtc2VsdmVzIGxvb2sgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogcmVwb3NpdGlvbmluZyBhIGxvY2sgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBjb3VwbGUgb2YgYGdvdG9gIGZpeGVzIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGEgcG90ZW50aWFsIG9mZnNldCBjb3JyZWN0aW9uIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGEgYG1lbXNldGAgaW4gYHNldHVwX2FwY2IxMGAuIFNlZW1zIGZ1bmN0aW9uYWwsIGxpa2VseSBmb3Igc3RhYmlsaXR5IG9yIGNvcnJlY3RuZXNzLgoKVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGZ1enppbmc/ICBOb3JtYWxseSwgczM5MCBpc24mIzM5O3QgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBnZW5lcmFsLXB1cnBvc2UgeDg2XzY0IFFFTVUgZnV6emluZyBzZXR1cHMuIEl0JiMzOTtzIHVzdWFsbHkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIGRlZGljYXRlZCBlbnZpcm9ubWVudCBpZiB5b3UgKmFyZSogZnV6emluZyBpdC4gSG93ZXZlciwgSSBrbm93IHN5emthbGxlciAqZG9lcyogc3VwcG9ydCBzMzkweCwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4KCkhvbGQgb24sIHRoZSBwcm9tcHQgbWVudGlvbnMgc3BlY2lmaWNhbGx5IGF2b2lkaW5nIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIEJ1dCB3YWl0LCBzMzkweCAqaXMqIGFuIGFyY2hpdGVjdHVyZSwgYW5kIHNpbmNlIHN5emthbGxlciAqc3VwcG9ydHMqIHMzOTB4LCBpZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBzMzkweCBRRU1VLCB0aGUgZnV6emluZyBpcyBwb3NzaWJsZS4gU28sIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBkb2VzIHN5emthbGxlciBmdXp6IHMzOTB4IEtWTT8gIFllcywgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHMzOTB4IHN1cHBvcnQuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBLVk0sIGl0JiMzOTtzIHZlcnkgcHJvYmFibGUuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIEtWTSBpcyBlbmFibGVkIGZvciBzMzkwLiAgSSBrbm93IGBDT05GSUdfS1ZNYCBpcyB0aGUgZ2VuZXJhbCBLVk0gY29uZmlndXJhdGlvbiBvcHRpb24uICBJJiMzOTtsbCBsb29rIGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuIFRoaXMgc2hvdWxkIGdpdmUgYSBjbGVhciBhbnN3ZXIgb24gd2hldGhlciBLVk0gaXMgZXZlbiAqZW5hYmxlZCogb24gczM5MC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBLVk3igKYgdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBwb2ludCwgSSBrbm93IHRoYXQuIEJ1dCBob2xkIG9uLCB0aGUgY29uY2VwdCBvZiAqdmlydHVhbGl6YXRpb24qIGl0c2VsZuKApiBpc24mIzM5O3QgdGhlcmUgc29tZXRoaW5nIGVsc2UgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IEl0IGZlZWxzIGxpa2UgdGhlcmUmIzM5O3MgYSBicm9hZGVyIGNhdGVnb3J5IHRoYXQgdGllcyBpbnRvIHRoaXMsIG9yIG1heWJlIHRoZXJlJiMzOTtzIGEgZmVhdHVyZSBmbGFnIHRoYXQgbWlnaHQgYmUgbmFtZWQgYFZJUlRVQUxJWkFUSU9OYD8gVGltZSB0byBkcmlsbCBkb3duLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgSSBzZWVtIHRvIHJlbWVtYmVyIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGJlaW5nIHRoZSBsaWtlbHkgc3BvdCB0byBmaW5kIGEgZGVwZW5kZW5jeSBvciBjb25maWcgb3B0aW9uIHRoYXQgdXNlcyBgVklSVFVBTElaQVRJT05gLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgZmlsZSBzaGVkcyBzb21lIGxpZ2h0IG9uIHRoZSByZWxhdGlvbnNoaXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVklSVFVBTElaQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5NgoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgS1ZNYCB3aWxsIGJlIHN1ZmZpY2llbnQgZm9yIG15IGN1cnJlbnQgbmVlZHMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXMgY2hhbmdlZCwgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIGltcGFjdCB0aGUgc3lzdGVtLgoKRmlyc3QsIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBJJiMzOTt2ZSBnb3QgYGt2bV9zMzkwX2tleW9wYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBhbmQgYHNldHVwX2FwY2IxMGAgdG8gaW52ZXN0aWdhdGUuCgpOb3csIGEgcXVpY2sgY2hlY2sgb24gYGt2bV9zMzkwX2tleW9wYCBpcyBpbiBvcmRlci4gSXMgaXQgc3RhdGljPyBZZXMsIGl0IGlzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIGhhdmUgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gZGV0ZXJtaW5lIGl0cyB1c2FnZSBjb250ZXh0IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2tleW9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NTA9c3RhdGljIHZvaWQgX19rdm1fczM5MF9leGl0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NjI6c3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5Mjc9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDYyLVx0XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDYzOlx0XHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNjQtXHRcdHVuaW9uIHNrZXkgc2tleTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3NS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc2Olx0XHRyID0ga3ZtX3MzOTBfa2V5b3AobWMsIGt2bSwga29wLm9wZXJhdGlvbiwga29wLmd1ZXN0X2FkZHIsIHNrZXkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzctXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBLVk0gQXJjaGl0ZWN0dXJlIGZvciBQb3RlbnRpYWwgT3B0aW1pemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBLVk0gY29kZSBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgc3RhcnRpbmcgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIFZNLWxldmVsIElPQ1RMcyBvbiB0aGlzIGFyY2hpdGVjdHVyZS4gR29vZC4gTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBgcnVuYCBpb2N0bCBwYXRoLiBJIHNlZSB0aGF0IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXNuJiMzOTt0IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEkgYWx3YXlzIHN0YXJ0IGxvb2tpbmcgYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXMgdGhvc2UgYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGVudHJ5cG9pbnRzIHRvIGEgcGFydGljdWxhciBjYWxsIGZsb3cuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBpbmRpY2F0ZXMgYW55dGhpbmcsIHBlcmhhcHMgaW5kaWNhdGluZyBhIG1vcmUgZmxleGlibGUgaW50ZXJhY3Rpb24uCgpBbmQgc2ltaWxhcmx5LCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXNuJiMzOTt0IHN0YXRpYyBlaXRoZXIuIEludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IGltcG9ydGFudCBlbnRyeSBwb2ludHMgZm9yIHZDUFUtc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgdGhleSYjMzk7cmUgdXNlZC4KCk5vdywgdGhvdWdoLCBJIGRvIHNlZSBgc2V0dXBfYXBjYjEwYC4gQW5kIHRoYXQgKmlzKiBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBhIG1vcmUgbG9jYWwgc2NvcGUuIFNvLCBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSAqaXQqIGlzIGNhbGxlZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgd2l0aCBoZWxwZXIgZnVuY3Rpb25zLiBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIHNlZSB3aGVyZSB0aGF0IGxlYWRzLiBHb3R0YSBzZWUgaWYgaXTigJlzIGEgaGVscGVyIGZvciBzb21lIGNyaXRpY2FsIHBhdGggb3IgaWYgaXQmIzM5O3MgaW52b2x2ZWQgaW4gc29tZXRoaW5nIGxlc3Mgc2lnbmlmaWNhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldHVwX2FwY2IxMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2NS1cdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX2gpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MjUyPXN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY4LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjk6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcwLVx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4Ni1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjExMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIENhbGwgU3RhY2sqKgoKT2theSwgc28gYHNldHVwX2FwY2JgIGlzLCBlc3NlbnRpYWxseSwgYSBkZWVwbHkgbmVzdGVkIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IGBzZXR1cF9hcGNiYCBpdHNlbGYsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBzZXR1cF9jcnljYmAsIGFuZCB0aGF0IHVsdGltYXRlbHkgZ2V0cyBpbml0aWF0ZWQgZWl0aGVyIGZyb20gYHZzaWVfcnVuYCBvciBzb21ldGhpbmcgc3RydWN0dXJhbGx5IHNpbWlsYXIgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGlzIGNhbGwgY2hhaW4gYW5kIG1hcCBob3cgdGhpcyBuZXN0ZWQgY2FsbCBnZXRzIGludm9rZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgYW5kIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24sIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgdGltaW5nIGRlcGVuZGVuY2llcyBvciByZXNvdXJjZSBhbGxvY2F0aW9uIGlzc3VlcyB0aGF0IGNvbWUgaW50byBwbGF5LiBJdCB3b3VsZCBiZSB2YWx1YWJsZSB0byB1bmRlcnN0YW5kLCBhdCB0aGlzIHBvaW50LCBob3cgZmFyIGludG8gdGhlIGNhbGwgY2hhaW4gd2UgbmVlZCB0byBnZXQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9hcGNiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmM9MTI1PXN0YXRpYyBpbnQgcHJlcGFyZV9jcHVmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMtLyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2NDpzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY1LVx0XHRcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODUtLyoqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxODY6ICogc2V0dXBfYXBjYjAwIC0gQ29weSB0byBBUENCIEZPUk1BVDAgZnJvbSBBUENCIEZPUk1BVDBcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE4Ny0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTMtICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxOTQ6c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTUtXHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHVuc2lnbmVkIGxvbmcgKmFwY2JfaClcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTEtLyoqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMTI6ICogc2V0dXBfYXBjYjExIC0gQ29weSB0aGUgRk9STUFUMSBBUENCIGZyb20gdGhlIGd1ZXN0IHRvIHRoZSBzaGFkb3cgQ1JZQ0JcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMy0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTktICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjA6c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjEtXHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM4LS8qKlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjM5OiAqIHNldHVwX2FwY2IgLSBDcmVhdGUgYSBzaGFkb3cgY29weSBvZiB0aGUgYXBjYi5cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI0MC0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNTEtICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTI6c3RhdGljIGludCBzZXR1cF9hcGNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1My1cdCAgICAgICBjb25zdCB1MzIgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2Mi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI2MzpcdFx0cmV0dXJuIHNldHVwX2FwY2IxMSh2Y3B1LCAodW5zaWduZWQgbG9uZyAqKVx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjQtXHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzItXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MzpcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzQtXHRcdFx0XHRcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IwLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4Ni1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODktXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMDpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MDpcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yOTEtXHRcdFx0XHRcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IwLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTMxOT1zdGF0aWMgaW50IHNoYWRvd19jcnljYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXHRpZiAoYXBpZV9zKSB7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNTE6XHRcdHJldCA9IHNldHVwX2FwY2IodmNwdSwgXHUwMDI2dnNpZV9wYWdlLVx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzUyLVx0XHRcdFx0IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODA4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRW50cnlwb2ludHMqKgoKT2theSwgc28gYHNoYWRvd19jcnljYmAgaXMgY2FsbGVkIGZyb20gYHZzaWVfcnVuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbi4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN0YW5kYXJkIEtWTSBlbnRyeSBwb2ludHM6IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGBrdm1fYXJjaF92bV9pb2N0bGAuIFllcCwgdGhvc2UgYXJlIGRlZmluaXRlbHkgQVBJIGVudHJ5cG9pbnRzLCBubyBxdWVzdGlvbi4KCkJ1dCB3YWl0IGEgbWludXRlLCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzIGEgKnZlcnkqIGhvdCBwYXRoIGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgcnVubmluZyB0aGUgVkNQVS4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgdG9sZCBtZSB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdGluZyBkaXN0cmlidXRpb24gZnJvbSBza2V3aW5nLiBTbyBldmVuIHRob3VnaCBpdCYjMzk7cyBhbiBBUEkgZW50cnlwb2ludCBhbmQgdGhlIG1haW4gb25lIGF0IHRoYXQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgaXNzdWU/CgpMZXQgbWUgc2VlLi4uIGZvciB0aGUgYGt2bV9zMzkwX2tleW9wYCBvcGVyYXRpb24sIGl0IHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBga3ZtX2FyY2hfdm1faW9jdGxgLCB1bmRlciB0aGUgYEtWTV9TMzkwX1pQQ0lfT1BgIGNvbnRyb2wgcGF0aC4gT2theSwgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIHJlLWV4YW1pbmUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbmQgbG9vayBmb3Igb3BlcmF0aW9ucyB1bmRlciBga29wLm9wZXJhdGlvbmAgd2l0aGluIGl0LiBUaGF0IHNlZW1zIGxpa2UgYSBtdWNoIGJldHRlciBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a29wXFwub3BlcmF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3NS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc2Olx0XHRyID0ga3ZtX3MzOTBfa2V5b3AobWMsIGt2bSwga29wLm9wZXJhdGlvbiwga29wLmd1ZXN0X2FkZHIsIHNrZXkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzctXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1OAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdWJqZWN0OgoKKipBbmFseXppbmcgdGhlIEtWTSBBcmNoaXRlY3R1cmUgLSBTcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZtX2lvY3RsYCoqCgpPa2F5LCBzbyB0aGUgZGlyZWN0aW9uIGlzIGNsZWFyOiBXZSYjMzk7cmUgZGl2aW5nIGludG8gYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzMDYwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBvaW50LiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3Mgb2YgVmlydHVhbCBNYWNoaW5lIElPIENvbnRyb2xzIHdpdGhpbiBLVk0uIExpbmUgMzA2MC4uLiB3ZWxsLCB0aGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiBzb21lIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBhIHNpZ25pZmljYW50IGJyYW5jaCBpbiBpdHMgZXhlY3V0aW9uIGlzIGxvY2F0ZWQuIFdlIG5lZWQgdG8gZm9jdXMgb24gd2hhdCBoYXBwZW5zIHRoZXJlLiBJcyBpdCBlcnJvciBoYW5kbGluZywgZGlzcGF0Y2hpbmcgdG8gb3RoZXIgYXJjaC1zcGVjaWZpYyBmdW5jdGlvbnMsIG9yIHBlcmhhcHMgYSBzZWN1cml0eSBjaGVjaz8gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgdGhlcmUgaXMgdGhlIGtleS4gR2l2ZW4gdGhlIGV4cGVydGlzZSBoZXJlLCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzOyBpdCB3b24mIzM5O3QgYmUgZW5vdWdoIHRvIGtub3cgKndoYXQqIHRoZSBjb2RlIGRvZXMsIGJ1dCBhbHNvICp3aHkqIGl0JiMzOTtzIGltcGxlbWVudGVkIHRoaXMgd2F5LiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLiBJIGV4cGVjdCBhIHdlbGwtY3JhZnRlZCBzdHJ1Y3R1cmUsIGFuZCBJJiMzOTttIHJlYWR5IHRvIHBhcnNlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzA1MDpcdFx0XHRicmVhaztcbjMwNTE6XHRcdH1cbjMwNTI6XHRcdGNhc2UgS1ZNX1MzOTBfTUVNX09QOiB7XG4zMDUzOlx0XHRcdHN0cnVjdCBrdm1fczM5MF9tZW1fb3AgbWVtX29wO1xuMzA1NDpcdFxuMzA1NTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2bWVtX29wLCBhcmdwLCBzaXplb2YobWVtX29wKSkgPT0gMClcbjMwNTY6XHRcdFx0XHRyID0ga3ZtX3MzOTBfdm1fbWVtX29wKGt2bSwgXHUwMDI2bWVtX29wKTtcbjMwNTc6XHRcdFx0ZWxzZVxuMzA1ODpcdFx0XHRcdHIgPSAtRUZBVUxUO1xuMzA1OTpcdFx0XHRicmVhaztcbjMwNjA6XHRcdH1cbjMwNjE6XHRcdGNhc2UgS1ZNX1MzOTBfS0VZT1A6IHtcbjMwNjI6XHRcdFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XG4zMDYzOlx0XHRcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XG4zMDY0Olx0XHRcdHVuaW9uIHNrZXkgc2tleTtcbjMwNjU6XHRcbjMwNjY6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmtvcCwgYXJncCwgc2l6ZW9mKGtvcCkpKSB7XG4zMDY3Olx0XHRcdFx0ciA9IC1FRkFVTFQ7XG4zMDY4Olx0XHRcdFx0YnJlYWs7XG4zMDY5Olx0XHRcdH1cbjMwNzA6XHRcdFx0c2tleS5za2V5ID0ga29wLmtleTtcbjMwNzE6XHRcbjMwNzI6XHRcdFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4zMDczOlx0XHRcdGlmICghbWMpXG4zMDc0Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMDc1Olx0XG4zMDc2Olx0XHRcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XG4zMDc3Olx0XHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbjMwNzg6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG4zMDc5Olx0XHRcdFx0YnJlYWs7XG4zMDgwOlx0XG4zMDgxOlx0XHRcdGtvcC5rZXkgPSByO1xuMzA4MjpcdFx0XHRyID0gMDtcbjMwODM6XHRcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZrb3AsIHNpemVvZihrb3ApKSlcbjMwODQ6XHRcdFx0XHRyID0gLUVGQVVMVDtcbjMwODU6XHRcdFx0YnJlYWs7XG4zMDg2Olx0XHR9XG4zMDg3Olx0XHRjYXNlIEtWTV9TMzkwX1pQQ0lfT1A6IHtcbjMwODg6XHRcdFx0c3RydWN0IGt2bV9zMzkwX3pwY2lfb3AgYXJncztcbjMwODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBLVk0vczM5MCBDb2RlYmFzZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBLVk0vczM5MCBjb2RlLCBhbmQgSSBuZWVkIHRvIGNsYXJpZnkgc29tZSBjcnVjaWFsIGlvY3RsIGVudHJ5IHBvaW50cy4gRnJvbSB3aGF0IEkmIzM5O3ZlIGdhdGhlcmVkLCB0aGUgYEtWTV9TMzkwX0tFWU9QYCBpb2N0bCBzZWVtcyB0byBiZSB0aGUga2V5IHRvIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBUaGUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIHNlY3Rpb24sIHdoaWNoIGlzIGdvb2QgdG8gY29uZmlybS4KCk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gVkNQVS1yZWxhdGVkIGlvY3RscywgSSBzZWUgYSBwYXR0ZXJuLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGNvcnJlc3BvbmRzIHRvIGBLVk1fUlVOYCwgdGhhdCBtdWNoIG1ha2VzIHNlbnNlLiBIb3dldmVyLCBJIHdhbnQgdG8gY2xhcmlmeSB0aGUgb3RoZXIgVkNQVSBjb250cm9sIGNvbW1hbmQuIFRoZSBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgZnVuY3Rpb24gaXMgYXNzb2NpYXRlZCB3aXRoIGBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFVgLgoKT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBWQ1BVIGNvbW1hbmRzLiBMZXQgbWUgemVybyBpbiBvbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NzMwIGluIHRoZSBzb3VyY2UuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTcyMDpcdFx0XHRpZiAoIWlzX3Byb3RfdmlydF9ob3N0KCkpXG41NzIxOlx0XHRcdFx0YnJlYWs7XG41NzIyOlx0XG41NzIzOlx0XHRcdHIgPSAtRUZBVUxUO1xuNTcyNDpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y21kLCBhcmdwLCBzaXplb2YoY21kKSkpXG41NzI1Olx0XHRcdFx0YnJlYWs7XG41NzI2Olx0XG41NzI3Olx0XHRcdHIgPSAtRUlOVkFMO1xuNTcyODpcdFx0XHRpZiAoY21kLmZsYWdzKVxuNTcyOTpcdFx0XHRcdGJyZWFrO1xuNTczMDpcdFxuNTczMTpcdFx0XHQvKiBXZSBvbmx5IGhhbmRsZSB0aGlzIGNtZCByaWdodCBub3cgKi9cbjU3MzI6XHRcdFx0aWYgKGNtZC5jbWQgIT0gS1ZNX1BWX0RVTVApXG41NzMzOlx0XHRcdFx0YnJlYWs7XG41NzM0Olx0XG41NzM1Olx0XHRcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFx1MDAyNmNtZCk7XG41NzM2Olx0XG41NzM3Olx0XHRcdC8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqL1xuNTczODpcdFx0XHRpZiAoY29weV90b191c2VyKGFyZ3AgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXHUwMDI2Y21kLnJjLFxuNTczOTpcdFx0XHRcdFx0IHNpemVvZihjbWQucmMpICYjNDM7IHNpemVvZihjbWQucnJjKSkpXG41NzQwOlx0XHRcdFx0ciA9IC1FRkFVTFQ7XG41NzQxOlx0XHRcdGJyZWFrO1xuNTc0MjpcdFx0fVxuNTc0MzpcdFx0ZGVmYXVsdDpcbjU3NDQ6XHRcdFx0ciA9IC1FTk9UVFk7XG41NzQ1Olx0XHR9XG41NzQ2Olx0XG41NzQ3Olx0XHR2Y3B1X3B1dCh2Y3B1KTtcbjU3NDg6XHRcdHJldHVybiByO1xuNTc0OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX1MzOTBfUFZfQ09NTUFORF9WQ1BVIFBhdGgqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFVgIGlzIHByb2Nlc3NlZC4gRnJvbSB3aGF0IEkgc2VlLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXMgdGhlIGhhbmRsZXIsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgcmVhY2ggdGhlIGNvZGUgZm9yIHRoaW5ncyBsaWtlIGBzZXR1cF9hcGNiMTBgLiBJIHNlZSBhIGNvbm5lY3Rpb24g4oCTIGl0IGxvb2tzIGxpa2UgYHNldHVwX2FwY2IxMGAgaXMgdHJpZ2dlcmVkIGZyb20gYHNoYWRvd19jcnljYmAuIE5vdywgdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlIGBzaGFkb3dfY3J5Y2JgIGlzIGNhbGxlZCBmcm9tIGB2c2llX3J1bmAuIE9rYXksIGB2c2llX3J1bmAgaXMgdGhlIG5leHQgZnVuY3Rpb24gSSByZWFsbHkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24uIExldCYjMzk7cyBzZWUgaG93IHRoYXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZzaWVfcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmM9MTEwOD1zdGF0aWMgaW50IHZzaWVfaGFuZGxlX212cGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg3LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTE4ODpzdGF0aWMgaW50IGRvX3ZzaWVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg5LVx0X19yZWxlYXNlcyh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEzODM9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9zaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzk2LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTM5NzpzdGF0aWMgaW50IHZzaWVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM5OC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQxMi1cdFx0XHR1cGRhdGVfaW50ZXJ2ZW50aW9uX3JlcXVlc3RzKHZzaWVfcGFnZSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDEzOlx0XHRcdHJjID0gZG9fdnNpZV9ydW4odmNwdSwgdnNpZV9wYWdlLCBzZyk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDE0LVx0XHR9XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTU1Nz1pbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1OTktXHRyZWdpc3Rlcl9zaGFkb3dfc2NiKHZjcHUsIHZzaWVfcGFnZSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjAwOlx0cmMgPSB2c2llX3J1bih2Y3B1LCB2c2llX3BhZ2UpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYwMS1cdHVucmVnaXN0ZXJfc2hhZG93X3NjYih2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBWU0lFIEhhbmRsZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgLiBUaGlzIGlzIHRoZSBjb3JlIG9mIGhvdyB3ZSBoYW5kbGUgVmlydHVhbCBTSUUsIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzIG9uIHMzOTAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZXhwb3NlZCBhcyBhIHB1YmxpYyBBUEk/JiMzNDsgTm8sIGl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uIEkmIzM5O2QgZGlyZWN0bHkgY2FsbCwgaXQmIzM5O3MgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlci4gSXQgc2l0cyBsb3dlciBkb3duLCByZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpYyBWU0lFIGluc3RydWN0aW9uIHdpdGhpbiB0aGUgZ3Vlc3QgY29udGV4dC4KCk9rYXksIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBOb3cgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXMgYWN0dWFsbHkgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIFZTSUUgaGFuZGxlciBnZXRzIHRyaWdnZXJlZC4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBWU0lFIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBLVk0vczM5MCBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2hhbmRsZV92c2llJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTQ0Mj1pbnQga3ZtX3MzOTBfc2tleV9jaGVja19lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDQ0LS8qIGltcGxlbWVudGVkIGluIHZzaWUuYyAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjQ0NTppbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00NDYtdm9pZCBrdm1fczM5MF92c2llX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz05NTk9aW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTcyLVx0Y2FzZSAweDE0OlxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTczOlx0XHRyZXR1cm4ga3ZtX3MzOTBfaGFuZGxlX3ZzaWUodmNwdSk7XG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzQtXHRjYXNlIDB4MjE6XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTQ4ND1zdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTU2LVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTU1NzppbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU1OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNL3MzOTB4IENvZGUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEtWTS9zMzkweCBjb2RlIGFuZCB0cnlpbmcgdG8gbmFycm93IGRvd24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIHRyYWNlIHN0YXJ0cyBpbiBga3ZtX3MzOTBfaGFuZGxlX2IyYCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHRoZSBgYjJgIG9wY29kZSwgYW5kIGJ5IGV4dGVuc2lvbiB0aGUgYFNJRWAgaW5zdHJ1Y3Rpb24uIFRoYXQgcG9pbnRzIG1lIHRvIGBrdm1fczM5MF9oYW5kbGVfYjJgIG9yIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgYXMgbGlrZWx5IGNhbmRpZGF0ZXMgdG8gZm9jdXMgb24gaW5pdGlhbGx5LiBJIGNoZWNrZWQgaWYgZWl0aGVyIG9mIHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBidXQgbm8gZGljZS4KCk1vdmluZyBvdXR3YXJkLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbS4gSSYjMzk7bSBzZWVpbmcgYGt2bV9hcmNoX3ZtX2lvY3RsYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBhbmQgYGt2bV9zMzkwX2hhbmRsZV92c2llYCBhcyBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBIb3dldmVyLCBga3ZtX2FyY2hfdm1faW9jdGxgIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgYXJlIHZlcnkgZ2VuZXJpYyBhbmQgbGlrZWx5IGhlYXZpbHkgdXNlZCB3aXRoaW4gS1ZNLCBzbyBJIHdhbnQgdG8gYmUgbW9yZSBzcGVjaWZpYyBpZiBwb3NzaWJsZS4KCkxvb2tpbmcgZGVlcGVyIGludG8gdGhlIGlvY3RsIGhhbmRsaW5nLCBga3ZtX2FyY2hfdm1faW9jdGxgIGRlYWxzIHdpdGggYEtWTV9TMzkwX0tFWU9QYCwgYW5kIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBoYW5kbGVzIGBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFVgLiBJIGNvbnNpZGVyZWQgYGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXBgIGJ1dCBpdCBzZWVtcyB0aGUgaXNzdWUgaXMgYWN0dWFsbHkgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBpdHNlbGYsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBvbmUgaW4gbXkgc2lnaHRzLiBMaWtld2lzZSwgd2hpbGUgYGt2bV9zMzkwX2tleW9wYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92bV9pb2N0bGAgaXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBpc3N1ZSB0aGVyZSB0b28sIHNvIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24uIEFuZCBgc2V0dXBfYXBjYjEwYCBpcyBhbHNvIG9mIGludGVyZXN0LCBhcyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCBpcyBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuIEkgc2hvdWxkIHJldmlzaXQgdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgQ09ORklHcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyB0aGUgczM5MHggS1ZNIE1vZHVsZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBUaGUgaW5pdGlhbCBxdWVzdGlvbiB3YXMgYWJvdXQgYEtWTV9TMzkwX1VDT05UUk9MYC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgYXNzdW1lZCwgbm8sIHRob3NlIGNoYW5nZXMgd2VyZSBpbnRlZ3JhdGVkIGludG8gdGhlIGNvcmUgS1ZNLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlLiBJJiMzOTttIHJlY2FsbGluZyBub3cgdGhhdCBga3ZtX3MzOTBfa2V5b3BgIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIGBrdm0tczM5MC5jYC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBkZXBlbmRlbmN5IGlzIHRoZXJlIG9yIG5vdC4gRnVydGhlciwgSSBzZWUgYHNldHVwX2FwY2IxMGAgaXMgZGVmaW5lZCBpbiBgdnNpZS5jYC4gVGhhdCBtYWtlcyB0aGlzIG11Y2ggbW9yZSBpbnRlcmVzdGluZy4gQmVmb3JlIEkgbWFrZSBhbnkgZGVmaW5pdGl2ZSBjb25jbHVzaW9ucywgSSByZWFsbHkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGB2c2llLmNgIGl0c2VsZiBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBUaGF0IHdpbGwgdGVsbCBtZSBpZiB0aGUgbW9kdWxlIGlzIGFjdHVhbGx5IGluIHBsYXkgaGVyZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgaXMgYSBkZXBlbmRlbmN5IG9uIHRoYXQgZmVhdHVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIGNvbmRpdGlvbmFsIG9yIGFsd2F5cyBjb21waWxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNpZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGU9MTA9a3ZtLXkgJiM0Mzs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMTprdm0teSAmIzQzOz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTEyLWt2bS15ICYjNDM7PSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzc5CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDE2MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS1ZNIHMzOTAgUGF0Y2hlcyBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7dmUgZ290IGEgaGFuZGZ1bCBvZiBmdW5jdGlvbmFsIGZpeGVzIHdpdGhpbiB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRlc3RhYmlsaXR5IGFuZCBmdXp6aW5nIHRhcmdldHMuCgpGaXJzdCwgdGhlIHBhdGNoZXMgYXJlIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGBLVk1gIGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgdGhlIGJhc2UgY29uZmlndXJhdGlvbiB3ZSBuZWVkLgoKVGhlIGZpcnN0IGNoYW5nZSBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzIGludGVyZXN0aW5nLiBJdCBmaXhlcyBhIGJ5cGFzcyBvZiBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKHZjcHUpYCB3aGVuIGEgdkNQVSBpcyBzdG9wcGVkLCB3aGljaCBjYW4gbGVhZCB0byBzaWduYWwgbWFzayBpc3N1ZXMuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyB0aGUgYEtWTV9SVU5gIG9wZXJhdGlvbi4gRXZlbiB0aG91Z2ggaXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbiwgdGhlIGJ1ZyBpcyByaWdodCB0aGVyZS4gSXQmIzM5O3MgYSBrZXkgZW50cnkgcG9pbnQsIHNvIEkmIzM5O20gaW5jbHVkaW5nIGl0IGFzIGEgZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgY2FuIGhpdCB0aGF0IHNwZWNpZmljIGNvZGUgcGF0aC4KClRoZW4sIHRoZXJlJiMzOTtzIGEgZml4IGluIGBrdm1fczM5MF9rZXlvcGAuIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCByYWNlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSByZWxhdGVkIHRvIHRoZSBga3ZtLSZndDthcmNoLmdtYXBgIGFjY2Vzcy4gVGhlIGtleSBpcyB0aGF0IHRoZSBmaXggbW9kaWZpZXMgdGhlIGFjY2VzcyBvZiBhbiBpbXBvcnRhbnQgc2hhcmVkIHN0cnVjdHVyZS4gVGhlIGZpeCBhbHNvIGludm9sdmVzIGEgbG9jayBzbyBJJiMzOTtsbCBpbmNsdWRlIGBrdm1fYXJjaF92bV9pb2N0bGAgdG8gdHJpZ2dlciB0aGlzIGNvZGUuCgpOZXh0LCB0aGUgZml4IGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBjb3JyZWN0cyBhbiBvZmZzZXQgaXNzdWUgd2hlbiBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgYWRkcmVzc2VzIGFuIGluY29ycmVjdCBvZmZzZXQgb2YgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZHVyaW5nIGEgS1ZNX1BWX1ZDUFVfRFVNUCBjb21tYW5kLiBUaGUgcmlnaHQgdGFyZ2V0IGlzIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC4KCkZpbmFsbHksIHdlJiMzOTt2ZSBnb3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgZml4ZWQgaW4gYHNldHVwX2FwY2IxMGAuIEkmIzM5O2xsIGZvY3VzIG9uIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgYXMgdGhlIGVudHJ5cG9pbnQgaGVyZS4KCkFsbCB0aGVzZSBjaGFuZ2VzIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIGZ1bmN0aW9uYWxpdHkgYW5kIHNob3VsZCBiZSByZWFjaGFibGUgdGhyb3VnaCBmdXp6aW5nIHdpdGggdGhvc2Ugc3ltYm9scy4KU28gSSBzaG91bGQgZm9jdXMgb246Ci0gICBga3ZtX2FyY2hfdm1faW9jdGxgCi0gICBga3ZtX2FyY2hfdmNwdV9pb2N0bGAKLSAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAKLSAgIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAKCkdpdmVuIHRoZXNlIGlkZW50aWZpZWQgZW50cnlwb2ludHMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIG1vdmUgb24gdG8gY3JhZnRpbmcgdGhlIHJpZ2h0IGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV92c2llJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGlzc3VlcyBpbiBzMzkwIEtWTTogYSBsb2NrIG9yZGVyaW5nIGlzc3VlIGluIGBrdm1fczM5MF9rZXlvcGAsIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlYCBjYWxsIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGFuIGluY29ycmVjdCBgY29weV90b191c2VyYCBvZmZzZXQgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYHNldHVwX2FwY2IxMGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBpb2N0bHMgYW5kIGluc3RydWN0aW9uIGhhbmRsZXJzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfdnNpZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtdWx0aXBsZSBpc3N1ZXMgaW4gczM5MCBLVk06IGEgbG9jayBvcmRlcmluZyBpc3N1ZSBpbiBga3ZtX3MzOTBfa2V5b3BgLCBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZWAgY2FsbCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLCBhbiBpbmNvcnJlY3QgYGNvcHlfdG9fdXNlcmAgb2Zmc2V0IGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBzZXR1cF9hcGNiMTBgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBLVk0gaW9jdGxzIGFuZCBpbnN0cnVjdGlvbiBoYW5kbGVycywgd2hpY2ggYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzLCBub25lIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtNU0FOOlxuMS4gYGt2bV9zMzkwX2tleW9wYDogRml4ZXMgYSBsb2NraW5nIGlzc3VlIGJ5IG1vdmluZyB0aGUgcmVhZCBvZiBga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlYCBpbnNpZGUgdGhlIGBtbXVfbG9ja2AgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCByYWNlIG9yIGludmFsaWQgYWNjZXNzLCB3aGljaCBpcyB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAuXG4yLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gOiBGaXhlcyBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSgpYCBjYWxsIG9uIGFuIGVycm9yIHBhdGguIFRoaXMgaXMgYSBzdGF0ZSBtYW5hZ2VtZW50IGJ1Zy5cbjMuIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogRml4ZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIGBjb3B5X3RvX3VzZXJgIHNvIHRoYXQgYHJjYCBhbmQgYHJyY2AgYXJlIHdyaXR0ZW4gdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0cyBpbiB0aGUgdXNlciBzcGFjZSBzdHJ1Y3R1cmUuIFRoZSBjb3BpZWQgZGF0YSBpdHNlbGYgKGBjbWQucmNgIGFuZCBgY21kLnJyY2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGEgcHJlY2VkaW5nIGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuXG40LiBgc2V0dXBfYXBjYjEwYDogQWRkcyBhIGBtZW1zZXRgIHRvIGZ1bGx5IGluaXRpYWxpemUgdGhlIGBhcGNiMWAgc3RydWN0dXJlIGluIHRoZSBzaGFkb3cgQ1JZQ0IuIFdpdGhvdXQgdGhpcywgZmllbGRzIGxpa2UgYGFwbVsxLi4zXWAgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBhbmQgY29udGFpbiBzdGFsZSBkYXRhIGZyb20gcHJldmlvdXMgdXNlcyBvZiB0aGUgY2FjaGVkIGB2c2llX3BhZ2VgLiBUaGlzIHN0YWxlIGRhdGEgaXMgdGhlbiByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSB3aGVuIGV4ZWN1dGluZyBhIG5lc3RlZCBndWVzdCwgcG90ZW50aWFsbHkgZ3JhbnRpbmcgdW5hdXRob3JpemVkIGNyeXB0byBhY2Nlc3MuIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBoYXJkd2FyZSBhbmQgbm90IGJ5IHRoZSBDUFUsIEtNU0FOIGNhbm5vdCBkZXRlY3QgaXQgKEtNU0FOIG9ubHkgaW5zdHJ1bWVudHMgQ1BVIGluc3RydWN0aW9ucyBhbmQgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGBrbXNhbl9jaGVja19tZW1vcnkoKWAgYW5ub3RhdGlvbnMgZm9yIHRoZSBTSUUgYmxvY2spLlxuXG5UaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEwMzdhM2E1MmY3NDlhNWQ0ZGU4Yjk5M2UyYmRjMGJhMTU4Y2Y1NTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNTo1MDoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCA1MThhNjljNTVlODVjLi43ZGZkMGFkMzY3MzY4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC01NjIsMTEgJiM0Mzs1NjIsMTIgQEAgc3RhdGljIHZvaWQgX19rdm1fczM5MF9leGl0KHZvaWQpCiBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCwKIAkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpCiB7Ci0JdW5pb24gYXNjZSBhc2NlID0ga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2U7CiAJZ2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihhZGRyKTsKJiM0MzsJdW5pb24gYXNjZSBhc2NlOwogCWludCByOwogCiAJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwlhc2NlID0ga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2U7CiAKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOgpAQCAtNTA2OSw3ICYjNDM7NTA3MCw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXByX2Vycl9yYXRlbGltaXRlZCgmIzM0O2NhbiYjMzk7dCBydW4gc3RvcHBlZCB2Y3B1ICVkXG4mIzM0OywKIAkJCQkgICB2Y3B1LSZndDt2Y3B1X2lkKTsKIAkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gb3V0X3NpZ3NldDsKIAl9CiAKIAlrZXJuZWxfZnB1X2JlZ2luKCZhbXA7ZnB1LCBLRVJORUxfRlBDIHwgS0VSTkVMX1ZYUik7CkBAIC01MDk5LDkgJiM0Mzs1MTAwLDExIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc3RvcmVfcmVncyh2Y3B1KTsKIAlrZXJuZWxfZnB1X2VuZCgmYW1wO2ZwdSwgS0VSTkVMX0ZQQyB8IEtFUk5FTF9WWFIpOwogCiYjNDM7CXZjcHUtJmd0O3N0YXQuZXhpdF91c2Vyc3BhY2UmIzQzOyYjNDM7OwomIzQzOwomIzQzO291dF9zaWdzZXQ6CiAJa3ZtX3NpZ3NldF9kZWFjdGl2YXRlKHZjcHUpOwogCi0JdmNwdS0mZ3Q7c3RhdC5leGl0X3VzZXJzcGFjZSYjNDM7JiM0Mzs7CiBvdXQ6CiAJdmNwdV9wdXQodmNwdSk7CiAJcmV0dXJuIHJjOwpAQCAtNTczMiw3ICYjNDM7NTczNSw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgJmFtcDtjbWQpOwogCiAJCS8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqLwotCQlpZiAoY29weV90b191c2VyKChfX3U4IF9fdXNlciAqKWFyZ3AsICZhbXA7Y21kLnJjLAomIzQzOwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fcHZfY21kLCByYyksICZhbXA7Y21kLnJjLAogCQkJCSBzaXplb2YoY21kLnJjKSAmIzQzOyBzaXplb2YoY21kLnJyYykpKQogCQkJciA9IC1FRkFVTFQ7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuYwppbmRleCBlZWEyNDU2MmU3ZGIyLi4wYTdkOGRmYWI2Yjc5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuYwpAQCAtMTczLDYgJiM0MzsxNzMsNyBAQCBzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLAogCQkJICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjApKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKJiM0MzsJbWVtc2V0KGFwY2JfcywgMCwgc2l6ZW9mKCphcGNiX3MpKTsKIAlhcGNiX3MtJmd0O2FwbVswXSA9IGFwY2JfaC0mZ3Q7YXBtWzBdICZhbXA7IHRtcC5hcG1bMF07CiAJYXBjYl9zLSZndDthcW1bMF0gPSBhcGNiX2gtJmd0O2FxbVswXSAmYW1wOyB0bXAuYXFtWzBdICZhbXA7IDB4ZmZmZjAwMDAwMDAwMDAwMFVMOwogCWFwY2Jfcy0mZ3Q7YWRtWzBdID0gYXBjYl9oLSZndDthZG1bMF0gJmFtcDsgdG1wLmFkbVswXSAmYW1wOyAweGZmZmYwMDAwMDAwMDAwMDBVTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gczM5MCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIEtWTS1zMzkwIGFyY2hpdGVjdHVyZS4gTGV0IG1lIGJyZWFrIGRvd24gbXkgdGhvdWdodHMgYXMgSSBzZWUgdGhlbS4gRmlyc3QsIHRoZSBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCBmaWxlIGhhcyB0aHJlZSBtb2RpZmljYXRpb25zLiAgVGhlIGZpcnN0LCBpbiBga3ZtX3MzOTBfa2V5b3BgLCBpcyBhIGxvY2tpbmcgZml4LiBUaGV5JiMzOTt2ZSBtb3ZlZCB0aGUgYGFzY2VgIGFzc2lnbm1lbnQsIGBhc2NlID0ga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2U7YCwgdG8gYmUgKmFmdGVyKiB0aGUgYGd1YXJkKHJlYWRfbG9jaykoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTtgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGVuc3VyaW5nIHRoZSBsb2NrIGlzIGhlbGQgYmVmb3JlIGFjY2Vzc2luZyBwb3RlbnRpYWxseSBzaGFyZWQgbWVtb3J5LgoKTmV4dCwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgdGhlIGBnb3RvIG91dDtgIGhhcyBiZWVuIGNoYW5nZWQgdG8gYGdvdG8gb3V0X3NpZ3NldDtgIHdoZW4gdGhlIHZDUFUgaXMgc3RvcHBlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlcyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKHZjcHUpYCBpcyAqYWx3YXlzKiBjYWxsZWQsIHdoaWNoIGlzIGEgZ29vZCBmYWlsc2FmZS4KClRoZSB0aGlyZCBjaGFuZ2UgaGVyZSwgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgbG9va3MgbGlrZSBhIGJ1ZyBmaXguIFRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBgY29weV90b191c2VyYCBjYWxsIHRvIGluY2x1ZGUgYW4gYG9mZnNldG9mYCB3aGVuIGNvcHlpbmcgdGhlIHJldHVybiBjb2RlLCBgY21kLnJjYCwgdG8gdXNlciBzcGFjZS4gIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBjb3B5aW5nIGBjbWQucmNgIHRvIHRoZSAqYmVnaW5uaW5nKiBvZiB0aGUgdXNlci1wcm92aWRlZCBidWZmZXIsIGBhcmdwYCwgcmF0aGVyIHRoYW4gdGhlIGNvcnJlY3QgZmllbGQuIEhtbS4uLiBpdCBsb29rcyBsaWtlIGBjbWQucmNgIGFuZCBgY21kLnJyY2AgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyB0aGF0JiMzOTtzIGFsbC4gQW5kIGl0JiMzOTtzIGFsbCBpbml0aWFsaXplZCBieSBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAgc28gbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay4KCk1vdmluZyBvbiB0byBgYXJjaC9zMzkwL2t2bS92c2llLmNgLCB3ZSBzZWUgYSBjaGFuZ2UgaW4gYHNldHVwX2FwY2IxMGAuIFRoZXkmIzM5O3JlIGFkZGluZyBhIGBtZW1zZXQoYXBjYl9zLCAwLCBzaXplb2YoKmFwY2JfcykpO2AgY2FsbCBiZWZvcmUgc2V0dGluZyBhbnkgZmllbGRzLiBUaGlzIGlzIGluaXRpYWxpemluZyBhIHN0cnVjdCwgd2hpY2ggaXMgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBXYWl0IGEgbWludXRlLi4uIGBhcGNiX3NgIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IGt2bV9zMzkwX2FwY2IxYC4gSSBzaG91bGQgcHJvYmFibHkgZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHNldHVwX2FwY2IxMGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgYXBjYl9zYCBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgY2F1dGlvdXMgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9hcGNiMTAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2My0vKiBDb3B5IHRvIEFQQ0IgRk9STUFUMSBmcm9tIEFQQ0IgRk9STUFUMCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjUtXHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTI1Mj1zdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODQtXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NTpcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODYtXHRcdFx0XHRcdCAgICBjcnljYl9ncGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZW06CgoqKkFuYWx5emluZyBgc2V0dXBfYXBjYmAgYW5kIGBzZXR1cF9hcGNiMTBgIGluIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgYXJjaC9zMzkwL2t2bS92c2llLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gdGhvc2UgdHdvIEFQQ0Igc2V0dXAgZnVuY3Rpb25zOiBgc2V0dXBfYXBjYmAgYW5kIGBzZXR1cF9hcGNiMTBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugcm91dGluZXMgYXJlIGNyYWZ0aW5nIHRoZSBBZGRyZXNzIFNwYWNlIENvbnRyb2wgQmxvY2sgKEFQQ0IpIHN0cnVjdHVyZXMsIHJpZ2h0PyBUaGF0JiMzOTtzIGtleSBmb3IgbWFuYWdpbmcgZ3Vlc3QgYWRkcmVzcyBzcGFjZXMgd2l0aGluIHRoZSBTLzM5MCBLVk0gZW52aXJvbm1lbnQuIAoKSSYjMzk7bSBhc3N1bWluZyBgYXBjYjEwYCBpcyBsaWtlbHkgYSBsYXRlciBpdGVyYXRpb24gb3Igc3BlY2lmaWMgdmVyc2lvbiwgcG9zc2libHkgcmVsYXRlZCB0byBzb21lIGhhcmR3YXJlIGZlYXR1cmUgb3IgYXJjaGl0ZWN0dXJhbCBleHRlbnNpb24uIFNvLCBJIG5lZWQgdG8gY29tcGFyZSB0aGVpciBsb2dpYyBjYXJlZnVsbHkgdG8gc2VlIHRoZSBkaWZmZXJlbmNlcyBhbmQgdW5kZXJzdGFuZCB0aGUgZXZvbHV0aW9uLiBXaGF0IHNwZWNpZmljIGd1ZXN0IHBhcmFtZXRlcnMgb3IgaHlwZXJ2aXNvciBjb25maWd1cmF0aW9ucyBuZWNlc3NpdGF0ZSBzZXBhcmF0ZSBzZXR1cCByb3V0aW5lcz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgbGV2ZWxzIG9mIGFkZHJlc3MgdHJhbnNsYXRpb24gc3VwcG9ydCwgcHJvdGVjdGlvbiBtZWNoYW5pc21zLCBvciBzb21lIG90aGVyIG51YW5jZSBvZiB0aGUgUy8zOTAgYXJjaGl0ZWN0dXJlPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBkaWZmZXJlbmNlcyBpbiBob3cgdGhlIEFQQ0IgZmllbGRzIOKAkyBzdWNoIGFzIHRoZSBhY2Nlc3MgY29udHJvbCBiaXRzLCBzZWdtZW50L3BhZ2UgdGFibGUgYWRkcmVzc2VzLCBhbmQgc3RvcmFnZSBrZXlzIOKAkyBhcmUgcG9wdWxhdGVkLiBBbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhcmUgYWx3YXlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFuZCB0aGUgQVBDQiBpcyBhIHNlbnNpdGl2ZSBhcmVhLgoKTXkgYWltIGlzIHRvIGdyYXNwIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXMsIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIEtWTS1TLzM5MCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGVsLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgYW5kIHNlZSB3aGVyZSB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBWU0lFIGNvbnRleHQuIFBlcmhhcHMgSSYjMzk7bGwgZXZlbiBjb21wYXJlIHRoZW0gYWdhaW5zdCBzaW1pbGFyIEFQQ0Igc2V0dXAgbWVjaGFuaXNtcyBpbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBkaWZmZXJlbnQgZ3Vlc3QgbWVtb3J5IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0XHRhdG9taWNfc2V0KFx1MDAyNnNjYl9zLVx1MDAzZWNwdWZsYWdzLCBuZXdmbGFncyk7XG4gMTYxOlx0XHRyZXR1cm4gMDtcbiAxNjI6XHR9XG4gMTYzOlx0LyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cbiAxNjQ6XHRzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLFxuIDE2NTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcbiAxNjY6XHR7XG4gMTY3Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjAgdG1wO1xuIDE2ODpcdFx0dW5zaWduZWQgbG9uZyBhcGNiX2dwYTtcbiAxNjk6XHRcbiAxNzA6XHRcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcbiAxNzE6XHRcbiAxNzI6XHRcdGlmIChyZWFkX2d1ZXN0X3JlYWwodmNwdSwgYXBjYl9ncGEsIFx1MDAyNnRtcCxcbiAxNzM6XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpKVxuIDE3NDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxNzU6XHRcbiAxNzY6XHRcdG1lbXNldChhcGNiX3MsIDAsIHNpemVvZigqYXBjYl9zKSk7XG4gMTc3Olx0XHRhcGNiX3MtXHUwMDNlYXBtWzBdID0gYXBjYl9oLVx1MDAzZWFwbVswXSBcdTAwMjYgdG1wLmFwbVswXTtcbiAxNzg6XHRcdGFwY2Jfcy1cdTAwM2VhcW1bMF0gPSBhcGNiX2gtXHUwMDNlYXFtWzBdIFx1MDAyNiB0bXAuYXFtWzBdIFx1MDAyNiAweGZmZmYwMDAwMDAwMDAwMDBVTDtcbiAxNzk6XHRcdGFwY2Jfcy1cdTAwM2VhZG1bMF0gPSBhcGNiX2gtXHUwMDNlYWRtWzBdIFx1MDAyNiB0bXAuYWRtWzBdIFx1MDAyNiAweGZmZmYwMDAwMDAwMDAwMDBVTDtcbiAxODA6XHRcbiAxODE6XHRcdHJldHVybiAwO1xuIDE4MjpcdFxuIDE4MzpcdH1cbiAxODQ6XHRcbiAxODU6XHQvKipcbiAxODY6XHQgKiBzZXR1cF9hcGNiMDAgLSBDb3B5IHRvIEFQQ0IgRk9STUFUMCBmcm9tIEFQQ0IgRk9STUFUMFxuIDE4NzpcdCAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuIDE4ODpcdCAqIEBhcGNiX3M6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgc2hhZG93IGNyeWNiXG4gMTg5Olx0ICogQGNyeWNiX2dwYTogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyB0byBzdGFydCBvZiBvcmlnaW5hbCBndWVzdCBjcnljYlxuIDE5MDpcdCAqIEBhcGNiX2g6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgZ3Vlc3QxXG4gMTkxOlx0ICpcbiAxOTI6XHQgKiBSZXR1cm5zIDAgYW5kIC1FRkFVTFQgb24gZXJyb3IgcmVhZGluZyBndWVzdCBhcGNiXG4gMTkzOlx0ICovXG4gMTk0Olx0c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG4gMTk1Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHVuc2lnbmVkIGxvbmcgKmFwY2JfaClcbiAxOTY6XHR7XG4gMTk3Olx0XHR1bnNpZ25lZCBsb25nIGFwY2JfZ3BhO1xuIDE5ODpcdFxuIDE5OTpcdFx0YXBjYl9ncGEgPSBjcnljYl9ncGEgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiwgYXBjYjApO1xuIDIwMDpcdFxuIDIwMTpcdFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgYXBjYl9zLFxuIDIwMjpcdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IwKSkpXG4gMjAzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDIwNDpcdFxuIDIwNTpcdFx0Yml0bWFwX2FuZChhcGNiX3MsIGFwY2JfcywgYXBjYl9oLFxuIDIwNjpcdFx0XHQgICBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpO1xuIDIwNzpcdFxuIDIwODpcdFx0cmV0dXJuIDA7XG4gMjA5Olx0fVxuIDIxMDpcdFxuIDIxMTpcdC8qKlxuIDIxMjpcdCAqIHNldHVwX2FwY2IxMSAtIENvcHkgdGhlIEZPUk1BVDEgQVBDQiBmcm9tIHRoZSBndWVzdCB0byB0aGUgc2hhZG93IENSWUNCXG4gMjEzOlx0ICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG4gMjE0Olx0ICogQGFwY2JfczogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBzaGFkb3cgY3J5Y2JcbiAyMTU6XHQgKiBAY3J5Y2JfZ3BhOiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHRvIHN0YXJ0IG9mIG9yaWdpbmFsIGd1ZXN0IGNyeWNiXG4gMjE2Olx0ICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBob3N0XG4gMjE3Olx0ICpcbiAyMTg6XHQgKiBSZXR1cm5zIDAgYW5kIC1FRkFVTFQgb24gZXJyb3IgcmVhZGluZyBndWVzdCBhcGNiXG4gMjE5Olx0ICovXG4gMjIwOlx0c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG4gMjIxOlx0XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsXG4gMjIyOlx0XHRcdFx0dW5zaWduZWQgbG9uZyAqYXBjYl9oKVxuIDIyMzpcdHtcbiAyMjQ6XHRcdHVuc2lnbmVkIGxvbmcgYXBjYl9ncGE7XG4gMjI1Olx0XG4gMjI2Olx0XHRhcGNiX2dwYSA9IGNyeWNiX2dwYSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiLCBhcGNiMSk7XG4gMjI3Olx0XG4gMjI4Olx0XHRpZiAocmVhZF9ndWVzdF9yZWFsKHZjcHUsIGFwY2JfZ3BhLCBhcGNiX3MsXG4gMjI5Olx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEpKSlcbiAyMzA6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMjMxOlx0XG4gMjMyOlx0XHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXG4gMjMzOlx0XHRcdCAgIEJJVFNfUEVSX0JZVEUgKiBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSk7XG4gMjM0Olx0XG4gMjM1Olx0XHRyZXR1cm4gMDtcbiAyMzY6XHR9XG4gMjM3Olx0XG4gMjM4Olx0LyoqXG4gMjM5Olx0ICogc2V0dXBfYXBjYiAtIENyZWF0ZSBhIHNoYWRvdyBjb3B5IG9mIHRoZSBhcGNiLlxuIDI0MDpcdCAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuIDI0MTpcdCAqIEBjcnljYl9zOiBwb2ludGVyIHRvIHNoYWRvdyBjcnljYlxuIDI0MjpcdCAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcbiAyNDM6XHQgKiBAY3J5Y2JfaDogcG9pbnRlciB0byB0aGUgaG9zdCBjcnljYlxuIDI0NDpcdCAqIEBmbXRfbzogZm9ybWF0IG9mIHRoZSBvcmlnaW5hbCBndWVzdCBjcnljYi5cbiAyNDU6XHQgKiBAZm10X2g6IGZvcm1hdCBvZiB0aGUgaG9zdCBjcnljYi5cbiAyNDY6XHQgKlxuIDI0NzpcdCAqIENoZWNrcyB0aGUgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgaG9zdCBjcnljYiBhbmQgY2FsbHMgdGhlXG4gMjQ4Olx0ICogYXBwcm9wcmlhdGUgY29weSBmdW5jdGlvbi5cbiAyNDk6XHQgKlxuIDI1MDpcdCAqIFJldHVybiAwIG9yIGFuIGVycm9yIG51bWJlciBpZiB0aGUgZ3Vlc3QgYW5kIGhvc3QgY3J5Y2IgYXJlIGluY29tcGF0aWJsZS5cbiAyNTE6XHQgKi9cbiAyNTI6XHRzdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxuIDI1MzpcdFx0ICAgICAgIGNvbnN0IHUzMiBjcnljYl9ncGEsXG4gMjU0Olx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfaCxcbiAyNTU6XHRcdCAgICAgICBpbnQgZm10X28sIGludCBmbXRfaClcbiAyNTY6XHR7XG4gMjU3Olx0XHRzd2l0Y2ggKGZtdF9vKSB7XG4gMjU4Olx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG4gMjU5Olx0XHRcdGlmICgoY3J5Y2JfZ3BhIFx1MDAyNiBQQUdFX01BU0spICE9ICgoY3J5Y2JfZ3BhICYjNDM7IDI1NikgXHUwMDI2IFBBR0VfTUFTSykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cmFjaW5nIHRoaXMgYGFwY2Jfc2AgcG9pbnRlci4uLiByaWdodCwgaXQmIzM5O3MgYSBwb2ludGVyIHRvIGBjcnljYl9zLSZndDthcGNiMWAuIEdvdCBpdCwgdGhhdCBtYWtlcyBzZW5zZS4gSGFuZyBvbiwgbGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSBgY3J5Y2Jfc2AgaXMgYWN0dWFsbHkgYWxsb2NhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoYXQgc3RydWN0dXJlIHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGBzZXR1cF9hcGNiYCBpcyBjYWxsZWQgLSB0aGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gVHJhY2tpbmcgZG93biBhbGxvY2F0aW9uIGFuZCB1c2FnZSBpcyB0aGUga2V5IGhlcmUuIExldCBtZSB0cmFjZSB0aGF0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldHVwX2FwY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2My0vKiBDb3B5IHRvIEFQQ0IgRk9STUFUMSBmcm9tIEFQQ0IgRk9STUFUMCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjUtXHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE4NS0vKipcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE4NjogKiBzZXR1cF9hcGNiMDAgLSBDb3B5IHRvIEFQQ0IgRk9STUFUMCBmcm9tIEFQQ0IgRk9STUFUMFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTg3LSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5My0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE5NDpzdGF0aWMgaW50IHNldHVwX2FwY2IwMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5NS1cdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgdW5zaWduZWQgbG9uZyAqYXBjYl9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMS0vKipcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIxMjogKiBzZXR1cF9hcGNiMTEgLSBDb3B5IHRoZSBGT1JNQVQxIEFQQ0IgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIHNoYWRvdyBDUllDQlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjEzLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxOS0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyMDpzdGF0aWMgaW50IHNldHVwX2FwY2IxMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyMS1cdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMzgtLyoqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMzk6ICogc2V0dXBfYXBjYiAtIENyZWF0ZSBhIHNoYWRvdyBjb3B5IG9mIHRoZSBhcGNiLlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQwLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1MS0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1MjpzdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjUzLVx0ICAgICAgIGNvbnN0IHUzMiBjcnljYl9ncGEsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjYyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MjYzOlx0XHRyZXR1cm4gc2V0dXBfYXBjYjExKHZjcHUsICh1bnNpZ25lZCBsb25nICopXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2NC1cdFx0XHRcdCAgICBjcnljYl9ncGEsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY4LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjk6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcwLVx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3Mi1cdFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjczOlx0XHRcdHJldHVybiBzZXR1cF9hcGNiMDAodmNwdSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3NC1cdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjAsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg2LVx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4OS1cdFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjkwOlx0XHRcdHJldHVybiBzZXR1cF9hcGNiMDAodmNwdSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI5MS1cdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjAsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MzE5PXN0YXRpYyBpbnQgc2hhZG93X2NyeWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM1MC1cdGlmIChhcGllX3MpIHtcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MTpcdFx0cmV0ID0gc2V0dXBfYXBjYih2Y3B1LCBcdTAwMjZ2c2llX3BhZ2UtXHUwMDNlY3J5Y2IsIGNyeWNiX2FkZHIsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTItXHRcdFx0XHQgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRlY29uc3RydWN0aW5nIGEgUG9pbnRlciBhbmQgSXRzIENvbnRleHQqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIHRlbGxpbmcgbWUgdGhhdCBgY3J5Y2Jfc2AgaXMgYSBwb2ludGVyIHRvIHNvbWV0aGluZ+KAlHNwZWNpZmljYWxseSwgdGhlIGBjcnljYmAgbWVtYmVyIG9mIGEgYHZzaWVfcGFnZWAgc3RydWN0dXJlLiBPa2F5LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB2c2llX3BhZ2VgICppcyouIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbmF0dXJlIG9mIGB2c2llX3BhZ2VgLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kIGhvdyBgY3J5Y2JgIGlzIGRlZmluZWQuIFRoaXMgaXMgY29tbW9uIHByYWN0aWNlLCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhlIGZ1bGwgc3RydWN0dXJlIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgd2hhdCBgY3J5Y2Jfc2AgaXMgYWN0dWFsbHkgcmVmZXJlbmNpbmcuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpZiB0aGlzIHBvaW50ZXIgaXMgdmFsaWQgYW5kIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgYWNjZXNzaWJsZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdnNpZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS92c2llLmM9MzA9ZW51bSB2c2llX3BhZ2VfZmxhZ3Mge1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzLVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzQ6c3RydWN0IHZzaWVfcGFnZSB7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNS1cdHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgc2NiX3M7XHQvKiAweDAwMDAgKi9cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03Mi1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjczOnN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpID09IFBBR0VfU0laRSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03NC1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz03Nj1zdGF0aWMgaW50IHNldF92YWxpZGl0eV9pY3B0KHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgKnNjYixcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy04NS0vKiBtYXJrIHRoZSBwcmVmaXggYXMgdW5tYXBwZWQsIHRoaXMgd2lsbCBibG9jayB0aGUgVlNJRSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6ODY6c3RhdGljIHZvaWQgcHJlZml4X3VubWFwcGVkKHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05MS0vKiBtYXJrIHRoZSBwcmVmaXggYXMgdW5tYXBwZWQgYW5kIHdhaXQgdW50aWwgdGhlIFZTSUUgaGFzIGJlZW4gbGVmdCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6OTI6c3RhdGljIHZvaWQgcHJlZml4X3VubWFwcGVkX3N5bmMoc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTMte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMS0vKiBtYXJrIHRoZSBwcmVmaXggYXMgbWFwcGVkLCB0aGlzIHdpbGwgYWxsb3cgdGhlIFZTSUUgdG8gcnVuICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDI6c3RhdGljIHZvaWQgcHJlZml4X21hcHBlZChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDMte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNy0vKiB0ZXN0IGlmIHRoZSBwcmVmaXggaXMgbWFwcGVkIGludG8gdGhlIGdtYXAgc2hhZG93ICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDg6c3RhdGljIGludCBwcmVmaXhfaXNfbWFwcGVkKHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwOS17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTEzLS8qIGNvcHkgdGhlIHVwZGF0ZWQgaW50ZXJ2ZW50aW9uIHJlcXVlc3QgYml0cyBpbnRvIHRoZSBzaGFkb3cgc2NiICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMTQ6c3RhdGljIHZvaWQgdXBkYXRlX2ludGVydmVudGlvbl9yZXF1ZXN0cyhzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTUte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEyNC0vKiBzaGFkb3cgKGZpbHRlciBhbmQgdmFsaWRhdGUpIHRoZSBjcHVmbGFncyAgKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEyNTpzdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMjYte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTI1Mj1zdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxOC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMxOTpzdGF0aWMgaW50IHNoYWRvd19jcnljYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMyMC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzkzLVxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mzk0OnN0YXRpYyB2b2lkIHNoYWRvd19lc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zOTUte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTQwNS0vKiBzaGFkb3cgKHJvdW5kIHVwL2Rvd24pIHRoZSBpYmMgdG8gYXZvaWQgdmFsaWRpdHkgaWNwdCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NDA2OnN0YXRpYyB2b2lkIHByZXBhcmVfaWJjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNDA3LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00MjgtLyogdW5zaGFkb3cgdGhlIHNjYiwgY29weWluZyBwYXJhbWV0ZXJzIGJhY2sgdG8gdGhlIHJlYWwgc2NiICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo0Mjk6c3RhdGljIHZvaWQgdW5zaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNDMwLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00NzktICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo0ODA6c3RhdGljIGludCBzaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNDgxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz02MjQ9dm9pZCBrdm1fczM5MF92c2llX2dtYXBfbm90aWZpZXIoc3RydWN0IGdtYXAgKmdtYXAsIGdwYV90IHN0YXJ0LCBncGFfdCBlbmQpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02MjUte1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NjI2Olx0c3RydWN0IHZzaWVfcGFnZSAqY3VyLCAqbmV4dDtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTYyNy1cdHVuc2lnbmVkIGxvbmcgcHJlZml4O1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTY1NC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjY1NTpzdGF0aWMgaW50IG1hcF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTY1Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9NzAzPXN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03MTAtLyogdW5waW4gYWxsIGJsb2NrcyBwcmV2aW91c2x5IHBpbm5lZCBieSBwaW5fYmxvY2tzKCksIG1hcmtpbmcgdGhlbSBkaXJ0eSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NzExOnN0YXRpYyB2b2lkIHVucGluX2Jsb2NrcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTcxMi17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzY2LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NzY3OnN0YXRpYyBpbnQgcGluX2Jsb2NrcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc2OC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtODg0LS8qIHVucGluIHRoZSBzY2IgcHJvdmlkZWQgYnkgZ3Vlc3QgMiwgbWFya2luZyBpdCBhcyBkaXJ0eSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6ODg1OnN0YXRpYyB2b2lkIHVucGluX3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg4Ni1cdFx0ICAgICAgZ3BhX3QgZ3BhKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTkwMC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjkwMTpzdGF0aWMgaW50IHBpbl9zY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05MDItXHRcdCAgIGdwYV90IGdwYSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz05MjM9c3RhdGljIGludCBpbmplY3RfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBfX3UxNiBjb2RlLCBfX3U2NCB2YWRkcixcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05NTItICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo5NTM6c3RhdGljIGludCBoYW5kbGVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk1NC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTc4LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6OTc5OnN0YXRpYyB2b2lkIGhhbmRsZV9sYXN0X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05ODAte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk4NS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjk4NjpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdnNpZV9pY3B0KHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk4Ny17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTkxLS8qIHJld2luZCB0aGUgcHN3IGFuZCBjbGVhciB0aGUgdnNpZSBpY3B0LCBzbyB3ZSBjYW4gcmV0cnkgZXhlY3V0aW9uICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo5OTI6c3RhdGljIHZvaWQgcmV0cnlfdnNpZV9pY3B0KHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk5My17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAwNi1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEwMDc6c3RhdGljIGludCBoYW5kbGVfc3RmbGVfMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMDgtXHRcdFx0ICB1MzIgZmFjX2xpc3Rfb3JpZ2luKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMjMtXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDI0OnN0YXRpYyBpbnQgaGFuZGxlX3N0ZmxlXzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHUzMiBmYWNfbGlzdF9vcmlnaW4pXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDI1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDUyLSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTA1MzpzdGF0aWMgaW50IGhhbmRsZV9zdGZsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNTQte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNjEtXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHZzaWVfcGFnZS1cdTAwM2VmYWMpIFx1MDAzYyAoKFMzOTBfQVJDSF9GQUNfTElTVF9TSVpFX1U2NCAmIzQzOyAxKSAqIHNpemVvZih1NjQpKSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDYyOlx0QlVJTERfQlVHX09OKCFJU19BTElHTkVEKG9mZnNldG9mKHN0cnVjdCB2c2llX3BhZ2UsIGZhYyksIDgpKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNjMtXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTA5My0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEwOTQ6c3RhdGljIHU2NCB2c2llX2dldF9yZWdpc3RlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSwgdTggcmVnKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTA5NS17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTEwNy1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjExMDg6c3RhdGljIGludCB2c2llX2hhbmRsZV9tdnBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTA5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg3LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTE4ODpzdGF0aWMgaW50IGRvX3ZzaWVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg5LVx0X19yZWxlYXNlcyh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEyODQtXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMjg1OnN0YXRpYyB2b2lkIHJlbGVhc2VfZ21hcF9zaGFkb3coc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTI4Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMwMC1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzMDE6c3RhdGljIHN0cnVjdCBnbWFwICphY3F1aXJlX2dtYXBfc2hhZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMwMi17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTM1Mz1zdGF0aWMgdm9pZCByZWdpc3Rlcl9zaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzNTQ6XHRcdFx0XHRzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzU1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMzgzPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM5Ni0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzOTc6c3RhdGljIGludCB2c2llX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEzOTgte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0NjMtLyogVHJ5IGdldHRpbmcgYSBnaXZlbiB2c2llIHBhZ2UsIHJldHVybmluZyBcJiMzNDt0cnVlXCYjMzQ7IG9uIHN1Y2Nlc3MuICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDY0OnN0YXRpYyBpbmxpbmUgYm9vbCB0cnlfZ2V0X3ZzaWVfcGFnZShzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDY1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDcxLS8qIFB1dCBhIHZzaWUgcGFnZSBhY3F1aXJlZCB0aHJvdWdoIGdldF92c2llX3BhZ2UgLyB0cnlfZ2V0X3ZzaWVfcGFnZS4gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE0NzI6c3RhdGljIHZvaWQgcHV0X3ZzaWVfcGFnZShzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDczLXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDgzLSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTQ4NDpzdGF0aWMgc3RydWN0IHZzaWVfcGFnZSAqZ2V0X3ZzaWVfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODUte1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTQ4NjpcdHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODctXHRpbnQgbnJfdmNwdXM7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTU1Nz1pbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU1OC17XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTU5Olx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU2MC1cdHVuc2lnbmVkIGxvbmcgc2NiX2FkZHI7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU2OC1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE1Njk6XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTcwLVx0c2NiX2FkZHIgPSBrdm1fczM5MF9nZXRfYmFzZV9kaXNwX3ModmNwdSwgTlVMTCk7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTYyMT12b2lkIGt2bV9zMzkwX3ZzaWVfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjIyLXtcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2MjM6XHRzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2U7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjI0LVx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDE1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVBDQiBUcmFuc2ZlciBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2c2llX3BhZ2VgIHN0cnVjdHVyZSDigJMgaXQmIzM5O3MgYWxsb2NhdGVkLCBjYWNoZWQsIGFuZCBzZWVtcyBjcnVjaWFsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhY3RpbmcgYXMgYSB0ZW1wb3Jhcnkgc3RvcmFnZSBhcmVhLCBsaWtlbHkgZm9yIGVmZmljaWVuY3kmIzM5O3Mgc2FrZS4gTm93LCBgc2V0dXBfYXBjYjEwYCBpcyBncmFiYmluZyBteSBhdHRlbnRpb24uIEl0IGFwcGVhcnMgdG8gYmUgcmVzcG9uc2libGUgZm9yIGNvcHlpbmcgYGFwY2IwYCBkYXRhIGZyb20gdGhlIGd1ZXN0IG1lbW9yeSBpbnRvIGBhcGNiMWAsIGJ1dCwgaW1wb3J0YW50bHksIHRoaXMgY29weSBpcyBoYXBwZW5pbmcgaW4gdGhlIHNoYWRvdyBjcnljYiB3aXRoaW4gYHZzaWVfcGFnZWAuIFRoZSBzaGFkb3cgY3J5Y2IhIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBhcmVhIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IFNJRSwgdXNlcyB3aGVuIG5lc3RlZCBndWVzdHMgYXJlIHJ1bm5pbmcuIE1ha2VzIHNlbnNlLCBzbyB3ZSBhcmUgc2V0dGluZyB1cCB0aGUgc3RydWN0dXJlIHRoYXQgU0lFIGlzIGdvaW5nIHRvIHVzZSwgYW5kIHdlIGFyZSBjYWNoaW5nIGl0IHRvIHNhdmUgdGltZSBpbiB0aGUgaG90IHBhdGguCgpOb3cgSSBzZWUgYGFwY2Jfc2AgaXMgYSBwb2ludGVyIHRvIGBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjFgLiBJIG5lZWQgdG8gcmV2aWV3IGBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjFgLiBJdCBoYXMgdG8gY29udGFpbiB0aGUgZGF0YSB0aGF0JiMzOTtzIGJlaW5nIHNldCB1cCBhbmQgdGhhdCBTSUUgbmVlZHMsIHdoaWNoIHN1Z2dlc3RzIGl0IGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSBzdGF0ZS4gSSB3aWxsIGdvIGFuZCByZXZpZXcgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrdm1fczM5MF9hcGNiMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9NTQ3PXN0cnVjdCBrdm1fczM5MF9hcGNiMCB7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNTU0LSNkZWZpbmUgQVBDQjFfTUFTS19TSVpFIDRcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjU1NTpzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEge1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNTU2LVx0X191NjQgYXBtW0FQQ0IxX01BU0tfU0laRV07XHRcdC8qIDB4MDAwMCAqL1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTU2Mj1zdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC01NjYtXHRfX3U4ICAgYWVzX3dyYXBwaW5nX2tleV9tYXNrWzMyXTtcdC8qIDB4MDA2MCAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NTY3Olx0c3RydWN0IGt2bV9zMzkwX2FwY2IxIGFwY2IxO1x0XHQvKiAweDAwODAgKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTU2OC19O1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2NTpcdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX2gpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjYte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jPTIyMD1zdGF0aWMgaW50IHNldHVwX2FwY2IxMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2Jfcyxcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjgtXHRpZiAocmVhZF9ndWVzdF9yZWFsKHZjcHUsIGFwY2JfZ3BhLCBhcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjk6XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEpKSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMC1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjMyLVx0Yml0bWFwX2FuZChhcGNiX3MsIGFwY2JfcywgYXBjYl9oLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjMzOlx0XHQgICBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMSkpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGt2bV9zMzkwX2FwY2IxYCBzdHJ1Y3Q6CgoqKkV4YW1pbmluZyB0aGUgYGt2bV9zMzkwX2FwY2IxYCBTdHJ1Y3R1cmUqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEl0JiMzOTtzIGxvY2F0ZWQgaW4gYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCwgc28gSSYjMzk7bGwgbmVlZCB0byBnbyB0aGVyZSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBmaWVsZHMuIEkga25vdyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIEtWTSBpbXBsZW1lbnRhdGlvbiBvbiBzMzkwLCBzbyBpdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIEFjY2VzcyBQYXJhbWV0ZXIgQ29udHJvbCBCbG9jayAoQVBDQikgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB2aXJ0dWFsaXphdGlvbiwgcGFydGljdWxhcmx5IGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIGVtdWxhdGluZyBpdHMgYmVoYXZpb3IgZm9yIGd1ZXN0IFZNcy4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIGV4YW1pbmUgd2hlcmUgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCwgaG93IGl0JiMzOTtzIGJlaW5nIHBvcHVsYXRlZCwgYW5kIHdoaWNoIGZ1bmN0aW9ucyB1c2UgaXQuIEZyb20gdGhhdCwgSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgaXRzIHJvbGUgaW4gdGhlIHZpcnR1YWxpemF0aW9uIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGl0cyBmaWVsZHMsIHNwZWNpZmljYWxseSwgdG8gZ2V0IGFuIGlkZWEgb2YgdGhlIHR5cGVzIG9mIEFQQ0Igb3BlcmF0aW9ucyBiZWluZyBtYW5hZ2VkIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcm9sZSBpdCBwbGF5cyBpbiB0aGUgb3ZlcmFsbCBLVk0tb24tczM5MCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdFx0X191NjQgYWRtW0FQQ0IwX01BU0tfU0laRV07XHRcdC8qIDB4MDAxMCAqL1xuIDU1MTpcdFx0X191NjQgcmVzZXJ2ZWQxODtcdFx0XHQvKiAweDAwMTggKi9cbiA1NTI6XHR9O1xuIDU1MzpcdFxuIDU1NDpcdCNkZWZpbmUgQVBDQjFfTUFTS19TSVpFIDRcbiA1NTU6XHRzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEge1xuIDU1NjpcdFx0X191NjQgYXBtW0FQQ0IxX01BU0tfU0laRV07XHRcdC8qIDB4MDAwMCAqL1xuIDU1NzpcdFx0X191NjQgYXFtW0FQQ0IxX01BU0tfU0laRV07XHRcdC8qIDB4MDAyMCAqL1xuIDU1ODpcdFx0X191NjQgYWRtW0FQQ0IxX01BU0tfU0laRV07XHRcdC8qIDB4MDA0MCAqL1xuIDU1OTpcdFx0X191NjQgcmVzZXJ2ZWQ2MFs0XTtcdFx0XHQvKiAweDAwNjAgKi9cbiA1NjA6XHR9O1xuIDU2MTpcdFxuIDU2MjpcdHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2Ige1xuIDU2MzpcdFx0c3RydWN0IGt2bV9zMzkwX2FwY2IwIGFwY2IwO1x0XHQvKiAweDAwMDAgKi9cbiA1NjQ6XHRcdF9fdTggICByZXNlcnZlZDIwWzB4MDA0OCAtIDB4MDAyMF07XHQvKiAweDAwMjAgKi9cbiA1NjU6XHRcdF9fdTggICBkZWFfd3JhcHBpbmdfa2V5X21hc2tbMjRdO1x0LyogMHgwMDQ4ICovXG4gNTY2Olx0XHRfX3U4ICAgYWVzX3dyYXBwaW5nX2tleV9tYXNrWzMyXTtcdC8qIDB4MDA2MCAqL1xuIDU2NzpcdFx0c3RydWN0IGt2bV9zMzkwX2FwY2IxIGFwY2IxO1x0XHQvKiAweDAwODAgKi9cbiA1Njg6XHR9O1xuIDU2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA4OAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBrdm1fczM5MF9hcGNiMWAgU3RydWN0dXJlIGFuZCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBvZiBga3ZtX3MzOTBfYXBjYjFgLiBSaWdodCwgaXQgY29udGFpbnMgYGFwbWAsIGBhcW1gLCBhbmQgYGFkbWAgYXJyYXlzLCBlYWNoIG9mIHNpemUgZm91ciwgYW5kIHRoZW4gYHJlc2VydmVkNjBbNF1gLiBFYWNoIG9mIHRob3NlIGFycmF5cyBpcyAzMiBieXRlcyAoNCAqIDgpLCBhbmQgdGhlIHdob2xlIHRoaW5nIHN1bXMgdXAgdG8gMTI4IGJ5dGVzLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZXR1cF9hcGNiMTBgIGZ1bmN0aW9uLiBJIHNlZSB0aGUga2V5IGNoYW5nZS4gUHJldmlvdXNseSwgdGhlIHN0cnVjdHVyZSBgYXBjYl9zYCB3YXNuJiMzOTt0IGluaXRpYWxpemVkIGF0IGFsbC4gVGhlIGNvZGUgc25pcHBldCB1c2VkIHRvIGxvb2sgbGlrZSB0aGlzLCB3aGljaCBpcyBjb25jZXJuaW5nOgoKYGBgYwoJYXBjYl9zLSZndDthcG1bMF0gPSBhcGNiX2gtJmd0O2FwbVswXSAmYW1wOyB0bXAuYXBtWzBdOwoJYXBjYl9zLSZndDthcW1bMF0gPSBhcGNiX2gtJmd0O2FxbVswXSAmYW1wOyB0bXAuYXFtWzBdICZhbXA7IDB4ZmZmZjAwMDAwMDAwMDAwMFVMOwoJYXBjYl9zLSZndDthZG1bMF0gPSBhcGNiX2gtJmd0O2FkbVswXSAmYW1wOyB0bXAuYWRtWzBdICZhbXA7IDB4ZmZmZjAwMDAwMDAwMDAwMFVMOwpgYGAKCk5vdywgdGhlcmUmIzM5O3MgYSBgbWVtc2V0YCBiZWZvcmUgdGhvc2UgYXNzaWdubWVudHMuIFRoYXQmIzM5O3MgYSBnb29kIGZpeCwgYnV0IG5vdyB0aGUgcXVlc3Rpb24gaXM6IHdoYXQgd291bGQgYmUgdGhlIGltcGFjdCBvZiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBpbXBsaWNhdGlvbnMgb2YgKm5vdCogaW5pdGlhbGl6aW5nIGBhcGNiX3NgIG1lYW5zIHRoYXQgYGFwbVsxLi4zXWAsIGBhcW1bMS4uM11gLCBgYWRtWzEuLjNdYCwgYW5kIGByZXNlcnZlZDYwWzAuLjNdYCB3b3VsZCBiZSBsZWZ0IHdpdGggd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5lZCB0byBiZSBpbiB0aGF0IG1lbW9yeSBsb2NhdGlvbi4gVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgcHJldHR5IHVucHJlZGljdGFibGUgYmVoYXZpb3IuCgpUaGUgcGxvdCB0aGlja2VucyB0aG91Z2guIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYGFwY2Jfc2AgaXNuJiMzOTt0IGp1c3QgYSBzdGFuZGFsb25lIHN0cnVjdHVyZS4gSXQmIzM5O3MgYSBwb2ludGVyIHRvIGBjcnljYl9zLSZndDthcGNiMWAsIHdoaWNoIGl0c2VsZiBpcyBuZXN0ZWQgd2l0aGluIGB2c2llX3BhZ2UtJmd0O2NyeWNiYC4gVGhpcyBpcyBpbXBvcnRhbnQuIElmIGB2c2llX3BhZ2VgIGlzbiYjMzk7dCB6ZXJvZWQgd2hlbiBpdCYjMzk7cyBhbGxvY2F0ZWQsIHRoZW4gd2UgY291bGQgc3RpbGwgaGF2ZSB1bmluaXRpYWxpemVkIGRhdGEgcHJvcGFnYXRpbmcgZXZlbiBhZnRlciB0aGUgZml4LCBiZWNhdXNlIGBtZW1zZXRgIHdvdWxkIG9ubHkgYXBwbHkgdG8gdGhlIHN1Yi1zdHJ1Y3R1cmUsIG5vdCB0aGUgd2hvbGUgc3RydWN0dXJlLiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gcGF0aCBmb3IgYHZzaWVfcGFnZWAuIEkgc2hvdWxkIGRpZyBpbnRvIGBnZXRfdnNpZV9wYWdlYCB0byB2ZXJpZnkgaG93IGl0JiMzOTtzIGFsbG9jYXRlZCwgYW5kIGlmIGl0JiMzOTtzIGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vdnNpZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDgwOlx0ICogUmV0dXJuczogLSBhZGRyZXNzIG9mIGEgdnNpZSBwYWdlIChjYWNoZWQgb3IgbmV3IG9uZSlcbjE0ODE6XHQgKiAgICAgICAgICAtIE5VTEwgaWYgdGhlIHNhbWUgc2NiIGFkZHJlc3MgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgVkNQVVxuMTQ4MjpcdCAqICAgICAgICAgIC0gRVJSX1BUUigtRU5PTUVNKSBpZiBvdXQgb2YgbWVtb3J5XG4xNDgzOlx0ICovXG4xNDg0Olx0c3RhdGljIHN0cnVjdCB2c2llX3BhZ2UgKmdldF92c2llX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4xNDg1Olx0e1xuMTQ4NjpcdFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xuMTQ4NzpcdFx0aW50IG5yX3ZjcHVzO1xuMTQ4ODpcdFxuMTQ4OTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTQ5MDpcdFx0dnNpZV9wYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5hZGRyX3RvX3BhZ2UsIGFkZHIgXHUwMDNlXHUwMDNlIDkpO1xuMTQ5MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4xNDkyOlx0XHRpZiAodnNpZV9wYWdlKSB7XG4xNDkzOlx0XHRcdGlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKSB7XG4xNDk0Olx0XHRcdFx0aWYgKHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhID09IGFkZHIpXG4xNDk1Olx0XHRcdFx0XHRyZXR1cm4gdnNpZV9wYWdlO1xuMTQ5NjpcdFx0XHRcdC8qXG4xNDk3Olx0XHRcdFx0ICogV2UgcmFjZWQgd2l0aCBzb21lb25lIHJldXNpbmcgJiM0MzsgcHV0dGluZyB0aGlzIHZzaWVcbjE0OTg6XHRcdFx0XHQgKiBwYWdlIGJlZm9yZSB3ZSBncmFiYmVkIGl0LlxuMTQ5OTpcdFx0XHRcdCAqL1xuMTUwMDpcdFx0XHRcdHB1dF92c2llX3BhZ2UodnNpZV9wYWdlKTtcbjE1MDE6XHRcdFx0fVxuMTUwMjpcdFx0fVxuMTUwMzpcdFxuMTUwNDpcdFx0LypcbjE1MDU6XHRcdCAqIFdlIHdhbnQgYXQgbGVhc3QgI29ubGluZV92Y3B1cyBzaGFkb3dzLCBzbyBldmVyeSBWQ1BVIGNhbiBleGVjdXRlXG4xNTA2Olx0XHQgKiB0aGUgVlNJRSBpbiBwYXJhbGxlbC5cbjE1MDc6XHRcdCAqL1xuMTUwODpcdFx0bnJfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbjE1MDk6XHRcbjE1MTA6XHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gudnNpZS5tdXRleCk7XG4xNTExOlx0XHRpZiAoa3ZtLVx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50IFx1MDAzYyBucl92Y3B1cykge1xuMTUxMjpcdFx0XHR2c2llX3BhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPIHwgR0ZQX0RNQSk7XG4xNTEzOlx0XHRcdGlmICghdnNpZV9wYWdlKSB7XG4xNTE0Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZzaWUubXV0ZXgpO1xuMTUxNTpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTUxNjpcdFx0XHR9XG4xNTE3Olx0XHRcdF9fc2V0X2JpdChWU0lFX1BBR0VfSU5fVVNFLCBcdTAwMjZ2c2llX3BhZ2UtXHUwMDNlZmxhZ3MpO1xuMTUxODpcdFx0XHRrdm0tXHUwMDNlYXJjaC52c2llLnBhZ2VzW2t2bS1cdTAwM2VhcmNoLnZzaWUucGFnZV9jb3VudF0gPSB2c2llX3BhZ2U7XG4xNTE5Olx0XHRcdGt2bS1cdTAwM2VhcmNoLnZzaWUucGFnZV9jb3VudCYjNDM7JiM0Mzs7XG4xNTIwOlx0XHR9IGVsc2Uge1xuMTUyMTpcdFx0XHQvKiByZXVzZSBhbiBleGlzdGluZyBlbnRyeSB0aGF0IGJlbG9uZ3MgdG8gbm9ib2R5ICovXG4xNTIyOlx0XHRcdHdoaWxlICh0cnVlKSB7XG4xNTIzOlx0XHRcdFx0dnNpZV9wYWdlID0ga3ZtLVx1MDAzZWFyY2gudnNpZS5wYWdlc1trdm0tXHUwMDNlYXJjaC52c2llLm5leHRdO1xuMTUyNDpcdFx0XHRcdGlmICh0cnlfZ2V0X3ZzaWVfcGFnZSh2c2llX3BhZ2UpKVxuMTUyNTpcdFx0XHRcdFx0YnJlYWs7XG4xNTI2Olx0XHRcdFx0a3ZtLVx1MDAzZWFyY2gudnNpZS5uZXh0JiM0MzsmIzQzOztcbjE1Mjc6XHRcdFx0XHRrdm0tXHUwMDNlYXJjaC52c2llLm5leHQgJT0gbnJfdmNwdXM7XG4xNTI4Olx0XHRcdH1cbjE1Mjk6XHRcdFx0aWYgKHZzaWVfcGFnZS1cdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNjEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrYWdlIGluIFZTSUUgUGFnZSBSZXVzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdnNpZV9wYWdlYCBhbGxvY2F0aW9uIGFuZCByZXVzZSBzY2hlbWUuIEkgc2VlIHRoYXQgdGhlIHBhZ2UgaXMgaW5pdGlhbGx5IGFsbG9jYXRlZCB3aXRoIGBfX0dGUF9aRVJPYCwgd2hpY2ggaXMgZ29vZCBmb3IgaW5pdGlhbCBjbGVhbmxpbmVzcy4gSG93ZXZlciwgdGhlIGNydWNpYWwgYml0IGlzIHRoYXQgaXQmIzM5O3MgY2FjaGVkIGFuZCByZXVzZWQuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSAqZG9lc24mIzM5O3QqIHplcm8gdGhlIHBhZ2UgZHVyaW5nIHJldXNlLiBNeSB0aG91Z2h0IHByb2Nlc3MgaW1tZWRpYXRlbHkganVtcHMgdG8gJiMzNDtzdGFsZSBkYXRhISYjMzQ7IFRoaXMgbWVhbnMgYHZzaWVfcGFnZS0mZ3Q7Y3J5Y2JgIGNvdWxkIHJldGFpbiByZW1uYW50cyBmcm9tIGEgcHJpb3IgZ3Vlc3QmIzM5O3MgdXNhZ2UuIEFuZCB0aGlzIGB2c2llX3BhZ2UtJmd0O2NyeWNiYCBpcywgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBkaXJlY3RseSB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBmb3IgbmVzdGVkIGd1ZXN0IGV4ZWN1dGlvbi4KCk5vdywgaWYgYHNldHVwX2FwY2IxMGAgbGVhdmVzIGBhcG1bMS4uM11gLCBgYXFtWzEuLjNdYCwgYGFkbVsxLi4zXWAgdW5pbml0aWFsaXplZCBkdXJpbmcgaXRzIG9wZXJhdGlvbiwgdGhlIGhhcmR3YXJlICp3aWxsKiByZWFkIHRoZXNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGR1cmluZyBuZXN0ZWQgZ3Vlc3QgZXhlY3V0aW9uLiBUaGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIGEgbmVzdGVkIGd1ZXN0IG9ic2VydmUgdGhlIHN0YXRlIGZyb20gdGhvc2UgdW5pbml0aWFsaXplZCBmaWVsZHM/IFRoaXMgc2VlbXMgbGlrZSBhIGRlZmluaXRlIGluZm9ybWF0aW9uIGxlYWsgdmVjdG9yIGlmIHRoZSBoYXJkd2FyZSYjMzk7cyBvcGVyYXRpb24gaXMgaW5mbHVlbmNlZCBhbmQgb2JzZXJ2YWJsZSBieSB0aGUgbmVzdGVkIGd1ZXN0LiBGb3IgZXhhbXBsZSwgaWYgaXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZSBuZXN0ZWQgZ3Vlc3QgdG8gZXhlY3V0ZSBjcnlwdG8gaW5zdHJ1Y3Rpb25zIGl0IHNob3VsZCBub3QgaGF2ZSBhY2Nlc3MgdG8sIG9yIHJlYWQgc29tZSBzdGF0ZSwgaXQgaXMgY2VydGFpbmx5IGFuIGlzc3VlLgoKVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhlIGNvcHkgb3BlcmF0aW9uIGZyb20gYHNldHVwX2FwY2IxMGAgYmV0d2VlbiBmb3JtYXRzPyBUaGF0IGlzLCBgc2V0dXBfYXBjYjEwYCBjb3BpZXMgRk9STUFUMCB0byBGT1JNQVQxPyBObywgYHNldHVwX2FwY2IxMGAgaXMgdXNlZCB0byBjb3B5IGZyb20gQVBDQiBGT1JNQVQwIHRvIEFQQ0IgRk9STUFUMSwgdGhhdCBpcywgd2hlbiBgZm10X28gPT0gQ1JZQ0JfRk9STUFUMGAgYW5kIGBmbXRfaCA9PSBDUllDQl9GT1JNQVQyYC4gSSBuZWVkIHRvIHJldmlldyB3aGVyZSBgc2V0dXBfYXBjYmAgaXMgY2FsbGVkIHRvIGNsYXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ZzaWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUyOlx0c3RhdGljIGludCBzZXR1cF9hcGNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfcyxcbiAyNTM6XHRcdCAgICAgICBjb25zdCB1MzIgY3J5Y2JfZ3BhLFxuIDI1NDpcdFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX2gsXG4gMjU1Olx0XHQgICAgICAgaW50IGZtdF9vLCBpbnQgZm10X2gpXG4gMjU2Olx0e1xuIDI1NzpcdFx0c3dpdGNoIChmbXRfbykge1xuIDI1ODpcdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuIDI1OTpcdFx0XHRpZiAoKGNyeWNiX2dwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKGNyeWNiX2dwYSAmIzQzOyAyNTYpIFx1MDAyNiBQQUdFX01BU0spKVxuIDI2MDpcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIDI2MTpcdFx0XHRpZiAoZm10X2ggIT0gQ1JZQ0JfRk9STUFUMilcbiAyNjI6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNjM6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMSh2Y3B1LCAodW5zaWduZWQgbG9uZyAqKVx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjEsXG4gMjY0Olx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuIDI2NTpcdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopXHUwMDI2Y3J5Y2JfaC1cdTAwM2VhcGNiMSk7XG4gMjY2Olx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG4gMjY3Olx0XHRcdHN3aXRjaCAoZm10X2gpIHtcbiAyNjg6XHRcdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuIDI2OTpcdFx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbiAyNzA6XHRcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbiAyNzE6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuIDI3MjpcdFx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG4gMjczOlx0XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxuIDI3NDpcdFx0XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMCxcbiAyNzU6XHRcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbiAyNzY6XHRcdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjApO1xuIDI3NzpcdFx0XHR9XG4gMjc4Olx0XHRcdGJyZWFrO1xuIDI3OTpcdFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxuIDI4MDpcdFx0XHRpZiAoKGNyeWNiX2dwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKGNyeWNiX2dwYSAmIzQzOyAzMikgXHUwMDI2IFBBR0VfTUFTSykpXG4gMjgxOlx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gMjgyOlx0XG4gMjgzOlx0XHRcdHN3aXRjaCAoZm10X2gpIHtcbiAyODQ6XHRcdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuIDI4NTpcdFx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbiAyODY6XHRcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbiAyODc6XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuIDI4ODpcdFx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG4gMjg5Olx0XHRcdGNhc2UgQ1JZQ0JfRk9STUFUMDpcbiAyOTA6XHRcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXG4gMjkxOlx0XHRcdFx0XHRcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IwLFxuIDI5MjpcdFx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuIDI5MzpcdFx0XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXHUwMDI2Y3J5Y2JfaC1cdTAwM2VhcGNiMCk7XG4gMjk0Olx0XHRcdH1cbiAyOTU6XHRcdH1cbiAyOTY6XHRcdHJldHVybiAtRUlOVkFMO1xuIDI5NzpcdH1cbiAyOTg6XHRcbiAyOTk6XHQvKipcbiAzMDA6XHQgKiBzaGFkb3dfY3J5Y2IgLSBDcmVhdGUgYSBzaGFkb3cgY29weSBvZiB0aGUgY3J5Y2IgYmxvY2tcbiAzMDE6XHQgKiBAdmNwdTogYSBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ1JZQ0IgRm9ybWF0IE1pc21hdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGl0IGxvb2tzIGxpa2UgYHNldHVwX2FwY2IxMGAgaXMgdHJpZ2dlcmVkIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBmbXRfb2AgaXMgZWl0aGVyIGBDUllDQl9GT1JNQVQxYCBvciBgQ1JZQ0JfRk9STUFUMGAsIHdoaWxlIGBmbXRfaGAgaXMgYENSWUNCX0ZPUk1BVDJgLiBUaGlzIG1pc21hdGNoIGlzIHRoZSBjb3JlIGlzc3VlLiBUaGUgaG9zdCBpcyBhbnRpY2lwYXRpbmcgYSBgRk9STUFUMmAgQ1JZQ0IsIHdoaWNoIHV0aWxpemVzIGBhcGNiMWAsIGJ1dCB0aGUgZ3Vlc3QgaXMgcHJvdmlkaW5nIGEgYEZPUk1BVDFgIG9yIGBGT1JNQVQwYCBDUllDQiwgdXNpbmcgYGFwY2IwYCBpbnN0ZWFkLiBUaGUgZnVuY3Rpb24gYHNldHVwX2FwY2IxMGAgYWN0cyBhcyBhIHRyYW5zbGF0b3IsIGVmZmVjdGl2ZWx5IGNvbnZlcnRpbmcgYGFwY2IwYCBkYXRhIGludG8gYSBjb21wYXRpYmxlIGBhcGNiMWAgc3RydWN0dXJlLgoKVGhlIGNydXggb2YgdGhlIHByb2JsZW0gbGllcyBpbiB0aGUgc3RydWN0dXJhbCBkaWZmZXJlbmNlIGJldHdlZW4gYGFwY2IwYCBhbmQgYGFwY2IxYC4gYGFwY2IwYCBoYXMgYSBzaW5nbGUgZWxlbWVudCBlYWNoIGZvciBgYXBtYCwgYGFxbWAsIGFuZCBgYWRtYCwgd2hlcmVhcyBgYXBjYjFgIGV4cGVjdHMgZm91ciBlbGVtZW50cyBmb3IgZWFjaC4gYHNldHVwX2FwY2IxMGAgZGlsaWdlbnRseSBwb3B1bGF0ZXMgdGhlIGZpcnN0IGVsZW1lbnQgKGBhcG1bMF1gLCBgYXFtWzBdYCwgYGFkbVswXWApIGZyb20gdGhlIGBhcGNiMGAgZGF0YSBidXQgbGVhdmVzIHRoZSBzdWJzZXF1ZW50IGVsZW1lbnRzIChgWzEuLjNdYCkgdW5pbml0aWFsaXplZC4KCk5vdywgYmVjYXVzZSBgdnNpZV9wYWdlYCBpcyByZXVzZWQsIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYSB0aWNraW5nIHRpbWUgYm9tYi4gVGhlIGFycmF5IGVsZW1lbnRzIGBhcG1bMS4uM11gLCBgYXFtWzEuLjNdYCwgYW5kIGBhZG1bMS4uM11gIGFyZSBub3cgc3VzY2VwdGlibGUgdG8gY29udGFpbmluZyBzdGFsZSBkYXRhIGZyb20gYSBwcmV2aW91cyBleGVjdXRpb24sIHBvdGVudGlhbGx5IGZyb20gYSBgRk9STUFUMmAgQ1JZQ0IgdGhhdCAqZnVsbHkqIHV0aWxpemVkIGBhcGNiMWAuCgpUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcy4gQSBuZXN0ZWQgZ3Vlc3QgY291bGQgaW5hZHZlcnRlbnRseSBiZSBncmFudGVkIGFjY2VzcyB0byBjcnlwdG8gcXVldWVzIG9yIGRvbWFpbnMgYXV0aG9yaXplZCBmb3IgYSBwcmV2aW91cyBuZXN0ZWQgZ3Vlc3QuIFRoZSBoYXJkd2FyZSwgaW4gcmVhZGluZyB0aGVzZSBzaGFkb3cgY3J5Y2IgdmFsdWVzLCBjb3VsZCB1c2UgdGhlIGJpdHMgdGhhdCBoYXZlIGJlZW4gc2V0IGluIGBhcG1bMS4uM11gIGZyb20gdGhlIHByZXZpb3VzIGd1ZXN0LCBpZiB0aGV5IHdlcmUgdGhlcmUsIGFsbG93aW5nIGFjY2VzcyBiYXNlZCBvbiB0aG9zZSBzZXQgYml0cyEKCldhaXQsIGlzIHRoaXMgYW4gdW5jaGVja2VkIG1lbW9yeSByZWFkIGJ5IHRoZSBoYXJkd2FyZT8gWWVzLCB0aGUgaGFyZHdhcmUgKmlzKiByZWFkaW5nIHRoZSBzaGFkb3cgQ1JZQ0IuIEEgY2hpbGxpbmcgdGhvdWdodC4KCkkgaW1tZWRpYXRlbHkgY29uc2lkZXIgS01TQU4uIFdpbGwgaXQgY2F0Y2ggdGhpcz8gS01TQU4gaXMgZmFudGFzdGljIGF0IGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBwZXJmb3JtZWQgYnkgdGhlICpDUFUqIHdoZW4gZXhlY3V0aW5nIGtlcm5lbCBjb2RlLiBCdXQgZG9lcyBpdCBkZXRlY3QgcmVhZHMgaW5pdGlhdGVkIGRpcmVjdGx5IGJ5IGhhcmR3YXJlLCB2aWEgRE1BIG9yIFNJRT8KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBLTVNBTiB3b24mIzM5O3QgYXV0b21hdGljYWxseSBpbnRlcmNlcHQgdGhlc2UgaGFyZHdhcmUtaW5pdGlhdGVkIHJlYWRzLiBJdCBkZXBlbmRzIG9uIGFuIGV4cGxpY2l0IGNoZWNrIG9yIGlmIHRoZSBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGNvdWxkIGJlIG1pc3NlZCBlbnRpcmVseS4KClRoZSB3b3JyeSBpcywgaWYgdGhlIG1lbW9yeSBpcyBwYXNzZWQgdG8gaGFyZHdhcmUsIEtNU0FOIG1heSBub3QgZGV0ZWN0IGl0IHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIEtNU0FOIGFubm90YXRpb24gZm9yIHRoZSBoYXJkd2FyZSBoeXBlcmNhbGwsIHN1Y2ggYXMgYGttc2FuX2NoZWNrX21lbW9yeWAuIE5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBpcyBhbnkgS01TQU4gY2hlY2sgZm9yIFNJRSBibG9jayBvciBDUllDQi4gVGltZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2NoZWNrX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS01TQU4gQ2hlY2sgQmVmb3JlIFNJRSBFeGVjdXRpb24/KioKCkFscmlnaHQsIGJlZm9yZSB3ZSBnZXQgYW55IGZ1cnRoZXIgaW50byB0aGlzLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHZlcmlmeWluZyB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBzdGF0dXMuIEl0JiMzOTtzIGEgY3JpdGljYWwgc2FmZXR5IG5ldCwgYW5kIG15IHByaW1hcnkgY29uY2VybiBpcyB0byBjYXRjaCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzICpiZWZvcmUqIHdlIGV2ZW4gdGhpbmsgYWJvdXQgZXhlY3V0aW5nIHRoZSBTeXN0ZW0gSW50ZWdyaXR5IEV4dGVuc2lvbiAoU0lFKS4gVGhlIFNJRSwgb2YgY291cnNlLCByZWxpZXMgb24gYSByb2NrLXNvbGlkIG1lbW9yeSBmb3VuZGF0aW9uLiBBbnkgaW5zdGFiaWxpdHksIGFueSBwb3NzaWJpbGl0eSBvZiB1bmRlZmluZWQgYmVoYXZpb3IgY3JlZXBpbmcgaW4gYXQgdGhhdCBzdGFnZSwgaXMgYSBkaXNhc3RlciB3YWl0aW5nIHRvIGhhcHBlbi4gU28sIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGFsd2F5cyBncmF2aXRhdGVzIHRvd2FyZHMgY29uZmlybWluZyB0aGF0IEtNU0FOIGlzIGFjdGl2ZSBhbmQgdGhhdCBhbnkgcmVsZXZhbnQgY2hlY2tzIGhhdmUgYmVlbiBwZXJmb3JtZWQuIFdlIG5lZWQgdGhhdCBndWFyYW50ZWUgb2YgYSBjbGVhbiBzbGF0ZSBiZWZvcmUgd2UgZXZlbiBlbnRlcnRhaW4gdGhlIGlkZWEgb2YgcnVubmluZyB0aGUgU0lFLiBJdCYjMzk7cyBhbGwgYWJvdXQgcmlzayBtaXRpZ2F0aW9uIGFuZCBlbnN1cmluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBzeXN0ZW0mIzM5O3MgZXhlY3V0aW9uIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxOTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqS01TQU4gQ29tcGF0aWJpbGl0eSDigJMgQSBRdWljayBSZWFsaXR5IENoZWNrKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBJJiMzOTttIHByZXR0eSBzdXJlIEtNU0FOLCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciwgaXNuJiMzOTt0IGZ1bGx5IGJha2VkIG9yIGV2ZW4gKnN1cHBvcnRlZCogb24gczM5MHguIE15IGd1dCYjMzk7cyB0ZWxsaW5nIG1lIHRoYXQmIzM5O3MgYSByZWQgZmxhZy4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoaXMuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHRoZSBwcm9qZWN0IHRvIHJ1biBvbiBzMzkweCwgc28gbGV0JiMzOTtzIGNoZWNrIHRoZSBzdXBwb3J0IG1hdHJpeCBhZ2Fpbi4gTmVlZCB0byBjb25maXJtIEtNU0FOJiMzOTtzIGNhcGFiaWxpdGllcyBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tNU0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTE4NS1cdHNlbGVjdCBIQVZFX0FSQ0hfS0NTQU5cbmFyY2gvczM5MC9LY29uZmlnOjE4NjpcdHNlbGVjdCBIQVZFX0FSQ0hfS01TQU5cbmFyY2gvczM5MC9LY29uZmlnLTE4Ny1cdHNlbGVjdCBIQVZFX0FSQ0hfS0ZFTkNFXG4tLVxuYXJjaC9zMzkwL01ha2VmaWxlPTQwPVVUU19NQUNISU5FXHQ6PSBzMzkweFxuYXJjaC9zMzkwL01ha2VmaWxlOjQxOlNUQUNLX1NJWkVcdDo9ICQoaWYgJChDT05GSUdfS0FTQU4pLDY1NTM2LCQoaWYgJChDT05GSUdfS01TQU4pLDY1NTM2LDE2Mzg0KSlcbmFyY2gvczM5MC9NYWtlZmlsZS00Mi1DSEVDS0ZMQUdTXHQmIzQzOz0gLURfX3MzOTBfXyAtRF9fczM5MHhfX1xuLS1cbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTExPUtDU0FOX1NBTklUSVpFIDo9IG5cbmFyY2gvczM5MC9ib290L01ha2VmaWxlOjEyOktNU0FOX1NBTklUSVpFIDo9IG5cbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTEzLVxuLS1cbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTM5PW9iai0kKENPTkZJR19LRVJORUxfWlNURCkgJiM0Mzs9IGNsel9jdHoub1xuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX0tNU0FOKSAmIzQzOz0ga21zYW4ub1xuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUtNDEtb2JqLSQoQ09ORklHX1NUQUNLUFJPVEVDVE9SKSAmIzQzOz0gc3RhY2twcm90ZWN0b3Iub1xuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYz0zMDU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3ZtZW1fc2l6ZSh1bnNpZ25lZCBsb25nIGlkZW50aXR5X3NpemUsXG4tLVxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTMxNS1cdFx0RklYTUFQX1NJWkUgJiM0MzsgTU9EVUxFU19MRU4gJiM0MzsgS0FTTFJfTEVOO1xuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jOjMxNjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtMzE3LVx0XHR2c2l6ZSAmIzQzOz0gTU9EVUxFU19MRU4gKiAyO1xuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYz0zMjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0dXBfa2VybmVsX21lbW9yeV9sYXlvdXQodW5zaWduZWQgbG9uZyBrZXJuZWxfc2l6ZSlcbi0tXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtMzk5LVx0Vk1BTExPQ19FTkQgPSBNT0RVTEVTX1ZBRERSO1xuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jOjQwMDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNDAxLVx0XHRWTUFMTE9DX0VORCAtPSBNT0RVTEVTX0xFTiAqIDI7XG4tLVxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTQwNy1cdHZtYWxsb2Nfc2l6ZSA9IG1pbih2bWFsbG9jX3NpemUsIHZzaXplKTtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo0MDg6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS01TQU4pKSB7XG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6NDA5Olx0XHQvKiB0YWtlIDIvMyBvZiB2bWFsbG9jIGFyZWEgZm9yIEtNU0FOIHNoYWRvdyBhbmQgb3JpZ2lucyAqL1xuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTQxMC1cdFx0dm1hbGxvY19zaXplID0gcm91bmRfZG93bih2bWFsbG9jX3NpemUgLyAzLCBfU0VHTUVOVF9TSVpFKTtcbi0tXG5hcmNoL3MzOTAvYm9vdC9zdHJpbmcuYy03LSN1bmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuYXJjaC9zMzkwL2Jvb3Qvc3RyaW5nLmM6ODojdW5kZWYgQ09ORklHX0tNU0FOXG5hcmNoL3MzOTAvYm9vdC9zdHJpbmcuYy05LSNpbmNsdWRlIFwmIzM0Oy4uL2xpYi9zdHJpbmcuY1wmIzM0O1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oPTM1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2FyY2hfbG9jYWxfaXJxX3NzbSh1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oLTM5LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmg6NDA6I2lmZGVmIENPTkZJR19LTVNBTlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgtNDEtI2RlZmluZSBhcmNoX2xvY2FsX2lycV9hdHRyaWJ1dGVzIG5vaW5saW5lIG5vdHJhY2UgX19ub19zYW5pdGl6ZV9tZW1vcnkgX19tYXliZV91bnVzZWRcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaDoyOiNpZm5kZWYgX0FTTV9TMzkwX0tNU0FOX0hcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oOjM6I2RlZmluZSBfQVNNX1MzOTBfS01TQU5fSFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtNC1cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaD0xOT1zdGF0aWMgaW5saW5lIHZvaWQgKmFyY2hfa21zYW5fZ2V0X21ldGFfb3JfbnVsbCh2b2lkICphZGRyLCBib29sIGlzX29yaWdpbilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC0yOC1cdFx0XHQodm9pZCAqKWdldF9sb3djb3JlKCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaDoyOTpcdFx0aWYgKEtNU0FOX1dBUk5fT04oaXNfbG93Y29yZV9hZGRyKGFkZHIpKSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTMwLVx0XHRcdHJldHVybiBOVUxMO1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oPTM2PXN0YXRpYyBpbmxpbmUgYm9vbCBrbXNhbl92aXJ0X2FkZHJfdmFsaWQodm9pZCAqYWRkcilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC00Mi1cdCAqIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBIb3dldmVyLCB0aGlzIHdvdWxkIHJlc3VsdCBpbiByZWN1cnNpb24gd2l0aFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg6NDM6XHQgKiBLTVNBTi4gVGhlcmVmb3JlLCBkaXNhYmxlIHByZWVtcHRpb24gaGVyZSwgYW5kIHJlLWVuYWJsZSBwcmVlbXB0aW9uXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC00NC1cdCAqIGJlbG93IHdoaWxlIHN1cHByZXNzaW5nIHJlc2NoZWR1bGVzIHRvIGF2b2lkIHJlY3Vyc2lvbi5cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaC00Ni1cdCAqIE5vdGUsIHRoaXMgc2FjcmlmaWNlcyBvY2Nhc2lvbmFsbHkgYnJlYWtpbmcgc2NoZWR1bGluZyBndWFyYW50ZWVzLlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg6NDc6XHQgKiBBbHRob3VnaCwgYSBrZXJuZWwgY29tcGlsZWQgd2l0aCBLTVNBTiBoYXMgYWxyZWFkeSBnaXZlbiB1cCBvbiBhbnlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQ4LVx0ICogcGVyZm9ybWFuY2UgZ3VhcmFudGVlcyBkdWUgdG8gYmVpbmcgaGVhdmlseSBpbnN0cnVtZW50ZWQuXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtNTgtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaDo1OTojZW5kaWYgLyogX0FTTV9TMzkwX0tNU0FOX0ggKi9cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEwMj1zdGF0aWMgaW5saW5lIGludCBpc19tb2R1bGVfYWRkcih2b2lkICphZGRyKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTExLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTI6I2lmZGVmIENPTkZJR19LTVNBTlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTM6I2RlZmluZSBLTVNBTl9WTUFMTE9DX1NJWkUgKFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TVEFSVClcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE0OiNkZWZpbmUgS01TQU5fVk1BTExPQ19TSEFET1dfU1RBUlQgVk1BTExPQ19FTkRcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE1OiNkZWZpbmUgS01TQU5fVk1BTExPQ19TSEFET1dfRU5EIChLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCAmIzQzOyBLTVNBTl9WTUFMTE9DX1NJWkUpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjExNjojZGVmaW5lIEtNU0FOX1ZNQUxMT0NfT1JJR0lOX1NUQVJUIEtNU0FOX1ZNQUxMT0NfU0hBRE9XX0VORFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTc6I2RlZmluZSBLTVNBTl9WTUFMTE9DX09SSUdJTl9FTkQgKEtNU0FOX1ZNQUxMT0NfT1JJR0lOX1NUQVJUICYjNDM7IEtNU0FOX1ZNQUxMT0NfU0laRSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE4OiNkZWZpbmUgS01TQU5fTU9EVUxFU19TSEFET1dfU1RBUlQgS01TQU5fVk1BTExPQ19PUklHSU5fRU5EXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjExOTojZGVmaW5lIEtNU0FOX01PRFVMRVNfU0hBRE9XX0VORCAoS01TQU5fTU9EVUxFU19TSEFET1dfU1RBUlQgJiM0MzsgTU9EVUxFU19MRU4pXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEyMDojZGVmaW5lIEtNU0FOX01PRFVMRVNfT1JJR0lOX1NUQVJUIEtNU0FOX01PRFVMRVNfU0hBRE9XX0VORFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjE6I2RlZmluZSBLTVNBTl9NT0RVTEVTX09SSUdJTl9FTkQgKEtNU0FOX01PRFVMRVNfT1JJR0lOX1NUQVJUICYjNDM7IE1PRFVMRVNfTEVOKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjItI2VuZGlmXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oPTIxPXZvaWQgKm1lbW1vdmUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtMjItXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmg6MjM6I2lmICFkZWZpbmVkKENPTkZJR19LQVNBTikgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19LTVNBTilcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaC0yNC0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNIUlx0LyogaW5saW5lIFx1MDAyNiBhcmNoIGZ1bmN0aW9uICovXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oPTQxPWNoYXIgKnN0cnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oOjQyOiNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfS0FTQU4pIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChDT05GSUdfS01TQU4pICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDMtXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgtMTYtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaDoxNzojaWYgZGVmaW5lZChDT05GSUdfS0FTQU4pIHx8IGRlZmluZWQoQ09ORklHX0tNU0FOKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgtMTgtI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUiA0XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaD0yNT12b2lkIGRlYnVnX3VzZXJfYXNjZShpbnQgZXhpdCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTI2LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDoyNzojaWZkZWYgQ09ORklHX0tNU0FOXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTI4LSNkZWZpbmUgdWFjY2Vzc19rbXNhbl9vcl9pbmxpbmUgbm9pbmxpbmUgX19tYXliZV91bnVzZWQgX19ub19zYW5pdGl6ZV9tZW1vcnlcbi0tXG5hcmNoL3MzOTAva2VybmVsL3Vud2luZF9iYy5jPTQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19maW5hbF9wdF9yZWdzKHN0cnVjdCB1bndpbmRfc3RhdGUgKnN0YXRlLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmMtNTMtXG5hcmNoL3MzOTAva2VybmVsL3Vud2luZF9iYy5jOjU0Oi8qIEF2b2lkIEtNU0FOIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgZnJhbWVzLiAqL1xuYXJjaC9zMzkwL2tlcm5lbC91bndpbmRfYmMuYy01NS1fX25vX2ttc2FuX2NoZWNrc1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmM9MTIzPUVYUE9SVF9TWU1CT0xfR1BMKHVud2luZF9uZXh0X2ZyYW1lKTtcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmMtMTI0LVxuYXJjaC9zMzkwL2tlcm5lbC91bndpbmRfYmMuYzoxMjU6LyogQXZvaWQgS01TQU4gZmFsc2UgcG9zaXRpdmVzIGZyb20gdG91Y2hpbmcgdW5pbml0aWFsaXplZCBmcmFtZXMuICovXG5hcmNoL3MzOTAva2VybmVsL3Vud2luZF9iYy5jLTEyNi1fX25vX2ttc2FuX2NoZWNrc1xuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0zMTU9c3RhdGljIGludCBwdF9kdW1wX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzQzLSNlbmRpZlxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM0NDojaWZkZWYgQ09ORklHX0tNU0FOXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzQ1Olx0cmMgfD0gYWRkX21hcmtlcihLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCwgS01TQU5fVk1BTExPQ19TSEFET1dfRU5ELCBcJiMzNDtLbXNhbiB2bWFsbG9jIFNoYWRvd1wmIzM0Oyk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzQ2Olx0cmMgfD0gYWRkX21hcmtlcihLTVNBTl9WTUFMTE9DX09SSUdJTl9TVEFSVCwgS01TQU5fVk1BTExPQ19PUklHSU5fRU5ELCBcJiMzNDtLbXNhbiB2bWFsbG9jIE9yaWdpbnNcJiMzNDspO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM0NzpcdHJjIHw9IGFkZF9tYXJrZXIoS01TQU5fTU9EVUxFU19TSEFET1dfU1RBUlQsIEtNU0FOX01PRFVMRVNfU0hBRE9XX0VORCwgXCYjMzQ7S21zYW4gTW9kdWxlcyBTaGFkb3dcJiMzNDspO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM0ODpcdHJjIHw9IGFkZF9tYXJrZXIoS01TQU5fTU9EVUxFU19PUklHSU5fU1RBUlQsIEtNU0FOX01PRFVMRVNfT1JJR0lOX0VORCwgXCYjMzQ7S21zYW4gTW9kdWxlcyBPcmlnaW5zXCYjMzQ7KTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNDktI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKktNU0FOIG9uIHMzOTB4IGFuZCBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBzbyBLTVNBTiAqZG9lcyogc3VwcG9ydCBzMzkweC4gVGhhdCYjMzk7cyBnb29kIG5ld3MuIEJ1dCBteSBpbW1lZGlhdGUgY29uY2VybiBpcywgZG9lcyBLTVNBTiBlZmZlY3RpdmVseSBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB0aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwsIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBTeXN0ZW0gSW5zdHJ1Y3Rpb24gRXh0ZW5zaW9uIChTSUUpPwoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoaXM6IEtNU0FOIG9wZXJhdGVzIGJ5IGluc3RydW1lbnRpbmcgQ1BVIGluc3RydWN0aW9ucy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZGV0ZWN0IHdoZW4gdGhlICpDUFUqIGl0c2VsZiBhdHRlbXB0cyB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBTbywgaWYgdGhlIENQVSB0cmllcyB0byBsb2FkIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgZGlyZWN0bHksIEtNU0FOIHNob3VsZCBmbGFnIGl0LiBCdXQgd2hhdCBhYm91dCBhIHNjZW5hcmlvIHdoZXJlIHRoZSBDUFUgaGFuZHMgb2ZmIGEgKnBvaW50ZXIqIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBoYXJkd2FyZSwgdXNpbmcgU0lFIGluc3RydWN0aW9ucz8gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreS4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCwgd2l0aG91dCBleHBsaWNpdCBpbnN0cnVtZW50YXRpb24sIEtNU0FOICp3b24mIzM5O3QqIGNhdGNoIHRoYXQuIEl0JiMzOTtzIHRoZSBoYXJkd2FyZSBkb2luZyB0aGUgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIHJlYWQgbm93LCBub3QgdGhlIENQVSBpbnN0cnVjdGlvbiBzdHJlYW0gdGhhdCBLTVNBTiBpcyB3YXRjaGluZy4gVGhlIGtleSBoZXJlLCBhbmQgd2hhdCBJIG5lZWQgdG8gbG9vayBmb3IsIGlzIGEgYGttc2FuX2NoZWNrX21lbW9yeWAgY2FsbC4gSWYgdGhlcmUmIzM5O3MgYW4gZXhwbGljaXQgY2FsbCB0byBga21zYW5fY2hlY2tfbWVtb3J5YCBiZWZvcmUgdGhlIGhhcmR3YXJlIGV4ZWN1dGlvbiBoYXBwZW5zLCB0aGF0ICpzaG91bGQqIGZvcmNlIEtNU0FOIHRvIGNoZWNrIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSB0aGUgQ1BVIGJlZm9yZSB0aGUgaGFyZHdhcmUgZ2V0cyBpdHMgaGFuZHMgb24gaXQuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBTSUUgYmxvY2sgb3IgQ1JZQ0IuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGlkZW50aWZ5aW5nIGlmIHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHNhZmVndWFyZHMgaW4gcGxhY2UuIEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBwcm9hY3RpdmVseSBjaGVja2luZyB0aGUgbWVtb3J5IGFyZWEgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2NoZWNrX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMjcKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2sgYW5kIFVzZXIgU3BhY2UgQ29weWluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBtZW1vcnkgc2FmZXR5IHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUmIzM5O3MgS1ZNIGltcGxlbWVudGF0aW9uLiBGaXJzdCB0aG91Z2h0OiB3aGVyZSBpcyBga21zYW5fY2hlY2tfbWVtb3J5YCBkZWZpbmVkLCBvciByYXRoZXIgKm5vdCogZGVmaW5lZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBgYXJjaC9zMzkwL2t2bS9gIGRpcmVjdG9yeT8gSG1tLCBJIGNhbiYjMzk7dCBmaW5kIGl0LiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBjb25zaWRlciB0aGUgYGNvcHlfdG9fdXNlcmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgaG90c3BvdCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgSSYjMzk7dmUgbG9jYXRlZCB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0IGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgLiBJbnRlcmVzdGluZy4gTGluZSA1NzMyIGlzIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gVGhleSYjMzk7cmUgY29weWluZyBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIHRvIHVzZXIgc3BhY2UsIHJpZ2h0IGFmdGVyIGhhbmRsaW5nIGEgYGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXBgIGNhbGwuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIHBhc3NpbmcgYmFjayByZXR1cm4gY29kZXMgYW5kIHJlc3VsdHMgZnJvbSB0aGUgaHlwZXJ2aXNvci4gQnV0LCBob3cgYXJlIHRoZXkgaGFuZGxpbmcgdGhlIG1lbW9yeSBjb3B5PwoKQWgsIHJpZ2h0LCBub3cgSSBzZWUgdGhleSBhcmUgdXNpbmcgYG9mZnNldG9mYCB0byBjYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGBhcmdwYC4gU28gaXQmIzM5O3MgY29weWluZyB0byB0aGUgYHJjYCBmaWVsZCBvZiBhIGBrdm1fcHZfY21kYCBzdHJ1Y3QuIFRoYXQmIzM5O3MgYmV0dGVyIHRoYW4gZGlyZWN0bHkgd3JpdGluZyB0byBgYXJncGAsIHByZXZlbnRpbmcgd3JpdGluZyB0byBhcmJpdHJhcnkgbWVtb3J5IGxvY2F0aW9ucy4gTm93LCBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGBjbWRgIHN0cnVjdCBjb21lcyBmcm9tIHRvIGV2YWx1YXRlIHRoZSBzYWZldHkgaGVyZS4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgd2hlcmUgdGhpcyBgY21kYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gaXMga2V5IHRvIGNvbmZpcm1pbmcgdGhlcmUgYXJlIG5vIG91dC1vZi1ib3VuZHMgd3JpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX3B2X2NtZCBjbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MzI9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE2LVx0Y2FzZSBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORDoge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MTc6XHRcdHN0cnVjdCBrdm1fcHZfY21kIGNtZDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg2MgoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtWTV9TMzkwX1BWX0NQVV9DT01NQU5EIENvZGUqKgoKT2theSwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIGBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgY29tbWFuZCBpcyAqZG9pbmcqLiBNeSBpbW1lZGlhdGUgbWVudGFsIG1hcCBpcyBzdGFydGluZyB0byBidWlsZCDigJMgdGhpcyBpcyBsaWtlbHkgYSBwcml2aWxlZ2VkIFZNIGNvbW1hbmQgc3BlY2lmaWMgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBsaWtlbHkgcmVsYXRlZCB0byBwYXJhdmlydHVhbGl6ZWQgb3BlcmF0aW9ucyBmb3IgdGhlIENQVS4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBXaGF0IHN0cnVjdHVyZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGllZCB0byBpdHMgaW1wbGVtZW50YXRpb24/JiMzNDsKCkkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMsIGxvb2tpbmcgZm9yIGl0cyBkZWZpbml0aW9uLCBhbnkgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzIChsaWtlIGBrdm1fczM5MF9wdl9jcHVfY29tbWFuZF9hcmdzYCBwZXJoYXBzPyksIGFuZCBpdHMgdXNhZ2UuIEkmIzM5O2xsIG1lbnRhbGx5IG5vdGUgYW55IGZsYWdzIG9yIGFyZ3VtZW50cyB0aGlzIGNvbW1hbmQgdGFrZXM7IGEgZGVlcCBkaXZlIGluIHRoZSBrZXJuZWwgY29kZSB1c3VhbGx5IHJldmVhbHMgd2hhdCB0aG9zZSB0aGluZ3MgYXJlIGJlaW5nIHVzZWQgZm9yLgoKU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gaWRlbnRpZnk6CgoqICAgKipJdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBzMzkwIEtWTSBhcmNoaXRlY3R1cmU6KiogSXMgdGhpcyByZWxhdGVkIHRvIENQVSBob3RwbHVnLCB2aXJ0dWFsaXphdGlvbiBjb250cm9sLCBndWVzdCByZWdpc3RlciBtYW5pcHVsYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoqICAgKipQcml2aWxlZ2UgTGV2ZWw6KiogV2hvIGNhbiBjYWxsIHRoaXM/IERvZXMgaXQgcmVxdWlyZSByb290IHByaXZpbGVnZXMsIG9yIGlzIHRoZXJlIGEgbW9yZSBudWFuY2VkIGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbSBhdCBwbGF5PwoqICAgKipJbnRlcmFjdGlvbiB3aXRoIEhhcmR3YXJlOioqIERvZXMgaXQgdHJhbnNsYXRlIGRpcmVjdGx5IGludG8gaHlwZXJjYWxscywgb3IgZG9lcyBpdCBvcGVyYXRlIHRocm91Z2ggc29mdHdhcmUgZW11bGF0aW9uPyBVbmRlcnN0YW5kaW5nIHRoaXMgaW1wYWN0cyBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMuCiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGNvbW1hbmQgZmFpbHM/IEFyZSBlcnJvciBjb2RlcyB3ZWxsLWRlZmluZWQgYW5kIHByb3BhZ2F0ZWQgY29ycmVjdGx5PwoqICAgKipDb25jdXJyZW5jeSBJc3N1ZXM6KiogRG9lcyB0aGUgY29kZSBoYW5kbGUgbXVsdGlwbGUgdkNQVXMgY29uY3VycmVudGx5PyBBcmUgdGhlcmUgYW55IHNwaW5sb2NrcyBvciBtdXRleGVzIHRoYXQgY291bGQgaW50cm9kdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yLCB3b3JzZSwgcmFjZSBjb25kaXRpb25zPwoKRXNzZW50aWFsbHksIEkmIzM5O20gc2V0dGluZyBvdXQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgdGhlIG1lY2hhbmljcyBvZiBpdHMgaW1wbGVtZW50YXRpb24sIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBzZWN1cml0eS4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgaXQgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NzE1Olx0XHR9XG41NzE2Olx0XHRjYXNlIEtWTV9TMzkwX1BWX0NQVV9DT01NQU5EOiB7XG41NzE3Olx0XHRcdHN0cnVjdCBrdm1fcHZfY21kIGNtZDtcbjU3MTg6XHRcbjU3MTk6XHRcdFx0ciA9IC1FSU5WQUw7XG41NzIwOlx0XHRcdGlmICghaXNfcHJvdF92aXJ0X2hvc3QoKSlcbjU3MjE6XHRcdFx0XHRicmVhaztcbjU3MjI6XHRcbjU3MjM6XHRcdFx0ciA9IC1FRkFVTFQ7XG41NzI0Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjbWQsIGFyZ3AsIHNpemVvZihjbWQpKSlcbjU3MjU6XHRcdFx0XHRicmVhaztcbjU3MjY6XHRcbjU3Mjc6XHRcdFx0ciA9IC1FSU5WQUw7XG41NzI4Olx0XHRcdGlmIChjbWQuZmxhZ3MpXG41NzI5Olx0XHRcdFx0YnJlYWs7XG41NzMwOlx0XG41NzMxOlx0XHRcdC8qIFdlIG9ubHkgaGFuZGxlIHRoaXMgY21kIHJpZ2h0IG5vdyAqL1xuNTczMjpcdFx0XHRpZiAoY21kLmNtZCAhPSBLVk1fUFZfRFVNUClcbjU3MzM6XHRcdFx0XHRicmVhaztcbjU3MzQ6XHRcbjU3MzU6XHRcdFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgXHUwMDI2Y21kKTtcbjU3MzY6XHRcbjU3Mzc6XHRcdFx0LyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovXG41NzM4Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCAmIzQzOyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3B2X2NtZCwgcmMpLCBcdTAwMjZjbWQucmMsXG41NzM5Olx0XHRcdFx0XHQgc2l6ZW9mKGNtZC5yYykgJiM0Mzsgc2l6ZW9mKGNtZC5ycmMpKSlcbjU3NDA6XHRcdFx0XHRyID0gLUVGQVVMVDtcbjU3NDE6XHRcdFx0YnJlYWs7XG41NzQyOlx0XHR9XG41NzQzOlx0XHRkZWZhdWx0OlxuNTc0NDpcdFx0XHRyID0gLUVOT1RUWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFMzOTAgVmlydHVhbCBDUFUgRHVtcCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYGNtZGAgc3RydWN0dXJlIGlzIGhhbmRsZWQgaGVyZS4gVGhlIGNydWNpYWwgcG9pbnQgc2VlbXMgdG8gYmUgdGhhdCBgY21kYCBnZXRzIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9mcm9tX3VzZXIoJmFtcDtjbWQsIGFyZ3AsIHNpemVvZihjbWQpKWAuIFRoaXMgaXMga2V5LiBUaGVuIGBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsICZhbXA7Y21kKWAgZ2V0cyBpbnZva2VkLiBUaGUgcG90ZW50aWFsIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBtaWdodCBtb2RpZnkgYGNtZC5yY2AgYW5kIGBjbWQucnJjYC4gRmluYWxseSwgdGhvc2UgbW9kaWZpZWQgdmFsdWVzIGFyZSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgdGhlIGVudGlyZSBgY21kYCBzdHJ1Y3R1cmUgb3JpZ2luYXRlcyBmcm9tIHVzZXIgc3BhY2UsIHdlIHNob3VsZG4mIzM5O3QgaGF2ZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgbGVha3MgaGVyZS4gVGhhdCYjMzk7cyBnb29kLgoKQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhpcy4gSSYjMzk7bSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nLiBJcyB0aGVyZSBhbnkgcGFkZGluZyB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAgaXRzZWxmPyBJZiB0aGVyZSAqaXMqIHBhZGRpbmcsIGFuZCBpZiBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAgc29tZWhvdyBtYW5pcHVsYXRlcyB0aGF0IHBhZGRpbmcsIGV2ZW4gaWYgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgdXNlZCBpbiB0aGUgY29weS1iYWNrLCB0aGF0IGNvdWxkIGNyZWF0ZSBhIHByb2JsZW0uIEkgYmV0dGVyIHZlcmlmeSB0aGUgc3RydWN0dXJlJiMzOTtzIGxheW91dC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9wdl9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTI4MD1lbnVtIHB2X2NtZF9pZCB7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtMjkzLVxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6Mjk0OnN0cnVjdCBrdm1fcHZfY21kIHtcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTI5NS1cdF9fdTMyIGNtZDtcdC8qIENvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgKi9cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjQ4MD1zdGF0aWMgc3NpemVfdCBrdm1fczM5MF9oYW5kbGVfcHZfaW5mbyhzdHJ1Y3Qga3ZtX3MzOTBfcHZfaW5mbyAqaW5mbylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjUxOC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNTE5OnN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfZG1wKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wdl9jbWQgKmNtZCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTIwLVx0XHRcdCAgIHN0cnVjdCBrdm1fczM5MF9wdl9kbXAgZG1wKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTgwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI1ODE6c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHYoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1ODIte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAyNi1cdGNhc2UgS1ZNX1MzOTBfUFZfQ09NTUFORDoge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwMjc6XHRcdHN0cnVjdCBrdm1fcHZfY21kIGFyZ3M7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAyOC1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ5MD1zdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0OTE6XHRcdFx0XHRcdHN0cnVjdCBrdm1fcHZfY21kICpjbWQpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ5Mi17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MzI9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE2LVx0Y2FzZSBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORDoge1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MTc6XHRcdHN0cnVjdCBrdm1fcHZfY21kIGNtZDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE4LVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzM3LVx0XHQvKiBBbHdheXMgY29weSBvdmVyIFVWIHJjIC8gcnJjIGRhdGEgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzM4Olx0XHRpZiAoY29weV90b191c2VyKGFyZ3AgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXHUwMDI2Y21kLnJjLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MzktXHRcdFx0XHQgc2l6ZW9mKGNtZC5yYykgJiM0Mzsgc2l6ZW9mKGNtZC5ycmMpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyOTYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHN0cnVjdCBrdm1fcHZfY21kYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGt2bV9wdl9jbWRgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IHN0cnVjdHVyZSBob2xkcyBhbmQgaXRzIHJvbGUgd2l0aGluIEtWTSYjMzk7cyBwYXJhLXZpcnR1YWxpemVkIGludGVyZmFjZS4gSXQmIzM5O3MgdGhlIGNvbW1hbmQgc3RydWN0dXJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0IHZpYSBoeXBlcmNhbGxzLCBpc24mIzM5O3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsYXlvdXQgdG8gcmVjYWxsIGhvdyBpdCYjMzk7cyB1c2VkIGZvciB2YXJpb3VzIG9wZXJhdGlvbnM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IG1lbW9yeSBtYXBwaW5nLCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGJpdGZpZWxkcyB3aXRoaW4gaXQgYXJlIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0OyB0aGV5IHVzdWFsbHkgZW5jb2RlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbW1hbmQgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBjaGFuZ2VzIGFjcm9zcyBrZXJuZWwgdmVyc2lvbnMgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCB0aGUgb2xkZXIgZ3Vlc3QvbmV3ZXIgaG9zdCBjb21wYXRpYmlsaXR5LiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgZmllbGRzIHRoYXQgZGljdGF0ZSB0aGUgYmVoYXZpb3I/IFRoZSBjb21tYW5kIElELCBjZXJ0YWlubHkuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIGFzc29jaWF0ZWQgZGF0YSBwb2ludGVyLCBpdHMgc2l6ZSBhbmQsIG9mIGNvdXJzZSwgYW55IHN0YXR1cyByZXBvcnRpbmcgZmllbGRzIHRvIGNoZWNrIHRoYXQgaHlwZXJjYWxsIGhhcyBiZWVuIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuIEkgbWlnaHQgYWxzbyBiZSBpbnRlcmVzdGVkIGluIHdoYXQgdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBsb2dpYy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBhICYjMzk7bWFnaWMgbnVtYmVyJiMzOTsgaW4gdGhlIGhlYWRlciB0byBlbnN1cmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIG5vdCB0aGUgZGVmaW5pdGlvbiwgdG8gc2VlIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0S1ZNX1BWX0FTWU5DX0NMRUFOVVBfUFJFUEFSRSxcbiAyOTE6XHRcdEtWTV9QVl9BU1lOQ19DTEVBTlVQX1BFUkZPUk0sXG4gMjkyOlx0fTtcbiAyOTM6XHRcbiAyOTQ6XHRzdHJ1Y3Qga3ZtX3B2X2NtZCB7XG4gMjk1Olx0XHRfX3UzMiBjbWQ7XHQvKiBDb21tYW5kIHRvIGJlIGV4ZWN1dGVkICovXG4gMjk2Olx0XHRfX3UxNiByYztcdC8qIFVsdHJhdmlzb3IgcmV0dXJuIGNvZGUgKi9cbiAyOTc6XHRcdF9fdTE2IHJyYztcdC8qIFVsdHJhdmlzb3IgcmV0dXJuIHJlYXNvbiBjb2RlICovXG4gMjk4Olx0XHRfX3U2NCBkYXRhO1x0LyogRGF0YSBvciBhZGRyZXNzICovXG4gMjk5Olx0XHRfX3UzMiBmbGFnczsgICAgLyogZmxhZ3MgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBNdXN0IGJlIDAgZm9yIG5vdyAqL1xuIDMwMDpcdFx0X191MzIgcmVzZXJ2ZWRbM107XG4gMzAxOlx0fTtcbiAzMDI6XHRcbiAzMDM6XHRzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCB7XG4gMzA0Olx0XHQvKiBpbiAqL1xuIDMwNTpcdFx0X191MzIgZmg7ICAgICAgICAgICAgICAgLyogdGFyZ2V0IGRldmljZSAqL1xuIDMwNjpcdFx0X191OCAgb3A7ICAgICAgICAgICAgICAgLyogb3BlcmF0aW9uIHRvIHBlcmZvcm0gKi9cbiAzMDc6XHRcdF9fdTggIHBhZFszXTtcbiAzMDg6XHRcdHVuaW9uIHtcbiAzMDk6XHRcdFx0LyogZm9yIEtWTV9TMzkwX1pQQ0lPUF9SRUdfQUVOICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgd2l0aCB0aGUgaW5pdGlhbCBjaGVjayBjb25jZXJuaW5nIGByY2AgYW5kIGBycmNgLCB0aG9zZSBhcmUgYF9fdTE2YCwgc28gdGhleSYjMzk7cmUgY29udGlndW91cyBhbmQgdGhlIHRvdGFsIHNpemUgaXMgNCBieXRlcy4gYHNpemVvZihjbWQucmMpICYjNDM7IHNpemVvZihjbWQucnJjKWAgY29uZmlybXMgdGhpcywgYW5kIHRoZXJlJiMzOTtzIG5vIHBhZGRpbmcuIFRoZXkmIzM5O3JlIGNvcGllZCBmcm9tIGAmYW1wO2NtZC5yY2AsIHdoaWNoIG1lYW5zIHRoZXJlJiMzOTtzIG5vIGltbWVkaWF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGluIHRoYXQgYXJlYS4KCk5vdywgbG9va2luZyBhdCBga3ZtX3MzOTBfa2V5b3BgLCBpdCBzZWVtcyBsaWtlIGEgbG9ja2luZyBmaXguIFRoZSBga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2VgIHJlYWQgaXMgcHJvdGVjdGVkIGJ5IGEgbG9jaywgYW5kIHRoZSBhc2NlIGlzIGRlY2xhcmVkIGxvY2FsbHkuIE5vIGltbWVkaWF0ZSBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKTmV4dCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBqdXN0IGFkZHJlc3NlcyBzaWduYWwgaGFuZGxpbmcsIGVuc3VyaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSlgIGlzIGFsd2F5cyBjYWxsZWQuIE5vIGlzc3VlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGp1bXBpbmcgb3V0IGhlcmUgZWl0aGVyLgoKRmluYWxseSwgYHNldHVwX2FwY2IxMGAgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSByZW1lbWJlciBhbmFseXppbmcgdGhpcyBiZWZvcmUsIGBhcGNiX3NgIHBvaW50cyB0byBgJmFtcDtjcnljYl9zLSZndDthcGNiMWAgaW5zaWRlIGB2c2llX3BhZ2UtJmd0O2NyeWNiYC4gSSBzZWUgdGhhdCBgdnNpZV9wYWdlYCBpcyByZXVzZWQgd2l0aG91dCB6ZXJvaW5nLCBhbmQgbm93IHRoZSBjb2RlICpkb2VzKiBgbWVtc2V0YCBgYXBjYl9zYC4gVGhhdCBzdGlsbCBkb2VzIG5vdCBmaXggdGhlIG9yaWdpbmFsIHByb2JsZW0uIFRoZSBpc3N1ZSBpcyB0aGF0IG5vdywgYGFwY2Jfcy0mZ3Q7YXBtWzEuLjNdYCwgYGFxbVsxLi4zXWAsIGBhZG1bMS4uM11gIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgY29udGFpbmluZyBkYXRhIGZyb20gcHJldmlvdXMgdXNlIG9mIGB2c2llX3BhZ2VgLiBUaGlzIHN0YWxlIGRhdGEgaXMgdGhlbiB1c2VkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSB3aGVuIGV4ZWN1dGluZyB0aGUgbmVzdGVkIGd1ZXN0LiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBzZWN1cml0eSBpc3N1ZSwgcG90ZW50aWFsbHkgYWxsb3dpbmcgYSBuZXN0ZWQgZ3Vlc3QgdG8gYWNjZXNzIHJlc291cmNlcyBpdCBzaG91bGRuJiMzOTt0LiBUaGUgcmVhbCBwcm9ibGVtIGlzIHRoYXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBkb2VzbiYjMzk7dCBkZXRlY3QgdGhpcyBpc3N1ZSBiZWNhdXNlIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSBhbmQgbm90IGJ5IHRoZSBDUFUuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQhIEJ1dCB3YWl0Li4uIGlzIHRoZXJlICphbnkqIGNoYW5jZSB0aGUgQ1BVIGxhdGVyIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBkZXJpdmVkIHZhbHVlcyBiYXNlZCBvbiB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbWFraW5nIGl0IHZ1bG5lcmFibGUgdG8gZGV0ZWN0aW9uPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgbW9yZSBjYXJlZnVsbHkgdG8gZW5zdXJlIHRoYXQgYGFwY2Jfc2AgKG9yIGB2c2llX3BhZ2UtJmd0O2NyeWNiYCkgaXMgKm5vdCogcmVhZCBieSB0aGUgQ1BVIGxhdGVyIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcGNiMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMTU5PXZvaWQga3ZtX2FyY2hfY3J5cHRvX3NldF9tYXNrcyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKmFwbSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2Ny1cdGNhc2UgQ1JZQ0JfRk9STUFUMjogLyogQVBDQjEgdXNlIDI1NiBiaXRzICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE2ODpcdFx0bWVtY3B5KGNyeWNiLVx1MDAzZWFwY2IxLmFwbSwgYXBtLCAzMik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2OS1cdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcJiMzNDtTRVQgQ1JZQ0I6IGFwbSAlMDE2bHggJTAxNmx4ICUwMTZseCAlMDE2bHhcJiMzNDssXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3MC1cdFx0XHQgYXBtWzBdLCBhcG1bMV0sIGFwbVsyXSwgYXBtWzNdKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTcxOlx0XHRtZW1jcHkoY3J5Y2ItXHUwMDNlYXBjYjEuYXFtLCBhcW0sIDMyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTcyLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0O1NFVCBDUllDQjogYXFtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFwmIzM0OyxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTczLVx0XHRcdCBhcW1bMF0sIGFxbVsxXSwgYXFtWzJdLCBhcW1bM10pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNzQ6XHRcdG1lbWNweShjcnljYi1cdTAwM2VhcGNiMS5hZG0sIGFkbSwgMzIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzUtXHRcdFZNX0VWRU5UKGt2bSwgMywgXCYjMzQ7U0VUIENSWUNCOiBhZG0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XCYjMzQ7LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMjA5PXZvaWQga3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIxNC1cdCAgICAgICBzaXplb2Yoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFwY2IwKSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNTpcdG1lbXNldChcdTAwMjZrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXHUwMDNlYXBjYjEsIDAsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNjpcdCAgICAgICBzaXplb2Yoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFwY2IxKSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIxNy1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2My0vKiBDb3B5IHRvIEFQQ0IgRk9STUFUMSBmcm9tIEFQQ0IgRk9STUFUMCAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjU6XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xOTQ9c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjExLS8qKlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjEyOiAqIHNldHVwX2FwY2IxMSAtIENvcHkgdGhlIEZPUk1BVDEgQVBDQiBmcm9tIHRoZSBndWVzdCB0byB0aGUgc2hhZG93IENSWUNCXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTMtICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjE5LSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MjIwOnN0YXRpYyBpbnQgc2V0dXBfYXBjYjExKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqYXBjYl9zLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjIxLVx0XHRcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyNjpcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IxKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNy1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyOC1cdGlmIChyZWFkX2d1ZXN0X3JlYWwodmNwdSwgYXBjYl9ncGEsIGFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyOTpcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMSkpKVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjMwLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMzItXHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMzM6XHRcdCAgIEJJVFNfUEVSX0JZVEUgKiBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMzQtXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9MjUyPXN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjYyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MjYzOlx0XHRyZXR1cm4gc2V0dXBfYXBjYjExKHZjcHUsICh1bnNpZ25lZCBsb25nICopXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2NC1cdFx0XHRcdCAgICBjcnljYl9ncGEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjU6XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZjcnljYl9oLVx1MDAzZWFwY2IxKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2Ni1cdGNhc2UgQ1JZQ0JfRk9STUFUMTpcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjgtXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI2OTpcdFx0XHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzAtXHRcdFx0XHRcdCAgICBjcnljYl9ncGEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNzE6XHRcdFx0XHRcdCAgICBcdTAwMjZjcnljYl9oLVx1MDAzZWFwY2IxKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3Mi1cdFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4Ni1cdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NzpcdFx0XHRcdFx0ICAgIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg4LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVlZCBmb3IgS01TQU4gaW4gVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgQ1BVIGlzbiYjMzk7dCBhY3R1YWxseSByZWFkaW5nIGBhcGNiMWAgYWZ0ZXIgSSBzZXQgaXQgdXA7IHRoZSBoYXJkd2FyZSAoU0lFKSBpcyBkb2luZyB0aGF0LiBLTVNBTiBvbmx5IGluc3RydW1lbnRzIENQVSBpbnN0cnVjdGlvbnMsIHNvIGl0JiMzOTtzIG5vdCBnb2luZyB0byBjYXRjaCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBIbW0sIGxldCBtZSByZS1yZWFkIHRoZSBwcm9tcHQuIEl0IHNheXMgdG8gc2V0IGBOZWVkc0tNU0FOPXRydWVgICpvbmx5IGlmKiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2VydGFpbiByaXNrcywgc3BlY2lmaWNhbGx5OiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJzLCBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzICpjb3VsZCogYmUgcmVhZCBsYXRlciwgb3IgbmV3IGJvdW5kcyBjaGVja3MgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGlzIHBhdGNoICpkb2VzKiBtb2RpZnkgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBhcGNiX3NgICh3aGljaCBpcyB0aGUgc2FtZSBhcyBga3ZtX3MzOTBfYXBjYjFgKSwgYSBjb21wbGV4IGRhdGEgc3RydWN0dXJlLCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyAqY291bGQqIGJlIHJlYWQgbGF0ZXIgYnkgdGhlIGhhcmR3YXJlLiBCdXQsIHdhaXQsIEkgYWxyZWFkeSBrbm93IEtNU0FOIGRvZXNuJiMzOTt0IGRldGVjdCBoYXJkd2FyZSByZWFkcy4gVGhlIHJ1bGVzIHNwZWNpZmljYWxseSBzdGF0ZSwgYW5kIEkmIzM5O20gcGFyYXBocmFzaW5nIGhlcmUsICYjMzQ7RG9uJiMzOTt0IGJvdGhlciB3aXRoIEtNU0FOIGlmIEtBU0FOIG9yIG90aGVyIHRvb2xzIGNhbiBjYXRjaCB0aGUgYnVnLiBLTVNBTiBpcyBleHBlbnNpdmUuJiMzNDsgU28sIGlmIEtNU0FOIGNhbiYjMzk7dCBkZXRlY3QgdGhpcywgaXMgcnVubmluZyBLTVNBTiBwb2ludGxlc3M/CgpMZXQgbWUgdGhpbmsgaXQgdGhyb3VnaC4gSXMgdGhlcmUgZXZlbiBhIHJlbW90ZSBjaGFuY2UgS01TQU4gKmNvdWxkKiBkZXRlY3QgdGhpcz8gSXQgdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiBtZW1vcnksIGJ1dCB3aGVuIG1lbW9yeSBpcyBwYXNzZWQgdG8gaGFyZHdhcmUgbGlrZSBETUEsIEtNU0FOJiMzOTtzIGJsaW5kIHRvIHRoZSBoYXJkd2FyZSByZWFkIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBleHBsaWNpdCBjaGVjayBsaWtlIGBrbXNhbl9jaGVja19tZW1vcnkoKWAuIEFuZCB0aGVyZSYjMzk7cyBubyBga21zYW5fY2hlY2tfbWVtb3J5KClgIGZvciB0aGUgU0lFIGJsb2NrIG9yIHRoZSBDUllDQiwgcmlnaHQ/IFNvLCBubywgS01TQU4gd29uJiMzOTt0IHJlcG9ydCBhbiBlcnJvci4KCk9rYXksIGlzIHRoZSBgYXBjYjFgIGV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2U/IEkgc2hvdWxkIGNoZWNrIGlmIGBjcnljYmAgaXMgZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aG91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NyeWNiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEwOTA9dm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19yZXNldF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDk4LVx0XHRrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cCh2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMDk5Olx0XHQvKiByZWNyZWF0ZSB0aGUgc2hhZG93IGNyeWNiIGJ5IGxlYXZpbmcgdGhlIFZTSUUgaGFuZGxlciAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMDAtXHRcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdChLVk1fUkVRX1ZTSUVfUkVTVEFSVCwgdmNwdSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTExMDY9c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfY3J5cHRvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTExNS1cdFx0Z2V0X3JhbmRvbV9ieXRlcyhcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTE2Olx0XHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VhZXNfd3JhcHBpbmdfa2V5X21hc2ssXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTExNzpcdFx0XHRzaXplb2Yoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzaykpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMTgtXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5hZXNfa3cgPSAxO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTI2LVx0XHRnZXRfcmFuZG9tX2J5dGVzKFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExMjc6XHRcdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWRlYV93cmFwcGluZ19rZXlfbWFzayxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTI4Olx0XHRcdHNpemVvZihrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXHUwMDNlZGVhX3dyYXBwaW5nX2tleV9tYXNrKSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTEyOS1cdFx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmRlYV9rdyA9IDE7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMzctXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5hZXNfa3cgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExMzg6XHRcdG1lbXNldChrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXHUwMDNlYWVzX3dyYXBwaW5nX2tleV9tYXNrLCAwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExMzk6XHRcdFx0c2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VhZXNfd3JhcHBpbmdfa2V5X21hc2spKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTQwLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtESVNBQkxFOiBBRVMga2V5d3JhcHBpbmcgc3VwcG9ydFwmIzM0Oyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNDctXHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5kZWFfa3cgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNDg6XHRcdG1lbXNldChrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXHUwMDNlZGVhX3dyYXBwaW5nX2tleV9tYXNrLCAwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNDk6XHRcdFx0c2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2spKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUwLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtESVNBQkxFOiBERUEga2V5d3JhcHBpbmcgc3VwcG9ydFwmIzM0Oyk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxMDc9c3RhdGljIGludCBrdm1fczM5MF9hcHhhX2luc3RhbGxlZCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTI2LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMjc6c3RhdGljIHZvaWQga3ZtX3MzOTBfc2V0X2NyeWNiX2Zvcm1hdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEyOC17XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEyOTpcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgPSB2aXJ0X3RvX3BoeXMoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTMwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMzEtXHQvKiBDbGVhciB0aGUgQ1JZQ0IgZm9ybWF0IGJpdHMgLSBpLmUuLCBzZXQgZm9ybWF0IDAgYnkgZGVmYXVsdCAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMzI6XHRrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkIFx1MDAyNj0gfihDUllDQl9GT1JNQVRfTUFTSyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEzMy1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEzOC1cdGlmIChrdm1fczM5MF9hcHhhX2luc3RhbGxlZCgpKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMzk6XHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgfD0gQ1JZQ0JfRk9STUFUMjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTQwLVx0ZWxzZVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNDE6XHRcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgfD0gQ1JZQ0JfRk9STUFUMTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTQyLX1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzE1OT12b2lkIGt2bV9hcmNoX2NyeXB0b19zZXRfbWFza3Moc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICphcG0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNjEte1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNjI6XHRzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYiA9IGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTYzLVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTY1LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNjY6XHRzd2l0Y2ggKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgXHUwMDI2IENSWUNCX0ZPUk1BVF9NQVNLKSB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2Ny1cdGNhc2UgQ1JZQ0JfRk9STUFUMjogLyogQVBDQjEgdXNlIDI1NiBiaXRzICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE2ODpcdFx0bWVtY3B5KGNyeWNiLVx1MDAzZWFwY2IxLmFwbSwgYXBtLCAzMik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2OS1cdFx0Vk1fRVZFTlQoa3ZtLCAzLCBcJiMzNDtTRVQgQ1JZQ0I6IGFwbSAlMDE2bHggJTAxNmx4ICUwMTZseCAlMDE2bHhcJiMzNDssXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3MC1cdFx0XHQgYXBtWzBdLCBhcG1bMV0sIGFwbVsyXSwgYXBtWzNdKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTcxOlx0XHRtZW1jcHkoY3J5Y2ItXHUwMDNlYXBjYjEuYXFtLCBhcW0sIDMyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTcyLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0O1NFVCBDUllDQjogYXFtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFwmIzM0OyxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTczLVx0XHRcdCBhcW1bMF0sIGFxbVsxXSwgYXFtWzJdLCBhcW1bM10pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNzQ6XHRcdG1lbWNweShjcnljYi1cdTAwM2VhcGNiMS5hZG0sIGFkbSwgMzIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzUtXHRcdFZNX0VWRU5UKGt2bSwgMywgXCYjMzQ7U0VUIENSWUNCOiBhZG0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XCYjMzQ7LFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTc5LVx0Y2FzZSBDUllDQl9GT1JNQVQwOiAvKiBGYWxsIHRocm91Z2ggYm90aCB1c2UgQVBDQjAgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTgwOlx0XHRtZW1jcHkoY3J5Y2ItXHUwMDNlYXBjYjAuYXBtLCBhcG0sIDgpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxODE6XHRcdG1lbWNweShjcnljYi1cdTAwM2VhcGNiMC5hcW0sIGFxbSwgMik7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE4MjpcdFx0bWVtY3B5KGNyeWNiLVx1MDAzZWFwY2IwLmFkbSwgYWRtLCAyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTgzLVx0XHRWTV9FVkVOVChrdm0sIDMsIFwmIzM0O1NFVCBDUllDQjogYXBtICUwMTZseCBhcW0gJTA0eCBhZG0gJTA0eFwmIzM0Oyxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5MC1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTkxOlx0LyogcmVjcmVhdGUgdGhlIHNoYWRvdyBjcnljYiBmb3IgZWFjaCB2Y3B1ICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5Mi1cdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1ZTSUVfUkVTVEFSVCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMyMDk9dm9pZCBrdm1fYXJjaF9jcnlwdG9fY2xlYXJfbWFza3Moc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjEyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTM6XHRtZW1zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFwY2IwLCAwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTQ6XHQgICAgICAgc2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VhcGNiMCkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTU6XHRtZW1zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFwY2IxLCAwLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTY6XHQgICAgICAgc2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VhcGNiMSkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIxOC1cdFZNX0VWRU5UKGt2bSwgMywgXCYjMzQ7JXNcJiMzNDssIFwmIzM0O0NMUiBDUllDQjpcJiMzNDspO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTk6XHQvKiByZWNyZWF0ZSB0aGUgc2hhZG93IGNyeWNiIGZvciBlYWNoIHZjcHUgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjIwLVx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChrdm0sIEtWTV9SRVFfVlNJRV9SRVNUQVJUKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzIzND1zdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIzNS17XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIzNjpcdGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYiA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnNpZV9wYWdlMi1cdTAwM2VjcnljYjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjM3Olx0a3ZtX3MzOTBfc2V0X2NyeWNiX2Zvcm1hdChrdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMzgtXHRpbml0X3J3c2VtKFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2tfcndzZW0pO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjQ1LVx0a3ZtLVx1MDAzZWFyY2guY3J5cHRvLmRlYV9rdyA9IDE7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI0NjpcdGdldF9yYW5kb21fYnl0ZXMoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzayxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjQ3Olx0XHRcdCBzaXplb2Yoa3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzaykpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyNDg6XHRnZXRfcmFuZG9tX2J5dGVzKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2ssXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI0OTpcdFx0XHQgc2l6ZW9mKGt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2spKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjUwLX1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzY1Mj1zdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2NjAtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzY2MTpcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY3J5Y2JkID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2NjItXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWVjYjMgXHUwMDI2PSB+KEVDQjNfQUVTIHwgRUNCM19ERUEpO1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTU5Mz1zdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MzEtXHQvKiBBUFhBIG5vdCBpbnN0YWxsZWQgYW5kIEFQSUQgZ3JlYXRlciA2NCBvciBBUFFJIGdyZWF0ZXIgMTYgKi9cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjYzMjpcdGlmICghKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCBcdTAwMjYgMHgwMikgXHUwMDI2XHUwMDI2IChyZWcwIFx1MDAyNiAweDAwMDBjMGYwVUwpKVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNjMzLVx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0zND1zdHJ1Y3QgdnNpZV9wYWdlIHtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02OC1cdF9fdTggcmVzZXJ2ZWRbMHgwNmY4IC0gMHgwMjc4XTtcdFx0LyogMHgwMjc4ICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo2OTpcdHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgY3J5Y2I7XHQvKiAweDA2ZjggKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTcwLVx0X191OCBmYWNbOCAmIzQzOyBTMzkwX0FSQ0hfRkFDX0xJU1RfU0laRV9CWVRFXTsvKiAweDA3ZjggKi9cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNjQ9c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2NTpcdFx0XHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX2gpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjYte1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2OS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE3MDpcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE3MS1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODctICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxODg6ICogQGFwY2JfczogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBzaGFkb3cgY3J5Y2JcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE4OTogKiBAY3J5Y2JfZ3BhOiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHRvIHN0YXJ0IG9mIG9yaWdpbmFsIGd1ZXN0IGNyeWNiXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTAtICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBndWVzdDFcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xOTQ9c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxOTU6XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHVuc2lnbmVkIGxvbmcgKmFwY2JfaClcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTk4LVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTk5Olx0YXBjYl9ncGEgPSBjcnljYl9ncGEgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiwgYXBjYjApO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjAwLVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMy0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIxNDogKiBAYXBjYl9zOiBwb2ludGVyIHRvIHN0YXJ0IG9mIGFwY2IgaW4gdGhlIHNoYWRvdyBjcnljYlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjE1OiAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxNi0gKiBAYXBjYl9oOiBwb2ludGVyIHRvIHN0YXJ0IG9mIGFwY2IgaW4gdGhlIGhvc3Rcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0yMjA9c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjE6XHRcdFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjItXHRcdFx0dW5zaWduZWQgbG9uZyAqYXBjYl9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyNjpcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IxKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNy1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNDAtICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDE6ICogQGNyeWNiX3M6IHBvaW50ZXIgdG8gc2hhZG93IGNyeWNiXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDI6ICogQGNyeWNiX2dwYTogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBvZiBvcmlnaW5hbCBndWVzdCBjcnljYlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjQzOiAqIEBjcnljYl9oOiBwb2ludGVyIHRvIHRoZSBob3N0IGNyeWNiXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDQ6ICogQGZtdF9vOiBmb3JtYXQgb2YgdGhlIG9yaWdpbmFsIGd1ZXN0IGNyeWNiLlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjQ1OiAqIEBmbXRfaDogZm9ybWF0IG9mIHRoZSBob3N0IGNyeWNiLlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQ2LSAqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDc6ICogQ2hlY2tzIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIGd1ZXN0IGFuZCBob3N0IGNyeWNiIGFuZCBjYWxscyB0aGVcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI0OC0gKiBhcHByb3ByaWF0ZSBjb3B5IGZ1bmN0aW9uLlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQ5LSAqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTA6ICogUmV0dXJuIDAgb3IgYW4gZXJyb3IgbnVtYmVyIGlmIHRoZSBndWVzdCBhbmQgaG9zdCBjcnljYiBhcmUgaW5jb21wYXRpYmxlLlxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjUxLSAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MjUyOnN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTM6XHQgICAgICAgY29uc3QgdTMyIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1NDpcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9oLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjU1LVx0ICAgICAgIGludCBmbXRfbywgaW50IGZtdF9oKVxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1OC1cdGNhc2UgQ1JZQ0JfRk9STUFUMjpcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1OTpcdFx0aWYgKChjcnljYl9ncGEgXHUwMDI2IFBBR0VfTUFTSykgIT0gKChjcnljYl9ncGEgJiM0MzsgMjU2KSBcdTAwMjYgUEFHRV9NQVNLKSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2MC1cdFx0XHRyZXR1cm4gLUVBQ0NFUztcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjM6XHRcdHJldHVybiBzZXR1cF9hcGNiMTEodmNwdSwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY0Olx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI2NTpcdFx0XHRcdCAgICAodW5zaWduZWQgbG9uZyAqKVx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY2LVx0Y2FzZSBDUllDQl9GT1JNQVQxOlxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cdFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5Olx0XHRcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MDpcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MTpcdFx0XHRcdFx0ICAgIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjEpO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcyLVx0XHRjYXNlIENSWUNCX0ZPUk1BVDE6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzMtXHRcdFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjc0Olx0XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMCxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3NTpcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3NjpcdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjApO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjc3LVx0XHR9XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjc5LVx0Y2FzZSBDUllDQl9GT1JNQVQwOlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjgwOlx0XHRpZiAoKGNyeWNiX2dwYSBcdTAwMjYgUEFHRV9NQVNLKSAhPSAoKGNyeWNiX2dwYSAmIzQzOyAzMikgXHUwMDI2IFBBR0VfTUFTSykpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODEtXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVx0XHRjYXNlIENSWUNCX0ZPUk1BVDI6XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XHRcdFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcdTAwMjZjcnljYl9zLVx1MDAzZWFwY2IxLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg2Olx0XHRcdFx0XHQgICAgY3J5Y2JfZ3BhLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg3Olx0XHRcdFx0XHQgICAgXHUwMDI2Y3J5Y2JfaC1cdTAwM2VhcGNiMSk7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODgtXHRcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yOTAtXHRcdFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjkxOlx0XHRcdFx0XHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXHUwMDI2Y3J5Y2Jfcy1cdTAwM2VhcGNiMCxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MjpcdFx0XHRcdFx0ICAgIGNyeWNiX2dwYSxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MzpcdFx0XHRcdFx0ICAgICh1bnNpZ25lZCBsb25nICopIFx1MDAyNmNyeWNiX2gtXHUwMDNlYXBjYjApO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMjk0LVx0XHR9XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjk5LS8qKlxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzAwOiAqIHNoYWRvd19jcnljYiAtIENyZWF0ZSBhIHNoYWRvdyBjb3B5IG9mIHRoZSBjcnljYiBibG9ja1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMzAxLSAqIEB2Y3B1OiBhIHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzAzLSAqXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMDQ6ICogQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGNyeWNiIGJsb2NrIGFuZCBzZXR1cCBrZXkgd3JhcHBpbmcsIGlmXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMDUtICogcmVxdWVzdGVkIGZvciBndWVzdCAzIGFuZCBlbmFibGVkIGZvciBndWVzdCAyLlxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxMy0gKiBUaGlzIGZ1bmN0aW9uIGNlbnRyYWxpemUgdGhlIGlzc3Vpbmcgb2Ygc2V0X3ZhbGlkaXR5X2ljcHQoKSBmb3IgYWxsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMTQ6ICogdGhlIHN1YmZ1bmN0aW9ucyB3b3JraW5nIG9uIHRoZSBjcnljYi5cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxNS0gKlxuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxOC0gKi9cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMxOTpzdGF0aWMgaW50IHNoYWRvd19jcnljYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMyMC17XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzIyLVx0c3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayAqc2NiX28gPSB2c2llX3BhZ2UtXHUwMDNlc2NiX287XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMjM6XHRjb25zdCB1aW50MzJfdCBjcnljYmRfbyA9IFJFQURfT05DRShzY2Jfby1cdTAwM2VjcnljYmQpO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6MzI0Olx0Y29uc3QgdTMyIGNyeWNiX2FkZHIgPSBjcnljYmRfbyBcdTAwMjYgMHg3ZmZmZmZmOFU7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMjUtXHR1bnNpZ25lZCBsb25nICpiMSwgKmIyO1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzMC1cdGludCBrZXlfbXNrID0gdGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc2KTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMzMTpcdGludCBmbXRfbyA9IGNyeWNiZF9vIFx1MDAyNiBDUllDQl9GT1JNQVRfTUFTSztcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMzMjpcdGludCBmbXRfaCA9IHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY3J5Y2JkIFx1MDAyNiBDUllDQl9GT1JNQVRfTUFTSztcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzMy1cdGludCByZXQgPSAwO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMzM0LVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzM1Olx0c2NiX3MtXHUwMDNlY3J5Y2JkID0gMDtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzNi1cbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDEtXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNDI6XHRpZiAoIWNyeWNiX2FkZHIpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDMtXHRcdHJldHVybiBzZXRfdmFsaWRpdHlfaWNwdChzY2JfcywgMHgwMDM5VSk7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzQ1LVx0aWYgKGZtdF9vID09IENSWUNCX0ZPUk1BVDEpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNDY6XHRcdGlmICgoY3J5Y2JfYWRkciBcdTAwMjYgUEFHRV9NQVNLKSAhPVxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzQ3Olx0XHQgICAgKChjcnljYl9hZGRyICYjNDM7IDEyOCkgXHUwMDI2IFBBR0VfTUFTSykpXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDgtXHRcdFx0cmV0dXJuIHNldF92YWxpZGl0eV9pY3B0KHNjYl9zLCAweDAwM0NVKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXHRpZiAoYXBpZV9zKSB7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNTE6XHRcdHJldCA9IHNldHVwX2FwY2IodmNwdSwgXHUwMDI2dnNpZV9wYWdlLVx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzUyOlx0XHRcdFx0IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzUzLVx0XHRcdFx0IGZtdF9vLCBmbXRfaCk7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzY3LVx0LyogY29weSBvbmx5IHRoZSB3cmFwcGluZyBrZXlzICovXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNjg6XHRpZiAocmVhZF9ndWVzdF9yZWFsKHZjcHUsIGNyeWNiX2FkZHIgJiM0MzsgNzIsXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNjk6XHRcdFx0ICAgIHZzaWVfcGFnZS1cdTAwM2VjcnljYi5kZWFfd3JhcHBpbmdfa2V5X21hc2ssIDU2KSlcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM3MC1cdFx0cmV0dXJuIHNldF92YWxpZGl0eV9pY3B0KHNjYl9zLCAweDAwMzVVKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNzUtXHQvKiB4b3IgYm90aCBibG9ja3MgaW4gb25lIHJ1biAqL1xuYXJjaC9zMzkwL2t2bS92c2llLmM6Mzc2Olx0YjEgPSAodW5zaWduZWQgbG9uZyAqKSB2c2llX3BhZ2UtXHUwMDNlY3J5Y2IuZGVhX3dyYXBwaW5nX2tleV9tYXNrO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMzc3LVx0YjIgPSAodW5zaWduZWQgbG9uZyAqKVxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mzc4Olx0XHRcdCAgICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2s7XG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNzktXHQvKiBhcyA1NiU4ID09IDAsIGJpdG1hcF94b3Igd29uJiMzOTt0IG92ZXJ3cml0ZSBhbnkgZGF0YSAqL1xuLS1cbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM4OS1cdH1cbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM5MDpcdHNjYl9zLVx1MDAzZWNyeWNiZCA9ICh1MzIpdmlydF90b19waHlzKFx1MDAyNnZzaWVfcGFnZS1cdTAwM2VjcnljYikgfCBDUllDQl9GT1JNQVQyO1xuYXJjaC9zMzkwL2t2bS92c2llLmMtMzkxLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC9zMzkwL2t2bS92c2llLmM9NDgwPXN0YXRpYyBpbnQgc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02MTYtXHRwcmVwYXJlX2liYyh2Y3B1LCB2c2llX3BhZ2UpO1xuYXJjaC9zMzkwL2t2bS92c2llLmM6NjE3Olx0cmMgPSBzaGFkb3dfY3J5Y2IodmNwdSwgdnNpZV9wYWdlKTtcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTYxOC1vdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzI4CgkJCQkJCQlvdXRwdXQ6IDM5NAoJCQkJCQkJdGhvdWdodHM6IDI3MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQSBXYXN0ZSBvZiBSZXNvdXJjZXM/KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IHRoZSBgY3J5Y2JgIGFyZWEsIHNwZWNpZmljYWxseSBgYXBjYjFgLCBpcyBub3QgY29waWVkIHRvIHVzZXIgc3BhY2UsIGl0JiMzOTtzIHN0cmljdGx5IGhhcmR3YXJlLWZhY2luZyAoU0lFKS4gVGh1cywgdGhlIG9ubHkgcmVhZCBpcyBmcm9tIHRoZSBoYXJkd2FyZSwgbm90IHRoZSBDUFUuIEtNU0FOLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGZsYWdzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpieSB0aGUgQ1BVKiBvciB0aG9zZSB0aGF0IGFyZSBwYXNzZWQgdG8gYGNvcHlfdG9fdXNlcmAgb3IgZXhwbGljaXRseSBjaGVja2VkIHdpdGggYGttc2FuX2NoZWNrX21lbW9yeWAuIFNpbmNlIHRoaXMgaXNuJiMzOTt0IHRoZSBjYXNlIGhlcmUsIHJ1bm5pbmcgYSBLTVNBTiBzZXNzaW9uIGZvciB0aGlzIHNwZWNpZmljIHBhdGNoIHNlZW1zIHBvaW50bGVzcywgYXMgcGVyIHRoZSBydWxlOiBhdm9pZCBLTVNBTiBpZiBzdGFuZGFyZCBkZXRlY3RvcnMgY2F0Y2ggdGhlIGlzc3VlLiBUaGUgb25seSB3YXkgaXQgY291bGQgY2F0Y2ggYW55dGhpbmcgaXMgdmlhIGBrbXNhbl9jaGVja19tZW1vcnlgIGFubm90YXRpb25zLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IGNoZWNrIHdoZXRoZXIgdGhvc2UgZXZlbiBleGlzdCBmb3IgdGhlIGFyZWFzIHRoYXQgYXJlIGJlaW5nIGNoYW5nZWQuIAoKTXkgbWVtb3J5IHRoZW4gYnJvdWdodCBtZSB0byB0aGUgcG9pbnQgd2hlcmUgSSBiZWdhbiBzZWFyY2hpbmcgdGhlIGBzZXR1cF9hcGNiMTBgIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGBhcGNiX3NgIGRhdGEgc3RydWN0dXJlIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBtaXRpZ2F0ZWQuIEkgY2hlY2tlZCBgc2V0dXBfYXBjYjExYCwgd2hlcmUgYGFwY2Jfc2AgaXMgcmVhZCB0aHJvdWdoIGBiaXRtYXBfYW5kYCBhbmQgaW5pdGlhbGl6ZWQgYnkgYHJlYWRfZ3Vlc3RfcmVhbGAsIHNvIGFsc28gbm8gaXNzdWUgdGhlcmUuIFRoZSBzYW1lIHRoaW5nIGZvciBgc2V0dXBfYXBjYjAwYC4gVGhlbiBJIHdlbnQgYmFjayB0byBgc2V0dXBfYXBjYjEwYCwgdG8gbWFrZSBzdXJlIHRoYXQgYGFwY2Jfc2AgaXMgbm90IHJlYWQgYnkgdGhlIENQVSwgaXQgaXMgb25seSB3cml0dGVuIHRvLiBTbywgS01TQU4gaXMgZGVmaW5pdGVseSBub3QgZ29pbmcgdG8gY2F0Y2ggdGhpcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBhcGNiX3NgIGlzICpuZXZlciogY29waWVkIHRvIHVzZXIgc3BhY2UgZWl0aGVyLiBJdCYjMzk7cyBwYXJ0IG9mIGB2c2llX3BhZ2UtJmd0O2NyeWNiYCwgaW50ZXJuYWwga2VybmVsLXNpZGUgc3RydWN0dXJlLiBUaGVyZWZvcmUgS01TQU4gaXMgKmFic29sdXRlbHkqIG5vdCBhcHBsaWNhYmxlIGhlcmUuCgpJIHRoZW4gZGlkIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSAqb3RoZXIqIGNvZGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2g6CgoxLiAgYGt2bV9zMzkwX2tleW9wYDogVGhpcyBmaXhlcyBhIGxvY2tpbmcgaXNzdWU7IGEgcG90ZW50aWFsIHJhY2UvdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uIHdoZW4gYWNjZXNzaW5nIGBrdm0tJmd0O2FyY2guZ21hcGAuIExvY2tpbmcgYnVncyBhcmUgS0FTQU4vTE9DS0RFUCB0ZXJyaXRvcnksIG5vdCBLTVNBTi4KMi4gIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IFRoaXMgZml4ZXMgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwuIFRoaXMgaXMgYSBsb2dpYyBlcnJvciBhbmQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4KMy4gIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogVGhpcyBmaXhlcyBhbiBhZGRyZXNzIGVycm9yIGluIGBjb3B5X3RvX3VzZXJgLCBlbnN1cmluZyBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIGFyZSBjb3BpZWQgdG8gdGhlIGNvcnJlY3QgdXNlci1zcGFjZSBvZmZzZXQuIFRoZSBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIHZhbHVlcyB0aGVtc2VsdmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAsIHNvIG5vIGluZm9ybWF0aW9uIGxlYWsuCgpUaGVyZWZvcmUsICpub25lKiBvZiB0aGUgY2hhbmdlcyBhcmUgYWRkcmVzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiBjYW4gZGV0ZWN0LiBLTVNBTiYjMzk7cyBwdXJwb3NlIHdvdWxkIG5vdCBiZSBzZXJ2ZWQgaGVyZS4KClRoZSBgbWVtc2V0YCBpbiBgc2V0dXBfYXBjYjEwYCBkb2VzIGZpeCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgc3VyZSwgYnV0IGl0JiMzOTtzIGFuIGlzc3VlIHdpdGggdGhlIGhhcmR3YXJlIHJlYWRpbmcgdGhlIHN0YWxlIGBhcGNiMWAsIG5vdCB0aGUgQ1BVISBLTVNBTiBpcyBibGluZCB0byBoYXJkd2FyZSByZWFkcyB1bmxlc3MgZXhwbGljaXQgYGttc2FuX2NoZWNrX21lbW9yeWAgY2FsbHMgYXJlIHByZXNlbnQsIHdoaWNoIGFyZSBub3QgaW4gdGhlIFNJRSBibG9jayBhbmQgY3J5Y2IuCgpMZXQgbWUgZG91YmxlLWNoZWNrIGZvciBga21zYW5fY2hlY2tfbWVtb3J5YCBpbiB0aGUgczM5MCBLVk0gY29kZS4gSSYjMzk7bGwgc2VhcmNoIGZvciBpdCBhbmQgYGttc2FuX2Agc3BlY2lmaWNhbGx5IGluIHRoZSBgYXJjaC9zMzkwL2t2bS9gIGRpcmVjdG9yeS4gTm8gbWF0Y2hlcy4gU28gS01TQU4gd2lsbCBkZWZpbml0ZWx5IG5vdCBoYXZlIHBpY2tlZCB1cCBvbiB0aGUgcG90ZW50aWFsIGlzc3VlLgoKKipDb25jbHVzaW9uOioqIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4gVGhpcyBwYXRjaCBkZWFscyB3aXRoOiAxKSBsb2NraW5nIGlzc3VlcyAoS0FTQU4vTE9DS0RFUCksIDIpIHN0YXRlIG1hbmFnZW1lbnQgKGxvZ2ljIGVycm9ycyksIGFuZCAzKSB1c2VyLXNwYWNlIEFQSSBhZGRyZXNzaW5nLiBUaGUgb25seSBjb2RlIGNoYW5nZSBhZGRyZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcmVhZHMgKG5vdCBDUFUgcmVhZHMpLCBhbmQgdGhlcmUgYXJlIG5vIEtNU0FOIGluc3RydW1lbnRhdGlvbiBwb2ludHMgZm9yIHRoZSBTSUUgb3IgY3J5Y2IgYXJlYS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBpcnJlbGV2YW50LiBJIHdpbGwgYWxzbyBjaGVjayBhZ2FpbiB0aGF0IGBjbWRgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbWFrZSBzdXJlIHRoYXQgdGhpcyBkYXRhIGlzIG5vdCBzdGFsZS4gTm8gaXNzdWVzIHRoZXJlIGVpdGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzLCBub25lIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtNU0FOOlxuMS4gYGt2bV9zMzkwX2tleW9wYDogRml4ZXMgYSBsb2NraW5nIGlzc3VlIGJ5IG1vdmluZyB0aGUgcmVhZCBvZiBga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlYCBpbnNpZGUgdGhlIGBtbXVfbG9ja2AgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCByYWNlIG9yIGludmFsaWQgYWNjZXNzLCB3aGljaCBpcyB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAuXG4yLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gOiBGaXhlcyBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSgpYCBjYWxsIG9uIGFuIGVycm9yIHBhdGguIFRoaXMgaXMgYSBzdGF0ZSBtYW5hZ2VtZW50IGJ1Zy5cbjMuIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogRml4ZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIGBjb3B5X3RvX3VzZXJgIHNvIHRoYXQgYHJjYCBhbmQgYHJyY2AgYXJlIHdyaXR0ZW4gdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0cyBpbiB0aGUgdXNlciBzcGFjZSBzdHJ1Y3R1cmUuIFRoZSBjb3BpZWQgZGF0YSBpdHNlbGYgKGBjbWQucmNgIGFuZCBgY21kLnJyY2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGEgcHJlY2VkaW5nIGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuXG40LiBgc2V0dXBfYXBjYjEwYDogQWRkcyBhIGBtZW1zZXRgIHRvIGZ1bGx5IGluaXRpYWxpemUgdGhlIGBhcGNiMWAgc3RydWN0dXJlIGluIHRoZSBzaGFkb3cgQ1JZQ0IuIFdpdGhvdXQgdGhpcywgZmllbGRzIGxpa2UgYGFwbVsxLi4zXWAgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBhbmQgY29udGFpbiBzdGFsZSBkYXRhIGZyb20gcHJldmlvdXMgdXNlcyBvZiB0aGUgY2FjaGVkIGB2c2llX3BhZ2VgLiBUaGlzIHN0YWxlIGRhdGEgaXMgdGhlbiByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSB3aGVuIGV4ZWN1dGluZyBhIG5lc3RlZCBndWVzdCwgcG90ZW50aWFsbHkgZ3JhbnRpbmcgdW5hdXRob3JpemVkIGNyeXB0byBhY2Nlc3MuIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBoYXJkd2FyZSBhbmQgbm90IGJ5IHRoZSBDUFUsIEtNU0FOIGNhbm5vdCBkZXRlY3QgaXQgKEtNU0FOIG9ubHkgaW5zdHJ1bWVudHMgQ1BVIGluc3RydWN0aW9ucyBhbmQgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGBrbXNhbl9jaGVja19tZW1vcnkoKWAgYW5ub3RhdGlvbnMgZm9yIHRoZSBTSUUgYmxvY2spLlxuXG5UaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMsIG5vbmUgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS01TQU46XG4xLiBga3ZtX3MzOTBfa2V5b3BgOiBGaXhlcyBhIGxvY2tpbmcgaXNzdWUgYnkgbW92aW5nIHRoZSByZWFkIG9mIGBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2VgIGluc2lkZSB0aGUgYG1tdV9sb2NrYCBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugb3IgaW52YWxpZCBhY2Nlc3MsIHdoaWNoIGlzIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUC5cbjIuIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IEZpeGVzIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKClgIGNhbGwgb24gYW4gZXJyb3IgcGF0aC4gVGhpcyBpcyBhIHN0YXRlIG1hbmFnZW1lbnQgYnVnLlxuMy4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBGaXhlcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgYGNvcHlfdG9fdXNlcmAgc28gdGhhdCBgcmNgIGFuZCBgcnJjYCBhcmUgd3JpdHRlbiB0byB0aGUgY29ycmVjdCBvZmZzZXRzIGluIHRoZSB1c2VyIHNwYWNlIHN0cnVjdHVyZS4gVGhlIGNvcGllZCBkYXRhIGl0c2VsZiAoYGNtZC5yY2AgYW5kIGBjbWQucnJjYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYSBwcmVjZWRpbmcgYGNvcHlfZnJvbV91c2VyYCwgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay5cbjQuIGBzZXR1cF9hcGNiMTBgOiBBZGRzIGEgYG1lbXNldGAgdG8gZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYGFwY2IxYCBzdHJ1Y3R1cmUgaW4gdGhlIHNoYWRvdyBDUllDQi4gV2l0aG91dCB0aGlzLCBmaWVsZHMgbGlrZSBgYXBtWzEuLjNdYCBhcmUgbGVmdCB1bmluaXRpYWxpemVkIGFuZCBjb250YWluIHN0YWxlIGRhdGEgZnJvbSBwcmV2aW91cyB1c2VzIG9mIHRoZSBjYWNoZWQgYHZzaWVfcGFnZWAuIFRoaXMgc3RhbGUgZGF0YSBpcyB0aGVuIHJlYWQgYnkgdGhlIGhhcmR3YXJlIChTSUUpIHdoZW4gZXhlY3V0aW5nIGEgbmVzdGVkIGd1ZXN0LCBwb3RlbnRpYWxseSBncmFudGluZyB1bmF1dGhvcml6ZWQgY3J5cHRvIGFjY2Vzcy4gSG93ZXZlciwgYmVjYXVzZSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgZXhjbHVzaXZlbHkgYnkgdGhlIGhhcmR3YXJlIGFuZCBub3QgYnkgdGhlIENQVSwgS01TQU4gY2Fubm90IGRldGVjdCBpdCAoS01TQU4gb25seSBpbnN0cnVtZW50cyBDUFUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGVyZSBhcmUgbm8gZXhwbGljaXQgYGttc2FuX2NoZWNrX21lbW9yeSgpYCBhbm5vdGF0aW9ucyBmb3IgdGhlIFNJRSBibG9jaykuXG5cblRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6MTUuNzAzNDY5ODU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MTE3OTgwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3J1blwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX3ZzaWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3Vlcywgbm9uZSBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLTVNBTjpcXG4xLiBga3ZtX3MzOTBfa2V5b3BgOiBGaXhlcyBhIGxvY2tpbmcgaXNzdWUgYnkgbW92aW5nIHRoZSByZWFkIG9mIGBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZWAgaW5zaWRlIHRoZSBgbW11X2xvY2tgIGNyaXRpY2FsIHNlY3Rpb24uIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZSBvciBpbnZhbGlkIGFjY2Vzcywgd2hpY2ggaXMgdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLlxcbjIuIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IEZpeGVzIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKClgIGNhbGwgb24gYW4gZXJyb3IgcGF0aC4gVGhpcyBpcyBhIHN0YXRlIG1hbmFnZW1lbnQgYnVnLlxcbjMuIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogRml4ZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIGBjb3B5X3RvX3VzZXJgIHNvIHRoYXQgYHJjYCBhbmQgYHJyY2AgYXJlIHdyaXR0ZW4gdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0cyBpbiB0aGUgdXNlciBzcGFjZSBzdHJ1Y3R1cmUuIFRoZSBjb3BpZWQgZGF0YSBpdHNlbGYgKGBjbWQucmNgIGFuZCBgY21kLnJyY2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGEgcHJlY2VkaW5nIGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuXFxuNC4gYHNldHVwX2FwY2IxMGA6IEFkZHMgYSBgbWVtc2V0YCB0byBmdWxseSBpbml0aWFsaXplIHRoZSBgYXBjYjFgIHN0cnVjdHVyZSBpbiB0aGUgc2hhZG93IENSWUNCLiBXaXRob3V0IHRoaXMsIGZpZWxkcyBsaWtlIGBhcG1bMS4uM11gIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgYW5kIGNvbnRhaW4gc3RhbGUgZGF0YSBmcm9tIHByZXZpb3VzIHVzZXMgb2YgdGhlIGNhY2hlZCBgdnNpZV9wYWdlYC4gVGhpcyBzdGFsZSBkYXRhIGlzIHRoZW4gcmVhZCBieSB0aGUgaGFyZHdhcmUgKFNJRSkgd2hlbiBleGVjdXRpbmcgYSBuZXN0ZWQgZ3Vlc3QsIHBvdGVudGlhbGx5IGdyYW50aW5nIHVuYXV0aG9yaXplZCBjcnlwdG8gYWNjZXNzLiBIb3dldmVyLCBiZWNhdXNlIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBleGNsdXNpdmVseSBieSB0aGUgaGFyZHdhcmUgYW5kIG5vdCBieSB0aGUgQ1BVLCBLTVNBTiBjYW5ub3QgZGV0ZWN0IGl0IChLTVNBTiBvbmx5IGluc3RydW1lbnRzIENQVSBpbnN0cnVjdGlvbnMgYW5kIHRoZXJlIGFyZSBubyBleHBsaWNpdCBga21zYW5fY2hlY2tfbWVtb3J5KClgIGFubm90YXRpb25zIGZvciB0aGUgU0lFIGJsb2NrKS5cXG5cXG5UaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDoxNS43MDM0NzQ1MDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE2MjU4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMDM3YTNhNTJmNzQ5YTVkNGRlOGI5OTNlMmJkYzBiYTE1OGNmNTU0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDE1OjUwOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IDUxOGE2OWM1NWU4NWMuLjdkZmQwYWQzNjczNjggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTU2MiwxMSArNTYyLDEyIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX3MzOTBfZXhpdCh2b2lkKVxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSlcXG4ge1xcbi1cXHR1bmlvbiBhc2NlIGFzY2UgPSBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZTtcXG4gXFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihhZGRyKTtcXG4rXFx0dW5pb24gYXNjZSBhc2NlO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdGd1YXJkKHJlYWRfbG9jaykoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXHRhc2NlID0ga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2U7XFxuIFxcbiBcXHRzd2l0Y2ggKG9wKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcXG5AQCAtNTA2OSw3ICs1MDcwLDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0cHJfZXJyX3JhdGVsaW1pdGVkKFxcXCJjYW4ndCBydW4gc3RvcHBlZCB2Y3B1ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkKTtcXG4gXFx0XFx0cmMgPSAtRUlOVkFMO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBvdXRfc2lnc2V0O1xcbiBcXHR9XFxuIFxcbiBcXHRrZXJuZWxfZnB1X2JlZ2luKFxcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcXG5AQCAtNTA5OSw5ICs1MTAwLDExIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0b3JlX3JlZ3ModmNwdSk7XFxuIFxcdGtlcm5lbF9mcHVfZW5kKFxcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcXG4gXFxuK1xcdHZjcHUtXFx1MDAzZXN0YXQuZXhpdF91c2Vyc3BhY2UrKztcXG4rXFxuK291dF9zaWdzZXQ6XFxuIFxcdGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSh2Y3B1KTtcXG4gXFxuLVxcdHZjcHUtXFx1MDAzZXN0YXQuZXhpdF91c2Vyc3BhY2UrKztcXG4gb3V0OlxcbiBcXHR2Y3B1X3B1dCh2Y3B1KTtcXG4gXFx0cmV0dXJuIHJjO1xcbkBAIC01NzMyLDcgKzU3MzUsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFxcdTAwMjZjbWQpO1xcbiBcXG4gXFx0XFx0LyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovXFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIoKF9fdTggX191c2VyICopYXJncCwgXFx1MDAyNmNtZC5yYyxcXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXFx1MDAyNmNtZC5yYyxcXG4gXFx0XFx0XFx0XFx0IHNpemVvZihjbWQucmMpICsgc2l6ZW9mKGNtZC5ycmMpKSlcXG4gXFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGJyZWFrO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXFxuaW5kZXggZWVhMjQ1NjJlN2RiMi4uMGE3ZDhkZmFiNmI3OSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXFxuQEAgLTE3Myw2ICsxNzMsNyBAQCBzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLFxcbiBcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuK1xcdG1lbXNldChhcGNiX3MsIDAsIHNpemVvZigqYXBjYl9zKSk7XFxuIFxcdGFwY2Jfcy1cXHUwMDNlYXBtWzBdID0gYXBjYl9oLVxcdTAwM2VhcG1bMF0gXFx1MDAyNiB0bXAuYXBtWzBdO1xcbiBcXHRhcGNiX3MtXFx1MDAzZWFxbVswXSA9IGFwY2JfaC1cXHUwMDNlYXFtWzBdIFxcdTAwMjYgdG1wLmFxbVswXSBcXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xcbiBcXHRhcGNiX3MtXFx1MDAzZWFkbVswXSA9IGFwY2JfaC1cXHUwMDNlYWRtWzBdIFxcdTAwMjYgdG1wLmFkbVswXSBcXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDoxNy4xODU3OTk1NjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NDY1MDQ0MjEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5cIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV92c2llXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMDM3YTNhNTJmNzQ5YTVkNGRlOGI5OTNlMmJkYzBiYTE1OGNmNTU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTU6NTA6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDUxOGE2OWM1NWU4NWMuLjdkZmQwYWQzNjczNjggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTU2MiwxMSArNTYyLDEyIEBAIHN0YXRpYyB2b2lkIF9fa3ZtX3MzOTBfZXhpdCh2b2lkKVxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXG4ge1xuLVx0dW5pb24gYXNjZSBhc2NlID0ga3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlO1xuIFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihhZGRyKTtcbitcdHVuaW9uIGFzY2UgYXNjZTtcbiBcdGludCByO1xuIFxuIFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0YXNjZSA9IGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZTtcbiBcbiBcdHN3aXRjaCAob3ApIHtcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcbkBAIC01MDY5LDcgKzUwNzAsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCJjYW4ndCBydW4gc3RvcHBlZCB2Y3B1ICVkXFxuXCIsXG4gXHRcdFx0XHQgICB2Y3B1LVx1MDAzZXZjcHVfaWQpO1xuIFx0XHRyYyA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIG91dF9zaWdzZXQ7XG4gXHR9XG4gXG4gXHRrZXJuZWxfZnB1X2JlZ2luKFx1MDAyNmZwdSwgS0VSTkVMX0ZQQyB8IEtFUk5FTF9WWFIpO1xuQEAgLTUwOTksOSArNTEwMCwxMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RvcmVfcmVncyh2Y3B1KTtcbiBcdGtlcm5lbF9mcHVfZW5kKFx1MDAyNmZwdSwgS0VSTkVMX0ZQQyB8IEtFUk5FTF9WWFIpO1xuIFxuK1x0dmNwdS1cdTAwM2VzdGF0LmV4aXRfdXNlcnNwYWNlKys7XG4rXG4rb3V0X3NpZ3NldDpcbiBcdGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSh2Y3B1KTtcbiBcbi1cdHZjcHUtXHUwMDNlc3RhdC5leGl0X3VzZXJzcGFjZSsrO1xuIG91dDpcbiBcdHZjcHVfcHV0KHZjcHUpO1xuIFx0cmV0dXJuIHJjO1xuQEAgLTU3MzIsNyArNTczNSw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgXHUwMDI2Y21kKTtcbiBcbiBcdFx0LyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIoKF9fdTggX191c2VyICopYXJncCwgXHUwMDI2Y21kLnJjLFxuK1x0XHRpZiAoY29weV90b191c2VyKGFyZ3AgKyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3B2X2NtZCwgcmMpLCBcdTAwMjZjbWQucmMsXG4gXHRcdFx0XHQgc2l6ZW9mKGNtZC5yYykgKyBzaXplb2YoY21kLnJyYykpKVxuIFx0XHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRicmVhaztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ZzaWUuYyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXG5pbmRleCBlZWEyNDU2MmU3ZGIyLi4wYTdkOGRmYWI2Yjc5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS92c2llLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vdnNpZS5jXG5AQCAtMTczLDYgKzE3Myw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXG4gXHRcdFx0ICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjApKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4rXHRtZW1zZXQoYXBjYl9zLCAwLCBzaXplb2YoKmFwY2JfcykpO1xuIFx0YXBjYl9zLVx1MDAzZWFwbVswXSA9IGFwY2JfaC1cdTAwM2VhcG1bMF0gXHUwMDI2IHRtcC5hcG1bMF07XG4gXHRhcGNiX3MtXHUwMDNlYXFtWzBdID0gYXBjYl9oLVx1MDAzZWFxbVswXSBcdTAwMjYgdG1wLmFxbVswXSBcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XG4gXHRhcGNiX3MtXHUwMDNlYWRtWzBdID0gYXBjYl9oLVx1MDAzZWFkbVswXSBcdTAwMjYgdG1wLmFkbVswXSBcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDoxNy4xODU4MDA3OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODEyNzc0OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBzMzkwIEtWTSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3Mgc29tZSBjb2RlIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIGFuZCBgYXJjaC9zMzkwL2t2bS92c2llLmNgLiAgVGhpcyBpcyBkZWZpbml0ZWx5IHMzOTAgYXJjaGl0ZWN0dXJlIHNwZWNpZmljLCB0aGF0J3MgSUJNIFogaGFyZHdhcmUuICBUaGUgY2hhbmdlcyB0aGVtc2VsdmVzIGxvb2sgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogcmVwb3NpdGlvbmluZyBhIGxvY2sgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBjb3VwbGUgb2YgYGdvdG9gIGZpeGVzIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGEgcG90ZW50aWFsIG9mZnNldCBjb3JyZWN0aW9uIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGEgYG1lbXNldGAgaW4gYHNldHVwX2FwY2IxMGAuIFNlZW1zIGZ1bmN0aW9uYWwsIGxpa2VseSBmb3Igc3RhYmlsaXR5IG9yIGNvcnJlY3RuZXNzLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gIE5vcm1hbGx5LCBzMzkwIGlzbid0IHRoZSBwcmltYXJ5IHRhcmdldCBmb3IgZ2VuZXJhbC1wdXJwb3NlIHg4Nl82NCBRRU1VIGZ1enppbmcgc2V0dXBzLiBJdCdzIHVzdWFsbHkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIGRlZGljYXRlZCBlbnZpcm9ubWVudCBpZiB5b3UgKmFyZSogZnV6emluZyBpdC4gSG93ZXZlciwgSSBrbm93IHN5emthbGxlciAqZG9lcyogc3VwcG9ydCBzMzkweCwgYW5kIHRoYXQncyB0aGUga2V5LlxuXG5Ib2xkIG9uLCB0aGUgcHJvbXB0IG1lbnRpb25zIHNwZWNpZmljYWxseSBhdm9pZGluZyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBCdXQgd2FpdCwgczM5MHggKmlzKiBhbiBhcmNoaXRlY3R1cmUsIGFuZCBzaW5jZSBzeXprYWxsZXIgKnN1cHBvcnRzKiBzMzkweCwgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgb24gczM5MHggUUVNVSwgdGhlIGZ1enppbmcgaXMgcG9zc2libGUuIFNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyBzeXprYWxsZXIgZnV6eiBzMzkweCBLVk0/ICBZZXMsIHN5emthbGxlciAqZG9lcyogaGF2ZSBzMzkweCBzdXBwb3J0LiBHaXZlbiB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gS1ZNLCBpdCdzIHZlcnkgcHJvYmFibGUuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSBLVk0gaXMgZW5hYmxlZCBmb3IgczM5MC4gIEkga25vdyBgQ09ORklHX0tWTWAgaXMgdGhlIGdlbmVyYWwgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiAgSSdsbCBsb29rIGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuIFRoaXMgc2hvdWxkIGdpdmUgYSBjbGVhciBhbnN3ZXIgb24gd2hldGhlciBLVk0gaXMgZXZlbiAqZW5hYmxlZCogb24gczM5MC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjI0Ljk5ODU3ODA3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUyNzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjI1LjA0OTExMTc4OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDAzOTM4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIEtWTeKApiB0aGF0J3MgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnQsIEkga25vdyB0aGF0LiBCdXQgaG9sZCBvbiwgdGhlIGNvbmNlcHQgb2YgKnZpcnR1YWxpemF0aW9uKiBpdHNlbGbigKYgaXNuJ3QgdGhlcmUgc29tZXRoaW5nIGVsc2UgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IEl0IGZlZWxzIGxpa2UgdGhlcmUncyBhIGJyb2FkZXIgY2F0ZWdvcnkgdGhhdCB0aWVzIGludG8gdGhpcywgb3IgbWF5YmUgdGhlcmUncyBhIGZlYXR1cmUgZmxhZyB0aGF0IG1pZ2h0IGJlIG5hbWVkIGBWSVJUVUFMSVpBVElPTmA/IFRpbWUgdG8gZHJpbGwgZG93bi4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIEkgc2VlbSB0byByZW1lbWJlciBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBiZWluZyB0aGUgbGlrZWx5IHNwb3QgdG8gZmluZCBhIGRlcGVuZGVuY3kgb3IgY29uZmlnIG9wdGlvbiB0aGF0IHVzZXMgYFZJUlRVQUxJWkFUSU9OYC4gTGV0J3Mgc2VlIGlmIHRoYXQgZmlsZSBzaGVkcyBzb21lIGxpZ2h0IG9uIHRoZSByZWxhdGlvbnNoaXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjI4LjI4OTUwODI3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIzNTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDoyOC4zMzc3NTUyMTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkyNjYzMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEtWTWAgd2lsbCBiZSBzdWZmaWNpZW50IGZvciBteSBjdXJyZW50IG5lZWRzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFzIGNoYW5nZWQsIGFuZCBob3cgdGhvc2UgY2hhbmdlcyBpbXBhY3QgdGhlIHN5c3RlbS5cblxuRmlyc3QsIGxldCdzIGlkZW50aWZ5IHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IEkndmUgZ290IGBrdm1fczM5MF9rZXlvcGAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGBzZXR1cF9hcGNiMTBgIHRvIGludmVzdGlnYXRlLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gYGt2bV9zMzkwX2tleW9wYCBpcyBpbiBvcmRlci4gSXMgaXQgc3RhdGljPyBZZXMsIGl0IGlzLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIEkgaGF2ZSB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgaXRzIHVzYWdlIGNvbnRleHQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hlcmUgdGhhdCBsZWFkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5NiwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDozMi4xMzA0MjA4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkwMzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9rZXlvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA2Mi1cXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA2MzpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDY0LVxcdFxcdHVuaW9uIHNrZXkgc2tleTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDc1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDc2OlxcdFxcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzctXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MDozMi4xNzgzMzMxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjg0NDI0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgS1ZNIEFyY2hpdGVjdHVyZSBmb3IgUG90ZW50aWFsIE9wdGltaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIGRpdmluZyBpbnRvIHRoaXMgS1ZNIGNvZGUgYW5kIGl0IGxvb2tzIGxpa2Ugd2UncmUgc3RhcnRpbmcgZnJvbSBga3ZtX2FyY2hfdm1faW9jdGxgLiBSaWdodCwgdGhhdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgVk0tbGV2ZWwgSU9DVExzIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBHb29kLiBOb3csIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgYHJ1bmAgaW9jdGwgcGF0aC4gSSBzZWUgdGhhdCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGlzbid0IGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEkgYWx3YXlzIHN0YXJ0IGxvb2tpbmcgYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXMgdGhvc2UgYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGVudHJ5cG9pbnRzIHRvIGEgcGFydGljdWxhciBjYWxsIGZsb3cuIExldCdzIHNlZSBpZiB0aGF0IGluZGljYXRlcyBhbnl0aGluZywgcGVyaGFwcyBpbmRpY2F0aW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmFjdGlvbi5cblxuQW5kIHNpbWlsYXJseSwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGlzbid0IHN0YXRpYyBlaXRoZXIuIEludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IGltcG9ydGFudCBlbnRyeSBwb2ludHMgZm9yIHZDUFUtc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyB0aGV5J3JlIHVzZWQuXG5cbk5vdywgdGhvdWdoLCBJIGRvIHNlZSBgc2V0dXBfYXBjYjEwYC4gQW5kIHRoYXQgKmlzKiBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBhIG1vcmUgbG9jYWwgc2NvcGUuIFNvLCBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSAqaXQqIGlzIGNhbGxlZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgd2l0aCBoZWxwZXIgZnVuY3Rpb25zLiBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuIEdvdHRhIHNlZSBpZiBpdOKAmXMgYSBoZWxwZXIgZm9yIHNvbWUgY3JpdGljYWwgcGF0aCBvciBpZiBpdCdzIGludm9sdmVkIGluIHNvbWV0aGluZyBsZXNzIHNpZ25pZmljYW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6MzYuMzA2Nzc3OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTA4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldHVwX2FwY2IxMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY1LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTI1Mj1zdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY4LVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjk6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcwLVxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODQtXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NTpcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODYtXFx0XFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6MzYuMzc5NjkyODI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTA3NTYwODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgU3RhY2sqKlxuXG5Pa2F5LCBzbyBgc2V0dXBfYXBjYmAgaXMsIGVzc2VudGlhbGx5LCBhIGRlZXBseSBuZXN0ZWQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEl0IGxvb2tzIGxpa2UgaXQncyBjYWxsZWQgaW50ZXJuYWxseSBieSBgc2V0dXBfYXBjYmAgaXRzZWxmLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgc2V0dXBfY3J5Y2JgLCBhbmQgdGhhdCB1bHRpbWF0ZWx5IGdldHMgaW5pdGlhdGVkIGVpdGhlciBmcm9tIGB2c2llX3J1bmAgb3Igc29tZXRoaW5nIHN0cnVjdHVyYWxseSBzaW1pbGFyIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhpcyBjYWxsIGNoYWluIGFuZCBtYXAgaG93IHRoaXMgbmVzdGVkIGNhbGwgZ2V0cyBpbnZva2VkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uLCBwYXJ0aWN1bGFybHkgaWYgdGhlcmUgYXJlIHRpbWluZyBkZXBlbmRlbmNpZXMgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBpc3N1ZXMgdGhhdCBjb21lIGludG8gcGxheS4gSXQgd291bGQgYmUgdmFsdWFibGUgdG8gdW5kZXJzdGFuZCwgYXQgdGhpcyBwb2ludCwgaG93IGZhciBpbnRvIHRoZSBjYWxsIGNoYWluIHdlIG5lZWQgdG8gZ2V0IHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjQwLjIzMDQ1MjMxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NTc3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfYXBjYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY1LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE4NS0vKipcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxODY6ICogc2V0dXBfYXBjYjAwIC0gQ29weSB0byBBUENCIEZPUk1BVDAgZnJvbSBBUENCIEZPUk1BVDBcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODctICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTMtICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTk0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjAwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqYXBjYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5NS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgdW5zaWduZWQgbG9uZyAqYXBjYl9oKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjExLS8qKlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIxMjogKiBzZXR1cF9hcGNiMTEgLSBDb3B5IHRoZSBGT1JNQVQxIEFQQ0IgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIHNoYWRvdyBDUllDQlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMy0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxOS0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjA6c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjIxLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM4LS8qKlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIzOTogKiBzZXR1cF9hcGNiIC0gQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGFwY2IuXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQwLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjUxLSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1MjpzdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1My1cXHQgICAgICAgY29uc3QgdTMyIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2Mi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjM6XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMSh2Y3B1LCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjQtXFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcyLVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNzM6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3NC1cXHRcXHRcXHRcXHRcXHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg2LVxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODktXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MDpcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjkxLVxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0zMTk9c3RhdGljIGludCBzaGFkb3dfY3J5Y2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXFx0aWYgKGFwaWVfcykge1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MTpcXHRcXHRyZXQgPSBzZXR1cF9hcGNiKHZjcHUsIFxcdTAwMjZ2c2llX3BhZ2UtXFx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM1Mi1cXHRcXHRcXHRcXHQgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NDAuMjc4MjE1MjYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzkyNzI5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIGBzaGFkb3dfY3J5Y2JgIGlzIGNhbGxlZCBmcm9tIGB2c2llX3J1bmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gZm9jdXMgb24uIExldCdzIGxvb2sgYXQgdGhlIHN0YW5kYXJkIEtWTSBlbnRyeSBwb2ludHM6IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgYW5kIGBrdm1fYXJjaF92bV9pb2N0bGAuIFllcCwgdGhvc2UgYXJlIGRlZmluaXRlbHkgQVBJIGVudHJ5cG9pbnRzLCBubyBxdWVzdGlvbi5cblxuQnV0IHdhaXQgYSBtaW51dGUsIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXMgYSAqdmVyeSogaG90IHBhdGggZnVuY3Rpb24g4oCTIGl0J3MgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIHJ1bm5pbmcgdGhlIFZDUFUuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHRvbGQgbWUgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RpbmcgZGlzdHJpYnV0aW9uIGZyb20gc2tld2luZy4gU28gZXZlbiB0aG91Z2ggaXQncyBhbiBBUEkgZW50cnlwb2ludCBhbmQgdGhlIG1haW4gb25lIGF0IHRoYXQsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgaXNzdWU/XG5cbkxldCBtZSBzZWUuLi4gZm9yIHRoZSBga3ZtX3MzOTBfa2V5b3BgIG9wZXJhdGlvbiwgaXQgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIGBrdm1fYXJjaF92bV9pb2N0bGAsIHVuZGVyIHRoZSBgS1ZNX1MzOTBfWlBDSV9PUGAgY29udHJvbCBwYXRoLiBPa2F5LCBsZXQncyBnbyBiYWNrIGFuZCByZS1leGFtaW5lIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGxvb2sgZm9yIG9wZXJhdGlvbnMgdW5kZXIgYGtvcC5vcGVyYXRpb25gIHdpdGhpbiBpdC4gVGhhdCBzZWVtcyBsaWtlIGEgbXVjaCBiZXR0ZXIgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NDYuOTU3NDkwNzM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc0ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrb3BcXFxcLm9wZXJhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5Mjc9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzUtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNzY6XFx0XFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3Ny1cXHRcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjQ3LjAwNDI0NjI4OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkwNzY0MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1YmplY3Q6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0gQXJjaGl0ZWN0dXJlIC0gU3BlY2lmaWNhbGx5IGBrdm1fYXJjaF92bV9pb2N0bGAqKlxuXG5Pa2F5LCBzbyB0aGUgZGlyZWN0aW9uIGlzIGNsZWFyOiBXZSdyZSBkaXZpbmcgaW50byBga3ZtX2FyY2hfdm1faW9jdGxgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDMwNjAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcG9pbnQuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIG9mIFZpcnR1YWwgTWFjaGluZSBJTyBDb250cm9scyB3aXRoaW4gS1ZNLiBMaW5lIDMwNjAuLi4gd2VsbCwgdGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiBzb21lIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBhIHNpZ25pZmljYW50IGJyYW5jaCBpbiBpdHMgZXhlY3V0aW9uIGlzIGxvY2F0ZWQuIFdlIG5lZWQgdG8gZm9jdXMgb24gd2hhdCBoYXBwZW5zIHRoZXJlLiBJcyBpdCBlcnJvciBoYW5kbGluZywgZGlzcGF0Y2hpbmcgdG8gb3RoZXIgYXJjaC1zcGVjaWZpYyBmdW5jdGlvbnMsIG9yIHBlcmhhcHMgYSBzZWN1cml0eSBjaGVjaz8gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgdGhlcmUgaXMgdGhlIGtleS4gR2l2ZW4gdGhlIGV4cGVydGlzZSBoZXJlLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXM7IGl0IHdvbid0IGJlIGVub3VnaCB0byBrbm93ICp3aGF0KiB0aGUgY29kZSBkb2VzLCBidXQgYWxzbyAqd2h5KiBpdCdzIGltcGxlbWVudGVkIHRoaXMgd2F5LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIEkgZXhwZWN0IGEgd2VsbC1jcmFmdGVkIHN0cnVjdHVyZSwgYW5kIEknbSByZWFkeSB0byBwYXJzZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1OCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjUxLjI5NTAxMzg4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNTA6XFx0XFx0XFx0YnJlYWs7XFxuMzA1MTpcXHRcXHR9XFxuMzA1MjpcXHRcXHRjYXNlIEtWTV9TMzkwX01FTV9PUDoge1xcbjMwNTM6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX21lbV9vcCBtZW1fb3A7XFxuMzA1NDpcXHRcXG4zMDU1OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2bWVtX29wLCBhcmdwLCBzaXplb2YobWVtX29wKSkgPT0gMClcXG4zMDU2OlxcdFxcdFxcdFxcdHIgPSBrdm1fczM5MF92bV9tZW1fb3Aoa3ZtLCBcXHUwMDI2bWVtX29wKTtcXG4zMDU3OlxcdFxcdFxcdGVsc2VcXG4zMDU4OlxcdFxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjMwNTk6XFx0XFx0XFx0YnJlYWs7XFxuMzA2MDpcXHRcXHR9XFxuMzA2MTpcXHRcXHRjYXNlIEtWTV9TMzkwX0tFWU9QOiB7XFxuMzA2MjpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG4zMDYzOlxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XFxuMzA2NDpcXHRcXHRcXHR1bmlvbiBza2V5IHNrZXk7XFxuMzA2NTpcXHRcXG4zMDY2OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2a29wLCBhcmdwLCBzaXplb2Yoa29wKSkpIHtcXG4zMDY3OlxcdFxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjMwNjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzA2OTpcXHRcXHRcXHR9XFxuMzA3MDpcXHRcXHRcXHRza2V5LnNrZXkgPSBrb3Aua2V5O1xcbjMwNzE6XFx0XFxuMzA3MjpcXHRcXHRcXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4zMDczOlxcdFxcdFxcdGlmICghbWMpXFxuMzA3NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMDc1OlxcdFxcbjMwNzY6XFx0XFx0XFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcXG4zMDc3OlxcdFxcdFxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4zMDc4OlxcdFxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4zMDc5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMwODA6XFx0XFxuMzA4MTpcXHRcXHRcXHRrb3Aua2V5ID0gcjtcXG4zMDgyOlxcdFxcdFxcdHIgPSAwO1xcbjMwODM6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2a29wLCBzaXplb2Yoa29wKSkpXFxuMzA4NDpcXHRcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG4zMDg1OlxcdFxcdFxcdGJyZWFrO1xcbjMwODY6XFx0XFx0fVxcbjMwODc6XFx0XFx0Y2FzZSBLVk1fUzM5MF9aUENJX09QOiB7XFxuMzA4ODpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfenBjaV9vcCBhcmdzO1xcbjMwODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUwOjUxLjI5NTM5MzQyN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTA4NjM1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtWTS9zMzkwIENvZGViYXNlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBkaWdnaW5nIGludG8gdGhlIEtWTS9zMzkwIGNvZGUsIGFuZCBJIG5lZWQgdG8gY2xhcmlmeSBzb21lIGNydWNpYWwgaW9jdGwgZW50cnkgcG9pbnRzLiBGcm9tIHdoYXQgSSd2ZSBnYXRoZXJlZCwgdGhlIGBLVk1fUzM5MF9LRVlPUGAgaW9jdGwgc2VlbXMgdG8gYmUgdGhlIGtleSB0byB3aGF0IEknbSBpbnRlcmVzdGVkIGluLiBUaGUgYGt2bV9hcmNoX3ZtX2lvY3RsYCBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIHNlY3Rpb24sIHdoaWNoIGlzIGdvb2QgdG8gY29uZmlybS5cblxuTm93LCBzaGlmdGluZyBnZWFycyB0byBWQ1BVLXJlbGF0ZWQgaW9jdGxzLCBJIHNlZSBhIHBhdHRlcm4uIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgY29ycmVzcG9uZHMgdG8gYEtWTV9SVU5gLCB0aGF0IG11Y2ggbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIEkgd2FudCB0byBjbGFyaWZ5IHRoZSBvdGhlciBWQ1BVIGNvbnRyb2wgY29tbWFuZC4gVGhlIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBmdW5jdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggYEtWTV9TMzkwX1BWX0NPTU1BTkRfVkNQVWAuXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgVkNQVSBjb21tYW5kcy4gTGV0IG1lIHplcm8gaW4gb24gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTczMCBpbiB0aGUgc291cmNlLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB3aGF0IEknbSBsb29raW5nIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NTUuNDA0MDMxODM4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTcyMDpcXHRcXHRcXHRpZiAoIWlzX3Byb3RfdmlydF9ob3N0KCkpXFxuNTcyMTpcXHRcXHRcXHRcXHRicmVhaztcXG41NzIyOlxcdFxcbjU3MjM6XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuNTcyNDpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmNtZCwgYXJncCwgc2l6ZW9mKGNtZCkpKVxcbjU3MjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTcyNjpcXHRcXG41NzI3OlxcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbjU3Mjg6XFx0XFx0XFx0aWYgKGNtZC5mbGFncylcXG41NzI5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjU3MzA6XFx0XFxuNTczMTpcXHRcXHRcXHQvKiBXZSBvbmx5IGhhbmRsZSB0aGlzIGNtZCByaWdodCBub3cgKi9cXG41NzMyOlxcdFxcdFxcdGlmIChjbWQuY21kICE9IEtWTV9QVl9EVU1QKVxcbjU3MzM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTczNDpcXHRcXG41NzM1OlxcdFxcdFxcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFxcdTAwMjZjbWQpO1xcbjU3MzY6XFx0XFxuNTczNzpcXHRcXHRcXHQvKiBBbHdheXMgY29weSBvdmVyIFVWIHJjIC8gcnJjIGRhdGEgKi9cXG41NzM4OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoYXJncCArIG9mZnNldG9mKHN0cnVjdCBrdm1fcHZfY21kLCByYyksIFxcdTAwMjZjbWQucmMsXFxuNTczOTpcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKGNtZC5yYykgKyBzaXplb2YoY21kLnJyYykpKVxcbjU3NDA6XFx0XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuNTc0MTpcXHRcXHRcXHRicmVhaztcXG41NzQyOlxcdFxcdH1cXG41NzQzOlxcdFxcdGRlZmF1bHQ6XFxuNTc0NDpcXHRcXHRcXHRyID0gLUVOT1RUWTtcXG41NzQ1OlxcdFxcdH1cXG41NzQ2OlxcdFxcbjU3NDc6XFx0XFx0dmNwdV9wdXQodmNwdSk7XFxuNTc0ODpcXHRcXHRyZXR1cm4gcjtcXG41NzQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NTUuNDA0Mzc0NzI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mjc0MjUxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGBLVk1fUzM5MF9QVl9DT01NQU5EX1ZDUFVgIGlzIHByb2Nlc3NlZC4gRnJvbSB3aGF0IEkgc2VlLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXMgdGhlIGhhbmRsZXIsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgcmVhY2ggdGhlIGNvZGUgZm9yIHRoaW5ncyBsaWtlIGBzZXR1cF9hcGNiMTBgLiBJIHNlZSBhIGNvbm5lY3Rpb24g4oCTIGl0IGxvb2tzIGxpa2UgYHNldHVwX2FwY2IxMGAgaXMgdHJpZ2dlcmVkIGZyb20gYHNoYWRvd19jcnljYmAuIE5vdywgdGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgYHNoYWRvd19jcnljYmAgaXMgY2FsbGVkIGZyb20gYHZzaWVfcnVuYC4gT2theSwgYHZzaWVfcnVuYCBpcyB0aGUgbmV4dCBmdW5jdGlvbiBJIHJlYWxseSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbi4gTGV0J3Mgc2VlIGhvdyB0aGF0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NTguOTMxODAyMjY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMwMTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c2llX3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMTA4PXN0YXRpYyBpbnQgdnNpZV9oYW5kbGVfbXZwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSwgc3RydWN0IGdtYXAgKnNnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTE4Ny0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMTg4OnN0YXRpYyBpbnQgZG9fdnNpZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg5LVxcdF9fcmVsZWFzZXModmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTM4Mz1zdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3NoYWRvd19zY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM5Ni0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMzk3OnN0YXRpYyBpbnQgdnNpZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM5OC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDEyLVxcdFxcdFxcdHVwZGF0ZV9pbnRlcnZlbnRpb25fcmVxdWVzdHModnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDEzOlxcdFxcdFxcdHJjID0gZG9fdnNpZV9ydW4odmNwdSwgdnNpZV9wYWdlLCBzZyk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQxNC1cXHRcXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNTU3PWludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNTk5LVxcdHJlZ2lzdGVyX3NoYWRvd19zY2IodmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjAwOlxcdHJjID0gdnNpZV9ydW4odmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjAxLVxcdHVucmVnaXN0ZXJfc2hhZG93X3NjYih2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTA6NTguOTc5MTExMDYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mjk1NDcyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgVlNJRSBIYW5kbGVyKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBrdm1fczM5MF9oYW5kbGVfdnNpZWAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHdlIGhhbmRsZSBWaXJ0dWFsIFNJRSwgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMgb24gczM5MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBleHBvc2VkIGFzIGEgcHVibGljIEFQST9cIiBObywgaXQncyBub3QgYSBmdW5jdGlvbiBJJ2QgZGlyZWN0bHkgY2FsbCwgaXQncyBhbiBpbnN0cnVjdGlvbiBoYW5kbGVyLiBJdCBzaXRzIGxvd2VyIGRvd24sIHJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmljIFZTSUUgaW5zdHJ1Y3Rpb24gd2l0aGluIHRoZSBndWVzdCBjb250ZXh0LlxuXG5Pa2F5LCBsZXQncyB0cmFjZSB0aGlzLiBOb3cgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgaXMgYWN0dWFsbHkgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIFZTSUUgaGFuZGxlciBnZXRzIHRyaWdnZXJlZC4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFZTSUUgaXMgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIEtWTS9zMzkwIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTowMi44MDg2NjA0MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDc2ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2hhbmRsZV92c2llXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD00NDI9aW50IGt2bV9zMzkwX3NrZXlfY2hlY2tfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDQ0LS8qIGltcGxlbWVudGVkIGluIHZzaWUuYyAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDo0NDU6aW50IGt2bV9zMzkwX2hhbmRsZV92c2llKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQ0Ni12b2lkIGt2bV9zMzkwX3ZzaWVfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9OTU5PWludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtOTcyLVxcdGNhc2UgMHgxNDpcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5NzM6XFx0XFx0cmV0dXJuIGt2bV9zMzkwX2hhbmRsZV92c2llKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk3NC1cXHRjYXNlIDB4MjE6XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xNDg0PXN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU1Ni1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNTU3OmludCBrdm1fczM5MF9oYW5kbGVfdnNpZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjAyLjg1NzE0NTA2NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDk1ODY1Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNL3MzOTB4IENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0vczM5MHggY29kZSBhbmQgdHJ5aW5nIHRvIG5hcnJvdyBkb3duIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIFRoZSB0cmFjZSBzdGFydHMgaW4gYGt2bV9zMzkwX2hhbmRsZV9iMmAsIHNwZWNpZmljYWxseSBoYW5kbGluZyB0aGUgYGIyYCBvcGNvZGUsIGFuZCBieSBleHRlbnNpb24gdGhlIGBTSUVgIGluc3RydWN0aW9uLiBUaGF0IHBvaW50cyBtZSB0byBga3ZtX3MzOTBfaGFuZGxlX2IyYCBvciBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGFzIGxpa2VseSBjYW5kaWRhdGVzIHRvIGZvY3VzIG9uIGluaXRpYWxseS4gSSBjaGVja2VkIGlmIGVpdGhlciBvZiB0aG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgYnV0IG5vIGRpY2UuXG5cbk1vdmluZyBvdXR3YXJkLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbS4gSSdtIHNlZWluZyBga3ZtX2FyY2hfdm1faW9jdGxgLCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgIGFzIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIGBrdm1fYXJjaF92bV9pb2N0bGAgYW5kIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBhcmUgdmVyeSBnZW5lcmljIGFuZCBsaWtlbHkgaGVhdmlseSB1c2VkIHdpdGhpbiBLVk0sIHNvIEkgd2FudCB0byBiZSBtb3JlIHNwZWNpZmljIGlmIHBvc3NpYmxlLlxuXG5Mb29raW5nIGRlZXBlciBpbnRvIHRoZSBpb2N0bCBoYW5kbGluZywgYGt2bV9hcmNoX3ZtX2lvY3RsYCBkZWFscyB3aXRoIGBLVk1fUzM5MF9LRVlPUGAsIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaGFuZGxlcyBgS1ZNX1MzOTBfUFZfQ09NTUFORF9WQ1BVYC4gSSBjb25zaWRlcmVkIGBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wYCBidXQgaXQgc2VlbXMgdGhlIGlzc3VlIGlzIGFjdHVhbGx5IHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXRzZWxmLCBzbyBJJ2xsIGtlZXAgdGhhdCBvbmUgaW4gbXkgc2lnaHRzLiBMaWtld2lzZSwgd2hpbGUgYGt2bV9zMzkwX2tleW9wYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF92bV9pb2N0bGAgaXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBpc3N1ZSB0aGVyZSB0b28sIHNvIHRoYXQncyBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbi4gQW5kIGBzZXR1cF9hcGNiMTBgIGlzIGFsc28gb2YgaW50ZXJlc3QsIGFzIGl0J3MgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2hhbmRsZV92c2llYC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgS1ZNYCBpcyBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuIEkgc2hvdWxkIHJldmlzaXQgdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgQ09ORklHcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTMzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjEwLjM1MzAxMzQyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3OTYxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MToxMC40MDA4MTUzMTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMzE3NjUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgdGhlIHMzOTB4IEtWTSBNb2R1bGUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUuIFRoZSBpbml0aWFsIHF1ZXN0aW9uIHdhcyBhYm91dCBgS1ZNX1MzOTBfVUNPTlRST0xgLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSBpbW1lZGlhdGVseSBhc3N1bWVkLCBubywgdGhvc2UgY2hhbmdlcyB3ZXJlIGludGVncmF0ZWQgaW50byB0aGUgY29yZSBLVk0uIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UuIEknbSByZWNhbGxpbmcgbm93IHRoYXQgYGt2bV9zMzkwX2tleW9wYCBpcyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiBga3ZtLXMzOTAuY2AuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZGVwZW5kZW5jeSBpcyB0aGVyZSBvciBub3QuIEZ1cnRoZXIsIEkgc2VlIGBzZXR1cF9hcGNiMTBgIGlzIGRlZmluZWQgaW4gYHZzaWUuY2AuIFRoYXQgbWFrZXMgdGhpcyBtdWNoIG1vcmUgaW50ZXJlc3RpbmcuIEJlZm9yZSBJIG1ha2UgYW55IGRlZmluaXRpdmUgY29uY2x1c2lvbnMsIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgd2hldGhlciBgdnNpZS5jYCBpdHNlbGYgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gVGhhdCB3aWxsIHRlbGwgbWUgaWYgdGhlIG1vZHVsZSBpcyBhY3R1YWxseSBpbiBwbGF5IGhlcmUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgaXMgYSBkZXBlbmRlbmN5IG9uIHRoYXQgZmVhdHVyZS4gTGV0J3Mgc2VlIGlmIHRoYXQncyBjb25kaXRpb25hbCBvciBhbHdheXMgY29tcGlsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6MTQuMzAzOTk1Mjc3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIyMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c2llXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSArPSBrdm0tczM5MC5vIGludGVyY2VwdC5vIGludGVycnVwdC5vIHByaXYubyBzaWdwLm9cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICs9IGRpYWcubyBnYWNjZXNzLm8gZ3Vlc3RkYmcubyB2c2llLm8gcHYub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgKz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MToxNC4zNTAyMjE4MTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0MDAwNjgwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIHMzOTAgUGF0Y2hlcyBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UndmUgZ290IGEgaGFuZGZ1bCBvZiBmdW5jdGlvbmFsIGZpeGVzIHdpdGhpbiB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGVzdGFiaWxpdHkgYW5kIGZ1enppbmcgdGFyZ2V0cy5cblxuRmlyc3QsIHRoZSBwYXRjaGVzIGFyZSB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBgS1ZNYCBlbmFibGVkLCBzbyB0aGF0J3MgdGhlIGJhc2UgY29uZmlndXJhdGlvbiB3ZSBuZWVkLlxuXG5UaGUgZmlyc3QgY2hhbmdlIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgaXMgaW50ZXJlc3RpbmcuIEl0IGZpeGVzIGEgYnlwYXNzIG9mIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSlgIHdoZW4gYSB2Q1BVIGlzIHN0b3BwZWQsIHdoaWNoIGNhbiBsZWFkIHRvIHNpZ25hbCBtYXNrIGlzc3Vlcy4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIHRoZSBgS1ZNX1JVTmAgb3BlcmF0aW9uLiBFdmVuIHRob3VnaCBpdCdzIGEgaG90LXBhdGggZnVuY3Rpb24sIHRoZSBidWcgaXMgcmlnaHQgdGhlcmUuIEl0J3MgYSBrZXkgZW50cnkgcG9pbnQsIHNvIEknbSBpbmNsdWRpbmcgaXQgYXMgYSBmb2N1cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjYW4gaGl0IHRoYXQgc3BlY2lmaWMgY29kZSBwYXRoLlxuXG5UaGVuLCB0aGVyZSdzIGEgZml4IGluIGBrdm1fczM5MF9rZXlvcGAuIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCByYWNlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSByZWxhdGVkIHRvIHRoZSBga3ZtLVx1MDAzZWFyY2guZ21hcGAgYWNjZXNzLiBUaGUga2V5IGlzIHRoYXQgdGhlIGZpeCBtb2RpZmllcyB0aGUgYWNjZXNzIG9mIGFuIGltcG9ydGFudCBzaGFyZWQgc3RydWN0dXJlLiBUaGUgZml4IGFsc28gaW52b2x2ZXMgYSBsb2NrIHNvIEknbGwgaW5jbHVkZSBga3ZtX2FyY2hfdm1faW9jdGxgIHRvIHRyaWdnZXIgdGhpcyBjb2RlLlxuXG5OZXh0LCB0aGUgZml4IGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBjb3JyZWN0cyBhbiBvZmZzZXQgaXNzdWUgd2hlbiBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgYWRkcmVzc2VzIGFuIGluY29ycmVjdCBvZmZzZXQgb2YgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZHVyaW5nIGEgS1ZNX1BWX1ZDUFVfRFVNUCBjb21tYW5kLiBUaGUgcmlnaHQgdGFyZ2V0IGlzIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC5cblxuRmluYWxseSwgd2UndmUgZ290IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGZpeGVkIGluIGBzZXR1cF9hcGNiMTBgLiBJJ2xsIGZvY3VzIG9uIGBrdm1fczM5MF9oYW5kbGVfdnNpZWAgYXMgdGhlIGVudHJ5cG9pbnQgaGVyZS5cblxuQWxsIHRoZXNlIGNoYW5nZXMgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gZnVuY3Rpb25hbGl0eSBhbmQgc2hvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGZ1enppbmcgd2l0aCB0aG9zZSBzeW1ib2xzLlxuU28gSSBzaG91bGQgZm9jdXMgb246XG4tICAgYGt2bV9hcmNoX3ZtX2lvY3RsYFxuLSAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsYFxuLSAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmBcbi0gICBga3ZtX3MzOTBfaGFuZGxlX3ZzaWVgXG5cbkdpdmVuIHRoZXNlIGlkZW50aWZpZWQgZW50cnlwb2ludHMsIEknbSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbiB0byBjcmFmdGluZyB0aGUgcmlnaHQgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzksIk91dHB1dFRva2VucyI6MTk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTozMS43NTAyOTM0MTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk0NTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuXCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfdnNpZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG11bHRpcGxlIGlzc3VlcyBpbiBzMzkwIEtWTTogYSBsb2NrIG9yZGVyaW5nIGlzc3VlIGluIGBrdm1fczM5MF9rZXlvcGAsIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlYCBjYWxsIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIGFuIGluY29ycmVjdCBgY29weV90b191c2VyYCBvZmZzZXQgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYHNldHVwX2FwY2IxMGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIEtWTSBpb2N0bHMgYW5kIGluc3RydWN0aW9uIGhhbmRsZXJzLCB3aGljaCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5cIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV92c2llXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbXVsdGlwbGUgaXNzdWVzIGluIHMzOTAgS1ZNOiBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgaW4gYGt2bV9zMzkwX2tleW9wYCwgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGVgIGNhbGwgaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW4gaW5jb3JyZWN0IGBjb3B5X3RvX3VzZXJgIG9mZnNldCBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgS1ZNIGlvY3RscyBhbmQgaW5zdHJ1Y3Rpb24gaGFuZGxlcnMsIHdoaWNoIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTozMS44MzYyNDU3OTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjk4NTE5NTM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjMxLjgzNjk1NzQwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzI5ODQ0ODA1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3Vlcywgbm9uZSBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLTVNBTjpcXG4xLiBga3ZtX3MzOTBfa2V5b3BgOiBGaXhlcyBhIGxvY2tpbmcgaXNzdWUgYnkgbW92aW5nIHRoZSByZWFkIG9mIGBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZWAgaW5zaWRlIHRoZSBgbW11X2xvY2tgIGNyaXRpY2FsIHNlY3Rpb24uIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgcmFjZSBvciBpbnZhbGlkIGFjY2Vzcywgd2hpY2ggaXMgdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLlxcbjIuIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IEZpeGVzIGEgbWlzc2luZyBga3ZtX3NpZ3NldF9kZWFjdGl2YXRlKClgIGNhbGwgb24gYW4gZXJyb3IgcGF0aC4gVGhpcyBpcyBhIHN0YXRlIG1hbmFnZW1lbnQgYnVnLlxcbjMuIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogRml4ZXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIGBjb3B5X3RvX3VzZXJgIHNvIHRoYXQgYHJjYCBhbmQgYHJyY2AgYXJlIHdyaXR0ZW4gdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0cyBpbiB0aGUgdXNlciBzcGFjZSBzdHJ1Y3R1cmUuIFRoZSBjb3BpZWQgZGF0YSBpdHNlbGYgKGBjbWQucmNgIGFuZCBgY21kLnJyY2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGEgcHJlY2VkaW5nIGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuXFxuNC4gYHNldHVwX2FwY2IxMGA6IEFkZHMgYSBgbWVtc2V0YCB0byBmdWxseSBpbml0aWFsaXplIHRoZSBgYXBjYjFgIHN0cnVjdHVyZSBpbiB0aGUgc2hhZG93IENSWUNCLiBXaXRob3V0IHRoaXMsIGZpZWxkcyBsaWtlIGBhcG1bMS4uM11gIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgYW5kIGNvbnRhaW4gc3RhbGUgZGF0YSBmcm9tIHByZXZpb3VzIHVzZXMgb2YgdGhlIGNhY2hlZCBgdnNpZV9wYWdlYC4gVGhpcyBzdGFsZSBkYXRhIGlzIHRoZW4gcmVhZCBieSB0aGUgaGFyZHdhcmUgKFNJRSkgd2hlbiBleGVjdXRpbmcgYSBuZXN0ZWQgZ3Vlc3QsIHBvdGVudGlhbGx5IGdyYW50aW5nIHVuYXV0aG9yaXplZCBjcnlwdG8gYWNjZXNzLiBIb3dldmVyLCBiZWNhdXNlIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBleGNsdXNpdmVseSBieSB0aGUgaGFyZHdhcmUgYW5kIG5vdCBieSB0aGUgQ1BVLCBLTVNBTiBjYW5ub3QgZGV0ZWN0IGl0IChLTVNBTiBvbmx5IGluc3RydW1lbnRzIENQVSBpbnN0cnVjdGlvbnMgYW5kIHRoZXJlIGFyZSBubyBleHBsaWNpdCBga21zYW5fY2hlY2tfbWVtb3J5KClgIGFubm90YXRpb25zIGZvciB0aGUgU0lFIGJsb2NrKS5cXG5cXG5UaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTAzN2EzYTUyZjc0OWE1ZDRkZThiOTkzZTJiZGMwYmExNThjZjU1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE1OjUwOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCA1MThhNjljNTVlODVjLi43ZGZkMGFkMzY3MzY4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC01NjIsMTEgKzU2MiwxMiBAQCBzdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcbiBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5pb24gc2tleSBza2V5KVxuIHtcbi1cdHVuaW9uIGFzY2UgYXNjZSA9IGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oYWRkcik7XG4rXHR1bmlvbiBhc2NlIGFzY2U7XG4gXHRpbnQgcjtcbiBcbiBcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdGFzY2UgPSBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2U7XG4gXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG5AQCAtNTA2OSw3ICs1MDcwLDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cHJfZXJyX3JhdGVsaW1pdGVkKFwiY2FuJ3QgcnVuIHN0b3BwZWQgdmNwdSAlZFxcblwiLFxuIFx0XHRcdFx0ICAgdmNwdS1cdTAwM2V2Y3B1X2lkKTtcbiBcdFx0cmMgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfc2lnc2V0O1xuIFx0fVxuIFxuIFx0a2VybmVsX2ZwdV9iZWdpbihcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcbkBAIC01MDk5LDkgKzUxMDAsMTEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0b3JlX3JlZ3ModmNwdSk7XG4gXHRrZXJuZWxfZnB1X2VuZChcdTAwMjZmcHUsIEtFUk5FTF9GUEMgfCBLRVJORUxfVlhSKTtcbiBcbitcdHZjcHUtXHUwMDNlc3RhdC5leGl0X3VzZXJzcGFjZSsrO1xuK1xuK291dF9zaWdzZXQ6XG4gXHRrdm1fc2lnc2V0X2RlYWN0aXZhdGUodmNwdSk7XG4gXG4tXHR2Y3B1LVx1MDAzZXN0YXQuZXhpdF91c2Vyc3BhY2UrKztcbiBvdXQ6XG4gXHR2Y3B1X3B1dCh2Y3B1KTtcbiBcdHJldHVybiByYztcbkBAIC01NzMyLDcgKzU3MzUsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdHIgPSBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHZjcHUsIFx1MDAyNmNtZCk7XG4gXG4gXHRcdC8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqL1xuLVx0XHRpZiAoY29weV90b191c2VyKChfX3U4IF9fdXNlciAqKWFyZ3AsIFx1MDAyNmNtZC5yYyxcbitcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXHUwMDI2Y21kLnJjLFxuIFx0XHRcdFx0IHNpemVvZihjbWQucmMpICsgc2l6ZW9mKGNtZC5ycmMpKSlcbiBcdFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS92c2llLmMgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuaW5kZXggZWVhMjQ1NjJlN2RiMi4uMGE3ZDhkZmFiNmI3OSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vdnNpZS5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ZzaWUuY1xuQEAgLTE3Myw2ICsxNzMsNyBAQCBzdGF0aWMgaW50IHNldHVwX2FwY2IxMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9zLFxuIFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IwKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuK1x0bWVtc2V0KGFwY2JfcywgMCwgc2l6ZW9mKCphcGNiX3MpKTtcbiBcdGFwY2Jfcy1cdTAwM2VhcG1bMF0gPSBhcGNiX2gtXHUwMDNlYXBtWzBdIFx1MDAyNiB0bXAuYXBtWzBdO1xuIFx0YXBjYl9zLVx1MDAzZWFxbVswXSA9IGFwY2JfaC1cdTAwM2VhcW1bMF0gXHUwMDI2IHRtcC5hcW1bMF0gXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xuIFx0YXBjYl9zLVx1MDAzZWFkbVswXSA9IGFwY2JfaC1cdTAwM2VhZG1bMF0gXHUwMDI2IHRtcC5hZG1bMF0gXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6MzEuODM2OTU4NTM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNTk1MzkxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gczM5MCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGFyZWFzIHdpdGhpbiB0aGUgS1ZNLXMzOTAgYXJjaGl0ZWN0dXJlLiBMZXQgbWUgYnJlYWsgZG93biBteSB0aG91Z2h0cyBhcyBJIHNlZSB0aGVtLiBGaXJzdCwgdGhlIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIGZpbGUgaGFzIHRocmVlIG1vZGlmaWNhdGlvbnMuICBUaGUgZmlyc3QsIGluIGBrdm1fczM5MF9rZXlvcGAsIGlzIGEgbG9ja2luZyBmaXguIFRoZXkndmUgbW92ZWQgdGhlIGBhc2NlYCBhc3NpZ25tZW50LCBgYXNjZSA9IGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZTtgLCB0byBiZSAqYWZ0ZXIqIHRoZSBgZ3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO2AuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgZW5zdXJpbmcgdGhlIGxvY2sgaXMgaGVsZCBiZWZvcmUgYWNjZXNzaW5nIHBvdGVudGlhbGx5IHNoYXJlZCBtZW1vcnkuXG5cbk5leHQsIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAsIHRoZSBgZ290byBvdXQ7YCBoYXMgYmVlbiBjaGFuZ2VkIHRvIGBnb3RvIG91dF9zaWdzZXQ7YCB3aGVuIHRoZSB2Q1BVIGlzIHN0b3BwZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXMgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSh2Y3B1KWAgaXMgKmFsd2F5cyogY2FsbGVkLCB3aGljaCBpcyBhIGdvb2QgZmFpbHNhZmUuXG5cblRoZSB0aGlyZCBjaGFuZ2UgaGVyZSwgd2l0aGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCwgbG9va3MgbGlrZSBhIGJ1ZyBmaXguIFRoZXkncmUgY2hhbmdpbmcgdGhlIGBjb3B5X3RvX3VzZXJgIGNhbGwgdG8gaW5jbHVkZSBhbiBgb2Zmc2V0b2ZgIHdoZW4gY29weWluZyB0aGUgcmV0dXJuIGNvZGUsIGBjbWQucmNgLCB0byB1c2VyIHNwYWNlLiAgSXQgc2VlbXMgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIGNvcHlpbmcgYGNtZC5yY2AgdG8gdGhlICpiZWdpbm5pbmcqIG9mIHRoZSB1c2VyLXByb3ZpZGVkIGJ1ZmZlciwgYGFyZ3BgLCByYXRoZXIgdGhhbiB0aGUgY29ycmVjdCBmaWVsZC4gSG1tLi4uIGl0IGxvb2tzIGxpa2UgYGNtZC5yY2AgYW5kIGBjbWQucnJjYCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoYXQncyBhbGwuIEFuZCBpdCdzIGFsbCBpbml0aWFsaXplZCBieSBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAgc28gbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay5cblxuTW92aW5nIG9uIHRvIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AsIHdlIHNlZSBhIGNoYW5nZSBpbiBgc2V0dXBfYXBjYjEwYC4gVGhleSdyZSBhZGRpbmcgYSBgbWVtc2V0KGFwY2JfcywgMCwgc2l6ZW9mKCphcGNiX3MpKTtgIGNhbGwgYmVmb3JlIHNldHRpbmcgYW55IGZpZWxkcy4gVGhpcyBpcyBpbml0aWFsaXppbmcgYSBzdHJ1Y3QsIHdoaWNoIGlzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIHByZXZlbnQgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gV2FpdCBhIG1pbnV0ZS4uLiBgYXBjYl9zYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBzZXR1cF9hcGNiMTBgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBgYXBjYl9zYCBhbmQgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIGNhdXRpb3VzIHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjM5LjE5NjUwMDY4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5Nzk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfYXBjYjEwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vdnNpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMtLyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjUtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MjUyPXN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjgtXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI2OTpcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzAtXFx0XFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4Ni1cXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTozOS4yNDc0ODU0NjhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzNTkwNDgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlbTpcblxuKipBbmFseXppbmcgYHNldHVwX2FwY2JgIGFuZCBgc2V0dXBfYXBjYjEwYCBpbiBgYXJjaC9zMzkwL2t2bS92c2llLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBhcmNoL3MzOTAva3ZtL3ZzaWUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aG9zZSB0d28gQVBDQiBzZXR1cCBmdW5jdGlvbnM6IGBzZXR1cF9hcGNiYCBhbmQgYHNldHVwX2FwY2IxMGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByb3V0aW5lcyBhcmUgY3JhZnRpbmcgdGhlIEFkZHJlc3MgU3BhY2UgQ29udHJvbCBCbG9jayAoQVBDQikgc3RydWN0dXJlcywgcmlnaHQ/IFRoYXQncyBrZXkgZm9yIG1hbmFnaW5nIGd1ZXN0IGFkZHJlc3Mgc3BhY2VzIHdpdGhpbiB0aGUgUy8zOTAgS1ZNIGVudmlyb25tZW50LiBcblxuSSdtIGFzc3VtaW5nIGBhcGNiMTBgIGlzIGxpa2VseSBhIGxhdGVyIGl0ZXJhdGlvbiBvciBzcGVjaWZpYyB2ZXJzaW9uLCBwb3NzaWJseSByZWxhdGVkIHRvIHNvbWUgaGFyZHdhcmUgZmVhdHVyZSBvciBhcmNoaXRlY3R1cmFsIGV4dGVuc2lvbi4gU28sIEkgbmVlZCB0byBjb21wYXJlIHRoZWlyIGxvZ2ljIGNhcmVmdWxseSB0byBzZWUgdGhlIGRpZmZlcmVuY2VzIGFuZCB1bmRlcnN0YW5kIHRoZSBldm9sdXRpb24uIFdoYXQgc3BlY2lmaWMgZ3Vlc3QgcGFyYW1ldGVycyBvciBoeXBlcnZpc29yIGNvbmZpZ3VyYXRpb25zIG5lY2Vzc2l0YXRlIHNlcGFyYXRlIHNldHVwIHJvdXRpbmVzPyBBcmUgd2UgZGVhbGluZyB3aXRoIGRpZmZlcmVudCBsZXZlbHMgb2YgYWRkcmVzcyB0cmFuc2xhdGlvbiBzdXBwb3J0LCBwcm90ZWN0aW9uIG1lY2hhbmlzbXMsIG9yIHNvbWUgb3RoZXIgbnVhbmNlIG9mIHRoZSBTLzM5MCBhcmNoaXRlY3R1cmU/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgZGlmZmVyZW5jZXMgaW4gaG93IHRoZSBBUENCIGZpZWxkcyDigJMgc3VjaCBhcyB0aGUgYWNjZXNzIGNvbnRyb2wgYml0cywgc2VnbWVudC9wYWdlIHRhYmxlIGFkZHJlc3NlcywgYW5kIHN0b3JhZ2Uga2V5cyDigJMgYXJlIHBvcHVsYXRlZC4gQW55IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIGFsd2F5cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhlIEFQQ0IgaXMgYSBzZW5zaXRpdmUgYXJlYS5cblxuTXkgYWltIGlzIHRvIGdyYXNwIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB2dWxuZXJhYmlsaXRpZXMsIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIEtWTS1TLzM5MCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGVsLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgc2VlIHdoZXJlIHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIFZTSUUgY29udGV4dC4gUGVyaGFwcyBJJ2xsIGV2ZW4gY29tcGFyZSB0aGVtIGFnYWluc3Qgc2ltaWxhciBBUENCIHNldHVwIG1lY2hhbmlzbXMgaW4gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0byBnZXQgYSBicm9hZGVyIHBlcnNwZWN0aXZlLiBMZXQncyBzZWUgaG93IHdlbGwgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBkaWZmZXJlbnQgZ3Vlc3QgbWVtb3J5IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6NDMuNjgzMzkzMzc1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnNjYl9zLVxcdTAwM2VjcHVmbGFncywgbmV3ZmxhZ3MpO1xcbiAxNjE6XFx0XFx0cmV0dXJuIDA7XFxuIDE2MjpcXHR9XFxuIDE2MzpcXHQvKiBDb3B5IHRvIEFQQ0IgRk9STUFUMSBmcm9tIEFQQ0IgRk9STUFUMCAqL1xcbiAxNjQ6XFx0c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcXG4gMTY1OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG4gMTY2OlxcdHtcXG4gMTY3OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9hcGNiMCB0bXA7XFxuIDE2ODpcXHRcXHR1bnNpZ25lZCBsb25nIGFwY2JfZ3BhO1xcbiAxNjk6XFx0XFxuIDE3MDpcXHRcXHRhcGNiX2dwYSA9IGNyeWNiX2dwYSArIG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgXFx1MDAyNnRtcCxcXG4gMTczOlxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IwKSkpXFxuIDE3NDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0bWVtc2V0KGFwY2JfcywgMCwgc2l6ZW9mKCphcGNiX3MpKTtcXG4gMTc3OlxcdFxcdGFwY2Jfcy1cXHUwMDNlYXBtWzBdID0gYXBjYl9oLVxcdTAwM2VhcG1bMF0gXFx1MDAyNiB0bXAuYXBtWzBdO1xcbiAxNzg6XFx0XFx0YXBjYl9zLVxcdTAwM2VhcW1bMF0gPSBhcGNiX2gtXFx1MDAzZWFxbVswXSBcXHUwMDI2IHRtcC5hcW1bMF0gXFx1MDAyNiAweGZmZmYwMDAwMDAwMDAwMDBVTDtcXG4gMTc5OlxcdFxcdGFwY2Jfcy1cXHUwMDNlYWRtWzBdID0gYXBjYl9oLVxcdTAwM2VhZG1bMF0gXFx1MDAyNiB0bXAuYWRtWzBdIFxcdTAwMjYgMHhmZmZmMDAwMDAwMDAwMDAwVUw7XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHJldHVybiAwO1xcbiAxODI6XFx0XFxuIDE4MzpcXHR9XFxuIDE4NDpcXHRcXG4gMTg1OlxcdC8qKlxcbiAxODY6XFx0ICogc2V0dXBfYXBjYjAwIC0gQ29weSB0byBBUENCIEZPUk1BVDAgZnJvbSBBUENCIEZPUk1BVDBcXG4gMTg3OlxcdCAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxcbiAxODg6XFx0ICogQGFwY2JfczogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBzaGFkb3cgY3J5Y2JcXG4gMTg5OlxcdCAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG4gMTkwOlxcdCAqIEBhcGNiX2g6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgZ3Vlc3QxXFxuIDE5MTpcXHQgKlxcbiAxOTI6XFx0ICogUmV0dXJucyAwIGFuZCAtRUZBVUxUIG9uIGVycm9yIHJlYWRpbmcgZ3Vlc3QgYXBjYlxcbiAxOTM6XFx0ICovXFxuIDE5NDpcXHRzdGF0aWMgaW50IHNldHVwX2FwY2IwMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcXG4gMTk1OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCB1bnNpZ25lZCBsb25nICphcGNiX2gpXFxuIDE5NjpcXHR7XFxuIDE5NzpcXHRcXHR1bnNpZ25lZCBsb25nIGFwY2JfZ3BhO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHRhcGNiX2dwYSA9IGNyeWNiX2dwYSArIG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgYXBjYl9zLFxcbiAyMDI6XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjApKSlcXG4gMjAzOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXFxuIDIwNjpcXHRcXHRcXHQgICBCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMCkpO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRyZXR1cm4gMDtcXG4gMjA5OlxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0LyoqXFxuIDIxMjpcXHQgKiBzZXR1cF9hcGNiMTEgLSBDb3B5IHRoZSBGT1JNQVQxIEFQQ0IgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIHNoYWRvdyBDUllDQlxcbiAyMTM6XFx0ICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuIDIxNDpcXHQgKiBAYXBjYl9zOiBwb2ludGVyIHRvIHN0YXJ0IG9mIGFwY2IgaW4gdGhlIHNoYWRvdyBjcnljYlxcbiAyMTU6XFx0ICogQGNyeWNiX2dwYTogZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyB0byBzdGFydCBvZiBvcmlnaW5hbCBndWVzdCBjcnljYlxcbiAyMTY6XFx0ICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBob3N0XFxuIDIxNzpcXHQgKlxcbiAyMTg6XFx0ICogUmV0dXJucyAwIGFuZCAtRUZBVUxUIG9uIGVycm9yIHJlYWRpbmcgZ3Vlc3QgYXBjYlxcbiAyMTk6XFx0ICovXFxuIDIyMDpcXHRzdGF0aWMgaW50IHNldHVwX2FwY2IxMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcXG4gMjIxOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxcbiAyMjI6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqYXBjYl9oKVxcbiAyMjM6XFx0e1xcbiAyMjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBhcGNiX2dwYTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0YXBjYl9ncGEgPSBjcnljYl9ncGEgKyBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiLCBhcGNiMSk7XFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdGlmIChyZWFkX2d1ZXN0X3JlYWwodmNwdSwgYXBjYl9ncGEsIGFwY2JfcyxcXG4gMjI5OlxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSkpXFxuIDIzMDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0Yml0bWFwX2FuZChhcGNiX3MsIGFwY2JfcywgYXBjYl9oLFxcbiAyMzM6XFx0XFx0XFx0ICAgQklUU19QRVJfQllURSAqIHNpemVvZihzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEpKTtcXG4gMjM0OlxcdFxcbiAyMzU6XFx0XFx0cmV0dXJuIDA7XFxuIDIzNjpcXHR9XFxuIDIzNzpcXHRcXG4gMjM4OlxcdC8qKlxcbiAyMzk6XFx0ICogc2V0dXBfYXBjYiAtIENyZWF0ZSBhIHNoYWRvdyBjb3B5IG9mIHRoZSBhcGNiLlxcbiAyNDA6XFx0ICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuIDI0MTpcXHQgKiBAY3J5Y2JfczogcG9pbnRlciB0byBzaGFkb3cgY3J5Y2JcXG4gMjQyOlxcdCAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG4gMjQzOlxcdCAqIEBjcnljYl9oOiBwb2ludGVyIHRvIHRoZSBob3N0IGNyeWNiXFxuIDI0NDpcXHQgKiBAZm10X286IGZvcm1hdCBvZiB0aGUgb3JpZ2luYWwgZ3Vlc3QgY3J5Y2IuXFxuIDI0NTpcXHQgKiBAZm10X2g6IGZvcm1hdCBvZiB0aGUgaG9zdCBjcnljYi5cXG4gMjQ2OlxcdCAqXFxuIDI0NzpcXHQgKiBDaGVja3MgdGhlIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIGhvc3QgY3J5Y2IgYW5kIGNhbGxzIHRoZVxcbiAyNDg6XFx0ICogYXBwcm9wcmlhdGUgY29weSBmdW5jdGlvbi5cXG4gMjQ5OlxcdCAqXFxuIDI1MDpcXHQgKiBSZXR1cm4gMCBvciBhbiBlcnJvciBudW1iZXIgaWYgdGhlIGd1ZXN0IGFuZCBob3N0IGNyeWNiIGFyZSBpbmNvbXBhdGlibGUuXFxuIDI1MTpcXHQgKi9cXG4gMjUyOlxcdHN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXFxuIDI1MzpcXHRcXHQgICAgICAgY29uc3QgdTMyIGNyeWNiX2dwYSxcXG4gMjU0OlxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9oLFxcbiAyNTU6XFx0XFx0ICAgICAgIGludCBmbXRfbywgaW50IGZtdF9oKVxcbiAyNTY6XFx0e1xcbiAyNTc6XFx0XFx0c3dpdGNoIChmbXRfbykge1xcbiAyNTg6XFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxcbiAyNTk6XFx0XFx0XFx0aWYgKChjcnljYl9ncGEgXFx1MDAyNiBQQUdFX01BU0spICE9ICgoY3J5Y2JfZ3BhICsgMjU2KSBcXHUwMDI2IFBBR0VfTUFTSykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjQzLjY4MzUxOTEyNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1NjAwODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIEknbSB0cmFjaW5nIHRoaXMgYGFwY2Jfc2AgcG9pbnRlci4uLiByaWdodCwgaXQncyBhIHBvaW50ZXIgdG8gYGNyeWNiX3MtXHUwMDNlYXBjYjFgLiBHb3QgaXQsIHRoYXQgbWFrZXMgc2Vuc2UuIEhhbmcgb24sIGxldCBtZSBqdXN0IGNvbmZpcm0gd2hlcmUgYGNyeWNiX3NgIGlzIGFjdHVhbGx5IGFsbG9jYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGF0IHN0cnVjdHVyZSB0byBiZSBzdXJlLiBBbHJpZ2h0LCBsZXQncyBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGBzZXR1cF9hcGNiYCBpcyBjYWxsZWQgLSB0aGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gVHJhY2tpbmcgZG93biBhbGxvY2F0aW9uIGFuZCB1c2FnZSBpcyB0aGUga2V5IGhlcmUuIExldCBtZSB0cmFjZSB0aGF0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjQ3LjEyOTEyMjQ3MloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3OTY3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0dXBfYXBjYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMjU9c3RhdGljIGludCBwcmVwYXJlX2NwdWZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTYzLS8qIENvcHkgdG8gQVBDQiBGT1JNQVQxIGZyb20gQVBDQiBGT1JNQVQwICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY1LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE4NS0vKipcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxODY6ICogc2V0dXBfYXBjYjAwIC0gQ29weSB0byBBUENCIEZPUk1BVDAgZnJvbSBBUENCIEZPUk1BVDBcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODctICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTMtICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTk0OnN0YXRpYyBpbnQgc2V0dXBfYXBjYjAwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyAqYXBjYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE5NS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNyeWNiX2dwYSwgdW5zaWduZWQgbG9uZyAqYXBjYl9oKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjExLS8qKlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIxMjogKiBzZXR1cF9hcGNiMTEgLSBDb3B5IHRoZSBGT1JNQVQxIEFQQ0IgZnJvbSB0aGUgZ3Vlc3QgdG8gdGhlIHNoYWRvdyBDUllDQlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxMy0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIxOS0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyMjA6c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjIxLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM4LS8qKlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIzOTogKiBzZXR1cF9hcGNiIC0gQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGFwY2IuXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjQwLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjUxLSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1MjpzdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1My1cXHQgICAgICAgY29uc3QgdTMyIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2Mi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNjM6XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMSh2Y3B1LCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjQtXFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjcyLVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNzM6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3NC1cXHRcXHRcXHRcXHRcXHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg2LVxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODktXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI5MDpcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjkxLVxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0zMTk9c3RhdGljIGludCBzaGFkb3dfY3J5Y2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXFx0aWYgKGFwaWVfcykge1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MTpcXHRcXHRyZXQgPSBzZXR1cF9hcGNiKHZjcHUsIFxcdTAwMjZ2c2llX3BhZ2UtXFx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM1Mi1cXHRcXHRcXHRcXHQgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6NDcuMTc1OTI1NjEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDU1ODA4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWNvbnN0cnVjdGluZyBhIFBvaW50ZXIgYW5kIEl0cyBDb250ZXh0KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyB0ZWxsaW5nIG1lIHRoYXQgYGNyeWNiX3NgIGlzIGEgcG9pbnRlciB0byBzb21ldGhpbmfigJRzcGVjaWZpY2FsbHksIHRoZSBgY3J5Y2JgIG1lbWJlciBvZiBhIGB2c2llX3BhZ2VgIHN0cnVjdHVyZS4gT2theSwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB2c2llX3BhZ2VgICppcyouIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgbmF0dXJlIG9mIGB2c2llX3BhZ2VgLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kIGhvdyBgY3J5Y2JgIGlzIGRlZmluZWQuIFRoaXMgaXMgY29tbW9uIHByYWN0aWNlLCBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgZnVsbCBzdHJ1Y3R1cmUgaW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB3aGF0IGBjcnljYl9zYCBpcyBhY3R1YWxseSByZWZlcmVuY2luZy4gSSdsbCBuZWVkIHRvIGtub3cgaWYgdGhpcyBwb2ludGVyIGlzIHZhbGlkIGFuZCBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGlzIGFjY2Vzc2libGUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzYwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTE6NTAuNjgxNTA4OTg4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA0NTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdnNpZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vdnNpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vdnNpZS5jPTMwPWVudW0gdnNpZV9wYWdlX2ZsYWdzIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMzLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM0OnN0cnVjdCB2c2llX3BhZ2Uge1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM1LVxcdHN0cnVjdCBrdm1fczM5MF9zaWVfYmxvY2sgc2NiX3M7XFx0LyogMHgwMDAwICovXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03Mi1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo3MzpzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgdnNpZV9wYWdlKSA9PSBQQUdFX1NJWkUpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTc0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9NzY9c3RhdGljIGludCBzZXRfdmFsaWRpdHlfaWNwdChzdHJ1Y3Qga3ZtX3MzOTBfc2llX2Jsb2NrICpzY2IsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy04NS0vKiBtYXJrIHRoZSBwcmVmaXggYXMgdW5tYXBwZWQsIHRoaXMgd2lsbCBibG9jayB0aGUgVlNJRSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjg2OnN0YXRpYyB2b2lkIHByZWZpeF91bm1hcHBlZChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtODcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTEtLyogbWFyayB0aGUgcHJlZml4IGFzIHVubWFwcGVkIGFuZCB3YWl0IHVudGlsIHRoZSBWU0lFIGhhcyBiZWVuIGxlZnQgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo5MjpzdGF0aWMgdm9pZCBwcmVmaXhfdW5tYXBwZWRfc3luYyhzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAxLS8qIG1hcmsgdGhlIHByZWZpeCBhcyBtYXBwZWQsIHRoaXMgd2lsbCBhbGxvdyB0aGUgVlNJRSB0byBydW4gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDI6c3RhdGljIHZvaWQgcHJlZml4X21hcHBlZChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNy0vKiB0ZXN0IGlmIHRoZSBwcmVmaXggaXMgbWFwcGVkIGludG8gdGhlIGdtYXAgc2hhZG93ICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTA4OnN0YXRpYyBpbnQgcHJlZml4X2lzX21hcHBlZChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTA5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTExMy0vKiBjb3B5IHRoZSB1cGRhdGVkIGludGVydmVudGlvbiByZXF1ZXN0IGJpdHMgaW50byB0aGUgc2hhZG93IHNjYiAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjExNDpzdGF0aWMgdm9pZCB1cGRhdGVfaW50ZXJ2ZW50aW9uX3JlcXVlc3RzKHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTI0LS8qIHNoYWRvdyAoZmlsdGVyIGFuZCB2YWxpZGF0ZSkgdGhlIGNwdWZsYWdzICAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEyNTpzdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTI2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTI1Mj1zdGF0aWMgaW50IHNldHVwX2FwY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9zLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzE4LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMxOTpzdGF0aWMgaW50IHNoYWRvd19jcnljYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMjAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzkzLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM5NDpzdGF0aWMgdm9pZCBzaGFkb3dfZXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM5NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00MDUtLyogc2hhZG93IChyb3VuZCB1cC9kb3duKSB0aGUgaWJjIHRvIGF2b2lkIHZhbGlkaXR5IGljcHQgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo0MDY6c3RhdGljIHZvaWQgcHJlcGFyZV9pYmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNDA3LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTQyOC0vKiB1bnNoYWRvdyB0aGUgc2NiLCBjb3B5aW5nIHBhcmFtZXRlcnMgYmFjayB0byB0aGUgcmVhbCBzY2IgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo0Mjk6c3RhdGljIHZvaWQgdW5zaGFkb3dfc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTQzMC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00NzktICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6NDgwOnN0YXRpYyBpbnQgc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy00ODEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9NjI0PXZvaWQga3ZtX3MzOTBfdnNpZV9nbWFwX25vdGlmaWVyKHN0cnVjdCBnbWFwICpnbWFwLCBncGFfdCBzdGFydCwgZ3BhX3QgZW5kKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTYyNS17XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6NjI2OlxcdHN0cnVjdCB2c2llX3BhZ2UgKmN1ciwgKm5leHQ7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNjI3LVxcdHVuc2lnbmVkIGxvbmcgcHJlZml4O1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNjU0LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjY1NTpzdGF0aWMgaW50IG1hcF9wcmVmaXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02NTYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9NzAzPXN0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIGhwYV90IGhwYSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTcxMC0vKiB1bnBpbiBhbGwgYmxvY2tzIHByZXZpb3VzbHkgcGlubmVkIGJ5IHBpbl9ibG9ja3MoKSwgbWFya2luZyB0aGVtIGRpcnR5ICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6NzExOnN0YXRpYyB2b2lkIHVucGluX2Jsb2NrcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy03MTIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzY2LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjc2NzpzdGF0aWMgaW50IHBpbl9ibG9ja3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzY4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg4NC0vKiB1bnBpbiB0aGUgc2NiIHByb3ZpZGVkIGJ5IGd1ZXN0IDIsIG1hcmtpbmcgaXQgYXMgZGlydHkgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo4ODU6c3RhdGljIHZvaWQgdW5waW5fc2NiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTg4Ni1cXHRcXHQgICAgICBncGFfdCBncGEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05MDAtICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6OTAxOnN0YXRpYyBpbnQgcGluX3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05MDItXFx0XFx0ICAgZ3BhX3QgZ3BhKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9OTIzPXN0YXRpYyBpbnQgaW5qZWN0X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgX191MTYgY29kZSwgX191NjQgdmFkZHIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05NTItICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6OTUzOnN0YXRpYyBpbnQgaGFuZGxlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLCBzdHJ1Y3QgZ21hcCAqc2cpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTU0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTk3OC0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo5Nzk6c3RhdGljIHZvaWQgaGFuZGxlX2xhc3RfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05ODAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTg1LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjk4NjpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdnNpZV9pY3B0KHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy05ODcte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTkxLS8qIHJld2luZCB0aGUgcHN3IGFuZCBjbGVhciB0aGUgdnNpZSBpY3B0LCBzbyB3ZSBjYW4gcmV0cnkgZXhlY3V0aW9uICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6OTkyOnN0YXRpYyB2b2lkIHJldHJ5X3ZzaWVfaWNwdChzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtOTkzLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMDYtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTAwNzpzdGF0aWMgaW50IGhhbmRsZV9zdGZsZV8wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwMDgtXFx0XFx0XFx0ICB1MzIgZmFjX2xpc3Rfb3JpZ2luKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAyMy1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMDI0OnN0YXRpYyBpbnQgaGFuZGxlX3N0ZmxlXzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHUzMiBmYWNfbGlzdF9vcmlnaW4pXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTAyNS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDUyLSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEwNTM6c3RhdGljIGludCBoYW5kbGVfc3RmbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTA1NC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDYxLVxcdEJVSUxEX0JVR19PTihzaXplb2YodnNpZV9wYWdlLVxcdTAwM2VmYWMpIFxcdTAwM2MgKChTMzkwX0FSQ0hfRkFDX0xJU1RfU0laRV9VNjQgKyAxKSAqIHNpemVvZih1NjQpKSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTA2MjpcXHRCVUlMRF9CVUdfT04oIUlTX0FMSUdORUQob2Zmc2V0b2Yoc3RydWN0IHZzaWVfcGFnZSwgZmFjKSwgOCkpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwNjMtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMDkzLSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEwOTQ6c3RhdGljIHU2NCB2c2llX2dldF9yZWdpc3RlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSwgdTggcmVnKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEwOTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTEwNy1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMTA4OnN0YXRpYyBpbnQgdnNpZV9oYW5kbGVfbXZwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSwgc3RydWN0IGdtYXAgKnNnKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTExMDkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTE4Ny0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMTg4OnN0YXRpYyBpbnQgZG9fdnNpZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UsIHN0cnVjdCBnbWFwICpzZylcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMTg5LVxcdF9fcmVsZWFzZXModmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTI4NC1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMjg1OnN0YXRpYyB2b2lkIHJlbGVhc2VfZ21hcF9zaGFkb3coc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTEyODYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTMwMC1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxMzAxOnN0YXRpYyBzdHJ1Y3QgZ21hcCAqYWNxdWlyZV9nbWFwX3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzAyLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEzNTM9c3RhdGljIHZvaWQgcmVnaXN0ZXJfc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTM1NDpcXHRcXHRcXHRcXHRzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTM1NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xMzgzPXN0YXRpYyB2b2lkIHVucmVnaXN0ZXJfc2hhZG93X3NjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzk2LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjEzOTc6c3RhdGljIGludCB2c2llX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2c2llX3BhZ2UgKnZzaWVfcGFnZSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xMzk4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0NjMtLyogVHJ5IGdldHRpbmcgYSBnaXZlbiB2c2llIHBhZ2UsIHJldHVybmluZyBcXFwidHJ1ZVxcXCIgb24gc3VjY2Vzcy4gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDY0OnN0YXRpYyBpbmxpbmUgYm9vbCB0cnlfZ2V0X3ZzaWVfcGFnZShzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQ2NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNDcxLS8qIFB1dCBhIHZzaWUgcGFnZSBhY3F1aXJlZCB0aHJvdWdoIGdldF92c2llX3BhZ2UgLyB0cnlfZ2V0X3ZzaWVfcGFnZS4gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDcyOnN0YXRpYyB2b2lkIHB1dF92c2llX3BhZ2Uoc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0NzMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTQ4My0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNDg0OnN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODUte1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE0ODY6XFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE0ODctXFx0aW50IG5yX3ZjcHVzO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTU1Nz1pbnQga3ZtX3MzOTBfaGFuZGxlX3ZzaWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1NTgte1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE1NTk6XFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1NjAtXFx0dW5zaWduZWQgbG9uZyBzY2JfYWRkcjtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE1NjgtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTU2OTpcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2c2llX3BhZ2UpICE9IFBBR0VfU0laRSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTU3MC1cXHRzY2JfYWRkciA9IGt2bV9zMzkwX2dldF9iYXNlX2Rpc3Bfcyh2Y3B1LCBOVUxMKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTE2MjE9dm9pZCBrdm1fczM5MF92c2llX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2MjIte1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE2MjM6XFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2MjQtXFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjUwLjczMTU2MjI0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQzNTIzNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVBDQiBUcmFuc2ZlciBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdnNpZV9wYWdlYCBzdHJ1Y3R1cmUg4oCTIGl0J3MgYWxsb2NhdGVkLCBjYWNoZWQsIGFuZCBzZWVtcyBjcnVjaWFsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGFjdGluZyBhcyBhIHRlbXBvcmFyeSBzdG9yYWdlIGFyZWEsIGxpa2VseSBmb3IgZWZmaWNpZW5jeSdzIHNha2UuIE5vdywgYHNldHVwX2FwY2IxMGAgaXMgZ3JhYmJpbmcgbXkgYXR0ZW50aW9uLiBJdCBhcHBlYXJzIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjb3B5aW5nIGBhcGNiMGAgZGF0YSBmcm9tIHRoZSBndWVzdCBtZW1vcnkgaW50byBgYXBjYjFgLCBidXQsIGltcG9ydGFudGx5LCB0aGlzIGNvcHkgaXMgaGFwcGVuaW5nIGluIHRoZSBzaGFkb3cgY3J5Y2Igd2l0aGluIGB2c2llX3BhZ2VgLiBUaGUgc2hhZG93IGNyeWNiISBSaWdodCwgdGhhdCdzIHRoZSBhcmVhIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IFNJRSwgdXNlcyB3aGVuIG5lc3RlZCBndWVzdHMgYXJlIHJ1bm5pbmcuIE1ha2VzIHNlbnNlLCBzbyB3ZSBhcmUgc2V0dGluZyB1cCB0aGUgc3RydWN0dXJlIHRoYXQgU0lFIGlzIGdvaW5nIHRvIHVzZSwgYW5kIHdlIGFyZSBjYWNoaW5nIGl0IHRvIHNhdmUgdGltZSBpbiB0aGUgaG90IHBhdGguXG5cbk5vdyBJIHNlZSBgYXBjYl9zYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEkgbmVlZCB0byByZXZpZXcgYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEl0IGhhcyB0byBjb250YWluIHRoZSBkYXRhIHRoYXQncyBiZWluZyBzZXQgdXAgYW5kIHRoYXQgU0lFIG5lZWRzLCB3aGljaCBzdWdnZXN0cyBpdCBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGUgc3RhdGUuIEkgd2lsbCBnbyBhbmQgcmV2aWV3IHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAxNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTo1NC45NzUwODgxMDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyOTY0OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fczM5MF9hcGNiMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTU0Nz1zdHJ1Y3Qga3ZtX3MzOTBfYXBjYjAge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNTU0LSNkZWZpbmUgQVBDQjFfTUFTS19TSVpFIDRcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo1NTU6c3RydWN0IGt2bV9zMzkwX2FwY2IxIHtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC01NTYtXFx0X191NjQgYXBtW0FQQ0IxX01BU0tfU0laRV07XFx0XFx0LyogMHgwMDAwICovXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD01NjI9c3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiB7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC01NjYtXFx0X191OCAgIGFlc193cmFwcGluZ19rZXlfbWFza1szMl07XFx0LyogMHgwMDYwICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6NTY3OlxcdHN0cnVjdCBrdm1fczM5MF9hcGNiMSBhcGNiMTtcXHRcXHQvKiAweDAwODAgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC01NjgtfTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMtLyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0yMjA9c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjgtXFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgYXBjYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyOTpcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMSkpKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMi1cXHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjMzOlxcdFxcdCAgIEJJVFNfUEVSX0JZVEUgKiBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTo1NS4wMjgwNTcxMzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MjE5ODkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGt2bV9zMzkwX2FwY2IxYCBzdHJ1Y3Q6XG5cbioqRXhhbWluaW5nIHRoZSBga3ZtX3MzOTBfYXBjYjFgIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYHN0cnVjdCBrdm1fczM5MF9hcGNiMWAuIEl0J3MgbG9jYXRlZCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCBzbyBJJ2xsIG5lZWQgdG8gZ28gdGhlcmUgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgZmllbGRzLiBJIGtub3cgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBLVk0gaW1wbGVtZW50YXRpb24gb24gczM5MCwgc28gaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIEFjY2VzcyBQYXJhbWV0ZXIgQ29udHJvbCBCbG9jayAoQVBDQikgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdmlydHVhbGl6YXRpb24sIHBhcnRpY3VsYXJseSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIGVtdWxhdGluZyBpdHMgYmVoYXZpb3IgZm9yIGd1ZXN0IFZNcy4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIGV4YW1pbmUgd2hlcmUgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCwgaG93IGl0J3MgYmVpbmcgcG9wdWxhdGVkLCBhbmQgd2hpY2ggZnVuY3Rpb25zIHVzZSBpdC4gRnJvbSB0aGF0LCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlZHVjZSBpdHMgcm9sZSBpbiB0aGUgdmlydHVhbGl6YXRpb24gc3lzdGVtLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgZmllbGRzLCBzcGVjaWZpY2FsbHksIHRvIGdldCBhbiBpZGVhIG9mIHRoZSB0eXBlcyBvZiBBUENCIG9wZXJhdGlvbnMgYmVpbmcgbWFuYWdlZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJvbGUgaXQgcGxheXMgaW4gdGhlIG92ZXJhbGwgS1ZNLW9uLXMzOTAgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIzOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUxOjU5LjMxMDI1ODExNloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFx0X191NjQgYWRtW0FQQ0IwX01BU0tfU0laRV07XFx0XFx0LyogMHgwMDEwICovXFxuIDU1MTpcXHRcXHRfX3U2NCByZXNlcnZlZDE4O1xcdFxcdFxcdC8qIDB4MDAxOCAqL1xcbiA1NTI6XFx0fTtcXG4gNTUzOlxcdFxcbiA1NTQ6XFx0I2RlZmluZSBBUENCMV9NQVNLX1NJWkUgNFxcbiA1NTU6XFx0c3RydWN0IGt2bV9zMzkwX2FwY2IxIHtcXG4gNTU2OlxcdFxcdF9fdTY0IGFwbVtBUENCMV9NQVNLX1NJWkVdO1xcdFxcdC8qIDB4MDAwMCAqL1xcbiA1NTc6XFx0XFx0X191NjQgYXFtW0FQQ0IxX01BU0tfU0laRV07XFx0XFx0LyogMHgwMDIwICovXFxuIDU1ODpcXHRcXHRfX3U2NCBhZG1bQVBDQjFfTUFTS19TSVpFXTtcXHRcXHQvKiAweDAwNDAgKi9cXG4gNTU5OlxcdFxcdF9fdTY0IHJlc2VydmVkNjBbNF07XFx0XFx0XFx0LyogMHgwMDYwICovXFxuIDU2MDpcXHR9O1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiIHtcXG4gNTYzOlxcdFxcdHN0cnVjdCBrdm1fczM5MF9hcGNiMCBhcGNiMDtcXHRcXHQvKiAweDAwMDAgKi9cXG4gNTY0OlxcdFxcdF9fdTggICByZXNlcnZlZDIwWzB4MDA0OCAtIDB4MDAyMF07XFx0LyogMHgwMDIwICovXFxuIDU2NTpcXHRcXHRfX3U4ICAgZGVhX3dyYXBwaW5nX2tleV9tYXNrWzI0XTtcXHQvKiAweDAwNDggKi9cXG4gNTY2OlxcdFxcdF9fdTggICBhZXNfd3JhcHBpbmdfa2V5X21hc2tbMzJdO1xcdC8qIDB4MDA2MCAqL1xcbiA1Njc6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2FwY2IxIGFwY2IxO1xcdFxcdC8qIDB4MDA4MCAqL1xcbiA1Njg6XFx0fTtcXG4gNTY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MTo1OS4zMTAzNDA4ODZaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMwODc5Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBrdm1fczM5MF9hcGNiMWAgU3RydWN0dXJlIGFuZCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlY2FsbCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gb2YgYGt2bV9zMzkwX2FwY2IxYC4gUmlnaHQsIGl0IGNvbnRhaW5zIGBhcG1gLCBgYXFtYCwgYW5kIGBhZG1gIGFycmF5cywgZWFjaCBvZiBzaXplIGZvdXIsIGFuZCB0aGVuIGByZXNlcnZlZDYwWzRdYC4gRWFjaCBvZiB0aG9zZSBhcnJheXMgaXMgMzIgYnl0ZXMgKDQgKiA4KSwgYW5kIHRoZSB3aG9sZSB0aGluZyBzdW1zIHVwIHRvIDEyOCBieXRlcy5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZXR1cF9hcGNiMTBgIGZ1bmN0aW9uLiBJIHNlZSB0aGUga2V5IGNoYW5nZS4gUHJldmlvdXNseSwgdGhlIHN0cnVjdHVyZSBgYXBjYl9zYCB3YXNuJ3QgaW5pdGlhbGl6ZWQgYXQgYWxsLiBUaGUgY29kZSBzbmlwcGV0IHVzZWQgdG8gbG9vayBsaWtlIHRoaXMsIHdoaWNoIGlzIGNvbmNlcm5pbmc6XG5cbmBgYGNcblx0YXBjYl9zLVx1MDAzZWFwbVswXSA9IGFwY2JfaC1cdTAwM2VhcG1bMF0gXHUwMDI2IHRtcC5hcG1bMF07XG5cdGFwY2Jfcy1cdTAwM2VhcW1bMF0gPSBhcGNiX2gtXHUwMDNlYXFtWzBdIFx1MDAyNiB0bXAuYXFtWzBdIFx1MDAyNiAweGZmZmYwMDAwMDAwMDAwMDBVTDtcblx0YXBjYl9zLVx1MDAzZWFkbVswXSA9IGFwY2JfaC1cdTAwM2VhZG1bMF0gXHUwMDI2IHRtcC5hZG1bMF0gXHUwMDI2IDB4ZmZmZjAwMDAwMDAwMDAwMFVMO1xuYGBgXG5cbk5vdywgdGhlcmUncyBhIGBtZW1zZXRgIGJlZm9yZSB0aG9zZSBhc3NpZ25tZW50cy4gVGhhdCdzIGEgZ29vZCBmaXgsIGJ1dCBub3cgdGhlIHF1ZXN0aW9uIGlzOiB3aGF0IHdvdWxkIGJlIHRoZSBpbXBhY3Qgb2YgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgaW1wbGljYXRpb25zIG9mICpub3QqIGluaXRpYWxpemluZyBgYXBjYl9zYCBtZWFucyB0aGF0IGBhcG1bMS4uM11gLCBgYXFtWzEuLjNdYCwgYGFkbVsxLi4zXWAsIGFuZCBgcmVzZXJ2ZWQ2MFswLi4zXWAgd291bGQgYmUgbGVmdCB3aXRoIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVuZWQgdG8gYmUgaW4gdGhhdCBtZW1vcnkgbG9jYXRpb24uIFRoYXQgY291bGQgbGVhZCB0byBzb21lIHByZXR0eSB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLlxuXG5UaGUgcGxvdCB0aGlja2VucyB0aG91Z2guIEknbSByZWNhbGxpbmcgdGhhdCBgYXBjYl9zYCBpc24ndCBqdXN0IGEgc3RhbmRhbG9uZSBzdHJ1Y3R1cmUuIEl0J3MgYSBwb2ludGVyIHRvIGBjcnljYl9zLVx1MDAzZWFwY2IxYCwgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCB3aXRoaW4gYHZzaWVfcGFnZS1cdTAwM2VjcnljYmAuIFRoaXMgaXMgaW1wb3J0YW50LiBJZiBgdnNpZV9wYWdlYCBpc24ndCB6ZXJvZWQgd2hlbiBpdCdzIGFsbG9jYXRlZCwgdGhlbiB3ZSBjb3VsZCBzdGlsbCBoYXZlIHVuaW5pdGlhbGl6ZWQgZGF0YSBwcm9wYWdhdGluZyBldmVuIGFmdGVyIHRoZSBmaXgsIGJlY2F1c2UgYG1lbXNldGAgd291bGQgb25seSBhcHBseSB0byB0aGUgc3ViLXN0cnVjdHVyZSwgbm90IHRoZSB3aG9sZSBzdHJ1Y3R1cmUuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbiBwYXRoIGZvciBgdnNpZV9wYWdlYC4gSSBzaG91bGQgZGlnIGludG8gYGdldF92c2llX3BhZ2VgIHRvIHZlcmlmeSBob3cgaXQncyBhbGxvY2F0ZWQsIGFuZCBpZiBpdCdzIGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA4OCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjA2LjYxOTEzOTc1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS92c2llLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ4MDpcXHQgKiBSZXR1cm5zOiAtIGFkZHJlc3Mgb2YgYSB2c2llIHBhZ2UgKGNhY2hlZCBvciBuZXcgb25lKVxcbjE0ODE6XFx0ICogICAgICAgICAgLSBOVUxMIGlmIHRoZSBzYW1lIHNjYiBhZGRyZXNzIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIFZDUFVcXG4xNDgyOlxcdCAqICAgICAgICAgIC0gRVJSX1BUUigtRU5PTUVNKSBpZiBvdXQgb2YgbWVtb3J5XFxuMTQ4MzpcXHQgKi9cXG4xNDg0OlxcdHN0YXRpYyBzdHJ1Y3QgdnNpZV9wYWdlICpnZXRfdnNpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbjE0ODU6XFx0e1xcbjE0ODY6XFx0XFx0c3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlO1xcbjE0ODc6XFx0XFx0aW50IG5yX3ZjcHVzO1xcbjE0ODg6XFx0XFxuMTQ4OTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTQ5MDpcXHRcXHR2c2llX3BhZ2UgPSByYWRpeF90cmVlX2xvb2t1cChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZzaWUuYWRkcl90b19wYWdlLCBhZGRyIFxcdTAwM2VcXHUwMDNlIDkpO1xcbjE0OTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTQ5MjpcXHRcXHRpZiAodnNpZV9wYWdlKSB7XFxuMTQ5MzpcXHRcXHRcXHRpZiAodHJ5X2dldF92c2llX3BhZ2UodnNpZV9wYWdlKSkge1xcbjE0OTQ6XFx0XFx0XFx0XFx0aWYgKHZzaWVfcGFnZS1cXHUwMDNlc2NiX2dwYSA9PSBhZGRyKVxcbjE0OTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHZzaWVfcGFnZTtcXG4xNDk2OlxcdFxcdFxcdFxcdC8qXFxuMTQ5NzpcXHRcXHRcXHRcXHQgKiBXZSByYWNlZCB3aXRoIHNvbWVvbmUgcmV1c2luZyArIHB1dHRpbmcgdGhpcyB2c2llXFxuMTQ5ODpcXHRcXHRcXHRcXHQgKiBwYWdlIGJlZm9yZSB3ZSBncmFiYmVkIGl0LlxcbjE0OTk6XFx0XFx0XFx0XFx0ICovXFxuMTUwMDpcXHRcXHRcXHRcXHRwdXRfdnNpZV9wYWdlKHZzaWVfcGFnZSk7XFxuMTUwMTpcXHRcXHRcXHR9XFxuMTUwMjpcXHRcXHR9XFxuMTUwMzpcXHRcXG4xNTA0OlxcdFxcdC8qXFxuMTUwNTpcXHRcXHQgKiBXZSB3YW50IGF0IGxlYXN0ICNvbmxpbmVfdmNwdXMgc2hhZG93cywgc28gZXZlcnkgVkNQVSBjYW4gZXhlY3V0ZVxcbjE1MDY6XFx0XFx0ICogdGhlIFZTSUUgaW4gcGFyYWxsZWwuXFxuMTUwNzpcXHRcXHQgKi9cXG4xNTA4OlxcdFxcdG5yX3ZjcHVzID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG4xNTA5OlxcdFxcbjE1MTA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZzaWUubXV0ZXgpO1xcbjE1MTE6XFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC52c2llLnBhZ2VfY291bnQgXFx1MDAzYyBucl92Y3B1cykge1xcbjE1MTI6XFx0XFx0XFx0dnNpZV9wYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyB8IEdGUF9ETUEpO1xcbjE1MTM6XFx0XFx0XFx0aWYgKCF2c2llX3BhZ2UpIHtcXG4xNTE0OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnZzaWUubXV0ZXgpO1xcbjE1MTU6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMTUxNjpcXHRcXHRcXHR9XFxuMTUxNzpcXHRcXHRcXHRfX3NldF9iaXQoVlNJRV9QQUdFX0lOX1VTRSwgXFx1MDAyNnZzaWVfcGFnZS1cXHUwMDNlZmxhZ3MpO1xcbjE1MTg6XFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZzaWUucGFnZXNba3ZtLVxcdTAwM2VhcmNoLnZzaWUucGFnZV9jb3VudF0gPSB2c2llX3BhZ2U7XFxuMTUxOTpcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2gudnNpZS5wYWdlX2NvdW50Kys7XFxuMTUyMDpcXHRcXHR9IGVsc2Uge1xcbjE1MjE6XFx0XFx0XFx0LyogcmV1c2UgYW4gZXhpc3RpbmcgZW50cnkgdGhhdCBiZWxvbmdzIHRvIG5vYm9keSAqL1xcbjE1MjI6XFx0XFx0XFx0d2hpbGUgKHRydWUpIHtcXG4xNTIzOlxcdFxcdFxcdFxcdHZzaWVfcGFnZSA9IGt2bS1cXHUwMDNlYXJjaC52c2llLnBhZ2VzW2t2bS1cXHUwMDNlYXJjaC52c2llLm5leHRdO1xcbjE1MjQ6XFx0XFx0XFx0XFx0aWYgKHRyeV9nZXRfdnNpZV9wYWdlKHZzaWVfcGFnZSkpXFxuMTUyNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xNTI2OlxcdFxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC52c2llLm5leHQrKztcXG4xNTI3OlxcdFxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC52c2llLm5leHQgJT0gbnJfdmNwdXM7XFxuMTUyODpcXHRcXHRcXHR9XFxuMTUyOTpcXHRcXHRcXHRpZiAodnNpZV9wYWdlLVxcdTAwM2VzY2JfZ3BhICE9IFVMT05HX01BWClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MDYuNjE5MjU0MTA2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MDgxMDIwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrYWdlIGluIFZTSUUgUGFnZSBSZXVzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHZzaWVfcGFnZWAgYWxsb2NhdGlvbiBhbmQgcmV1c2Ugc2NoZW1lLiBJIHNlZSB0aGF0IHRoZSBwYWdlIGlzIGluaXRpYWxseSBhbGxvY2F0ZWQgd2l0aCBgX19HRlBfWkVST2AsIHdoaWNoIGlzIGdvb2QgZm9yIGluaXRpYWwgY2xlYW5saW5lc3MuIEhvd2V2ZXIsIHRoZSBjcnVjaWFsIGJpdCBpcyB0aGF0IGl0J3MgY2FjaGVkIGFuZCByZXVzZWQuIE5vdywgdGhlIGNvZGUgZXhwbGljaXRseSAqZG9lc24ndCogemVybyB0aGUgcGFnZSBkdXJpbmcgcmV1c2UuIE15IHRob3VnaHQgcHJvY2VzcyBpbW1lZGlhdGVseSBqdW1wcyB0byBcInN0YWxlIGRhdGEhXCIgVGhpcyBtZWFucyBgdnNpZV9wYWdlLVx1MDAzZWNyeWNiYCBjb3VsZCByZXRhaW4gcmVtbmFudHMgZnJvbSBhIHByaW9yIGd1ZXN0J3MgdXNhZ2UuIEFuZCB0aGlzIGB2c2llX3BhZ2UtXHUwMDNlY3J5Y2JgIGlzLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGRpcmVjdGx5IHVzZWQgYnkgdGhlIGhhcmR3YXJlIGZvciBuZXN0ZWQgZ3Vlc3QgZXhlY3V0aW9uLlxuXG5Ob3csIGlmIGBzZXR1cF9hcGNiMTBgIGxlYXZlcyBgYXBtWzEuLjNdYCwgYGFxbVsxLi4zXWAsIGBhZG1bMS4uM11gIHVuaW5pdGlhbGl6ZWQgZHVyaW5nIGl0cyBvcGVyYXRpb24sIHRoZSBoYXJkd2FyZSAqd2lsbCogcmVhZCB0aGVzZSB1bmluaXRpYWxpemVkIGZpZWxkcyBkdXJpbmcgbmVzdGVkIGd1ZXN0IGV4ZWN1dGlvbi4gVGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBhIG5lc3RlZCBndWVzdCBvYnNlcnZlIHRoZSBzdGF0ZSBmcm9tIHRob3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBUaGlzIHNlZW1zIGxpa2UgYSBkZWZpbml0ZSBpbmZvcm1hdGlvbiBsZWFrIHZlY3RvciBpZiB0aGUgaGFyZHdhcmUncyBvcGVyYXRpb24gaXMgaW5mbHVlbmNlZCBhbmQgb2JzZXJ2YWJsZSBieSB0aGUgbmVzdGVkIGd1ZXN0LiBGb3IgZXhhbXBsZSwgaWYgaXQncyBwb3NzaWJsZSBmb3IgdGhlIG5lc3RlZCBndWVzdCB0byBleGVjdXRlIGNyeXB0byBpbnN0cnVjdGlvbnMgaXQgc2hvdWxkIG5vdCBoYXZlIGFjY2VzcyB0bywgb3IgcmVhZCBzb21lIHN0YXRlLCBpdCBpcyBjZXJ0YWlubHkgYW4gaXNzdWUuXG5cblRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoZSBjb3B5IG9wZXJhdGlvbiBmcm9tIGBzZXR1cF9hcGNiMTBgIGJldHdlZW4gZm9ybWF0cz8gVGhhdCBpcywgYHNldHVwX2FwY2IxMGAgY29waWVzIEZPUk1BVDAgdG8gRk9STUFUMT8gTm8sIGBzZXR1cF9hcGNiMTBgIGlzIHVzZWQgdG8gY29weSBmcm9tIEFQQ0IgRk9STUFUMCB0byBBUENCIEZPUk1BVDEsIHRoYXQgaXMsIHdoZW4gYGZtdF9vID09IENSWUNCX0ZPUk1BVDBgIGFuZCBgZm10X2ggPT0gQ1JZQ0JfRk9STUFUMmAuIEkgbmVlZCB0byByZXZpZXcgd2hlcmUgYHNldHVwX2FwY2JgIGlzIGNhbGxlZCB0byBjbGFyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDYxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MTQuMTI3MzU5MjY0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL3ZzaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTI6XFx0c3RhdGljIGludCBzZXR1cF9hcGNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfcyxcXG4gMjUzOlxcdFxcdCAgICAgICBjb25zdCB1MzIgY3J5Y2JfZ3BhLFxcbiAyNTQ6XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX2gsXFxuIDI1NTpcXHRcXHQgICAgICAgaW50IGZtdF9vLCBpbnQgZm10X2gpXFxuIDI1NjpcXHR7XFxuIDI1NzpcXHRcXHRzd2l0Y2ggKGZtdF9vKSB7XFxuIDI1ODpcXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuIDI1OTpcXHRcXHRcXHRpZiAoKGNyeWNiX2dwYSBcXHUwMDI2IFBBR0VfTUFTSykgIT0gKChjcnljYl9ncGEgKyAyNTYpIFxcdTAwMjYgUEFHRV9NQVNLKSlcXG4gMjYwOlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiAyNjE6XFx0XFx0XFx0aWYgKGZtdF9oICE9IENSWUNCX0ZPUk1BVDIpXFxuIDI2MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjYzOlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTEodmNwdSwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuIDI2NDpcXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbiAyNjU6XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG4gMjY2OlxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG4gMjY3OlxcdFxcdFxcdHN3aXRjaCAoZm10X2gpIHtcXG4gMjY4OlxcdFxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG4gMjY5OlxcdFxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbiAyNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG4gMjcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y3J5Y2JfaC1cXHUwMDNlYXBjYjEpO1xcbiAyNzI6XFx0XFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxcbiAyNzM6XFx0XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IwMCh2Y3B1LFxcbiAyNzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMCxcXG4gMjc1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuIDI3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHVuc2lnbmVkIGxvbmcgKikgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IwKTtcXG4gMjc3OlxcdFxcdFxcdH1cXG4gMjc4OlxcdFxcdFxcdGJyZWFrO1xcbiAyNzk6XFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxcbiAyODA6XFx0XFx0XFx0aWYgKChjcnljYl9ncGEgXFx1MDAyNiBQQUdFX01BU0spICE9ICgoY3J5Y2JfZ3BhICsgMzIpIFxcdTAwMjYgUEFHRV9NQVNLKSlcXG4gMjgxOlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRcXHRzd2l0Y2ggKGZtdF9oKSB7XFxuIDI4NDpcXHRcXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuIDI4NTpcXHRcXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjEwKHZjcHUsIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMSxcXG4gMjg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuIDI4NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG4gMjg4OlxcdFxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG4gMjg5OlxcdFxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMDpcXG4gMjkwOlxcdFxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMDAodmNwdSxcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjAsXFxuIDI5MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbiAyOTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopIFxcdTAwMjZjcnljYl9oLVxcdTAwM2VhcGNiMCk7XFxuIDI5NDpcXHRcXHRcXHR9XFxuIDI5NTpcXHRcXHR9XFxuIDI5NjpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0LyoqXFxuIDMwMDpcXHQgKiBzaGFkb3dfY3J5Y2IgLSBDcmVhdGUgYSBzaGFkb3cgY29weSBvZiB0aGUgY3J5Y2IgYmxvY2tcXG4gMzAxOlxcdCAqIEB2Y3B1OiBhIHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjE0LjEyNzUzNjI0NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA4MTU3NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDUllDQiBGb3JtYXQgTWlzbWF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGl0IGxvb2tzIGxpa2UgYHNldHVwX2FwY2IxMGAgaXMgdHJpZ2dlcmVkIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBmbXRfb2AgaXMgZWl0aGVyIGBDUllDQl9GT1JNQVQxYCBvciBgQ1JZQ0JfRk9STUFUMGAsIHdoaWxlIGBmbXRfaGAgaXMgYENSWUNCX0ZPUk1BVDJgLiBUaGlzIG1pc21hdGNoIGlzIHRoZSBjb3JlIGlzc3VlLiBUaGUgaG9zdCBpcyBhbnRpY2lwYXRpbmcgYSBgRk9STUFUMmAgQ1JZQ0IsIHdoaWNoIHV0aWxpemVzIGBhcGNiMWAsIGJ1dCB0aGUgZ3Vlc3QgaXMgcHJvdmlkaW5nIGEgYEZPUk1BVDFgIG9yIGBGT1JNQVQwYCBDUllDQiwgdXNpbmcgYGFwY2IwYCBpbnN0ZWFkLiBUaGUgZnVuY3Rpb24gYHNldHVwX2FwY2IxMGAgYWN0cyBhcyBhIHRyYW5zbGF0b3IsIGVmZmVjdGl2ZWx5IGNvbnZlcnRpbmcgYGFwY2IwYCBkYXRhIGludG8gYSBjb21wYXRpYmxlIGBhcGNiMWAgc3RydWN0dXJlLlxuXG5UaGUgY3J1eCBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBzdHJ1Y3R1cmFsIGRpZmZlcmVuY2UgYmV0d2VlbiBgYXBjYjBgIGFuZCBgYXBjYjFgLiBgYXBjYjBgIGhhcyBhIHNpbmdsZSBlbGVtZW50IGVhY2ggZm9yIGBhcG1gLCBgYXFtYCwgYW5kIGBhZG1gLCB3aGVyZWFzIGBhcGNiMWAgZXhwZWN0cyBmb3VyIGVsZW1lbnRzIGZvciBlYWNoLiBgc2V0dXBfYXBjYjEwYCBkaWxpZ2VudGx5IHBvcHVsYXRlcyB0aGUgZmlyc3QgZWxlbWVudCAoYGFwbVswXWAsIGBhcW1bMF1gLCBgYWRtWzBdYCkgZnJvbSB0aGUgYGFwY2IwYCBkYXRhIGJ1dCBsZWF2ZXMgdGhlIHN1YnNlcXVlbnQgZWxlbWVudHMgKGBbMS4uM11gKSB1bmluaXRpYWxpemVkLlxuXG5Ob3csIGJlY2F1c2UgYHZzaWVfcGFnZWAgaXMgcmV1c2VkLCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGEgdGlja2luZyB0aW1lIGJvbWIuIFRoZSBhcnJheSBlbGVtZW50cyBgYXBtWzEuLjNdYCwgYGFxbVsxLi4zXWAsIGFuZCBgYWRtWzEuLjNdYCBhcmUgbm93IHN1c2NlcHRpYmxlIHRvIGNvbnRhaW5pbmcgc3RhbGUgZGF0YSBmcm9tIGEgcHJldmlvdXMgZXhlY3V0aW9uLCBwb3RlbnRpYWxseSBmcm9tIGEgYEZPUk1BVDJgIENSWUNCIHRoYXQgKmZ1bGx5KiB1dGlsaXplZCBgYXBjYjFgLlxuXG5UaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IGFyaXNlcy4gQSBuZXN0ZWQgZ3Vlc3QgY291bGQgaW5hZHZlcnRlbnRseSBiZSBncmFudGVkIGFjY2VzcyB0byBjcnlwdG8gcXVldWVzIG9yIGRvbWFpbnMgYXV0aG9yaXplZCBmb3IgYSBwcmV2aW91cyBuZXN0ZWQgZ3Vlc3QuIFRoZSBoYXJkd2FyZSwgaW4gcmVhZGluZyB0aGVzZSBzaGFkb3cgY3J5Y2IgdmFsdWVzLCBjb3VsZCB1c2UgdGhlIGJpdHMgdGhhdCBoYXZlIGJlZW4gc2V0IGluIGBhcG1bMS4uM11gIGZyb20gdGhlIHByZXZpb3VzIGd1ZXN0LCBpZiB0aGV5IHdlcmUgdGhlcmUsIGFsbG93aW5nIGFjY2VzcyBiYXNlZCBvbiB0aG9zZSBzZXQgYml0cyFcblxuV2FpdCwgaXMgdGhpcyBhbiB1bmNoZWNrZWQgbWVtb3J5IHJlYWQgYnkgdGhlIGhhcmR3YXJlPyBZZXMsIHRoZSBoYXJkd2FyZSAqaXMqIHJlYWRpbmcgdGhlIHNoYWRvdyBDUllDQi4gQSBjaGlsbGluZyB0aG91Z2h0LlxuXG5JIGltbWVkaWF0ZWx5IGNvbnNpZGVyIEtNU0FOLiBXaWxsIGl0IGNhdGNoIHRoaXM/IEtNU0FOIGlzIGZhbnRhc3RpYyBhdCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgcGVyZm9ybWVkIGJ5IHRoZSAqQ1BVKiB3aGVuIGV4ZWN1dGluZyBrZXJuZWwgY29kZS4gQnV0IGRvZXMgaXQgZGV0ZWN0IHJlYWRzIGluaXRpYXRlZCBkaXJlY3RseSBieSBoYXJkd2FyZSwgdmlhIERNQSBvciBTSUU/XG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBLTVNBTiB3b24ndCBhdXRvbWF0aWNhbGx5IGludGVyY2VwdCB0aGVzZSBoYXJkd2FyZS1pbml0aWF0ZWQgcmVhZHMuIEl0IGRlcGVuZHMgb24gYW4gZXhwbGljaXQgY2hlY2sgb3IgaWYgdGhlIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXQgY291bGQgYmUgbWlzc2VkIGVudGlyZWx5LlxuXG5UaGUgd29ycnkgaXMsIGlmIHRoZSBtZW1vcnkgaXMgcGFzc2VkIHRvIGhhcmR3YXJlLCBLTVNBTiBtYXkgbm90IGRldGVjdCBpdCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIEtNU0FOIGFubm90YXRpb24gZm9yIHRoZSBoYXJkd2FyZSBoeXBlcmNhbGwsIHN1Y2ggYXMgYGttc2FuX2NoZWNrX21lbW9yeWAuIE5vdywgbGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBLTVNBTiBjaGVjayBmb3IgU0lFIGJsb2NrIG9yIENSWUNCLiBUaW1lIHRvIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MjIuNDM1Njk3MDc0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIwOTU1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21zYW5fY2hlY2tfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MjoyMi40ODM5MTkzOTRaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NDQ5NjY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktNU0FOIENoZWNrIEJlZm9yZSBTSUUgRXhlY3V0aW9uPyoqXG5cbkFscmlnaHQsIGJlZm9yZSB3ZSBnZXQgYW55IGZ1cnRoZXIgaW50byB0aGlzLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHZlcmlmeWluZyB0aGUgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBzdGF0dXMuIEl0J3MgYSBjcml0aWNhbCBzYWZldHkgbmV0LCBhbmQgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGNhdGNoIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgKmJlZm9yZSogd2UgZXZlbiB0aGluayBhYm91dCBleGVjdXRpbmcgdGhlIFN5c3RlbSBJbnRlZ3JpdHkgRXh0ZW5zaW9uIChTSUUpLiBUaGUgU0lFLCBvZiBjb3Vyc2UsIHJlbGllcyBvbiBhIHJvY2stc29saWQgbWVtb3J5IGZvdW5kYXRpb24uIEFueSBpbnN0YWJpbGl0eSwgYW55IHBvc3NpYmlsaXR5IG9mIHVuZGVmaW5lZCBiZWhhdmlvciBjcmVlcGluZyBpbiBhdCB0aGF0IHN0YWdlLCBpcyBhIGRpc2FzdGVyIHdhaXRpbmcgdG8gaGFwcGVuLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgYWx3YXlzIGdyYXZpdGF0ZXMgdG93YXJkcyBjb25maXJtaW5nIHRoYXQgS01TQU4gaXMgYWN0aXZlIGFuZCB0aGF0IGFueSByZWxldmFudCBjaGVja3MgaGF2ZSBiZWVuIHBlcmZvcm1lZC4gV2UgbmVlZCB0aGF0IGd1YXJhbnRlZSBvZiBhIGNsZWFuIHNsYXRlIGJlZm9yZSB3ZSBldmVuIGVudGVydGFpbiB0aGUgaWRlYSBvZiBydW5uaW5nIHRoZSBTSUUuIEl0J3MgYWxsIGFib3V0IHJpc2sgbWl0aWdhdGlvbiBhbmQgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgc3lzdGVtJ3MgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjI1Ljg3ODQxOTkwMloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MzQ5ODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttc2FuX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MjUuOTI3MTYzMzYxWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDgyMTQzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKktNU0FOIENvbXBhdGliaWxpdHkg4oCTIEEgUXVpY2sgUmVhbGl0eSBDaGVjayoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2Vzbid0IGZlZWwgcmlnaHQuIEknbSBwcmV0dHkgc3VyZSBLTVNBTiwgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIsIGlzbid0IGZ1bGx5IGJha2VkIG9yIGV2ZW4gKnN1cHBvcnRlZCogb24gczM5MHguIE15IGd1dCdzIHRlbGxpbmcgbWUgdGhhdCdzIGEgcmVkIGZsYWcuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGlzLiBJdCdzIGNydWNpYWwgZm9yIHRoZSBwcm9qZWN0IHRvIHJ1biBvbiBzMzkweCwgc28gbGV0J3MgY2hlY2sgdGhlIHN1cHBvcnQgbWF0cml4IGFnYWluLiBOZWVkIHRvIGNvbmZpcm0gS01TQU4ncyBjYXBhYmlsaXRpZXMgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE5OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjI4LjkzNTM3OTgzMloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyNjY1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS01TQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMTg1LVxcdHNlbGVjdCBIQVZFX0FSQ0hfS0NTQU5cXG5hcmNoL3MzOTAvS2NvbmZpZzoxODY6XFx0c2VsZWN0IEhBVkVfQVJDSF9LTVNBTlxcbmFyY2gvczM5MC9LY29uZmlnLTE4Ny1cXHRzZWxlY3QgSEFWRV9BUkNIX0tGRU5DRVxcbi0tXFxuYXJjaC9zMzkwL01ha2VmaWxlPTQwPVVUU19NQUNISU5FXFx0Oj0gczM5MHhcXG5hcmNoL3MzOTAvTWFrZWZpbGU6NDE6U1RBQ0tfU0laRVxcdDo9ICQoaWYgJChDT05GSUdfS0FTQU4pLDY1NTM2LCQoaWYgJChDT05GSUdfS01TQU4pLDY1NTM2LDE2Mzg0KSlcXG5hcmNoL3MzOTAvTWFrZWZpbGUtNDItQ0hFQ0tGTEFHU1xcdCs9IC1EX19zMzkwX18gLURfX3MzOTB4X19cXG4tLVxcbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTExPUtDU0FOX1NBTklUSVpFIDo9IG5cXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZToxMjpLTVNBTl9TQU5JVElaRSA6PSBuXFxuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUtMTMtXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZT0zOT1vYmotJChDT05GSUdfS0VSTkVMX1pTVEQpICs9IGNsel9jdHoub1xcbmFyY2gvczM5MC9ib290L01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19LTVNBTikgKz0ga21zYW4ub1xcbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTQxLW9iai0kKENPTkZJR19TVEFDS1BST1RFQ1RPUikgKz0gc3RhY2twcm90ZWN0b3Iub1xcbi0tXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jPTMwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdm1lbV9zaXplKHVuc2lnbmVkIGxvbmcgaWRlbnRpdHlfc2l6ZSxcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy0zMTUtXFx0XFx0RklYTUFQX1NJWkUgKyBNT0RVTEVTX0xFTiArIEtBU0xSX0xFTjtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6MzE2OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTMxNy1cXHRcXHR2c2l6ZSArPSBNT0RVTEVTX0xFTiAqIDI7XFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM9MzIxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHNldHVwX2tlcm5lbF9tZW1vcnlfbGF5b3V0KHVuc2lnbmVkIGxvbmcga2VybmVsX3NpemUpXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtMzk5LVxcdFZNQUxMT0NfRU5EID0gTU9EVUxFU19WQUREUjtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6NDAwOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTQwMS1cXHRcXHRWTUFMTE9DX0VORCAtPSBNT0RVTEVTX0xFTiAqIDI7XFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNDA3LVxcdHZtYWxsb2Nfc2l6ZSA9IG1pbih2bWFsbG9jX3NpemUsIHZzaXplKTtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6NDA4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LTVNBTikpIHtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6NDA5OlxcdFxcdC8qIHRha2UgMi8zIG9mIHZtYWxsb2MgYXJlYSBmb3IgS01TQU4gc2hhZG93IGFuZCBvcmlnaW5zICovXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTQxMC1cXHRcXHR2bWFsbG9jX3NpemUgPSByb3VuZF9kb3duKHZtYWxsb2Nfc2l6ZSAvIDMsIF9TRUdNRU5UX1NJWkUpO1xcbi0tXFxuYXJjaC9zMzkwL2Jvb3Qvc3RyaW5nLmMtNy0jdW5kZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcXG5hcmNoL3MzOTAvYm9vdC9zdHJpbmcuYzo4OiN1bmRlZiBDT05GSUdfS01TQU5cXG5hcmNoL3MzOTAvYm9vdC9zdHJpbmcuYy05LSNpbmNsdWRlIFxcXCIuLi9saWIvc3RyaW5nLmNcXFwiXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaD0zNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19hcmNoX2xvY2FsX2lycV9zc20odW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oLTM5LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oOjQwOiNpZmRlZiBDT05GSUdfS01TQU5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaC00MS0jZGVmaW5lIGFyY2hfbG9jYWxfaXJxX2F0dHJpYnV0ZXMgbm9pbmxpbmUgbm90cmFjZSBfX25vX3Nhbml0aXplX21lbW9yeSBfX21heWJlX3VudXNlZFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oOjI6I2lmbmRlZiBfQVNNX1MzOTBfS01TQU5fSFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oOjM6I2RlZmluZSBfQVNNX1MzOTBfS01TQU5fSFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQtXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaD0xOT1zdGF0aWMgaW5saW5lIHZvaWQgKmFyY2hfa21zYW5fZ2V0X21ldGFfb3JfbnVsbCh2b2lkICphZGRyLCBib29sIGlzX29yaWdpbilcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTI4LVxcdFxcdFxcdCh2b2lkICopZ2V0X2xvd2NvcmUoKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va21zYW4uaDoyOTpcXHRcXHRpZiAoS01TQU5fV0FSTl9PTihpc19sb3djb3JlX2FkZHIoYWRkcikpKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTMwLVxcdFxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg9MzY9c3RhdGljIGlubGluZSBib29sIGttc2FuX3ZpcnRfYWRkcl92YWxpZCh2b2lkICphZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtNDItXFx0ICogdGhlIGNyaXRpY2FsIHNlY3Rpb24uIEhvd2V2ZXIsIHRoaXMgd291bGQgcmVzdWx0IGluIHJlY3Vyc2lvbiB3aXRoXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg6NDM6XFx0ICogS01TQU4uIFRoZXJlZm9yZSwgZGlzYWJsZSBwcmVlbXB0aW9uIGhlcmUsIGFuZCByZS1lbmFibGUgcHJlZW1wdGlvblxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQ0LVxcdCAqIGJlbG93IHdoaWxlIHN1cHByZXNzaW5nIHJlc2NoZWR1bGVzIHRvIGF2b2lkIHJlY3Vyc2lvbi5cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQ2LVxcdCAqIE5vdGUsIHRoaXMgc2FjcmlmaWNlcyBvY2Nhc2lvbmFsbHkgYnJlYWtpbmcgc2NoZWR1bGluZyBndWFyYW50ZWVzLlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oOjQ3OlxcdCAqIEFsdGhvdWdoLCBhIGtlcm5lbCBjb21waWxlZCB3aXRoIEtNU0FOIGhhcyBhbHJlYWR5IGdpdmVuIHVwIG9uIGFueVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rbXNhbi5oLTQ4LVxcdCAqIHBlcmZvcm1hbmNlIGd1YXJhbnRlZXMgZHVlIHRvIGJlaW5nIGhlYXZpbHkgaW5zdHJ1bWVudGVkLlxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmgtNTgtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2ttc2FuLmg6NTk6I2VuZGlmIC8qIF9BU01fUzM5MF9LTVNBTl9IICovXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEwMj1zdGF0aWMgaW5saW5lIGludCBpc19tb2R1bGVfYWRkcih2b2lkICphZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMTEtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTI6I2lmZGVmIENPTkZJR19LTVNBTlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTEzOiNkZWZpbmUgS01TQU5fVk1BTExPQ19TSVpFIChWTUFMTE9DX0VORCAtIFZNQUxMT0NfU1RBUlQpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMTQ6I2RlZmluZSBLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCBWTUFMTE9DX0VORFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE1OiNkZWZpbmUgS01TQU5fVk1BTExPQ19TSEFET1dfRU5EIChLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCArIEtNU0FOX1ZNQUxMT0NfU0laRSlcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjExNjojZGVmaW5lIEtNU0FOX1ZNQUxMT0NfT1JJR0lOX1NUQVJUIEtNU0FOX1ZNQUxMT0NfU0hBRE9XX0VORFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE3OiNkZWZpbmUgS01TQU5fVk1BTExPQ19PUklHSU5fRU5EIChLTVNBTl9WTUFMTE9DX09SSUdJTl9TVEFSVCArIEtNU0FOX1ZNQUxMT0NfU0laRSlcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjExODojZGVmaW5lIEtNU0FOX01PRFVMRVNfU0hBRE9XX1NUQVJUIEtNU0FOX1ZNQUxMT0NfT1JJR0lOX0VORFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTE5OiNkZWZpbmUgS01TQU5fTU9EVUxFU19TSEFET1dfRU5EIChLTVNBTl9NT0RVTEVTX1NIQURPV19TVEFSVCArIE1PRFVMRVNfTEVOKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTIwOiNkZWZpbmUgS01TQU5fTU9EVUxFU19PUklHSU5fU1RBUlQgS01TQU5fTU9EVUxFU19TSEFET1dfRU5EXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjE6I2RlZmluZSBLTVNBTl9NT0RVTEVTX09SSUdJTl9FTkQgKEtNU0FOX01PRFVMRVNfT1JJR0lOX1NUQVJUICsgTU9EVUxFU19MRU4pXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjItI2VuZGlmXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmg9MjE9dm9pZCAqbWVtbW92ZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtMjItXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oOjIzOiNpZiAhZGVmaW5lZChDT05GSUdfS0FTQU4pIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19LTVNBTilcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtMjQtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DSFJcXHQvKiBpbmxpbmUgXFx1MDAyNiBhcmNoIGZ1bmN0aW9uICovXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDE9Y2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oOjQyOiNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfS0FTQU4pIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19LTVNBTikgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDMtXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaC0xNi0gKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaDoxNzojaWYgZGVmaW5lZChDT05GSUdfS0FTQU4pIHx8IGRlZmluZWQoQ09ORklHX0tNU0FOKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oLTE4LSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgNFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaD0yNT12b2lkIGRlYnVnX3VzZXJfYXNjZShpbnQgZXhpdCk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0yNi1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjI3OiNpZmRlZiBDT05GSUdfS01TQU5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTI4LSNkZWZpbmUgdWFjY2Vzc19rbXNhbl9vcl9pbmxpbmUgbm9pbmxpbmUgX19tYXliZV91bnVzZWQgX19ub19zYW5pdGl6ZV9tZW1vcnlcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmM9NDE9c3RhdGljIGlubGluZSBib29sIGlzX2ZpbmFsX3B0X3JlZ3Moc3RydWN0IHVud2luZF9zdGF0ZSAqc3RhdGUsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3Vud2luZF9iYy5jLTUzLVxcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmM6NTQ6LyogQXZvaWQgS01TQU4gZmFsc2UgcG9zaXRpdmVzIGZyb20gdG91Y2hpbmcgdW5pbml0aWFsaXplZCBmcmFtZXMuICovXFxuYXJjaC9zMzkwL2tlcm5lbC91bndpbmRfYmMuYy01NS1fX25vX2ttc2FuX2NoZWNrc1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91bndpbmRfYmMuYz0xMjM9RVhQT1JUX1NZTUJPTF9HUEwodW53aW5kX25leHRfZnJhbWUpO1xcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmMtMTI0LVxcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmM6MTI1Oi8qIEF2b2lkIEtNU0FOIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgZnJhbWVzLiAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdW53aW5kX2JjLmMtMTI2LV9fbm9fa21zYW5fY2hlY2tzXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MzE1PXN0YXRpYyBpbnQgcHRfZHVtcF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzQzLSNlbmRpZlxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNDQ6I2lmZGVmIENPTkZJR19LTVNBTlxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNDU6XFx0cmMgfD0gYWRkX21hcmtlcihLTVNBTl9WTUFMTE9DX1NIQURPV19TVEFSVCwgS01TQU5fVk1BTExPQ19TSEFET1dfRU5ELCBcXFwiS21zYW4gdm1hbGxvYyBTaGFkb3dcXFwiKTtcXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzQ2OlxcdHJjIHw9IGFkZF9tYXJrZXIoS01TQU5fVk1BTExPQ19PUklHSU5fU1RBUlQsIEtNU0FOX1ZNQUxMT0NfT1JJR0lOX0VORCwgXFxcIkttc2FuIHZtYWxsb2MgT3JpZ2luc1xcXCIpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNDc6XFx0cmMgfD0gYWRkX21hcmtlcihLTVNBTl9NT0RVTEVTX1NIQURPV19TVEFSVCwgS01TQU5fTU9EVUxFU19TSEFET1dfRU5ELCBcXFwiS21zYW4gTW9kdWxlcyBTaGFkb3dcXFwiKTtcXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzQ4OlxcdHJjIHw9IGFkZF9tYXJrZXIoS01TQU5fTU9EVUxFU19PUklHSU5fU1RBUlQsIEtNU0FOX01PRFVMRVNfT1JJR0lOX0VORCwgXFxcIkttc2FuIE1vZHVsZXMgT3JpZ2luc1xcXCIpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNDktI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjI4Ljk4OTY1MTkzMloiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQyOTE3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipLTVNBTiBvbiBzMzkweCBhbmQgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyBLTVNBTiAqZG9lcyogc3VwcG9ydCBzMzkweC4gVGhhdCdzIGdvb2QgbmV3cy4gQnV0IG15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBkb2VzIEtNU0FOIGVmZmVjdGl2ZWx5IGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgbWlnaHQgYmUgaGFwcGVuaW5nIGF0IHRoZSBoYXJkd2FyZSBsZXZlbCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIFN5c3RlbSBJbnN0cnVjdGlvbiBFeHRlbnNpb24gKFNJRSk/XG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGlzOiBLTVNBTiBvcGVyYXRlcyBieSBpbnN0cnVtZW50aW5nIENQVSBpbnN0cnVjdGlvbnMuIEl0J3MgZGVzaWduZWQgdG8gZGV0ZWN0IHdoZW4gdGhlICpDUFUqIGl0c2VsZiBhdHRlbXB0cyB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBTbywgaWYgdGhlIENQVSB0cmllcyB0byBsb2FkIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgZGlyZWN0bHksIEtNU0FOIHNob3VsZCBmbGFnIGl0LiBCdXQgd2hhdCBhYm91dCBhIHNjZW5hcmlvIHdoZXJlIHRoZSBDUFUgaGFuZHMgb2ZmIGEgKnBvaW50ZXIqIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBoYXJkd2FyZSwgdXNpbmcgU0lFIGluc3RydWN0aW9ucz8gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQsIHdpdGhvdXQgZXhwbGljaXQgaW5zdHJ1bWVudGF0aW9uLCBLTVNBTiAqd29uJ3QqIGNhdGNoIHRoYXQuIEl0J3MgdGhlIGhhcmR3YXJlIGRvaW5nIHRoZSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgcmVhZCBub3csIG5vdCB0aGUgQ1BVIGluc3RydWN0aW9uIHN0cmVhbSB0aGF0IEtNU0FOIGlzIHdhdGNoaW5nLiBUaGUga2V5IGhlcmUsIGFuZCB3aGF0IEkgbmVlZCB0byBsb29rIGZvciwgaXMgYSBga21zYW5fY2hlY2tfbWVtb3J5YCBjYWxsLiBJZiB0aGVyZSdzIGFuIGV4cGxpY2l0IGNhbGwgdG8gYGttc2FuX2NoZWNrX21lbW9yeWAgYmVmb3JlIHRoZSBoYXJkd2FyZSBleGVjdXRpb24gaGFwcGVucywgdGhhdCAqc2hvdWxkKiBmb3JjZSBLTVNBTiB0byBjaGVjayB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgdGhlIENQVSBiZWZvcmUgdGhlIGhhcmR3YXJlIGdldHMgaXRzIGhhbmRzIG9uIGl0LlxuXG5TbywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZSBTSUUgYmxvY2sgb3IgQ1JZQ0IuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGlkZW50aWZ5aW5nIGlmIHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHNhZmVndWFyZHMgaW4gcGxhY2UuIEkgbmVlZCB0byBrbm93IGlmIHdlIGFyZSBwcm9hY3RpdmVseSBjaGVja2luZyB0aGUgbWVtb3J5IGFyZWEgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUwMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MjozMy45MzI1NzI3NjRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDExNTM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9jaGVja19tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjMzLjk4MDk5Mjc4NFoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU3ODgwNDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENoZWNrIGFuZCBVc2VyIFNwYWNlIENvcHlpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIG1lbW9yeSBzYWZldHkgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIEtWTSBpbXBsZW1lbnRhdGlvbi4gRmlyc3QgdGhvdWdodDogd2hlcmUgaXMgYGttc2FuX2NoZWNrX21lbW9yeWAgZGVmaW5lZCwgb3IgcmF0aGVyICpub3QqIGRlZmluZWQsIHNwZWNpZmljYWxseSBpbiB0aGUgYGFyY2gvczM5MC9rdm0vYCBkaXJlY3Rvcnk/IEhtbSwgSSBjYW4ndCBmaW5kIGl0LiBBbHJpZ2h0LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGNvbnNpZGVyIHRoZSBgY29weV90b191c2VyYCBmdW5jdGlvbi4gVGhhdCdzIHVzdWFsbHkgdGhlIGhvdHNwb3QgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgSSd2ZSBsb2NhdGVkIHRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQgaW4gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AuIEludGVyZXN0aW5nLiBMaW5lIDU3MzIgaXMgZ3JhYmJpbmcgbXkgYXR0ZW50aW9uLiBUaGV5J3JlIGNvcHlpbmcgYGNtZC5yY2AgYW5kIGBjbWQucnJjYCB0byB1c2VyIHNwYWNlLCByaWdodCBhZnRlciBoYW5kbGluZyBhIGBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wYCBjYWxsLiBUaGF0IG1ha2VzIHNlbnNlIGZvciBwYXNzaW5nIGJhY2sgcmV0dXJuIGNvZGVzIGFuZCByZXN1bHRzIGZyb20gdGhlIGh5cGVydmlzb3IuIEJ1dCwgaG93IGFyZSB0aGV5IGhhbmRsaW5nIHRoZSBtZW1vcnkgY29weT9cblxuQWgsIHJpZ2h0LCBub3cgSSBzZWUgdGhleSBhcmUgdXNpbmcgYG9mZnNldG9mYCB0byBjYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2l0aGluIGBhcmdwYC4gU28gaXQncyBjb3B5aW5nIHRvIHRoZSBgcmNgIGZpZWxkIG9mIGEgYGt2bV9wdl9jbWRgIHN0cnVjdC4gVGhhdCdzIGJldHRlciB0aGFuIGRpcmVjdGx5IHdyaXRpbmcgdG8gYGFyZ3BgLCBwcmV2ZW50aW5nIHdyaXRpbmcgdG8gYXJiaXRyYXJ5IG1lbW9yeSBsb2NhdGlvbnMuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBgY21kYCBzdHJ1Y3QgY29tZXMgZnJvbSB0byBldmFsdWF0ZSB0aGUgc2FmZXR5IGhlcmUuIExldCdzIHRyYWNlIGJhY2sgd2hlcmUgdGhpcyBgY21kYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZC4gVW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gaXMga2V5IHRvIGNvbmZpcm1pbmcgdGhlcmUgYXJlIG5vIG91dC1vZi1ib3VuZHMgd3JpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAyNywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MjozOS45Mzg4NzY0MjdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDQxMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fcHZfY21kIGNtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MzI9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MTYtXFx0Y2FzZSBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORDoge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzE3OlxcdFxcdHN0cnVjdCBrdm1fcHZfY21kIGNtZDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTcxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTU6NTI6MzkuOTkwMzIxNjM3WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDE2MjMzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTV9TMzkwX1BWX0NQVV9DT01NQU5EIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBgS1ZNX1MzOTBfUFZfQ1BVX0NPTU1BTkRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIGNvbW1hbmQgaXMgKmRvaW5nKi4gTXkgaW1tZWRpYXRlIG1lbnRhbCBtYXAgaXMgc3RhcnRpbmcgdG8gYnVpbGQg4oCTIHRoaXMgaXMgbGlrZWx5IGEgcHJpdmlsZWdlZCBWTSBjb21tYW5kIHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcGFyYXZpcnR1YWxpemVkIG9wZXJhdGlvbnMgZm9yIHRoZSBDUFUuXG5cbkknbSB0aGlua2luZywgXCJXaGVyZSBpcyB0aGlzIGRlZmluZWQ/IFdoYXQgc3RydWN0dXJlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aWVkIHRvIGl0cyBpbXBsZW1lbnRhdGlvbj9cIlxuXG5JJ20gZ29pbmcgdG8gc2NhbiB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMsIGxvb2tpbmcgZm9yIGl0cyBkZWZpbml0aW9uLCBhbnkgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzIChsaWtlIGBrdm1fczM5MF9wdl9jcHVfY29tbWFuZF9hcmdzYCBwZXJoYXBzPyksIGFuZCBpdHMgdXNhZ2UuIEknbGwgbWVudGFsbHkgbm90ZSBhbnkgZmxhZ3Mgb3IgYXJndW1lbnRzIHRoaXMgY29tbWFuZCB0YWtlczsgYSBkZWVwIGRpdmUgaW4gdGhlIGtlcm5lbCBjb2RlIHVzdWFsbHkgcmV2ZWFscyB3aGF0IHRob3NlIHRoaW5ncyBhcmUgYmVpbmcgdXNlZCBmb3IuXG5cblNwZWNpZmljYWxseSwgSSB3YW50IHRvIGlkZW50aWZ5OlxuXG4qICAgKipJdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBzMzkwIEtWTSBhcmNoaXRlY3R1cmU6KiogSXMgdGhpcyByZWxhdGVkIHRvIENQVSBob3RwbHVnLCB2aXJ0dWFsaXphdGlvbiBjb250cm9sLCBndWVzdCByZWdpc3RlciBtYW5pcHVsYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuKiAgICoqUHJpdmlsZWdlIExldmVsOioqIFdobyBjYW4gY2FsbCB0aGlzPyBEb2VzIGl0IHJlcXVpcmUgcm9vdCBwcml2aWxlZ2VzLCBvciBpcyB0aGVyZSBhIG1vcmUgbnVhbmNlZCBhY2Nlc3MgY29udHJvbCBtZWNoYW5pc20gYXQgcGxheT9cbiogICAqKkludGVyYWN0aW9uIHdpdGggSGFyZHdhcmU6KiogRG9lcyBpdCB0cmFuc2xhdGUgZGlyZWN0bHkgaW50byBoeXBlcmNhbGxzLCBvciBkb2VzIGl0IG9wZXJhdGUgdGhyb3VnaCBzb2Z0d2FyZSBlbXVsYXRpb24/IFVuZGVyc3RhbmRpbmcgdGhpcyBpbXBhY3RzIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdGllcy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGNvbW1hbmQgZmFpbHM/IEFyZSBlcnJvciBjb2RlcyB3ZWxsLWRlZmluZWQgYW5kIHByb3BhZ2F0ZWQgY29ycmVjdGx5P1xuKiAgICoqQ29uY3VycmVuY3kgSXNzdWVzOioqIERvZXMgdGhlIGNvZGUgaGFuZGxlIG11bHRpcGxlIHZDUFVzIGNvbmN1cnJlbnRseT8gQXJlIHRoZXJlIGFueSBzcGlubG9ja3Mgb3IgbXV0ZXhlcyB0aGF0IGNvdWxkIGludHJvZHVjZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciwgd29yc2UsIHJhY2UgY29uZGl0aW9ucz9cblxuRXNzZW50aWFsbHksIEknbSBzZXR0aW5nIG91dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCB0aGUgbWVjaGFuaWNzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiwgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiB0aGUgY29kZSBhbmQgc2VlIHdoZXJlIGl0IGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg2MiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjQ1LjI5MTk0OTE5NloiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3MTU6XFx0XFx0fVxcbjU3MTY6XFx0XFx0Y2FzZSBLVk1fUzM5MF9QVl9DUFVfQ09NTUFORDoge1xcbjU3MTc6XFx0XFx0XFx0c3RydWN0IGt2bV9wdl9jbWQgY21kO1xcbjU3MTg6XFx0XFxuNTcxOTpcXHRcXHRcXHRyID0gLUVJTlZBTDtcXG41NzIwOlxcdFxcdFxcdGlmICghaXNfcHJvdF92aXJ0X2hvc3QoKSlcXG41NzIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjU3MjI6XFx0XFxuNTcyMzpcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG41NzI0OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2Y21kLCBhcmdwLCBzaXplb2YoY21kKSkpXFxuNTcyNTpcXHRcXHRcXHRcXHRicmVhaztcXG41NzI2OlxcdFxcbjU3Mjc6XFx0XFx0XFx0ciA9IC1FSU5WQUw7XFxuNTcyODpcXHRcXHRcXHRpZiAoY21kLmZsYWdzKVxcbjU3Mjk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTczMDpcXHRcXG41NzMxOlxcdFxcdFxcdC8qIFdlIG9ubHkgaGFuZGxlIHRoaXMgY21kIHJpZ2h0IG5vdyAqL1xcbjU3MzI6XFx0XFx0XFx0aWYgKGNtZC5jbWQgIT0gS1ZNX1BWX0RVTVApXFxuNTczMzpcXHRcXHRcXHRcXHRicmVhaztcXG41NzM0OlxcdFxcbjU3MzU6XFx0XFx0XFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgXFx1MDAyNmNtZCk7XFxuNTczNjpcXHRcXG41NzM3OlxcdFxcdFxcdC8qIEFsd2F5cyBjb3B5IG92ZXIgVVYgcmMgLyBycmMgZGF0YSAqL1xcbjU3Mzg6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXFx1MDAyNmNtZC5yYyxcXG41NzM5OlxcdFxcdFxcdFxcdFxcdCBzaXplb2YoY21kLnJjKSArIHNpemVvZihjbWQucnJjKSkpXFxuNTc0MDpcXHRcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG41NzQxOlxcdFxcdFxcdGJyZWFrO1xcbjU3NDI6XFx0XFx0fVxcbjU3NDM6XFx0XFx0ZGVmYXVsdDpcXG41NzQ0OlxcdFxcdFxcdHIgPSAtRU5PVFRZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1Mjo0NS4yOTIxNjcxMjZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk0Nzk4OTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUzM5MCBWaXJ0dWFsIENQVSBEdW1wIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYGNtZGAgc3RydWN0dXJlIGlzIGhhbmRsZWQgaGVyZS4gVGhlIGNydWNpYWwgcG9pbnQgc2VlbXMgdG8gYmUgdGhhdCBgY21kYCBnZXRzIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9mcm9tX3VzZXIoXHUwMDI2Y21kLCBhcmdwLCBzaXplb2YoY21kKSlgLiBUaGlzIGlzIGtleS4gVGhlbiBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcCh2Y3B1LCBcdTAwMjZjbWQpYCBnZXRzIGludm9rZWQuIFRoZSBwb3RlbnRpYWwgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG1pZ2h0IG1vZGlmeSBgY21kLnJjYCBhbmQgYGNtZC5ycmNgLiBGaW5hbGx5LCB0aG9zZSBtb2RpZmllZCB2YWx1ZXMgYXJlIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIHRoZSBlbnRpcmUgYGNtZGAgc3RydWN0dXJlIG9yaWdpbmF0ZXMgZnJvbSB1c2VyIHNwYWNlLCB3ZSBzaG91bGRuJ3QgaGF2ZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgbGVha3MgaGVyZS4gVGhhdCdzIGdvb2QuXG5cbkJ1dCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMuIEknbSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nLiBJcyB0aGVyZSBhbnkgcGFkZGluZyB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAgaXRzZWxmPyBJZiB0aGVyZSAqaXMqIHBhZGRpbmcsIGFuZCBpZiBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAgc29tZWhvdyBtYW5pcHVsYXRlcyB0aGF0IHBhZGRpbmcsIGV2ZW4gaWYgaXQncyBub3QgZXhwbGljaXRseSB1c2VkIGluIHRoZSBjb3B5LWJhY2ssIHRoYXQgY291bGQgY3JlYXRlIGEgcHJvYmxlbS4gSSBiZXR0ZXIgdmVyaWZ5IHRoZSBzdHJ1Y3R1cmUncyBsYXlvdXQuIExldCdzIGRpZyBpbnRvIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1Mjo1MC4yNDAxNTg4MjhaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTk0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fcHZfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9MjgwPWVudW0gcHZfY21kX2lkIHtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTI5My1cXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDoyOTQ6c3RydWN0IGt2bV9wdl9jbWQge1xcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTI5NS1cXHRfX3UzMiBjbWQ7XFx0LyogQ29tbWFuZCB0byBiZSBleGVjdXRlZCAqL1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI0ODA9c3RhdGljIHNzaXplX3Qga3ZtX3MzOTBfaGFuZGxlX3B2X2luZm8oc3RydWN0IGt2bV9zMzkwX3B2X2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjUxOC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjUxOTpzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2RtcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHZfY21kICpjbWQsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1MjAtXFx0XFx0XFx0ICAgc3RydWN0IGt2bV9zMzkwX3B2X2RtcCBkbXApXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjU4MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjU4MTpzdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHZfY21kICpjbWQpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1ODIte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5Mjc9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwMjYtXFx0Y2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwMjc6XFx0XFx0c3RydWN0IGt2bV9wdl9jbWQgYXJncztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzAyOC1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDkwPXN0YXRpYyBpbnQga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0OTE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9wdl9jbWQgKmNtZClcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ5Mi17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUzMj1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTcxNi1cXHRjYXNlIEtWTV9TMzkwX1BWX0NQVV9DT01NQU5EOiB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MTc6XFx0XFx0c3RydWN0IGt2bV9wdl9jbWQgY21kO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NzE4LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MzctXFx0XFx0LyogQWx3YXlzIGNvcHkgb3ZlciBVViByYyAvIHJyYyBkYXRhICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3Mzg6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9wdl9jbWQsIHJjKSwgXFx1MDAyNmNtZC5yYyxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTczOS1cXHRcXHRcXHRcXHQgc2l6ZW9mKGNtZC5yYykgKyBzaXplb2YoY21kLnJyYykpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1Mjo1MC4yOTIzNTY4OThaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NjEyNTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qga3ZtX3B2X2NtZGAuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzdHJ1Y3R1cmUgaG9sZHMgYW5kIGl0cyByb2xlIHdpdGhpbiBLVk0ncyBwYXJhLXZpcnR1YWxpemVkIGludGVyZmFjZS4gSXQncyB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgdmlhIGh5cGVyY2FsbHMsIGlzbid0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGF5b3V0IHRvIHJlY2FsbCBob3cgaXQncyB1c2VkIGZvciB2YXJpb3VzIG9wZXJhdGlvbnM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IG1lbW9yeSBtYXBwaW5nLCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGJpdGZpZWxkcyB3aXRoaW4gaXQgYXJlIGFsd2F5cyBhIHBvaW50IG9mIGludGVyZXN0OyB0aGV5IHVzdWFsbHkgZW5jb2RlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbW1hbmQgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBjaGFuZ2VzIGFjcm9zcyBrZXJuZWwgdmVyc2lvbnMgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCB0aGUgb2xkZXIgZ3Vlc3QvbmV3ZXIgaG9zdCBjb21wYXRpYmlsaXR5LiBMZXQncyBzZWUuLi4gd2hhdCBhcmUgdGhlIGtleSBmaWVsZHMgdGhhdCBkaWN0YXRlIHRoZSBiZWhhdmlvcj8gVGhlIGNvbW1hbmQgSUQsIGNlcnRhaW5seS4gVGhlbiB0aGVyZSdzIHRoZSBhc3NvY2lhdGVkIGRhdGEgcG9pbnRlciwgaXRzIHNpemUgYW5kLCBvZiBjb3Vyc2UsIGFueSBzdGF0dXMgcmVwb3J0aW5nIGZpZWxkcyB0byBjaGVjayB0aGF0IGh5cGVyY2FsbCBoYXMgYmVlbiBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5LiBJIG1pZ2h0IGFsc28gYmUgaW50ZXJlc3RlZCBpbiB3aGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgbG9naWMuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgYSAnbWFnaWMgbnVtYmVyJyBpbiB0aGUgaGVhZGVyIHRvIGVuc3VyZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGltZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBhbmQgbm90IHRoZSBkZWZpbml0aW9uLCB0byBzZWUgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyOTYsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1Mjo1NC4xNzg0ODQ1MDFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcdEtWTV9QVl9BU1lOQ19DTEVBTlVQX1BSRVBBUkUsXFxuIDI5MTpcXHRcXHRLVk1fUFZfQVNZTkNfQ0xFQU5VUF9QRVJGT1JNLFxcbiAyOTI6XFx0fTtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0c3RydWN0IGt2bV9wdl9jbWQge1xcbiAyOTU6XFx0XFx0X191MzIgY21kO1xcdC8qIENvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgKi9cXG4gMjk2OlxcdFxcdF9fdTE2IHJjO1xcdC8qIFVsdHJhdmlzb3IgcmV0dXJuIGNvZGUgKi9cXG4gMjk3OlxcdFxcdF9fdTE2IHJyYztcXHQvKiBVbHRyYXZpc29yIHJldHVybiByZWFzb24gY29kZSAqL1xcbiAyOTg6XFx0XFx0X191NjQgZGF0YTtcXHQvKiBEYXRhIG9yIGFkZHJlc3MgKi9cXG4gMjk5OlxcdFxcdF9fdTMyIGZsYWdzOyAgICAvKiBmbGFncyBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIE11c3QgYmUgMCBmb3Igbm93ICovXFxuIDMwMDpcXHRcXHRfX3UzMiByZXNlcnZlZFszXTtcXG4gMzAxOlxcdH07XFxuIDMwMjpcXHRcXG4gMzAzOlxcdHN0cnVjdCBrdm1fczM5MF96cGNpX29wIHtcXG4gMzA0OlxcdFxcdC8qIGluICovXFxuIDMwNTpcXHRcXHRfX3UzMiBmaDsgICAgICAgICAgICAgICAvKiB0YXJnZXQgZGV2aWNlICovXFxuIDMwNjpcXHRcXHRfX3U4ICBvcDsgICAgICAgICAgICAgICAvKiBvcGVyYXRpb24gdG8gcGVyZm9ybSAqL1xcbiAzMDc6XFx0XFx0X191OCAgcGFkWzNdO1xcbiAzMDg6XFx0XFx0dW5pb24ge1xcbiAzMDk6XFx0XFx0XFx0LyogZm9yIEtWTV9TMzkwX1pQQ0lPUF9SRUdfQUVOICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUyOjU0LjE3ODU2NjU4MVoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ4ODc1NjQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIHdpdGggdGhlIGluaXRpYWwgY2hlY2sgY29uY2VybmluZyBgcmNgIGFuZCBgcnJjYCwgdGhvc2UgYXJlIGBfX3UxNmAsIHNvIHRoZXkncmUgY29udGlndW91cyBhbmQgdGhlIHRvdGFsIHNpemUgaXMgNCBieXRlcy4gYHNpemVvZihjbWQucmMpICsgc2l6ZW9mKGNtZC5ycmMpYCBjb25maXJtcyB0aGlzLCBhbmQgdGhlcmUncyBubyBwYWRkaW5nLiBUaGV5J3JlIGNvcGllZCBmcm9tIGBcdTAwMjZjbWQucmNgLCB3aGljaCBtZWFucyB0aGVyZSdzIG5vIGltbWVkaWF0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGluIHRoYXQgYXJlYS5cblxuTm93LCBsb29raW5nIGF0IGBrdm1fczM5MF9rZXlvcGAsIGl0IHNlZW1zIGxpa2UgYSBsb2NraW5nIGZpeC4gVGhlIGBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2VgIHJlYWQgaXMgcHJvdGVjdGVkIGJ5IGEgbG9jaywgYW5kIHRoZSBhc2NlIGlzIGRlY2xhcmVkIGxvY2FsbHkuIE5vIGltbWVkaWF0ZSBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLlxuXG5OZXh0LCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGp1c3QgYWRkcmVzc2VzIHNpZ25hbCBoYW5kbGluZywgZW5zdXJpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSh2Y3B1KWAgaXMgYWx3YXlzIGNhbGxlZC4gTm8gaXNzdWVzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkganVtcGluZyBvdXQgaGVyZSBlaXRoZXIuXG5cbkZpbmFsbHksIGBzZXR1cF9hcGNiMTBgIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgcmVtZW1iZXIgYW5hbHl6aW5nIHRoaXMgYmVmb3JlLCBgYXBjYl9zYCBwb2ludHMgdG8gYFx1MDAyNmNyeWNiX3MtXHUwMDNlYXBjYjFgIGluc2lkZSBgdnNpZV9wYWdlLVx1MDAzZWNyeWNiYC4gSSBzZWUgdGhhdCBgdnNpZV9wYWdlYCBpcyByZXVzZWQgd2l0aG91dCB6ZXJvaW5nLCBhbmQgbm93IHRoZSBjb2RlICpkb2VzKiBgbWVtc2V0YCBgYXBjYl9zYC4gVGhhdCBzdGlsbCBkb2VzIG5vdCBmaXggdGhlIG9yaWdpbmFsIHByb2JsZW0uIFRoZSBpc3N1ZSBpcyB0aGF0IG5vdywgYGFwY2Jfcy1cdTAwM2VhcG1bMS4uM11gLCBgYXFtWzEuLjNdYCwgYGFkbVsxLi4zXWAgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBjb250YWluaW5nIGRhdGEgZnJvbSBwcmV2aW91cyB1c2Ugb2YgYHZzaWVfcGFnZWAuIFRoaXMgc3RhbGUgZGF0YSBpcyB0aGVuIHVzZWQgYnkgdGhlIGhhcmR3YXJlIChTSUUpIHdoZW4gZXhlY3V0aW5nIHRoZSBuZXN0ZWQgZ3Vlc3QuIFRoaXMgY291bGQgbGVhZCB0byBhIHNlY3VyaXR5IGlzc3VlLCBwb3RlbnRpYWxseSBhbGxvd2luZyBhIG5lc3RlZCBndWVzdCB0byBhY2Nlc3MgcmVzb3VyY2VzIGl0IHNob3VsZG4ndC4gVGhlIHJlYWwgcHJvYmxlbSBpcyB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgZG9lc24ndCBkZXRlY3QgdGhpcyBpc3N1ZSBiZWNhdXNlIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSBhbmQgbm90IGJ5IHRoZSBDUFUuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQhIEJ1dCB3YWl0Li4uIGlzIHRoZXJlICphbnkqIGNoYW5jZSB0aGUgQ1BVIGxhdGVyIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBkZXJpdmVkIHZhbHVlcyBiYXNlZCBvbiB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbWFraW5nIGl0IHZ1bG5lcmFibGUgdG8gZGV0ZWN0aW9uPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgbW9yZSBjYXJlZnVsbHkgdG8gZW5zdXJlIHRoYXQgYGFwY2Jfc2AgKG9yIGB2c2llX3BhZ2UtXHUwMDNlY3J5Y2JgKSBpcyAqbm90KiByZWFkIGJ5IHRoZSBDUFUgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDA3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUzOjA4LjY2NzMyNTk1MloiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MDY1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXBjYjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxNTk9dm9pZCBrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqYXBtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNjctXFx0Y2FzZSBDUllDQl9GT1JNQVQyOiAvKiBBUENCMSB1c2UgMjU2IGJpdHMgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE2ODpcXHRcXHRtZW1jcHkoY3J5Y2ItXFx1MDAzZWFwY2IxLmFwbSwgYXBtLCAzMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNjktXFx0XFx0Vk1fRVZFTlQoa3ZtLCAzLCBcXFwiU0VUIENSWUNCOiBhcG0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XFxcIixcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3MC1cXHRcXHRcXHQgYXBtWzBdLCBhcG1bMV0sIGFwbVsyXSwgYXBtWzNdKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE3MTpcXHRcXHRtZW1jcHkoY3J5Y2ItXFx1MDAzZWFwY2IxLmFxbSwgYXFtLCAzMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzItXFx0XFx0Vk1fRVZFTlQoa3ZtLCAzLCBcXFwiU0VUIENSWUNCOiBhcW0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XFxcIixcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3My1cXHRcXHRcXHQgYXFtWzBdLCBhcW1bMV0sIGFxbVsyXSwgYXFtWzNdKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE3NDpcXHRcXHRtZW1jcHkoY3J5Y2ItXFx1MDAzZWFwY2IxLmFkbSwgYWRtLCAzMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzUtXFx0XFx0Vk1fRVZFTlQoa3ZtLCAzLCBcXFwiU0VUIENSWUNCOiBhZG0gJTAxNmx4ICUwMTZseCAlMDE2bHggJTAxNmx4XFxcIixcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zMjA5PXZvaWQga3ZtX2FyY2hfY3J5cHRvX2NsZWFyX21hc2tzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjE0LVxcdCAgICAgICBzaXplb2Yoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlYXBjYjApKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNTpcXHRtZW1zZXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFwY2IxLCAwLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjE2OlxcdCAgICAgICBzaXplb2Yoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlYXBjYjEpKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzIxNy1cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTEyNT1zdGF0aWMgaW50IHByZXBhcmVfY3B1ZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjMtLyogQ29weSB0byBBUENCIEZPUk1BVDEgZnJvbSBBUENCIEZPUk1BVDAgKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjQ6c3RhdGljIGludCBzZXR1cF9hcGNiMTAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxNjU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHN0cnVjdCBrdm1fczM5MF9hcGNiMSAqYXBjYl9oKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTE2Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0xOTQ9c3RhdGljIGludCBzZXR1cF9hcGNiMDAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTEtLyoqXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjEyOiAqIHNldHVwX2FwY2IxMSAtIENvcHkgdGhlIEZPUk1BVDEgQVBDQiBmcm9tIHRoZSBndWVzdCB0byB0aGUgc2hhZG93IENSWUNCXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjEzLSAqIEB2Y3B1OiBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIENQVVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjE5LSAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyMDpzdGF0aWMgaW50IHNldHVwX2FwY2IxMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjEtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjUtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjI2OlxcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiwgYXBjYjEpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNy1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjgtXFx0aWYgKHJlYWRfZ3Vlc3RfcmVhbCh2Y3B1LCBhcGNiX2dwYSwgYXBjYl9zLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjIyOTpcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBrdm1fczM5MF9hcGNiMSkpKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIzMi1cXHRiaXRtYXBfYW5kKGFwY2JfcywgYXBjYl9zLCBhcGNiX2gsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjMzOlxcdFxcdCAgIEJJVFNfUEVSX0JZVEUgKiBzaXplb2Yoc3RydWN0IGt2bV9zMzkwX2FwY2IxKSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjM0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MjUyPXN0YXRpYyBpbnQgc2V0dXBfYXBjYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiX3MsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjYzOlxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTEodmNwdSwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY0LVxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY1OlxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZjcnljYl9oLVxcdTAwM2VhcGNiMSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY2LVxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3MC1cXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzItXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg0LVxcdFxcdGNhc2UgQ1JZQ0JfRk9STUFUMjpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyODU6XFx0XFx0XFx0cmV0dXJuIHNldHVwX2FwY2IxMCh2Y3B1LCBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjg2LVxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg3OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y3J5Y2JfaC1cXHUwMDNlYXBjYjEpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDE6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUzOjA4LjcxNzAzODA1MVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjM5Njk2MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmVlZCBmb3IgS01TQU4gaW4gVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBDUFUgaXNuJ3QgYWN0dWFsbHkgcmVhZGluZyBgYXBjYjFgIGFmdGVyIEkgc2V0IGl0IHVwOyB0aGUgaGFyZHdhcmUgKFNJRSkgaXMgZG9pbmcgdGhhdC4gS01TQU4gb25seSBpbnN0cnVtZW50cyBDUFUgaW5zdHJ1Y3Rpb25zLCBzbyBpdCdzIG5vdCBnb2luZyB0byBjYXRjaCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBIbW0sIGxldCBtZSByZS1yZWFkIHRoZSBwcm9tcHQuIEl0IHNheXMgdG8gc2V0IGBOZWVkc0tNU0FOPXRydWVgICpvbmx5IGlmKiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2VydGFpbiByaXNrcywgc3BlY2lmaWNhbGx5OiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJzLCBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzICpjb3VsZCogYmUgcmVhZCBsYXRlciwgb3IgbmV3IGJvdW5kcyBjaGVja3MgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGFwY2Jfc2AgKHdoaWNoIGlzIHRoZSBzYW1lIGFzIGBrdm1fczM5MF9hcGNiMWApLCBhIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUsIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzICpjb3VsZCogYmUgcmVhZCBsYXRlciBieSB0aGUgaGFyZHdhcmUuIEJ1dCwgd2FpdCwgSSBhbHJlYWR5IGtub3cgS01TQU4gZG9lc24ndCBkZXRlY3QgaGFyZHdhcmUgcmVhZHMuIFRoZSBydWxlcyBzcGVjaWZpY2FsbHkgc3RhdGUsIGFuZCBJJ20gcGFyYXBocmFzaW5nIGhlcmUsIFwiRG9uJ3QgYm90aGVyIHdpdGggS01TQU4gaWYgS0FTQU4gb3Igb3RoZXIgdG9vbHMgY2FuIGNhdGNoIHRoZSBidWcuIEtNU0FOIGlzIGV4cGVuc2l2ZS5cIiBTbywgaWYgS01TQU4gY2FuJ3QgZGV0ZWN0IHRoaXMsIGlzIHJ1bm5pbmcgS01TQU4gcG9pbnRsZXNzP1xuXG5MZXQgbWUgdGhpbmsgaXQgdGhyb3VnaC4gSXMgdGhlcmUgZXZlbiBhIHJlbW90ZSBjaGFuY2UgS01TQU4gKmNvdWxkKiBkZXRlY3QgdGhpcz8gSXQgdHJhY2tzIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiBtZW1vcnksIGJ1dCB3aGVuIG1lbW9yeSBpcyBwYXNzZWQgdG8gaGFyZHdhcmUgbGlrZSBETUEsIEtNU0FOJ3MgYmxpbmQgdG8gdGhlIGhhcmR3YXJlIHJlYWQgdW5sZXNzIHRoZXJlJ3MgYW4gZXhwbGljaXQgY2hlY2sgbGlrZSBga21zYW5fY2hlY2tfbWVtb3J5KClgLiBBbmQgdGhlcmUncyBubyBga21zYW5fY2hlY2tfbWVtb3J5KClgIGZvciB0aGUgU0lFIGJsb2NrIG9yIHRoZSBDUllDQiwgcmlnaHQ/IFNvLCBubywgS01TQU4gd29uJ3QgcmVwb3J0IGFuIGVycm9yLlxuXG5Pa2F5LCBpcyB0aGUgYGFwY2IxYCBldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlPyBJIHNob3VsZCBjaGVjayBpZiBgY3J5Y2JgIGlzIGV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UgdGhvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTYzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MzoxNi4zNTY3MzcyOThaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzMyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyeWNiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMDkwPXZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fcmVzZXRfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMDk4LVxcdFxcdGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMDk5OlxcdFxcdC8qIHJlY3JlYXRlIHRoZSBzaGFkb3cgY3J5Y2IgYnkgbGVhdmluZyB0aGUgVlNJRSBoYW5kbGVyICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMDAtXFx0XFx0a3ZtX3MzOTBfc3luY19yZXF1ZXN0KEtWTV9SRVFfVlNJRV9SRVNUQVJULCB2Y3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMTA2PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2NyeXB0byhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTExNS1cXHRcXHRnZXRfcmFuZG9tX2J5dGVzKFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTE2OlxcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzayxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTExNzpcXHRcXHRcXHRzaXplb2Yoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlYWVzX3dyYXBwaW5nX2tleV9tYXNrKSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMTgtXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5hZXNfa3cgPSAxO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExMjYtXFx0XFx0Z2V0X3JhbmRvbV9ieXRlcyhcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTEyNzpcXHRcXHRcXHRrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2ssXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExMjg6XFx0XFx0XFx0c2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWRlYV93cmFwcGluZ19rZXlfbWFzaykpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTI5LVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uZGVhX2t3ID0gMTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTM3LVxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uYWVzX2t3ID0gMDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTEzODpcXHRcXHRtZW1zZXQoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlYWVzX3dyYXBwaW5nX2tleV9tYXNrLCAwLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTM5OlxcdFxcdFxcdHNpemVvZihrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VhZXNfd3JhcHBpbmdfa2V5X21hc2spKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTE0MC1cXHRcXHRWTV9FVkVOVChrdm0sIDMsIFxcXCIlc1xcXCIsIFxcXCJESVNBQkxFOiBBRVMga2V5d3JhcHBpbmcgc3VwcG9ydFxcXCIpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTExNDctXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5kZWFfa3cgPSAwO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMTQ4OlxcdFxcdG1lbXNldChrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2ssIDAsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjExNDk6XFx0XFx0XFx0c2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWRlYV93cmFwcGluZ19rZXlfbWFzaykpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMTUwLVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIiVzXFxcIiwgXFxcIkRJU0FCTEU6IERFQSBrZXl3cmFwcGluZyBzdXBwb3J0XFxcIik7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzEwNz1zdGF0aWMgaW50IGt2bV9zMzkwX2FweGFfaW5zdGFsbGVkKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEyNi0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEyNzpzdGF0aWMgdm9pZCBrdm1fczM5MF9zZXRfY3J5Y2JfZm9ybWF0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEyOC17XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxMjk6XFx0a3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgPSB2aXJ0X3RvX3BoeXMoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMzAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxMzEtXFx0LyogQ2xlYXIgdGhlIENSWUNCIGZvcm1hdCBiaXRzIC0gaS5lLiwgc2V0IGZvcm1hdCAwIGJ5IGRlZmF1bHQgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzEzMjpcXHRrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiZCBcXHUwMDI2PSB+KENSWUNCX0ZPUk1BVF9NQVNLKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzEzMy1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTM4LVxcdGlmIChrdm1fczM5MF9hcHhhX2luc3RhbGxlZCgpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTM5OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkIHw9IENSWUNCX0ZPUk1BVDI7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNDAtXFx0ZWxzZVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTQxOlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkIHw9IENSWUNCX0ZPUk1BVDE7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNDItfVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMxNTk9dm9pZCBrdm1fYXJjaF9jcnlwdG9fc2V0X21hc2tzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqYXBtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNjEte1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTYyOlxcdHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgKmNyeWNiID0ga3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYjtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE2My1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTY1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTY2OlxcdHN3aXRjaCAoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYmQgXFx1MDAyNiBDUllDQl9GT1JNQVRfTUFTSykge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTY3LVxcdGNhc2UgQ1JZQ0JfRk9STUFUMjogLyogQVBDQjEgdXNlIDI1NiBiaXRzICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNjg6XFx0XFx0bWVtY3B5KGNyeWNiLVxcdTAwM2VhcGNiMS5hcG0sIGFwbSwgMzIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTY5LVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIlNFVCBDUllDQjogYXBtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFxcXCIsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzAtXFx0XFx0XFx0IGFwbVswXSwgYXBtWzFdLCBhcG1bMl0sIGFwbVszXSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNzE6XFx0XFx0bWVtY3B5KGNyeWNiLVxcdTAwM2VhcGNiMS5hcW0sIGFxbSwgMzIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTcyLVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIlNFVCBDUllDQjogYXFtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFxcXCIsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMxNzMtXFx0XFx0XFx0IGFxbVswXSwgYXFtWzFdLCBhcW1bMl0sIGFxbVszXSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMxNzQ6XFx0XFx0bWVtY3B5KGNyeWNiLVxcdTAwM2VhcGNiMS5hZG0sIGFkbSwgMzIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTc1LVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIlNFVCBDUllDQjogYWRtICUwMTZseCAlMDE2bHggJTAxNmx4ICUwMTZseFxcXCIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE3OS1cXHRjYXNlIENSWUNCX0ZPUk1BVDA6IC8qIEZhbGwgdGhyb3VnaCBib3RoIHVzZSBBUENCMCAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTgwOlxcdFxcdG1lbWNweShjcnljYi1cXHUwMDNlYXBjYjAuYXBtLCBhcG0sIDgpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTgxOlxcdFxcdG1lbWNweShjcnljYi1cXHUwMDNlYXBjYjAuYXFtLCBhcW0sIDIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMTgyOlxcdFxcdG1lbWNweShjcnljYi1cXHUwMDNlYXBjYjAuYWRtLCBhZG0sIDIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMTgzLVxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcIlNFVCBDUllDQjogYXBtICUwMTZseCBhcW0gJTA0eCBhZG0gJTA0eFxcXCIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5MC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzE5MTpcXHQvKiByZWNyZWF0ZSB0aGUgc2hhZG93IGNyeWNiIGZvciBlYWNoIHZjcHUgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzE5Mi1cXHRrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KGt2bSwgS1ZNX1JFUV9WU0lFX1JFU1RBUlQpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTMyMDk9dm9pZCBrdm1fYXJjaF9jcnlwdG9fY2xlYXJfbWFza3Moc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMTItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTM6XFx0bWVtc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VhcGNiMCwgMCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNDpcXHQgICAgICAgc2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFwY2IwKSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMTU6XFx0bWVtc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VhcGNiMSwgMCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzIxNjpcXHQgICAgICAgc2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFwY2IxKSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMTctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMTgtXFx0Vk1fRVZFTlQoa3ZtLCAzLCBcXFwiJXNcXFwiLCBcXFwiQ0xSIENSWUNCOlxcXCIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjE5OlxcdC8qIHJlY3JlYXRlIHRoZSBzaGFkb3cgY3J5Y2IgZm9yIGVhY2ggdmNwdSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjIwLVxcdGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoa3ZtLCBLVk1fUkVRX1ZTSUVfUkVTVEFSVCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzIzND1zdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyMzUte1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjM2OlxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2IgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnNpZV9wYWdlMi1cXHUwMDNlY3J5Y2I7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMyMzc6XFx0a3ZtX3MzOTBfc2V0X2NyeWNiX2Zvcm1hdChrdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjM4LVxcdGluaXRfcndzZW0oXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rX3J3c2VtKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMjQ1LVxcdGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uZGVhX2t3ID0gMTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI0NjpcXHRnZXRfcmFuZG9tX2J5dGVzKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzayxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzI0NzpcXHRcXHRcXHQgc2l6ZW9mKGt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2ItXFx1MDAzZWFlc193cmFwcGluZ19rZXlfbWFzaykpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjQ4OlxcdGdldF9yYW5kb21fYnl0ZXMoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlZGVhX3dyYXBwaW5nX2tleV9tYXNrLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMjQ5OlxcdFxcdFxcdCBzaXplb2Yoa3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYi1cXHUwMDNlZGVhX3dyYXBwaW5nX2tleV9tYXNrKSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMyNTAtfVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM2NTI9c3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2NjAtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM2NjE6XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNyeWNiZCA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNjYyLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2IzIFxcdTAwMjY9IH4oRUNCM19BRVMgfCBFQ0IzX0RFQSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz01OTM9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy02MzEtXFx0LyogQVBYQSBub3QgaW5zdGFsbGVkIGFuZCBBUElEIGdyZWF0ZXIgNjQgb3IgQVBRSSBncmVhdGVyIDE2ICovXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NjMyOlxcdGlmICghKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jcnlwdG8uY3J5Y2JkIFxcdTAwMjYgMHgwMikgXFx1MDAyNlxcdTAwMjYgKHJlZzAgXFx1MDAyNiAweDAwMDBjMGYwVUwpKVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTYzMy1cXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIFBHTV9TUEVDSUZJQ0FUSU9OKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTM0PXN0cnVjdCB2c2llX3BhZ2Uge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNjgtXFx0X191OCByZXNlcnZlZFsweDA2ZjggLSAweDAyNzhdO1xcdFxcdC8qIDB4MDI3OCAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjY5OlxcdHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IgY3J5Y2I7XFx0LyogMHgwNmY4ICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtNzAtXFx0X191OCBmYWNbOCArIFMzOTBfQVJDSF9GQUNfTElTVF9TSVpFX0JZVEVdOy8qIDB4MDdmOCAqL1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmM9MTY0PXN0YXRpYyBpbnQgc2V0dXBfYXBjYjEwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2FwY2IxICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTY1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLCBzdHJ1Y3Qga3ZtX3MzOTBfYXBjYjEgKmFwY2JfaClcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNjYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTY5LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE3MDpcXHRhcGNiX2dwYSA9IGNyeWNiX2dwYSArIG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xNzEtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xODctICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTg4OiAqIEBhcGNiX3M6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgc2hhZG93IGNyeWNiXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MTg5OiAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTAtICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBndWVzdDFcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTE5ND1zdGF0aWMgaW50IHNldHVwX2FwY2IwMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgKmFwY2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoxOTU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjcnljYl9ncGEsIHVuc2lnbmVkIGxvbmcgKmFwY2JfaClcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0xOTYte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMTk4LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjE5OTpcXHRhcGNiX2dwYSA9IGNyeWNiX2dwYSArIG9mZnNldG9mKHN0cnVjdCBrdm1fczM5MF9jcnlwdG9fY2IsIGFwY2IwKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMDAtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTMtICogQHZjcHU6IHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjE0OiAqIEBhcGNiX3M6IHBvaW50ZXIgdG8gc3RhcnQgb2YgYXBjYiBpbiB0aGUgc2hhZG93IGNyeWNiXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjE1OiAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMTYtICogQGFwY2JfaDogcG9pbnRlciB0byBzdGFydCBvZiBhcGNiIGluIHRoZSBob3N0XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYz0yMjA9c3RhdGljIGludCBzZXR1cF9hcGNiMTEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICphcGNiX3MsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjIxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY3J5Y2JfZ3BhLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyMi1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICphcGNiX2gpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yMjUtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjI2OlxcdGFwY2JfZ3BhID0gY3J5Y2JfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiwgYXBjYjEpO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTIyNy1cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI0MC0gKiBAdmNwdTogcG9pbnRlciB0byB0aGUgdmlydHVhbCBDUFVcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDE6ICogQGNyeWNiX3M6IHBvaW50ZXIgdG8gc2hhZG93IGNyeWNiXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjQyOiAqIEBjcnljYl9ncGE6IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgb2Ygb3JpZ2luYWwgZ3Vlc3QgY3J5Y2JcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDM6ICogQGNyeWNiX2g6IHBvaW50ZXIgdG8gdGhlIGhvc3QgY3J5Y2JcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDQ6ICogQGZtdF9vOiBmb3JtYXQgb2YgdGhlIG9yaWdpbmFsIGd1ZXN0IGNyeWNiLlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI0NTogKiBAZm10X2g6IGZvcm1hdCBvZiB0aGUgaG9zdCBjcnljYi5cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNDYtICpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNDc6ICogQ2hlY2tzIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIGd1ZXN0IGFuZCBob3N0IGNyeWNiIGFuZCBjYWxscyB0aGVcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNDgtICogYXBwcm9wcmlhdGUgY29weSBmdW5jdGlvbi5cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNDktICpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTA6ICogUmV0dXJuIDAgb3IgYW4gZXJyb3IgbnVtYmVyIGlmIHRoZSBndWVzdCBhbmQgaG9zdCBjcnljYiBhcmUgaW5jb21wYXRpYmxlLlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1MS0gKi9cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTI6c3RhdGljIGludCBzZXR1cF9hcGNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2NyeXB0b19jYiAqY3J5Y2JfcyxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyNTM6XFx0ICAgICAgIGNvbnN0IHUzMiBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjU0OlxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfY3J5cHRvX2NiICpjcnljYl9oLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI1NS1cXHQgICAgICAgaW50IGZtdF9vLCBpbnQgZm10X2gpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNTgtXFx0Y2FzZSBDUllDQl9GT1JNQVQyOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI1OTpcXHRcXHRpZiAoKGNyeWNiX2dwYSBcXHUwMDI2IFBBR0VfTUFTSykgIT0gKChjcnljYl9ncGEgKyAyNTYpIFxcdTAwMjYgUEFHRV9NQVNLKSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjAtXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNjItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjYzOlxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTEodmNwdSwgKHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY0OlxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY1OlxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZjcnljYl9oLVxcdTAwM2VhcGNiMSk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjY2LVxcdGNhc2UgQ1JZQ0JfRk9STUFUMTpcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI2OC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MjY5OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MDpcXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI3MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzItXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3My1cXHRcXHRcXHRyZXR1cm4gc2V0dXBfYXBjYjAwKHZjcHUsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjc0OlxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2Jfcy1cXHUwMDNlYXBjYjAsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjc1OlxcdFxcdFxcdFxcdFxcdCAgICBjcnljYl9ncGEsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjc2OlxcdFxcdFxcdFxcdFxcdCAgICAodW5zaWduZWQgbG9uZyAqKSBcXHUwMDI2Y3J5Y2JfaC1cXHUwMDNlYXBjYjApO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI3Ny1cXHRcXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yNzktXFx0Y2FzZSBDUllDQl9GT1JNQVQwOlxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4MDpcXHRcXHRpZiAoKGNyeWNiX2dwYSBcXHUwMDI2IFBBR0VfTUFTSykgIT0gKChjcnljYl9ncGEgKyAzMikgXFx1MDAyNiBQQUdFX01BU0spKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4MS1cXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI4NC1cXHRcXHRjYXNlIENSWUNCX0ZPUk1BVDI6XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mjg1OlxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMTAodmNwdSwgXFx1MDAyNmNyeWNiX3MtXFx1MDAzZWFwY2IxLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NjpcXHRcXHRcXHRcXHRcXHQgICAgY3J5Y2JfZ3BhLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjI4NzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNyeWNiX2gtXFx1MDAzZWFwY2IxKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0yODgtXFx0XFx0Y2FzZSBDUllDQl9GT1JNQVQxOlxcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjkwLVxcdFxcdFxcdHJldHVybiBzZXR1cF9hcGNiMDAodmNwdSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyOTE6XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopIFxcdTAwMjZjcnljYl9zLVxcdTAwM2VhcGNiMCxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyOTI6XFx0XFx0XFx0XFx0XFx0ICAgIGNyeWNiX2dwYSxcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzoyOTM6XFx0XFx0XFx0XFx0XFx0ICAgICh1bnNpZ25lZCBsb25nICopIFxcdTAwMjZjcnljYl9oLVxcdTAwM2VhcGNiMCk7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMjk0LVxcdFxcdH1cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTI5OS0vKipcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMDA6ICogc2hhZG93X2NyeWNiIC0gQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGNyeWNiIGJsb2NrXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzAxLSAqIEB2Y3B1OiBhIHBvaW50ZXIgdG8gdGhlIHZpcnR1YWwgQ1BVXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMDMtICpcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMDQ6ICogQ3JlYXRlIGEgc2hhZG93IGNvcHkgb2YgdGhlIGNyeWNiIGJsb2NrIGFuZCBzZXR1cCBrZXkgd3JhcHBpbmcsIGlmXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzA1LSAqIHJlcXVlc3RlZCBmb3IgZ3Vlc3QgMyBhbmQgZW5hYmxlZCBmb3IgZ3Vlc3QgMi5cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMxMy0gKiBUaGlzIGZ1bmN0aW9uIGNlbnRyYWxpemUgdGhlIGlzc3Vpbmcgb2Ygc2V0X3ZhbGlkaXR5X2ljcHQoKSBmb3IgYWxsXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzE0OiAqIHRoZSBzdWJmdW5jdGlvbnMgd29ya2luZyBvbiB0aGUgY3J5Y2IuXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzE1LSAqXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMTgtICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzE5OnN0YXRpYyBpbnQgc2hhZG93X2NyeWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZzaWVfcGFnZSAqdnNpZV9wYWdlKVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMyMC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMjItXFx0c3RydWN0IGt2bV9zMzkwX3NpZV9ibG9jayAqc2NiX28gPSB2c2llX3BhZ2UtXFx1MDAzZXNjYl9vO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMyMzpcXHRjb25zdCB1aW50MzJfdCBjcnljYmRfbyA9IFJFQURfT05DRShzY2Jfby1cXHUwMDNlY3J5Y2JkKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozMjQ6XFx0Y29uc3QgdTMyIGNyeWNiX2FkZHIgPSBjcnljYmRfbyBcXHUwMDI2IDB4N2ZmZmZmZjhVO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTMyNS1cXHR1bnNpZ25lZCBsb25nICpiMSwgKmIyO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzMwLVxcdGludCBrZXlfbXNrID0gdGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cXHUwMDNla3ZtLCA3Nik7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzMxOlxcdGludCBmbXRfbyA9IGNyeWNiZF9vIFxcdTAwMjYgQ1JZQ0JfRk9STUFUX01BU0s7XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzMyOlxcdGludCBmbXRfaCA9IHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjcnljYmQgXFx1MDAyNiBDUllDQl9GT1JNQVRfTUFTSztcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMzMtXFx0aW50IHJldCA9IDA7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzM0LVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjMzNTpcXHRzY2Jfcy1cXHUwMDNlY3J5Y2JkID0gMDtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zMzYtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDEtXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzQyOlxcdGlmICghY3J5Y2JfYWRkcilcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNDMtXFx0XFx0cmV0dXJuIHNldF92YWxpZGl0eV9pY3B0KHNjYl9zLCAweDAwMzlVKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM0NS1cXHRpZiAoZm10X28gPT0gQ1JZQ0JfRk9STUFUMSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzozNDY6XFx0XFx0aWYgKChjcnljYl9hZGRyIFxcdTAwMjYgUEFHRV9NQVNLKSAhPVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM0NzpcXHRcXHQgICAgKChjcnljYl9hZGRyICsgMTI4KSBcXHUwMDI2IFBBR0VfTUFTSykpXFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzQ4LVxcdFxcdFxcdHJldHVybiBzZXRfdmFsaWRpdHlfaWNwdChzY2JfcywgMHgwMDNDVSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTAtXFx0aWYgKGFwaWVfcykge1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MTpcXHRcXHRyZXQgPSBzZXR1cF9hcGNiKHZjcHUsIFxcdTAwMjZ2c2llX3BhZ2UtXFx1MDAzZWNyeWNiLCBjcnljYl9hZGRyLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM1MjpcXHRcXHRcXHRcXHQgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5jcnljYixcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNTMtXFx0XFx0XFx0XFx0IGZtdF9vLCBmbXRfaCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNjctXFx0LyogY29weSBvbmx5IHRoZSB3cmFwcGluZyBrZXlzICovXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzY4OlxcdGlmIChyZWFkX2d1ZXN0X3JlYWwodmNwdSwgY3J5Y2JfYWRkciArIDcyLFxcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM2OTpcXHRcXHRcXHQgICAgdnNpZV9wYWdlLVxcdTAwM2VjcnljYi5kZWFfd3JhcHBpbmdfa2V5X21hc2ssIDU2KSlcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy0zNzAtXFx0XFx0cmV0dXJuIHNldF92YWxpZGl0eV9pY3B0KHNjYl9zLCAweDAwMzVVKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM3NS1cXHQvKiB4b3IgYm90aCBibG9ja3MgaW4gb25lIHJ1biAqL1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jOjM3NjpcXHRiMSA9ICh1bnNpZ25lZCBsb25nICopIHZzaWVfcGFnZS1cXHUwMDNlY3J5Y2IuZGVhX3dyYXBwaW5nX2tleV9tYXNrO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM3Ny1cXHRiMiA9ICh1bnNpZ25lZCBsb25nICopXFxuYXJjaC9zMzkwL2t2bS92c2llLmM6Mzc4OlxcdFxcdFxcdCAgICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY3J5cHRvLmNyeWNiLVxcdTAwM2VkZWFfd3JhcHBpbmdfa2V5X21hc2s7XFxuYXJjaC9zMzkwL2t2bS92c2llLmMtMzc5LVxcdC8qIGFzIDU2JTggPT0gMCwgYml0bWFwX3hvciB3b24ndCBvdmVyd3JpdGUgYW55IGRhdGEgKi9cXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM4OS1cXHR9XFxuYXJjaC9zMzkwL2t2bS92c2llLmM6MzkwOlxcdHNjYl9zLVxcdTAwM2VjcnljYmQgPSAodTMyKXZpcnRfdG9fcGh5cyhcXHUwMDI2dnNpZV9wYWdlLVxcdTAwM2VjcnljYikgfCBDUllDQl9GT1JNQVQyO1xcbmFyY2gvczM5MC9rdm0vdnNpZS5jLTM5MS1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vdnNpZS5jPTQ4MD1zdGF0aWMgaW50IHNoYWRvd19zY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgdnNpZV9wYWdlICp2c2llX3BhZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02MTYtXFx0cHJlcGFyZV9pYmModmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYzo2MTc6XFx0cmMgPSBzaGFkb3dfY3J5Y2IodmNwdSwgdnNpZV9wYWdlKTtcXG5hcmNoL3MzOTAva3ZtL3ZzaWUuYy02MTgtb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNTo1MzoxNi40MDQ0NzUxODhaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0MTY5NDA5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQSBXYXN0ZSBvZiBSZXNvdXJjZXM/KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgYGNyeWNiYCBhcmVhLCBzcGVjaWZpY2FsbHkgYGFwY2IxYCwgaXMgbm90IGNvcGllZCB0byB1c2VyIHNwYWNlLCBpdCdzIHN0cmljdGx5IGhhcmR3YXJlLWZhY2luZyAoU0lFKS4gVGh1cywgdGhlIG9ubHkgcmVhZCBpcyBmcm9tIHRoZSBoYXJkd2FyZSwgbm90IHRoZSBDUFUuIEtNU0FOLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGZsYWdzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpieSB0aGUgQ1BVKiBvciB0aG9zZSB0aGF0IGFyZSBwYXNzZWQgdG8gYGNvcHlfdG9fdXNlcmAgb3IgZXhwbGljaXRseSBjaGVja2VkIHdpdGggYGttc2FuX2NoZWNrX21lbW9yeWAuIFNpbmNlIHRoaXMgaXNuJ3QgdGhlIGNhc2UgaGVyZSwgcnVubmluZyBhIEtNU0FOIHNlc3Npb24gZm9yIHRoaXMgc3BlY2lmaWMgcGF0Y2ggc2VlbXMgcG9pbnRsZXNzLCBhcyBwZXIgdGhlIHJ1bGU6IGF2b2lkIEtNU0FOIGlmIHN0YW5kYXJkIGRldGVjdG9ycyBjYXRjaCB0aGUgaXNzdWUuIFRoZSBvbmx5IHdheSBpdCBjb3VsZCBjYXRjaCBhbnl0aGluZyBpcyB2aWEgYGttc2FuX2NoZWNrX21lbW9yeWAgYW5ub3RhdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3QgY2hlY2sgd2hldGhlciB0aG9zZSBldmVuIGV4aXN0IGZvciB0aGUgYXJlYXMgdGhhdCBhcmUgYmVpbmcgY2hhbmdlZC4gXG5cbk15IG1lbW9yeSB0aGVuIGJyb3VnaHQgbWUgdG8gdGhlIHBvaW50IHdoZXJlIEkgYmVnYW4gc2VhcmNoaW5nIHRoZSBgc2V0dXBfYXBjYjEwYCBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBgYXBjYl9zYCBkYXRhIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXRgLCBlbnN1cmluZyB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgbWl0aWdhdGVkLiBJIGNoZWNrZWQgYHNldHVwX2FwY2IxMWAsIHdoZXJlIGBhcGNiX3NgIGlzIHJlYWQgdGhyb3VnaCBgYml0bWFwX2FuZGAgYW5kIGluaXRpYWxpemVkIGJ5IGByZWFkX2d1ZXN0X3JlYWxgLCBzbyBhbHNvIG5vIGlzc3VlIHRoZXJlLiBUaGUgc2FtZSB0aGluZyBmb3IgYHNldHVwX2FwY2IwMGAuIFRoZW4gSSB3ZW50IGJhY2sgdG8gYHNldHVwX2FwY2IxMGAsIHRvIG1ha2Ugc3VyZSB0aGF0IGBhcGNiX3NgIGlzIG5vdCByZWFkIGJ5IHRoZSBDUFUsIGl0IGlzIG9ubHkgd3JpdHRlbiB0by4gU28sIEtNU0FOIGlzIGRlZmluaXRlbHkgbm90IGdvaW5nIHRvIGNhdGNoIHRoaXMuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBhcGNiX3NgIGlzICpuZXZlciogY29waWVkIHRvIHVzZXIgc3BhY2UgZWl0aGVyLiBJdCdzIHBhcnQgb2YgYHZzaWVfcGFnZS1cdTAwM2VjcnljYmAsIGludGVybmFsIGtlcm5lbC1zaWRlIHN0cnVjdHVyZS4gVGhlcmVmb3JlIEtNU0FOIGlzICphYnNvbHV0ZWx5KiBub3QgYXBwbGljYWJsZSBoZXJlLlxuXG5JIHRoZW4gZGlkIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSAqb3RoZXIqIGNvZGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2g6XG5cbjEuICBga3ZtX3MzOTBfa2V5b3BgOiBUaGlzIGZpeGVzIGEgbG9ja2luZyBpc3N1ZTsgYSBwb3RlbnRpYWwgcmFjZS91c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24gd2hlbiBhY2Nlc3NpbmcgYGt2bS1cdTAwM2VhcmNoLmdtYXBgLiBMb2NraW5nIGJ1Z3MgYXJlIEtBU0FOL0xPQ0tERVAgdGVycml0b3J5LCBub3QgS01TQU4uXG4yLiAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYDogVGhpcyBmaXhlcyBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZWAgY2FsbC4gVGhpcyBpcyBhIGxvZ2ljIGVycm9yIGFuZCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYnVnLlxuMy4gIGBrdm1fYXJjaF92Y3B1X2lvY3RsYDogVGhpcyBmaXhlcyBhbiBhZGRyZXNzIGVycm9yIGluIGBjb3B5X3RvX3VzZXJgLCBlbnN1cmluZyBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIGFyZSBjb3BpZWQgdG8gdGhlIGNvcnJlY3QgdXNlci1zcGFjZSBvZmZzZXQuIFRoZSBgY21kLnJjYCBhbmQgYGNtZC5ycmNgIHZhbHVlcyB0aGVtc2VsdmVzIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcGAsIHNvIG5vIGluZm9ybWF0aW9uIGxlYWsuXG5cblRoZXJlZm9yZSwgKm5vbmUqIG9mIHRoZSBjaGFuZ2VzIGFyZSBhZGRyZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIGNhbiBkZXRlY3QuIEtNU0FOJ3MgcHVycG9zZSB3b3VsZCBub3QgYmUgc2VydmVkIGhlcmUuXG5cblRoZSBgbWVtc2V0YCBpbiBgc2V0dXBfYXBjYjEwYCBkb2VzIGZpeCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgc3VyZSwgYnV0IGl0J3MgYW4gaXNzdWUgd2l0aCB0aGUgaGFyZHdhcmUgcmVhZGluZyB0aGUgc3RhbGUgYGFwY2IxYCwgbm90IHRoZSBDUFUhIEtNU0FOIGlzIGJsaW5kIHRvIGhhcmR3YXJlIHJlYWRzIHVubGVzcyBleHBsaWNpdCBga21zYW5fY2hlY2tfbWVtb3J5YCBjYWxscyBhcmUgcHJlc2VudCwgd2hpY2ggYXJlIG5vdCBpbiB0aGUgU0lFIGJsb2NrIGFuZCBjcnljYi5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBmb3IgYGttc2FuX2NoZWNrX21lbW9yeWAgaW4gdGhlIHMzOTAgS1ZNIGNvZGUuIEknbGwgc2VhcmNoIGZvciBpdCBhbmQgYGttc2FuX2Agc3BlY2lmaWNhbGx5IGluIHRoZSBgYXJjaC9zMzkwL2t2bS9gIGRpcmVjdG9yeS4gTm8gbWF0Y2hlcy4gU28gS01TQU4gd2lsbCBkZWZpbml0ZWx5IG5vdCBoYXZlIHBpY2tlZCB1cCBvbiB0aGUgcG90ZW50aWFsIGlzc3VlLlxuXG4qKkNvbmNsdXNpb246KiogQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiBUaGlzIHBhdGNoIGRlYWxzIHdpdGg6IDEpIGxvY2tpbmcgaXNzdWVzIChLQVNBTi9MT0NLREVQKSwgMikgc3RhdGUgbWFuYWdlbWVudCAobG9naWMgZXJyb3JzKSwgYW5kIDMpIHVzZXItc3BhY2UgQVBJIGFkZHJlc3NpbmcuIFRoZSBvbmx5IGNvZGUgY2hhbmdlIGFkZHJlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVsYXRlZCB0byBoYXJkd2FyZSByZWFkcyAobm90IENQVSByZWFkcyksIGFuZCB0aGVyZSBhcmUgbm8gS01TQU4gaW5zdHJ1bWVudGF0aW9uIHBvaW50cyBmb3IgdGhlIFNJRSBvciBjcnljYiBhcmVhLiBUaGVyZWZvcmUsIEtNU0FOIGlzIGlycmVsZXZhbnQuIEkgd2lsbCBhbHNvIGNoZWNrIGFnYWluIHRoYXQgYGNtZGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGlzIGRhdGEgaXMgbm90IHN0YWxlLiBObyBpc3N1ZXMgdGhlcmUgZWl0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDcyOCwiT3V0cHV0VG9rZW5zIjozOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE1OjUzOjQ0LjgyMTQxOTk4NloiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzLCBub25lIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtNU0FOOlxcbjEuIGBrdm1fczM5MF9rZXlvcGA6IEZpeGVzIGEgbG9ja2luZyBpc3N1ZSBieSBtb3ZpbmcgdGhlIHJlYWQgb2YgYGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlYCBpbnNpZGUgdGhlIGBtbXVfbG9ja2AgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCByYWNlIG9yIGludmFsaWQgYWNjZXNzLCB3aGljaCBpcyB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAuXFxuMi4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYDogRml4ZXMgYSBtaXNzaW5nIGBrdm1fc2lnc2V0X2RlYWN0aXZhdGUoKWAgY2FsbCBvbiBhbiBlcnJvciBwYXRoLiBUaGlzIGlzIGEgc3RhdGUgbWFuYWdlbWVudCBidWcuXFxuMy4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBGaXhlcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgYGNvcHlfdG9fdXNlcmAgc28gdGhhdCBgcmNgIGFuZCBgcnJjYCBhcmUgd3JpdHRlbiB0byB0aGUgY29ycmVjdCBvZmZzZXRzIGluIHRoZSB1c2VyIHNwYWNlIHN0cnVjdHVyZS4gVGhlIGNvcGllZCBkYXRhIGl0c2VsZiAoYGNtZC5yY2AgYW5kIGBjbWQucnJjYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgYSBwcmVjZWRpbmcgYGNvcHlfZnJvbV91c2VyYCwgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay5cXG40LiBgc2V0dXBfYXBjYjEwYDogQWRkcyBhIGBtZW1zZXRgIHRvIGZ1bGx5IGluaXRpYWxpemUgdGhlIGBhcGNiMWAgc3RydWN0dXJlIGluIHRoZSBzaGFkb3cgQ1JZQ0IuIFdpdGhvdXQgdGhpcywgZmllbGRzIGxpa2UgYGFwbVsxLi4zXWAgYXJlIGxlZnQgdW5pbml0aWFsaXplZCBhbmQgY29udGFpbiBzdGFsZSBkYXRhIGZyb20gcHJldmlvdXMgdXNlcyBvZiB0aGUgY2FjaGVkIGB2c2llX3BhZ2VgLiBUaGlzIHN0YWxlIGRhdGEgaXMgdGhlbiByZWFkIGJ5IHRoZSBoYXJkd2FyZSAoU0lFKSB3aGVuIGV4ZWN1dGluZyBhIG5lc3RlZCBndWVzdCwgcG90ZW50aWFsbHkgZ3JhbnRpbmcgdW5hdXRob3JpemVkIGNyeXB0byBhY2Nlc3MuIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBoYXJkd2FyZSBhbmQgbm90IGJ5IHRoZSBDUFUsIEtNU0FOIGNhbm5vdCBkZXRlY3QgaXQgKEtNU0FOIG9ubHkgaW5zdHJ1bWVudHMgQ1BVIGluc3RydWN0aW9ucyBhbmQgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IGBrbXNhbl9jaGVja19tZW1vcnkoKWAgYW5ub3RhdGlvbnMgZm9yIHRoZSBTSUUgYmxvY2spLlxcblxcblRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMsIG5vbmUgb2Ygd2hpY2ggYXJlIGRldGVjdGFibGUgYnkgS01TQU46XFxuMS4gYGt2bV9zMzkwX2tleW9wYDogRml4ZXMgYSBsb2NraW5nIGlzc3VlIGJ5IG1vdmluZyB0aGUgcmVhZCBvZiBga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2VgIGluc2lkZSB0aGUgYG1tdV9sb2NrYCBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugb3IgaW52YWxpZCBhY2Nlc3MsIHdoaWNoIGlzIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUC5cXG4yLiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gOiBGaXhlcyBhIG1pc3NpbmcgYGt2bV9zaWdzZXRfZGVhY3RpdmF0ZSgpYCBjYWxsIG9uIGFuIGVycm9yIHBhdGguIFRoaXMgaXMgYSBzdGF0ZSBtYW5hZ2VtZW50IGJ1Zy5cXG4zLiBga3ZtX2FyY2hfdmNwdV9pb2N0bGA6IEZpeGVzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBgY29weV90b191c2VyYCBzbyB0aGF0IGByY2AgYW5kIGBycmNgIGFyZSB3cml0dGVuIHRvIHRoZSBjb3JyZWN0IG9mZnNldHMgaW4gdGhlIHVzZXIgc3BhY2Ugc3RydWN0dXJlLiBUaGUgY29waWVkIGRhdGEgaXRzZWxmIChgY21kLnJjYCBhbmQgYGNtZC5ycmNgKSBpcyBmdWxseSBpbml0aWFsaXplZCBieSBhIHByZWNlZGluZyBgY29weV9mcm9tX3VzZXJgLCBzbyB0aGVyZSBpcyBubyBrZXJuZWwgaW5mby1sZWFrLlxcbjQuIGBzZXR1cF9hcGNiMTBgOiBBZGRzIGEgYG1lbXNldGAgdG8gZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYGFwY2IxYCBzdHJ1Y3R1cmUgaW4gdGhlIHNoYWRvdyBDUllDQi4gV2l0aG91dCB0aGlzLCBmaWVsZHMgbGlrZSBgYXBtWzEuLjNdYCBhcmUgbGVmdCB1bmluaXRpYWxpemVkIGFuZCBjb250YWluIHN0YWxlIGRhdGEgZnJvbSBwcmV2aW91cyB1c2VzIG9mIHRoZSBjYWNoZWQgYHZzaWVfcGFnZWAuIFRoaXMgc3RhbGUgZGF0YSBpcyB0aGVuIHJlYWQgYnkgdGhlIGhhcmR3YXJlIChTSUUpIHdoZW4gZXhlY3V0aW5nIGEgbmVzdGVkIGd1ZXN0LCBwb3RlbnRpYWxseSBncmFudGluZyB1bmF1dGhvcml6ZWQgY3J5cHRvIGFjY2Vzcy4gSG93ZXZlciwgYmVjYXVzZSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgZXhjbHVzaXZlbHkgYnkgdGhlIGhhcmR3YXJlIGFuZCBub3QgYnkgdGhlIENQVSwgS01TQU4gY2Fubm90IGRldGVjdCBpdCAoS01TQU4gb25seSBpbnN0cnVtZW50cyBDUFUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGVyZSBhcmUgbm8gZXhwbGljaXQgYGttc2FuX2NoZWNrX21lbW9yeSgpYCBhbm5vdGF0aW9ucyBmb3IgdGhlIFNJRSBibG9jaykuXFxuXFxuVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzqw4[1] Phase: Succeeded StartedAt: 2026-08-11 15:53:55 +0000 UTC FinishedAt: 2026-08-11 15:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 15:53:55 +0000 UTC FinishedAt: 2026-08-11 15:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2] Phase: Succeeded StartedAt: 2026-08-11 15:53:55 +0000 UTC FinishedAt: 2026-08-11 16:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 15:53:55 +0000 UTC FinishedAt: 2026-08-11 16:43:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 15:53:55 +0000 UTC FinishedAt: 2026-08-11 15:54:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 15:53:55 +0000 UTC FinishedAt: 2026-08-11 15:53:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjzqw4/series-workflowjzqw4-convert-artifact-2952733287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 15:54:05 +0000 UTC FinishedAt: 2026-08-11 16:13:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 15:54:05 +0000 UTC FinishedAt: 2026-08-11 16:13:04 +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:*6326d298-93e5-4fa9-91a3-9489d8f308a8,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-workflowjzqw4/series-workflowjzqw4-convert-artifact-2952733287/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": "a8eddd74-b193-4e3e-b273-bbcef6f7e897", "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-workflowjzqw4/series-workflowjzqw4-build-action-2931431677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 15:54:05 +0000 UTC FinishedAt: 2026-08-11 16:12:53 +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:*6326d298-93e5-4fa9-91a3-9489d8f308a8,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-workflowjzqw4/series-workflowjzqw4-convert-artifact-2952733287/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": "a8eddd74-b193-4e3e-b273-bbcef6f7e897", "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-workflowjzqw4/series-workflowjzqw4-build-action-2931431677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:13:04 +0000 UTC FinishedAt: 2026-08-11 16:13:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:13:04 +0000 UTC FinishedAt: 2026-08-11 16:13:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:13:04 +0000 UTC FinishedAt: 2026-08-11 16:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:13:04 +0000 UTC FinishedAt: 2026-08-11 16:13:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-workflowjzqw4/series-workflowjzqw4-convert-artifact-2711315478/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:13:14 +0000 UTC FinishedAt: 2026-08-11 16:15:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:13:14 +0000 UTC FinishedAt: 2026-08-11 16:15:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a8eddd74-b193-4e3e-b273-bbcef6f7e897,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-workflowjzqw4/series-workflowjzqw4-build-action-2931431677/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-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:15:35 +0000 UTC FinishedAt: 2026-08-11 16:15:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:15:35 +0000 UTC FinishedAt: 2026-08-11 16:15:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:15:35 +0000 UTC FinishedAt: 2026-08-11 16:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:15:35 +0000 UTC FinishedAt: 2026-08-11 16:37:30 +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:*6326d298-93e5-4fa9-91a3-9489d8f308a8,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-workflowjzqw4/series-workflowjzqw4-convert-artifact-2711315478/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": "d71f9a14-4af1-4e5c-879c-b16bee2134d5", "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-workflowjzqw4/series-workflowjzqw4-build-action-195699994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:15:35 +0000 UTC FinishedAt: 2026-08-11 16:37:20 +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:*6326d298-93e5-4fa9-91a3-9489d8f308a8,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-workflowjzqw4/series-workflowjzqw4-convert-artifact-2711315478/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": "d71f9a14-4af1-4e5c-879c-b16bee2134d5", "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-workflowjzqw4/series-workflowjzqw4-build-action-195699994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:37:30 +0000 UTC FinishedAt: 2026-08-11 16:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:37:30 +0000 UTC FinishedAt: 2026-08-11 16:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:37:30 +0000 UTC FinishedAt: 2026-08-11 16:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:37:30 +0000 UTC FinishedAt: 2026-08-11 16:39:11 +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:*d71f9a14-4af1-4e5c-879c-b16bee2134d5,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-workflowjzqw4/series-workflowjzqw4-build-action-195699994/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-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:39:22 +0000 UTC FinishedAt: 2026-08-11 16:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:39:22 +0000 UTC FinishedAt: 2026-08-11 16:43:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"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:*a8eddd74-b193-4e3e-b273-bbcef6f7e897,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d71f9a14-4af1-4e5c-879c-b16bee2134d5,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-workflowjzqw4/series-workflowjzqw4-build-action-2931431677/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-workflowjzqw4/series-workflowjzqw4-build-action-195699994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:39:22 +0000 UTC FinishedAt: 2026-08-11 16:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:39:22 +0000 UTC FinishedAt: 2026-08-11 16:39:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"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-workflowjzqw4/series-workflowjzqw4-convert-artifact-2459657403/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:39:22 +0000 UTC FinishedAt: 2026-08-11 16:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:39:22 +0000 UTC FinishedAt: 2026-08-11 16:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:39:22 +0000 UTC FinishedAt: 2026-08-11 16:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:39:32 +0000 UTC FinishedAt: 2026-08-11 16:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzqw4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vm_ioctl","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_ioctl_run","kvm_s390_handle_vsie"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"26d1779b-1a36-4ef9-83bb-bc1a1523c35c","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-11 16:39:32 +0000 UTC FinishedAt: 2026-08-11 16:42:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a8eddd74-b193-4e3e-b273-bbcef6f7e897,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d71f9a14-4af1-4e5c-879c-b16bee2134d5,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-workflowjzqw4/series-workflowjzqw4-build-action-2931431677/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-workflowjzqw4/series-workflowjzqw4-build-action-195699994/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-workflowjzqw4/series-workflowjzqw4-convert-artifact-2459657403/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,}