Name: series-workflow99c7r Phase: Succeeded StartedAt: 2026-07-20 15:28:44 +0000 UTC FinishedAt: 2026-07-20 19:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[0] Phase: Succeeded StartedAt: 2026-07-20 15:28:44 +0000 UTC FinishedAt: 2026-07-20 15:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 15:28:44 +0000 UTC FinishedAt: 2026-07-20 15:47:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PREEMPT_RT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PREEMPT_RT" ], "series_id": "33930a89-bb2a-4c5a-b6c5-d45829d5c94c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kcov_remote_softirq_start", "kcov_remote_softirq_stop", "kcov_remote_area_get", "kcov_remote_area_put", "kcov_remote_start", "kcov_remote_stop" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BSRUVNUFRfUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcCYjMzQ7LAogICAgJiMzNDtrY292X3JlbW90ZV9hcmVhX2dldCYjMzQ7LAogICAgJiMzNDtrY292X3JlbW90ZV9hcmVhX3B1dCYjMzQ7LAogICAgJiMzNDtrY292X3JlbW90ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtrY292X3JlbW90ZV9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtDT1YgY292ZXJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgcmVtb3RlIGNvdmVyYWdlIGlzIGNvbGxlY3RlZCBpbiBzb2Z0aXJxIGNvbnRleHRzIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3Igc29mdGlycSBwcmVlbXB0aW9uICh3aGljaCBvY2N1cnMgdW5kZXIgUFJFRU1QVF9SVCkuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLQ09WIGlvY3RscyBhbmQgcmVtb3RlIGNvdmVyYWdlIHRyaWdnZXJzIChsaWtlIFVTQiBvciB2aG9zdCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGE3MTFjMzVkNTYzOWIwN2Y1NmExMWM3ODU1MDJlMWE1NjllM2RkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTU6NDU6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCAzNzNiY2MwNTk4ZDEwYi4uN2E1M2MxNWNlY2I1MmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTE1NDMsNiAmIzQzOzE1NDMsMTQgQEAgc3RydWN0IHRhc2tfc3RydWN0IHtcbiBcbiBcdC8qIENvbGxlY3QgY292ZXJhZ2UgZnJvbSBzb2Z0aXJxIGNvbnRleHQ6ICovXG4gXHR1bnNpZ25lZCBpbnRcdFx0XHRrY292X3NvZnRpcnE7XG4mIzQzO1xuJiM0MztcdC8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBwcmVlbXB0aW5nIHJlbW90ZSBjb3ZlcmFnZSBjb2xsZWN0aW9uOiAqL1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdGtjb3Zfc2F2ZWRfbW9kZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0XHRrY292X3NhdmVkX3NpemU7XG4mIzQzO1x0dm9pZFx0XHRcdFx0Kmtjb3Zfc2F2ZWRfYXJlYTtcbiYjNDM7XHRzdHJ1Y3Qga2Nvdlx0XHRcdCprY292X3NhdmVkX2tjb3Y7XG4mIzQzO1x0aW50XHRcdFx0XHRrY292X3NhdmVkX3NlcXVlbmNlO1xuJiM0MztcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tjb3YuYyBiL2tlcm5lbC9rY292LmNcbmluZGV4IDFkZjM3M2ZiNTYyYmM4Li5hNzUxNDMwM2VmZjM4YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rY292LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9rY292LmNcbkBAIC04NiwxNyAmIzQzOzg2LDEyIEBAIHN0cnVjdCBrY292X3JlbW90ZSB7XG4gXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhrY292X3JlbW90ZV9sb2NrKTtcbiBzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShrY292X3JlbW90ZV9tYXAsIDQpO1xuLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGtjb3ZfcmVtb3RlX2FyZWFzID0gTElTVF9IRUFEX0lOSVQoa2Nvdl9yZW1vdGVfYXJlYXMpO1xuJiM0MztzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBrY292X3JlbW90ZV9hcmVhc1syXSA9IHtcbiYjNDM7XHRMSVNUX0hFQURfSU5JVChrY292X3JlbW90ZV9hcmVhc1swXSksIExJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzWzFdKVxuJiM0Mzt9O1xuIFxuIHN0cnVjdCBrY292X3BlcmNwdV9kYXRhIHtcbi1cdHZvaWRcdFx0XHQqaXJxX2FyZWE7XG4gXHRsb2NhbF9sb2NrX3RcdFx0bG9jaztcbi1cbi1cdHVuc2lnbmVkIGludFx0XHRzYXZlZF9tb2RlO1xuLVx0dW5zaWduZWQgaW50XHRcdHNhdmVkX3NpemU7XG4tXHR2b2lkXHRcdFx0KnNhdmVkX2FyZWE7XG4tXHRzdHJ1Y3Qga2Nvdlx0XHQqc2F2ZWRfa2Nvdjtcbi1cdGludFx0XHRcdHNhdmVkX3NlcXVlbmNlO1xuIH07XG4gXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrY292X3BlcmNwdV9kYXRhLCBrY292X3BlcmNwdV9kYXRhKSA9IHtcbkBAIC0xMzIsMTIgJiM0MzsxMjcsMTMgQEAgc3RhdGljIHN0cnVjdCBrY292X3JlbW90ZSAqa2Nvdl9yZW1vdGVfYWRkKHN0cnVjdCBrY292ICprY292LCB1NjQgaGFuZGxlKVxuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGtjb3ZfcmVtb3RlX2xvY2sgbG9ja2VkLiAqL1xuLXN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXJxKVxuIHtcbiBcdHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSBcdTAwMjZrY292X3JlbW90ZV9hcmVhc1tpcnFdO1xuIFxuLVx0bGlzdF9mb3JfZWFjaChwb3MsIFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzKSB7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaChwb3MsIGxpc3QpIHtcbiBcdFx0YXJlYSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSwgbGlzdCk7XG4gXHRcdGlmIChhcmVhLVx1MDAzZXNpemUgPT0gc2l6ZSkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmFyZWEtXHUwMDNlbGlzdCk7XG5AQCAtMTQ5LDExICYjNDM7MTQ1LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUpXG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBrY292X3JlbW90ZV9sb2NrIGxvY2tlZC4gKi9cbiBzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9hcmVhX3B1dChzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYSxcbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHNpemUpXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGludCBzaXplLCBib29sIGlycSlcbiB7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhcmVhLVx1MDAzZWxpc3QpO1xuIFx0YXJlYS1cdTAwM2VzaXplID0gc2l6ZTtcbi1cdGxpc3RfYWRkKFx1MDAyNmFyZWEtXHUwMDNlbGlzdCwgXHUwMDI2a2Nvdl9yZW1vdGVfYXJlYXMpO1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNmFyZWEtXHUwMDNlbGlzdCwgXHUwMDI2a2Nvdl9yZW1vdGVfYXJlYXNbaXJxXSk7XG4gXHQvKlxuIFx0ICogS01TQU4gZG9lc24mIzM5O3QgaW5zdHJ1bWVudCB0aGlzIGZpbGUsIHNvIGl0IG1heSBub3Qga25vdyBhcmVhLVx1MDAzZWxpc3RcbiBcdCAqIGlzIGluaXRpYWxpemVkLiBVbnBvaXNvbiBpdCBleHBsaWNpdGx5IHRvIGF2b2lkIHJlcG9ydHMgaW5cbkBAIC0zOTAsNiAmIzQzOzM4NiwxMiBAQCB2b2lkIGtjb3ZfdGFza19pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbiBcdGtjb3ZfdGFza19yZXNldCh0KTtcbiBcdHQtXHUwMDNla2Nvdl9yZW1vdGUgPSBOVUxMO1xuIFx0dC1cdTAwM2VrY292X2hhbmRsZSA9IGN1cnJlbnQtXHUwMDNla2Nvdl9oYW5kbGU7XG4mIzQzO1x0dC1cdTAwM2VrY292X3NvZnRpcnEgPSAwO1xuJiM0MztcdHQtXHUwMDNla2Nvdl9zYXZlZF9tb2RlID0gMDtcbiYjNDM7XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSA9IDA7XG4mIzQzO1x0dC1cdTAwM2VrY292X3NhdmVkX2FyZWEgPSBOVUxMO1xuJiM0MztcdHQtXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gTlVMTDtcbiYjNDM7XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2VxdWVuY2UgPSAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrY292X3Jlc2V0KHN0cnVjdCBrY292ICprY292KVxuQEAgLTgzNiwxNyAmIzQzOzgzOCwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2Nvdl9tb2RlX2VuYWJsZWQodW5zaWduZWQgaW50IG1vZGUpXG4gc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4gXHRfX211c3RfaG9sZChcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXG4ge1xuLVx0c3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgKmRhdGEgPSB0aGlzX2NwdV9wdHIoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YSk7XG4gXHR1bnNpZ25lZCBpbnQgbW9kZTtcbiBcbiBcdG1vZGUgPSBSRUFEX09OQ0UodC1cdTAwM2VrY292X21vZGUpO1xuIFx0YmFycmllcigpO1xuIFx0aWYgKGtjb3ZfbW9kZV9lbmFibGVkKG1vZGUpKSB7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfbW9kZSA9IG1vZGU7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2l6ZSA9IHQtXHUwMDNla2Nvdl9zaXplO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX2FyZWEgPSB0LVx1MDAzZWtjb3ZfYXJlYTtcbi1cdFx0ZGF0YS1cdTAwM2VzYXZlZF9zZXF1ZW5jZSA9IHQtXHUwMDNla2Nvdl9zZXF1ZW5jZTtcbi1cdFx0ZGF0YS1cdTAwM2VzYXZlZF9rY292ID0gdC1cdTAwM2VrY292O1xuJiM0MztcdFx0dC1cdTAwM2VrY292X3NhdmVkX21vZGUgPSBtb2RlO1xuJiM0MztcdFx0dC1cdTAwM2VrY292X3NhdmVkX3NpemUgPSB0LVx1MDAzZWtjb3Zfc2l6ZTtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gdC1cdTAwM2VrY292X2FyZWE7XG4mIzQzO1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2VxdWVuY2UgPSB0LVx1MDAzZWtjb3Zfc2VxdWVuY2U7XG4mIzQzO1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfa2NvdiA9IHQtXHUwMDNla2NvdjtcbiBcdFx0a2Nvdl9zdG9wKHQpO1xuIFx0fVxuIH1cbkBAIC04NTQsMTcgJiM0Mzs4NTUsMTUgQEAgc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4gc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbiBcdF9fbXVzdF9ob2xkKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaylcbiB7XG4tXHRzdHJ1Y3Qga2Nvdl9wZXJjcHVfZGF0YSAqZGF0YSA9IHRoaXNfY3B1X3B0cihcdTAwMjZrY292X3BlcmNwdV9kYXRhKTtcbi1cbi1cdGlmIChkYXRhLVx1MDAzZXNhdmVkX2tjb3YpIHtcbi1cdFx0a2Nvdl9zdGFydCh0LCBkYXRhLVx1MDAzZXNhdmVkX2tjb3YsIGRhdGEtXHUwMDNlc2F2ZWRfc2l6ZSxcbi1cdFx0XHRcdGRhdGEtXHUwMDNlc2F2ZWRfYXJlYSwgZGF0YS1cdTAwM2VzYXZlZF9tb2RlLFxuLVx0XHRcdFx0ZGF0YS1cdTAwM2VzYXZlZF9zZXF1ZW5jZSk7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfbW9kZSA9IDA7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2l6ZSA9IDA7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfYXJlYSA9IE5VTEw7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2VxdWVuY2UgPSAwO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX2tjb3YgPSBOVUxMO1xuJiM0MztcdGlmICh0LVx1MDAzZWtjb3Zfc2F2ZWRfa2Nvdikge1xuJiM0MztcdFx0a2Nvdl9zdGFydCh0LCB0LVx1MDAzZWtjb3Zfc2F2ZWRfa2NvdiwgdC1cdTAwM2VrY292X3NhdmVkX3NpemUsXG4mIzQzO1x0XHRcdCAgIHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhLCB0LVx1MDAzZWtjb3Zfc2F2ZWRfbW9kZSxcbiYjNDM7XHRcdFx0ICAgdC1cdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlKTtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9tb2RlID0gMDtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9zaXplID0gMDtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gTlVMTDtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9zZXF1ZW5jZSA9IDA7XG4mIzQzO1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfa2NvdiA9IE5VTEw7XG4gXHR9XG4gfVxuIFxuQEAgLTkyNywxNyAmIzQzOzkyNiwxNyBAQCB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG4gXHRzZXF1ZW5jZSA9IGtjb3YtXHUwMDNlc2VxdWVuY2U7XG4gXHRpZiAoaW5fdGFzaygpKSB7XG4gXHRcdHNpemUgPSBrY292LVx1MDAzZXJlbW90ZV9zaXplO1xuLVx0XHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSk7XG4mIzQzO1x0XHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c2l6ZSA9IENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkU7XG4tXHRcdGFyZWEgPSB0aGlzX2NwdV9wdHIoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YSktXHUwMDNlaXJxX2FyZWE7XG4mIzQzO1x0XHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSwgdHJ1ZSk7XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbiBcbi1cdC8qIENhbiBvbmx5IGhhcHBlbiB3aGVuIGluX3Rhc2soKS4gKi9cbiYjNDM7XHQvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyIGlmIHdlIGNhbiBzbGVlcC4gKi9cbiBcdGlmICghYXJlYSkge1xuIFx0XHRsb2NhbF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcbi1cdFx0YXJlYSA9IHZtYWxsb2Moc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1x0XHRhcmVhID0gaW5fdGFzaygpID8gdm1hbGxvYyhzaXplICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSA6IE5VTEw7XG4gXHRcdGlmICghYXJlYSkge1xuIFx0XHRcdGtjb3ZfcHV0KGtjb3YpO1xuIFx0XHRcdHJldHVybjtcbkBAIC0xMDc5LDExICYjNDM7MTA3OCw5IEBAIHZvaWQga2Nvdl9yZW1vdGVfc3RvcCh2b2lkKVxuIFx0XHRrY292X21vdmVfYXJlYShrY292LVx1MDAzZW1vZGUsIGtjb3YtXHUwMDNlYXJlYSwga2Nvdi1cdTAwM2VzaXplLCBhcmVhKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmtjb3YtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoaW5fdGFzaygpKSB7XG4tXHRcdHNwaW5fbG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbi1cdFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgc2l6ZSk7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xuLVx0fVxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbiYjNDM7XHRrY292X3JlbW90ZV9hcmVhX3B1dChhcmVhLCBzaXplLCAhaW5fdGFzaygpKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbiBcbiBcdGxvY2FsX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpO1xuIFxuQEAgLTExMjksMTQgJiM0MzsxMTI2LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZWxmdGVzdCh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IGtjb3ZfaW5pdCh2b2lkKVxuIHtcbi1cdGludCBjcHU7XG4mIzQzO1x0aW50IGNwdSA9IG51bV9wb3NzaWJsZV9jcHVzKCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbiYjNDM7XHQvKiBBbGxvY2F0ZSBzb21lIGV4dHJhIGJ1ZmZlcnMgaW4gb3JkZXIgdG8gcHJlcGFyZSBmb3Igc29mdGlycSBwcmVlbXB0aW9uLiAqL1xuJiM0MztcdGNwdSA9IGNwdSBcdTAwM2U9IDQgPyBjcHUgKiAyIDogY3B1ICYjNDM7IDQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHdoaWxlIChjcHUtLSkge1xuJiM0MztcdFx0dm9pZCAqYXJlYSA9IHZtYWxsb2MoQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHR2b2lkICphcmVhID0gdm1hbGxvY19ub2RlKENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUgKlxuLVx0XHRcdFx0c2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBjcHVfdG9fbm9kZShjcHUpKTtcbiBcdFx0aWYgKCFhcmVhKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRwZXJfY3B1X3B0cihcdTAwMjZrY292X3BlcmNwdV9kYXRhLCBjcHUpLVx1MDAzZWlycV9hcmVhID0gYXJlYTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUsIHRydWUpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrY292X3JlbW90ZV9sb2NrLCBmbGFncyk7XG4gXHR9XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWdcbmluZGV4IDEyNDRkY2FjMjI5NGFkLi4xMjc4NjM3OWJmMWQ3MiAxMDA2NDRcbi0tLSBhL2xpYi9LY29uZmlnLmRlYnVnXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvS2NvbmZpZy5kZWJ1Z1xuQEAgLTIyNDcsMTAgJiM0MzsyMjQ3LDExIEBAIGNvbmZpZyBLQ09WX0lOU1RSVU1FTlRfQUxMXG4gY29uZmlnIEtDT1ZfSVJRX0FSRUFfU0laRVxuIFx0aGV4IFwmIzM0O1NpemUgb2YgaW50ZXJydXB0IGNvdmVyYWdlIGNvbGxlY3Rpb24gYXJlYSBpbiB3b3Jkc1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBLQ09WXG4mIzQzO1x0cmFuZ2UgMHg4MCAweDEwMDAwMDBcbiBcdGRlZmF1bHQgMHg0MDAwMFxuIFx0aGVscFxuLVx0ICBLQ09WIHVzZXMgcHJlYWxsb2NhdGVkIHBlci1jcHUgYXJlYXMgdG8gY29sbGVjdCBjb3ZlcmFnZSBmcm9tXG4tXHQgIHNvZnQgaW50ZXJydXB0cy4gVGhpcyBzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhvc2UgYXJlYXMgaW4gdGhlXG4mIzQzO1x0ICBLQ09WIHVzZXMgcHJlYWxsb2NhdGVkIGFyZWFzIHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbSBzb2Z0XG4mIzQzO1x0ICBpbnRlcnJ1cHRzLiBUaGlzIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aG9zZSBhcmVhcyBpbiB0aGVcbiBcdCAgbnVtYmVyIG9mIHVuc2lnbmVkIGxvbmcgd29yZHMuXG4gXG4gY29uZmlnIEtDT1ZfU0VMRlRFU1RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAgICYjMzQ7a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wJiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfZ2V0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfcHV0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0YXJ0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGRhNzExYzM1ZDU2MzliMDdmNTZhMTFjNzg1NTAyZTFhNTY5ZTNkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDE1OjQ1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDM3M2JjYzA1OThkMTBiLi43YTUzYzE1Y2VjYjUyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTU0Myw2ICYjNDM7MTU0MywxNCBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgewogCiAJLyogQ29sbGVjdCBjb3ZlcmFnZSBmcm9tIHNvZnRpcnEgY29udGV4dDogKi8KIAl1bnNpZ25lZCBpbnQJCQlrY292X3NvZnRpcnE7CiYjNDM7CiYjNDM7CS8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBwcmVlbXB0aW5nIHJlbW90ZSBjb3ZlcmFnZSBjb2xsZWN0aW9uOiAqLwomIzQzOwl1bnNpZ25lZCBpbnQJCQlrY292X3NhdmVkX21vZGU7CiYjNDM7CXVuc2lnbmVkIGludAkJCWtjb3Zfc2F2ZWRfc2l6ZTsKJiM0MzsJdm9pZAkJCQkqa2Nvdl9zYXZlZF9hcmVhOwomIzQzOwlzdHJ1Y3Qga2NvdgkJCSprY292X3NhdmVkX2tjb3Y7CiYjNDM7CWludAkJCQlrY292X3NhdmVkX3NlcXVlbmNlOwomIzQzOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKZGlmZiAtLWdpdCBhL2tlcm5lbC9rY292LmMgYi9rZXJuZWwva2Nvdi5jCmluZGV4IDFkZjM3M2ZiNTYyYmM4Li5hNzUxNDMwM2VmZjM4YSAxMDA2NDQKLS0tIGEva2VybmVsL2tjb3YuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2Nvdi5jCkBAIC04NiwxNyAmIzQzOzg2LDEyIEBAIHN0cnVjdCBrY292X3JlbW90ZSB7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2Nvdl9yZW1vdGVfbG9jayk7CiBzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShrY292X3JlbW90ZV9tYXAsIDQpOwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXMgPSBMSVNUX0hFQURfSU5JVChrY292X3JlbW90ZV9hcmVhcyk7CiYjNDM7c3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXNbMl0gPSB7CiYjNDM7CUxJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzWzBdKSwgTElTVF9IRUFEX0lOSVQoa2Nvdl9yZW1vdGVfYXJlYXNbMV0pCiYjNDM7fTsKIAogc3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgewotCXZvaWQJCQkqaXJxX2FyZWE7CiAJbG9jYWxfbG9ja190CQlsb2NrOwotCi0JdW5zaWduZWQgaW50CQlzYXZlZF9tb2RlOwotCXVuc2lnbmVkIGludAkJc2F2ZWRfc2l6ZTsKLQl2b2lkCQkJKnNhdmVkX2FyZWE7Ci0Jc3RydWN0IGtjb3YJCSpzYXZlZF9rY292OwotCWludAkJCXNhdmVkX3NlcXVlbmNlOwogfTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrY292X3BlcmNwdV9kYXRhLCBrY292X3BlcmNwdV9kYXRhKSA9IHsKQEAgLTEzMiwxMiAmIzQzOzEyNywxMyBAQCBzdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlICprY292X3JlbW90ZV9hZGQoc3RydWN0IGtjb3YgKmtjb3YsIHU2NCBoYW5kbGUpCiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIHdpdGgga2Nvdl9yZW1vdGVfbG9jayBsb2NrZWQuICovCi1zdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEgKmtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHVuc2lnbmVkIGludCBzaXplKQomIzQzO3N0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXJxKQogewogCXN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZhbXA7a2Nvdl9yZW1vdGVfYXJlYXNbaXJxXTsKIAotCWxpc3RfZm9yX2VhY2gocG9zLCAmYW1wO2tjb3ZfcmVtb3RlX2FyZWFzKSB7CiYjNDM7CWxpc3RfZm9yX2VhY2gocG9zLCBsaXN0KSB7CiAJCWFyZWEgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEsIGxpc3QpOwogCQlpZiAoYXJlYS0mZ3Q7c2l6ZSA9PSBzaXplKSB7CiAJCQlsaXN0X2RlbCgmYW1wO2FyZWEtJmd0O2xpc3QpOwpAQCAtMTQ5LDExICYjNDM7MTQ1LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUpCiAKIC8qIE11c3QgYmUgY2FsbGVkIHdpdGgga2Nvdl9yZW1vdGVfbG9jayBsb2NrZWQuICovCiBzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9hcmVhX3B1dChzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYSwKLQkJCQkJdW5zaWduZWQgaW50IHNpemUpCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBpcnEpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDthcmVhLSZndDtsaXN0KTsKIAlhcmVhLSZndDtzaXplID0gc2l6ZTsKLQlsaXN0X2FkZCgmYW1wO2FyZWEtJmd0O2xpc3QsICZhbXA7a2Nvdl9yZW1vdGVfYXJlYXMpOwomIzQzOwlsaXN0X2FkZCgmYW1wO2FyZWEtJmd0O2xpc3QsICZhbXA7a2Nvdl9yZW1vdGVfYXJlYXNbaXJxXSk7CiAJLyoKIAkgKiBLTVNBTiBkb2VzbiYjMzk7dCBpbnN0cnVtZW50IHRoaXMgZmlsZSwgc28gaXQgbWF5IG5vdCBrbm93IGFyZWEtJmd0O2xpc3QKIAkgKiBpcyBpbml0aWFsaXplZC4gVW5wb2lzb24gaXQgZXhwbGljaXRseSB0byBhdm9pZCByZXBvcnRzIGluCkBAIC0zOTAsNiAmIzQzOzM4NiwxMiBAQCB2b2lkIGtjb3ZfdGFza19pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIAlrY292X3Rhc2tfcmVzZXQodCk7CiAJdC0mZ3Q7a2Nvdl9yZW1vdGUgPSBOVUxMOwogCXQtJmd0O2tjb3ZfaGFuZGxlID0gY3VycmVudC0mZ3Q7a2Nvdl9oYW5kbGU7CiYjNDM7CXQtJmd0O2tjb3Zfc29mdGlycSA9IDA7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfbW9kZSA9IDA7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfc2l6ZSA9IDA7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfYXJlYSA9IE5VTEw7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfa2NvdiA9IE5VTEw7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfc2VxdWVuY2UgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBrY292X3Jlc2V0KHN0cnVjdCBrY292ICprY292KQpAQCAtODM2LDE3ICYjNDM7ODM4LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrY292X21vZGVfZW5hYmxlZCh1bnNpZ25lZCBpbnQgbW9kZSkKIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KQogCV9fbXVzdF9ob2xkKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKQogewotCXN0cnVjdCBrY292X3BlcmNwdV9kYXRhICpkYXRhID0gdGhpc19jcHVfcHRyKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YSk7CiAJdW5zaWduZWQgaW50IG1vZGU7CiAKIAltb2RlID0gUkVBRF9PTkNFKHQtJmd0O2tjb3ZfbW9kZSk7CiAJYmFycmllcigpOwogCWlmIChrY292X21vZGVfZW5hYmxlZChtb2RlKSkgewotCQlkYXRhLSZndDtzYXZlZF9tb2RlID0gbW9kZTsKLQkJZGF0YS0mZ3Q7c2F2ZWRfc2l6ZSA9IHQtJmd0O2tjb3Zfc2l6ZTsKLQkJZGF0YS0mZ3Q7c2F2ZWRfYXJlYSA9IHQtJmd0O2tjb3ZfYXJlYTsKLQkJZGF0YS0mZ3Q7c2F2ZWRfc2VxdWVuY2UgPSB0LSZndDtrY292X3NlcXVlbmNlOwotCQlkYXRhLSZndDtzYXZlZF9rY292ID0gdC0mZ3Q7a2NvdjsKJiM0MzsJCXQtJmd0O2tjb3Zfc2F2ZWRfbW9kZSA9IG1vZGU7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX3NpemUgPSB0LSZndDtrY292X3NpemU7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX2FyZWEgPSB0LSZndDtrY292X2FyZWE7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX3NlcXVlbmNlID0gdC0mZ3Q7a2Nvdl9zZXF1ZW5jZTsKJiM0MzsJCXQtJmd0O2tjb3Zfc2F2ZWRfa2NvdiA9IHQtJmd0O2tjb3Y7CiAJCWtjb3Zfc3RvcCh0KTsKIAl9CiB9CkBAIC04NTQsMTcgJiM0Mzs4NTUsMTUgQEAgc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiBzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3Aoc3RydWN0IHRhc2tfc3RydWN0ICp0KQogCV9fbXVzdF9ob2xkKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKQogewotCXN0cnVjdCBrY292X3BlcmNwdV9kYXRhICpkYXRhID0gdGhpc19jcHVfcHRyKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YSk7Ci0KLQlpZiAoZGF0YS0mZ3Q7c2F2ZWRfa2NvdikgewotCQlrY292X3N0YXJ0KHQsIGRhdGEtJmd0O3NhdmVkX2tjb3YsIGRhdGEtJmd0O3NhdmVkX3NpemUsCi0JCQkJZGF0YS0mZ3Q7c2F2ZWRfYXJlYSwgZGF0YS0mZ3Q7c2F2ZWRfbW9kZSwKLQkJCQlkYXRhLSZndDtzYXZlZF9zZXF1ZW5jZSk7Ci0JCWRhdGEtJmd0O3NhdmVkX21vZGUgPSAwOwotCQlkYXRhLSZndDtzYXZlZF9zaXplID0gMDsKLQkJZGF0YS0mZ3Q7c2F2ZWRfYXJlYSA9IE5VTEw7Ci0JCWRhdGEtJmd0O3NhdmVkX3NlcXVlbmNlID0gMDsKLQkJZGF0YS0mZ3Q7c2F2ZWRfa2NvdiA9IE5VTEw7CiYjNDM7CWlmICh0LSZndDtrY292X3NhdmVkX2tjb3YpIHsKJiM0MzsJCWtjb3Zfc3RhcnQodCwgdC0mZ3Q7a2Nvdl9zYXZlZF9rY292LCB0LSZndDtrY292X3NhdmVkX3NpemUsCiYjNDM7CQkJICAgdC0mZ3Q7a2Nvdl9zYXZlZF9hcmVhLCB0LSZndDtrY292X3NhdmVkX21vZGUsCiYjNDM7CQkJICAgdC0mZ3Q7a2Nvdl9zYXZlZF9zZXF1ZW5jZSk7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX21vZGUgPSAwOwomIzQzOwkJdC0mZ3Q7a2Nvdl9zYXZlZF9zaXplID0gMDsKJiM0MzsJCXQtJmd0O2tjb3Zfc2F2ZWRfYXJlYSA9IE5VTEw7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX3NlcXVlbmNlID0gMDsKJiM0MzsJCXQtJmd0O2tjb3Zfc2F2ZWRfa2NvdiA9IE5VTEw7CiAJfQogfQogCkBAIC05MjcsMTcgJiM0Mzs5MjYsMTcgQEAgdm9pZCBrY292X3JlbW90ZV9zdGFydCh1NjQgaGFuZGxlKQogCXNlcXVlbmNlID0ga2Nvdi0mZ3Q7c2VxdWVuY2U7CiAJaWYgKGluX3Rhc2soKSkgewogCQlzaXplID0ga2Nvdi0mZ3Q7cmVtb3RlX3NpemU7Ci0JCWFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplKTsKJiM0MzsJCWFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplLCBmYWxzZSk7CiAJfSBlbHNlIHsKIAkJc2l6ZSA9IENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkU7Ci0JCWFyZWEgPSB0aGlzX2NwdV9wdHIoJmFtcDtrY292X3BlcmNwdV9kYXRhKS0mZ3Q7aXJxX2FyZWE7CiYjNDM7CQlhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSwgdHJ1ZSk7CiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7a2Nvdl9yZW1vdGVfbG9jayk7CiAKLQkvKiBDYW4gb25seSBoYXBwZW4gd2hlbiBpbl90YXNrKCkuICovCiYjNDM7CS8qIEFsbG9jYXRlIG5ldyBidWZmZXIgaWYgd2UgY2FuIHNsZWVwLiAqLwogCWlmICghYXJlYSkgewogCQlsb2NhbF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2tjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpOwotCQlhcmVhID0gdm1hbGxvYyhzaXplICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKJiM0MzsJCWFyZWEgPSBpbl90YXNrKCkgPyB2bWFsbG9jKHNpemUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpIDogTlVMTDsKIAkJaWYgKCFhcmVhKSB7CiAJCQlrY292X3B1dChrY292KTsKIAkJCXJldHVybjsKQEAgLTEwNzksMTEgJiM0MzsxMDc4LDkgQEAgdm9pZCBrY292X3JlbW90ZV9zdG9wKHZvaWQpCiAJCWtjb3ZfbW92ZV9hcmVhKGtjb3YtJmd0O21vZGUsIGtjb3YtJmd0O2FyZWEsIGtjb3YtJmd0O3NpemUsIGFyZWEpOwogCXNwaW5fdW5sb2NrKCZhbXA7a2Nvdi0mZ3Q7bG9jayk7CiAKLQlpZiAoaW5fdGFzaygpKSB7Ci0JCXNwaW5fbG9jaygmYW1wO2tjb3ZfcmVtb3RlX2xvY2spOwotCQlrY292X3JlbW90ZV9hcmVhX3B1dChhcmVhLCBzaXplKTsKLQkJc3Bpbl91bmxvY2soJmFtcDtrY292X3JlbW90ZV9sb2NrKTsKLQl9CiYjNDM7CXNwaW5fbG9jaygmYW1wO2tjb3ZfcmVtb3RlX2xvY2spOwomIzQzOwlrY292X3JlbW90ZV9hcmVhX3B1dChhcmVhLCBzaXplLCAhaW5fdGFzaygpKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtrY292X3JlbW90ZV9sb2NrKTsKIAogCWxvY2FsX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YS5sb2NrLCBmbGFncyk7CiAKQEAgLTExMjksMTQgJiM0MzsxMTI2LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZWxmdGVzdCh2b2lkKQogCiBzdGF0aWMgaW50IF9faW5pdCBrY292X2luaXQodm9pZCkKIHsKLQlpbnQgY3B1OwomIzQzOwlpbnQgY3B1ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlQKJiM0MzsJLyogQWxsb2NhdGUgc29tZSBleHRyYSBidWZmZXJzIGluIG9yZGVyIHRvIHByZXBhcmUgZm9yIHNvZnRpcnEgcHJlZW1wdGlvbi4gKi8KJiM0MzsJY3B1ID0gY3B1ICZndDs9IDQgPyBjcHUgKiAyIDogY3B1ICYjNDM7IDQ7CiYjNDM7I2VuZGlmCiYjNDM7CXdoaWxlIChjcHUtLSkgewomIzQzOwkJdm9pZCAqYXJlYSA9IHZtYWxsb2MoQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQl2b2lkICphcmVhID0gdm1hbGxvY19ub2RlKENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUgKgotCQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSwgY3B1X3RvX25vZGUoY3B1KSk7CiAJCWlmICghYXJlYSkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlwZXJfY3B1X3B0cigmYW1wO2tjb3ZfcGVyY3B1X2RhdGEsIGNwdSktJmd0O2lycV9hcmVhID0gYXJlYTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7a2Nvdl9yZW1vdGVfbG9jaywgZmxhZ3MpOwomIzQzOwkJa2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSwgdHJ1ZSk7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7a2Nvdl9yZW1vdGVfbG9jaywgZmxhZ3MpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDEyNDRkY2FjMjI5NGFkLi4xMjc4NjM3OWJmMWQ3MiAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKJiM0MzsmIzQzOyYjNDM7IGIvbGliL0tjb25maWcuZGVidWcKQEAgLTIyNDcsMTAgJiM0MzsyMjQ3LDExIEBAIGNvbmZpZyBLQ09WX0lOU1RSVU1FTlRfQUxMCiBjb25maWcgS0NPVl9JUlFfQVJFQV9TSVpFCiAJaGV4ICYjMzQ7U2l6ZSBvZiBpbnRlcnJ1cHQgY292ZXJhZ2UgY29sbGVjdGlvbiBhcmVhIGluIHdvcmRzJiMzNDsKIAlkZXBlbmRzIG9uIEtDT1YKJiM0MzsJcmFuZ2UgMHg4MCAweDEwMDAwMDAKIAlkZWZhdWx0IDB4NDAwMDAKIAloZWxwCi0JICBLQ09WIHVzZXMgcHJlYWxsb2NhdGVkIHBlci1jcHUgYXJlYXMgdG8gY29sbGVjdCBjb3ZlcmFnZSBmcm9tCi0JICBzb2Z0IGludGVycnVwdHMuIFRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRob3NlIGFyZWFzIGluIHRoZQomIzQzOwkgIEtDT1YgdXNlcyBwcmVhbGxvY2F0ZWQgYXJlYXMgdG8gY29sbGVjdCBjb3ZlcmFnZSBmcm9tIHNvZnQKJiM0MzsJICBpbnRlcnJ1cHRzLiBUaGlzIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aG9zZSBhcmVhcyBpbiB0aGUKIAkgIG51bWJlciBvZiB1bnNpZ25lZCBsb25nIHdvcmRzLgogCiBjb25maWcgS0NPVl9TRUxGVEVTVAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjgyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktDT1YgU29mdGlycSBDb3ZlcmFnZSBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBLZXJuZWwgQ292ZXJhZ2UgKEtDT1YpIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzb2Z0aXJxIGNvdmVyYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgS0NPViBpcyBhIGNvcmUgY29tcG9uZW50IHRoYXQgc3l6a2FsbGVyLCBvdXIgcHJpbWFyeSBmdXp6aW5nIHRvb2wsIHJlbGllcyBvbiBoZWF2aWx5LiBJdCYjMzk7cyB1c2VkIGZvciBjb3ZlcmFnZSBjb2xsZWN0aW9uLCBzbyBhbnkgbW9kaWZpY2F0aW9ucyB0byBpdCBhcmUgaW1tZWRpYXRlbHkgcmVsZXZhbnQuCgpUaGUgcGF0Y2gmIzM5O3Mga2V5IGNoYW5nZSBpcyBob3cgc29mdGlycSBjb3ZlcmFnZSBpcyBnYXRoZXJlZC4gSW5zdGVhZCBvZiB1c2luZyBwZXItQ1BVIGFyZWFzIGZvciBJUlEgY292ZXJhZ2UsIGl0IGludHJvZHVjZXMgYSBnbG9iYWwgbGlzdCwgYGtjb3ZfcmVtb3RlX2FyZWFzWzJdYCwgc3BsaXR0aW5nIGl0IGJldHdlZW4gdGFzayBhbmQgaXJxLiBJdCBhbHNvIHJlbG9jYXRlcyB0aGUgS0NPViBzdGF0ZSBkYXRhLCBwcmV2aW91c2x5IHN0b3JlZCBpbiBga2Nvdl9wZXJjcHVfZGF0YWAsIGludG8gYHRhc2tfc3RydWN0YCwgcHJlc3VtYWJseSB0byBzdXBwb3J0IHNvZnRpcnEgcHJlZW1wdGlvbiwgc29tZXRoaW5nIHRoYXQmIzM5O3MgcGFydGljdWxhcmx5IHJlbGV2YW50IHdpdGggUFJFRU1QVF9SVC4gVGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zICYjMzQ7c3l6LWNsdXN0ZXImIzM0Oywgc28gdGhpcyBpcyBsaWtlbHkgc29tZXRoaW5nIHRoYXQgaGFzIGJlZW4gcmV2aWV3ZWQgYWxyZWFkeS4KCk15IGZpcnN0IGltcHVsc2UgaXMgdG8gY2hlY2sgaWYgdGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIEkgcXVpY2tseSBjb25maXJtOyBLQ09WIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBjcnVjaWFsIHRvIHRoZSBzeXprYWxsZXIgd29ya2Zsb3cuIEEgc2xpZ2h0IGhlc2l0YXRpb24gY29tZXMgdXAgYXMgSSBjb25zaWRlciB0aGF0IHdlJiMzOTtyZSBlc3NlbnRpYWxseSBmdXp6aW5nIHRoZSBmdXp6ZXImIzM5O3Mgb3duIGNvdmVyYWdlIG1lY2hhbmlzbS4gQnV0IGl0JiMzOTtzIGEgY29yZSBrZXJuZWwgZmVhdHVyZSwgYW5kIG1vZGlmeWluZyB0aGUgY292ZXJhZ2UgY29sbGVjdGlvbiB3YXJyYW50cyBjYXJlZnVsIGF0dGVudGlvbi4gV2UgbmVlZCB0byBhc3Nlc3MgaWYgdGhpcyBtb2RpZmljYXRpb24gaXMgYWZmZWN0aW5nIHRoZSBhY2N1cmFjeSBvciBjb2xsZWN0aW9uIG1ldGhvZG9sb2d5IG9mIHRoZSBLQ09WIGRhdGEuCgpUaGFua2Z1bGx5LCBzeXprYWxsZXIgZG9lcyBoYXZlIGRlc2NyaXB0aW9ucyBmb3IgS0NPViBpb2N0bHMsIHNvIHdlICpjYW4qIGZ1enogaXQgZGlyZWN0bHkuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgZnVuY3Rpb25zIGxpa2UgYGtjb3ZfdGFza19pbml0YCwgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3N0b3BgLCBhbmQgYGtjb3ZfaW5pdGAuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgc2hpZnQgaXMgbW92aW5nIGBzYXZlZF9tb2RlYCwgYHNhdmVkX3NpemVgLCBgc2F2ZWRfYXJlYWAsIGBzYXZlZF9rY292YCwgYW5kIGBzYXZlZF9zZXF1ZW5jZWAgZnJvbSBga2Nvdl9wZXJjcHVfZGF0YWAgdG8gYHRhc2tfc3RydWN0YC4gQWxzbywgY2hhbmdlcyB0byBga2Nvdl9yZW1vdGVfYXJlYV9nZXRgIGFuZCBga2Nvdl9yZW1vdGVfYXJlYV9wdXRgIHdoZXJlIGEgYGJvb2wgaXJxYCBhcmd1bWVudCBpcyBpbnRyb2R1Y2VkLCBhbmQgYGtjb3ZfaW5pdGAgaXMgY2hhbmdlZCB0byBwcmVhbGxvY2F0ZSBidWZmZXJzLgoKQ3J1Y2lhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX0tDT1ZgIGlzIG9idmlvdXNseSBhIG11c3QtaGF2ZS4gSW50cmlndWluZ2x5LCBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIG1lbnRpb25lZCBpbiBga2Nvdl9pbml0YDogSXQgc2VlbXMgbGlrZSB0aGUgc29mdGlycSBwcmVlbXB0aW9uIGNvZGUgd2lsbCBhbGxvY2F0ZSBtb3JlIGJ1ZmZlcnMgaWYgYFBSRUVNUFRfUlRgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgZW5hYmxpbmcgYFBSRUVNUFRfUlRgIGNvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIHRob3JvdWdobHkgdGVzdCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLgoKSG93ZXZlciwgYFBSRUVNUFRfUlRgIGlzIGEgYmlnIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCBhZmZlY3RpbmcgdGhlIGVudGlyZSBrZXJuZWwgcHJlZW1wdGlvbiBtb2RlbC4gU3l6a2FsbGVyIGdlbmVyYWxseSBhdm9pZHMgZW5hYmxpbmcgaXQgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiBTbywgbmV4dCBzdGVwIGlzIHRvIGVuc3VyZSB0aGF0IGBQUkVFTVBUX1JUYCBpcyBhY3R1YWxseSBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBSRUVNUFRfUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdD05MD1lbmRjaG9pY2Vcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtOTEtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjkyOmNvbmZpZyBQUkVFTVBUX1JUXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkzLVx0Ym9vbCBcJiMzNDtGdWxseSBQcmVlbXB0aWJsZSBLZXJuZWwgKFJlYWwtVGltZSlcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTEwOC1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTA5OmNvbmZpZyBQUkVFTVBUX1JUX05FRURTX0JIX0xPQ0tcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTEwLVx0Ym9vbCBcJiMzNDtFbmZvcmNlIHNvZnRpcnEgc3luY2hyb25pc2F0aW9uIG9uIFBSRUVNUFRfUlRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLQ09WIFJlbW90ZSBTb2Z0SVJRIEZ1bmN0aW9ucyB3aXRoIFBSRUVNUFRfUlQqKgoKT2theSwgc28gYFBSRUVNUFRfUlRgIGlzIGluZGVlZCBhbiBvcHRpb24gaGVyZSwgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHRoZSBzcGVjaWZpY3Mgb2YgdGhlc2UgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGFuZCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgY2FsbGVkIGZyb20gdGhlIHNvZnRpcnEgY29udGV4dCwgd2hpY2ggcmFpc2VzIGEgZmxhZy4gSWYgd2Ugd2FudCB0byB0ZXN0IHRoaXMsIGVuYWJsaW5nIGBQUkVFTVBUX1JUYCBpcyBub24tbmVnb3RpYWJsZS4gVGhlIHBhdGNoIHRleHQgaXRzZWxmIGRyaXZlcyB0aGF0IHBvaW50IGhvbWUg4oCTIGl0IG1lbnRpb25zIHRoZSBuZWVkIGZvciAmIzM0O3RlbXBvcmFyeSBzdG9yYWdlIGZvciBwcmVlbXB0aW5nIHJlbW90ZSBjb3ZlcmFnZSBjb2xsZWN0aW9uJiMzNDsgYW5kICYjMzQ7ZXh0cmEgYnVmZmVycy4uLiBmb3Igc29mdGlycSBwcmVlbXB0aW9uLCYjMzQ7IHNvIGBQUkVFTVBUX1JUYCBpdCBpcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBnZXQgYSBicm9hZGVyIHBpY3R1cmUuIFdlIGhhdmUgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYWxvbmcgd2l0aCB0aGUgZmFtaWxpYXIgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3N0b3BgLCBga2Nvdl9yZW1vdGVfYXJlYV9nZXRgLCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YC4KClRoZSBtb3JlIHByZXNzaW5nIHF1ZXN0aW9uIG5vdyBpczogYXJlIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBhbmQgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcGAgaW4gYSBob3QgcGF0aD8gU29mdGlycSBwcm9jZXNzaW5nICppcyogYSBob3QgcGF0aCwgZ2VuZXJhbGx5IHNwZWFraW5nLiBIb3dldmVyLCB0aGVzZSBLQ09WIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgS0NPViBpcyBib3RoIGVuYWJsZWQgKmFuZCogYWN0aXZlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyB0cmFjZSB0aGVpciBjYWxsIHNpdGVzIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2tjb3YuYz04MzM9c3RhdGljIGlubGluZSBib29sIGtjb3ZfbW9kZV9lbmFibGVkKHVuc2lnbmVkIGludCBtb2RlKVxuLS1cbmtlcm5lbC9rY292LmMtODM3LVxua2VybmVsL2tjb3YuYzo4Mzg6c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwva2Nvdi5jLTgzOS1cdF9fbXVzdF9ob2xkKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaylcbi0tXG5rZXJuZWwva2Nvdi5jPTg3MD12b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG4tLVxua2VybmVsL2tjb3YuYy05NTAtXHRpZiAoaW5fc2VydmluZ19zb2Z0aXJxKCkpIHtcbmtlcm5lbC9rY292LmM6OTUxOlx0XHRrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHQpO1xua2VybmVsL2tjb3YuYy05NTItXHRcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDExCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLQ09WIFJlbW90ZSBTdGFydCBCZWhhdmlvcioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoaXMgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGtjb3ZfcmVtb3RlX3N0YXJ0YC4gQW5kIHRoYXQgbWFrZXMgc2Vuc2UsIGFzIEkgcmVtZW1iZXIgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBpcyB0cmlnZ2VyZWQgd2hlbiBhIHJlbW90ZSBLQ09WIHNlY3Rpb24gZ2V0cyBnb2luZyDigJMgdGhpbmsgdmhvc3QsIG1hYzgwMjExX2h3c2ltLCB0aGF0IGtpbmQgb2YgdGhpbmcuIEJ1dCB3YWl04oCmIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCB0cmlnZ2VyIG9uICpldmVyeSogc29mdGlycSwgaXQmIzM5O3MgdGllZCBzcGVjaWZpY2FsbHkgdG8gY2FsbHMgdG8gYGtjb3ZfcmVtb3RlX3N0YXJ0YC4gVG8gY2xhcmlmeSB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hvJiMzOTtzIGNhbGxpbmcgYGtjb3ZfcmVtb3RlX3N0YXJ0YCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hlbiBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgaXMgYWN0dWFsbHkgZW5nYWdlZC4gVGhhdCBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBzb2Z0aXJxIGludGVyYWN0aW9uIEkmIzM5O20gc2VlaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tjb3ZfcmVtb3RlX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0PTIyNz1Vc2luZyBLQ09WIHRvIGNvbGxlY3QgcmVtb3RlIGNvdmVyYWdlIHJlcXVpcmVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTIyOS0xLiBNb2RpZnlpbmcga2VybmVsIGNvZGUgdG8gYW5ub3RhdGUgdGhlIGNvZGUgc2VjdGlvbiBmcm9tIHdoZXJlIGNvdmVyYWdlXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdDoyMzA6ICAgc2hvdWxkIGJlIGNvbGxlY3RlZCB3aXRoIGBga2Nvdl9yZW1vdGVfc3RhcnRgYCBhbmQgYGBrY292X3JlbW90ZV9zdG9wYGAuXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdC0yMzEtXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3QtMjM0LVxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjM1OkJvdGggYGBrY292X3JlbW90ZV9zdGFydGBgIGFuZCBgYGtjb3ZfcmVtb3RlX3N0b3BgYCBhbm5vdGF0aW9ucyBhbmQgdGhlXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdC0yMzYtYGBLQ09WX1JFTU9URV9FTkFCTEVgYCBpb2N0bCBhY2NlcHQgaGFuZGxlcyB0aGF0IGlkZW50aWZ5IHBhcnRpY3VsYXIgY292ZXJhZ2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdD0yNTU9Rm9yICMxIGFuZCAjMywgYSB1bmlxdWUgZ2xvYmFsIGhhbmRsZSBtdXN0IGJlIGNob3NlbiBhbmQgcGFzc2VkIHRvIHRoZVxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjU2OmNvcnJlc3BvbmRpbmcgYGBrY292X3JlbW90ZV9zdGFydGBgIGNhbGwuIFRoZW4gYSB1c2Vyc3BhY2UgcHJvY2VzcyBtdXN0IHBhc3NcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTI1Ny10aGlzIGhhbmRsZSB0byBgYEtDT1ZfUkVNT1RFX0VOQUJMRWBgIGluIHRoZSBgYGhhbmRsZXNgYCBhcnJheSBmaWVsZCBvZiB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdD0yNjY9bW9kaWZpY2F0aW9ucy4gVGhvc2UgdGFza3Mgc2hvdWxkIGluIHR1cm4gdXNlIHRoZSBwYXNzZWQgaGFuZGxlIGluIHRoZWlyXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdDoyNjc6YGBrY292X3JlbW90ZV9zdGFydGBgIGFuZCBgYGtjb3ZfcmVtb3RlX3N0b3BgYCBhbm5vdGF0aW9ucy5cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTI2OC1JbiB0aGUga2VybmVsLCBjb21tb24gaGFuZGxlcyBhcmUgd3JhcHBlZCBpbiBhIGBga2Nvdl9jb21tb25faGFuZGxlX2lkYGAsIHdoaWNoXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0PTI4PUtDT1Yg5L6d6LWW57yW6K+R5Zmo5o+S5qGp77yM6KaB5rGCIEdDQyA2LjEuMCDlj4rmm7Tpq5jniYjmnKzmiJbogIXlhoXmoLjmlK/mjIHnmoTku7vmhI/niYjmnKznmoQgQ2xhbmfjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3QtMjI1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0OjIyNjoxLiDkv67mlLnlhoXmoLjmupDnoIHlubbkvb/nlKggYGBrY292X3JlbW90ZV9zdGFydGBgIOWSjCBgYGtjb3ZfcmVtb3RlX3N0b3BgYCDmnaXmoIfms6jopoHmlLbpm4ZcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yMjctICAg6KaG55uW546H55qE5Luj56CB54mH5q6144CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTIzMC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyMzE6YGBrY292X3JlbW90ZV9zdGFydGBgIOWSjCBgYGtjb3ZfcmVtb3RlX3N0b3BgYCDnmoTmoIfms6jku6Xlj4ogYGBLQ09WX1JFTU9URV9FTkFCTEVgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTIzMi1pb2N0bCDpg73mjqXlj5flj6/ku6Xor4bliKvnibnlrpropobnm5bnjofmlLbpm4bniYfmrrXnmoTlj6Xmn4TjgILlj6Xmn4TnmoTkvb/nlKjmlrnlvI/lj5blhrPkuo7ljLnphY3ku6PnoIHniYfmrrXmiadcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3Q9MjM1PUtDT1Yg5pSv5oyB5Zyo5aaC5LiL5LiK5LiL5paH5Lit5pS26ZuG6L+c56iL6KaG55uW546H77yaXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTI0NS3lr7nkuo4gIzEg5ZKMICMz77yM5b+F6aG76YCJ5oup5LiA5Liq54us54m555qE5YWo5bGA5Y+l5p+E5bm25bCG5YW25Lyg6YCS57uZ5a+55bqU55qEXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjQ2OmBga2Nvdl9yZW1vdGVfc3RhcnRgYCDosIPnlKjjgILkuIDkuKrnlKjmiLfnqbrpl7Tov5vnqIvlv4XpobvlsIbor6Xlj6Xmn4TlrZjlgqjlnKhcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yNDctYGBrY292X3JlbW90ZV9hcmdgYCDnu5PmnoTkvZPnmoQgYGBoYW5kbGVgYCDmlbDnu4TlrZfmrrXkuK3lubblsIblhbbkvKDpgJLnu5lcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3QtMjUzLWBga2Nvdl9oYW5kbGVgYCDlrZfmrrXkuK3lubbkuJTpnIDopoHpgJrov4foh6rlrprkuYnlhoXmoLjku6PnoIHnmoTkv67mlLnmnaXkvKDpgJLnu5nmlrDliJvlu7rnmoTmnKzlnLDku7vliqFcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyNTQ644CC6L+Z5Lqb5Lu75Yqh6ZyA6KaB5ZyoIGBga2Nvdl9yZW1vdGVfc3RhcnRgYCDlkowgYGBrY292X3JlbW90ZV9zdG9wYGAg5qCH5rOo5Lit5L6d5qyh5L2/55So5Lyg6YCS6L+H5p2l55qEXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3QtMjU1LeWPpeafhOOAglxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmM9MTYzMD1zdGF0aWMgdm9pZCBfX3VzYl9oY2RfZ2l2ZWJhY2tfdXJiKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2hjZC5jLTE2NTUtXHQgKi9cbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmM6MTY1NjpcdGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYl9zb2Z0aXJxKCh1NjQpdXJiLVx1MDAzZWRldi1cdTAwM2VidXMtXHUwMDNlYnVzbnVtKTtcbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmMtMTY1Ny1cdHVyYi1cdTAwM2Vjb21wbGV0ZSh1cmIpO1xuLS1cbmRyaXZlcnMvdXNiL2NvcmUvaHViLmM9NTg3ND1zdGF0aWMgdm9pZCBodWJfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvaHViLmMtNTg4OC1cbmRyaXZlcnMvdXNiL2NvcmUvaHViLmM6NTg4OTpcdGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYigodTY0KWhkZXYtXHUwMDNlYnVzLVx1MDAzZWJ1c251bSk7XG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jLTU4OTAtXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jPTI1Nj1pbnQgdmhjaV9yeF9sb29wKHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTI2My1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzoyNjQ6XHRcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbih1ZC1cdTAwM2VrY292X2hhbmRsZSk7XG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtMjY1LVx0XHR2aGNpX3J4X3BkdSh1ZCk7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTQwMD1zdGF0aWMgaW50IHZob3N0X3J1bl93b3JrX2t0aHJlYWRfbGlzdCh2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy00MjYtXHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjQyNzpcdFx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24od29ya2VyLVx1MDAzZWtjb3ZfaGFuZGxlKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy00MjgtXHRcdFx0d29yay1cdTAwM2Vmbih3b3JrKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9NDM4PXN0YXRpYyBib29sIHZob3N0X3J1bl93b3JrX2xpc3Qodm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNDUyLVx0XHRcdGNsZWFyX2JpdChWSE9TVF9XT1JLX1FVRVVFRCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NDUzOlx0XHRcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbih3b3JrZXItXHUwMDNla2Nvdl9oYW5kbGUpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTQ1NC1cdFx0XHR3b3JrLVx1MDAzZWZuKHdvcmspO1xuLS1cbmluY2x1ZGUvbGludXgva2Nvdi5oPTM3PWRvIHtcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgva2Nvdi5oLTQxLS8qIFNlZSBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdCBmb3IgdXNhZ2UgZGV0YWlscy4gKi9cbmluY2x1ZGUvbGludXgva2Nvdi5oOjQyOnZvaWQga2Nvdl9yZW1vdGVfc3RhcnQodTY0IGhhbmRsZSk7XG5pbmNsdWRlL2xpbnV4L2tjb3YuaC00My12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2tjb3YuaD00ND1zdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfY29tbW9uX2hhbmRsZSh2b2lkKTtcbmluY2x1ZGUvbGludXgva2Nvdi5oLTQ1LVxuaW5jbHVkZS9saW51eC9rY292Lmg6NDY6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGlkKVxuaW5jbHVkZS9saW51eC9rY292LmgtNDcte1xuaW5jbHVkZS9saW51eC9rY292Lmg6NDg6XHRrY292X3JlbW90ZV9zdGFydChrY292X3JlbW90ZV9oYW5kbGUoS0NPVl9TVUJTWVNURU1fQ09NTU9OLCBpZC52YWwpKTtcbmluY2x1ZGUvbGludXgva2Nvdi5oLTQ5LX1cbmluY2x1ZGUvbGludXgva2Nvdi5oLTUwLVxuaW5jbHVkZS9saW51eC9rY292Lmg6NTE6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYih1NjQgaWQpXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC01Mi17XG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo1MzpcdGtjb3ZfcmVtb3RlX3N0YXJ0KGtjb3ZfcmVtb3RlX2hhbmRsZShLQ09WX1NVQlNZU1RFTV9VU0IsIGlkKSk7XG5pbmNsdWRlL2xpbnV4L2tjb3YuaC01NC19XG4tLVxuaW5jbHVkZS9saW51eC9rY292LmgtNjItXG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo2MzpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnRfdXNiX3NvZnRpcnEodTY0IGlkKVxuaW5jbHVkZS9saW51eC9rY292LmgtNjQte1xuaW5jbHVkZS9saW51eC9rY292LmgtNjUtXHRpZiAoaW5fc2VydmluZ19zb2Z0aXJxKCkgXHUwMDI2XHUwMDI2ICFpbl9oYXJkaXJxKCkpXG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo2NjpcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfdXNiKGlkKTtcbmluY2x1ZGUvbGludXgva2Nvdi5oLTY3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2tjb3YuaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9maW5pc2hfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkge31cbmluY2x1ZGUvbGludXgva2Nvdi5oOjk4OnN0YXRpYyBpbmxpbmUgdm9pZCBrY292X3JlbW90ZV9zdGFydCh1NjQgaGFuZGxlKSB7fVxuaW5jbHVkZS9saW51eC9rY292LmgtOTktc3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZCkge31cbmluY2x1ZGUvbGludXgva2Nvdi5oPTEwMD1zdGF0aWMgaW5saW5lIHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQga2Nvdl9jb21tb25faGFuZGxlKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9rY292LmgtMTAzLX1cbmluY2x1ZGUvbGludXgva2Nvdi5oOjEwNDpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQgaWQpIHt9XG5pbmNsdWRlL2xpbnV4L2tjb3YuaDoxMDU6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYih1NjQgaWQpIHt9XG5pbmNsdWRlL2xpbnV4L2tjb3YuaDoxMDY6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYl9zb2Z0aXJxKHU2NCBpZCkge31cbmluY2x1ZGUvbGludXgva2Nvdi5oLTEwNy1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RvcF9zb2Z0aXJxKHZvaWQpIHt9XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2tjb3YuaC04LSAqIEFyZ3VtZW50IGZvciBLQ09WX1JFTU9URV9FTkFCTEUgaW9jdGwsIHNlZSBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdFxuaW5jbHVkZS91YXBpL2xpbnV4L2tjb3YuaDo5OiAqIGFuZCB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy5cbmluY2x1ZGUvdWFwaS9saW51eC9rY292LmgtMTAtICovXG4tLVxua2VybmVsL2tjb3YuYz00MDc9c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfcmVzZXQoc3RydWN0IGtjb3YgKmtjb3YpXG4tLVxua2VybmVsL2tjb3YuYy00MjEtXHR9XG5rZXJuZWwva2Nvdi5jOjQyMjpcdC8qIERvIHJlc2V0IGJlZm9yZSB1bmxvY2sgdG8gcHJldmVudCByYWNlcyB3aXRoIGtjb3ZfcmVtb3RlX3N0YXJ0KCkuICovXG5rZXJuZWwva2Nvdi5jLTQyMy1cdGtjb3ZfcmVzZXQoa2Nvdik7XG4tLVxua2VybmVsL2tjb3YuYz00NTc9dm9pZCBrY292X3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4tLVxua2VybmVsL2tjb3YuYy00NjYtXHRcdC8qXG5rZXJuZWwva2Nvdi5jOjQ2NzpcdFx0ICogVGhpcyBjb3VsZCBiZSBhIHJlbW90ZSB0YXNrIGJldHdlZW4ga2Nvdl9yZW1vdGVfc3RhcnQoKSBhbmRcbmtlcm5lbC9rY292LmMtNDY4LVx0XHQgKiBrY292X3JlbW90ZV9zdG9wKCkuXG4tLVxua2VybmVsL2tjb3YuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga2Nvdl9mb3BzID0ge1xuLS1cbmtlcm5lbC9rY292LmMtNzkwLS8qXG5rZXJuZWwva2Nvdi5jOjc5MTogKiBrY292X3JlbW90ZV9zdGFydCgpIGFuZCBrY292X3JlbW90ZV9zdG9wKCkgY2FuIGJlIHVzZWQgdG8gYW5ub3RhdGUgYSBzZWN0aW9uXG5rZXJuZWwva2Nvdi5jLTc5Mi0gKiBvZiBjb2RlIGluIGEga2VybmVsIGJhY2tncm91bmQgdGhyZWFkIG9yIGluIGEgc29mdGlycSB0byBhbGxvdyBrY292IHRvIGJlXG4tLVxua2VybmVsL2tjb3YuYy03OTQtICpcbmtlcm5lbC9rY292LmM6Nzk1OiAqIFRoZSBoYW5kbGUgYXJndW1lbnQgb2Yga2Nvdl9yZW1vdGVfc3RhcnQoKSBpZGVudGlmaWVzIGEgY29kZSBzZWN0aW9uIHRoYXQgaXNcbmtlcm5lbC9rY292LmMtNzk2LSAqIHVzZWQgZm9yIGNvdmVyYWdlIGNvbGxlY3Rpb24uIEEgdXNlcnNwYWNlIHByb2Nlc3MgcGFzc2VzIHRoaXMgaGFuZGxlIHRvXG4tLVxua2VybmVsL2tjb3YuYy04MTgtICogYW5kIHBhc3NlZCB0byB0aGUgc3Bhd25lZCB0aHJlYWRzIHZpYSBjdXN0b20gYW5ub3RhdGlvbnMuIFRob3NlIGtlcm5lbFxua2VybmVsL2tjb3YuYzo4MTk6ICogdGhyZWFkcyBtdXN0IGluIHR1cm4gYmUgYW5ub3RhdGVkIHdpdGgga2Nvdl9yZW1vdGVfc3RhcnQoY29tbW9uX2hhbmRsZSkgYW5kXG5rZXJuZWwva2Nvdi5jLTgyMC0gKiBrY292X3JlbW90ZV9zdG9wKCkuIEFsbCBvZiB0aGUgdGhyZWFkcyB0aGF0IGFyZSBzcGF3bmVkIGJ5IHRoZSBzYW1lIHByb2Nlc3Ncbi0tXG5rZXJuZWwva2Nvdi5jLTgyNC0gKlxua2VybmVsL2tjb3YuYzo4MjU6ICogSW50ZXJuYWxseSwga2Nvdl9yZW1vdGVfc3RhcnQoKSBsb29rcyB1cCB0aGUga2NvdiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxua2VybmVsL2tjb3YuYy04MjYtICogcHJvdmlkZWQgaGFuZGxlLCBhbGxvY2F0ZXMgYW4gYXJlYSBmb3IgY292ZXJhZ2UgY29sbGVjdGlvbiwgYW5kIHNhdmVzIHRoZVxuLS1cbmtlcm5lbC9rY292LmM9ODU1PXN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4tLVxua2VybmVsL2tjb3YuYy04NjktXG5rZXJuZWwva2Nvdi5jOjg3MDp2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG5rZXJuZWwva2Nvdi5jLTg3MS17XG4tLVxua2VybmVsL2tjb3YuYy04ODgtXHQvKlxua2VybmVsL2tjb3YuYzo4ODk6XHQgKiBDaGVjayB0aGF0IGtjb3ZfcmVtb3RlX3N0YXJ0KCkgaXMgbm90IGNhbGxlZCB0d2ljZSBpbiBiYWNrZ3JvdW5kXG5rZXJuZWwva2Nvdi5jLTg5MC1cdCAqIHRocmVhZHMgbm9yIGNhbGxlZCBieSB1c2VyIHRhc2tzICh3aXRoIGVuYWJsZWQga2NvdikuXG4tLVxua2VybmVsL2tjb3YuYy04OTctXHQvKlxua2VybmVsL2tjb3YuYzo4OTg6XHQgKiBDaGVjayB0aGF0IGtjb3ZfcmVtb3RlX3N0YXJ0KCkgaXMgbm90IGNhbGxlZCB0d2ljZSBpbiBzb2Z0aXJxcy5cbmtlcm5lbC9rY292LmM6ODk5Olx0ICogTm90ZSwgdGhhdCBrY292X3JlbW90ZV9zdGFydCgpIGNhbiBiZSBjYWxsZWQgZnJvbSBhIHNvZnRpcnEgdGhhdFxua2VybmVsL2tjb3YuYy05MDAtXHQgKiBoYXBwZW5lZCB3aGlsZSBjb2xsZWN0aW5nIGNvdmVyYWdlIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVhZC5cbi0tXG5rZXJuZWwva2Nvdi5jLTk1OC19XG5rZXJuZWwva2Nvdi5jOjk1OTpFWFBPUlRfU1lNQk9MKGtjb3ZfcmVtb3RlX3N0YXJ0KTtcbmtlcm5lbC9rY292LmMtOTYwLVxua2VybmVsL2tjb3YuYz05NjE9c3RhdGljIHZvaWQga2Nvdl9tb3ZlX2FyZWEoZW51bSBrY292X21vZGUgbW9kZSwgdm9pZCAqZHN0X2FyZWEsXG4tLVxua2VybmVsL2tjb3YuYy0xMDI0LVxua2VybmVsL2tjb3YuYzoxMDI1Oi8qIFNlZSB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy4gKi9cbmtlcm5lbC9rY292LmMtMTAyNi12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZClcbi0tXG5rZXJuZWwva2Nvdi5jLTEwNDctXHQvKlxua2VybmVsL2tjb3YuYzoxMDQ4Olx0ICogV2hlbiBpbiBzb2Z0aXJxLCBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBrY292X3JlbW90ZV9zdGFydCgpXG5rZXJuZWwva2Nvdi5jLTEwNDktXHQgKiBhY3R1YWxseSBmb3VuZCB0aGUgcmVtb3RlIGhhbmRsZSBhbmQgc3RhcnRlZCBjb2xsZWN0aW5nIGNvdmVyYWdlLlxuLS1cbmtlcm5lbC9rY292LmMtMTA3My1cdC8qXG5rZXJuZWwva2Nvdi5jOjEwNzQ6XHQgKiBLQ09WX0RJU0FCTEUgY291bGQgaGF2ZSBiZWVuIGNhbGxlZCBiZXR3ZWVuIGtjb3ZfcmVtb3RlX3N0YXJ0KClcbmtlcm5lbC9rY292LmMtMTA3NS1cdCAqIGFuZCBrY292X3JlbW90ZV9zdG9wKCksIGhlbmNlIHRoZSBzZXF1ZW5jZSBjaGVjay5cbi0tXG5rZXJuZWwva2Nvdi5jLTEwODYtXG5rZXJuZWwva2Nvdi5jOjEwODc6XHQvKiBHZXQgaW4ga2Nvdl9yZW1vdGVfc3RhcnQoKS4gKi9cbmtlcm5lbC9rY292LmMtMTA4OC1cdGtjb3ZfcHV0KGtjb3YpO1xuLS1cbmtlcm5lbC9rY292LmM9MTA5MD1FWFBPUlRfU1lNQk9MKGtjb3ZfcmVtb3RlX3N0b3ApO1xua2VybmVsL2tjb3YuYy0xMDkxLVxua2VybmVsL2tjb3YuYzoxMDkyOi8qIFNlZSB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy4gKi9cbmtlcm5lbC9rY292LmMtMTA5My1zdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfY29tbW9uX2hhbmRsZSh2b2lkKVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zOTg5PXN0YXRpYyB2b2lkIGhjaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtNDAwMS1cdGZvciAoOyAoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2aGRldi1cdTAwM2VyeF9xKSk7IGtjb3ZfcmVtb3RlX3N0b3AoKSkge1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjQwMDI6XHRcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTQwMDMtXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTgwMD1zdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZhY2Vfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODE3LVx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpKSkge1xubmV0L21hYzgwMjExL2lmYWNlLmM6MTgxODpcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODE5LVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE4MzAtXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnNkYXRhLVx1MDAzZXN0YXR1c19xdWV1ZSkpKSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxODMxOlx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE4MzItXG4tLVxubmV0L21hYzgwMjExL3J4LmM9NTU1Nz12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTU2OTktXG5uZXQvbWFjODAyMTEvcnguYzo1NzAwOlx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG5uZXQvbWFjODAyMTEvcnguYy01NzAxLVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xNTIwPXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTUzNi1cdFx0XHRyZXR1cm47XG5uZXQvbmZjL25jaS9jb3JlLmM6MTUzNzpcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTUzOC1cbi0tXG5uZXQvbmZjL25jaS9jb3JlLmM9MTU1OT1zdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTE1NjQtXHRmb3IgKDsgKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNm5kZXYtXHUwMDNlcnhfcSkpOyBrY292X3JlbW90ZV9zdG9wKCkpIHtcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTY1Olx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTY2LVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xNjExPXN0YXRpYyB2b2lkIG5jaV9jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTE2MjMtXG5uZXQvbmZjL25jaS9jb3JlLmM6MTYyNDpcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTYyNS1cdFx0YXRvbWljX2RlYyhcdTAwMjZuZGV2LVx1MDAzZWNtZF9jbnQpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jPTQwNT1zdGF0aWMgdm9pZCBuY2lfaGNpX21zZ19yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy00MTMtXHRmb3IgKDsgKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3F1ZXVlKSk7IGtjb3ZfcmVtb3RlX3N0b3AoKSkge1xubmV0L25mYy9uY2kvaGNpLmM6NDE0Olx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQxNS1cdFx0cGlwZSA9IE5DSV9IQ1BfTVNHX0dFVF9QSVBFKHNrYi1cdTAwM2VkYXRhWzBdKTtcbi0tXG5uZXQvbmZjL3Jhd3NvY2suYz0xODg9c3RhdGljIHZvaWQgcmF3c29ja190eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL3Jhd3NvY2suYy0yMDMtXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSk7XG5uZXQvbmZjL3Jhd3NvY2suYzoyMDQ6XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbm5ldC9uZmMvcmF3c29jay5jLTIwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgU29mdElSUSBLQ09WIEhvb2sqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IEtDT1YgaXMgaW50ZWdyYXRlZCB3aXRoIHNvZnRpcnFzLiBJIHNlZSB0aGF0IGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBpcyBpbnZvbHZlZCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIGJhY2sgaXRzIGNhbGwgcGF0aC4gTm93LCB0aGUgY29udGV4dCBzYXlzIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX2RvX3NvZnRpcnFgLiBIYW5nIG9uIGEgc2Vjb25kLi4uIGlzIHRoYXQgZGlyZWN0PyBPciBkb2VzIGBrY292X3NvZnRpcnFfc3RhcnRgIHNpdCBpbiBiZXR3ZWVuPyBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeS4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZTsgbWlzcmVhZGluZyB0aGUgY2FsbCBmbG93IHdvdWxkIHNlbmQgbWUgZG93biB0aGUgd3JvbmcgcGF0aCBlbnRpcmVseS4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb24gY2FsbHMuIExldCYjMzk7cyBzZWUgZXhhY3RseSB3aGVyZSBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgaXMgY2FsbGVkLiBHb3R0YSBjb25maXJtIHRoYXQgY29ubmVjdGlvbi4uLiBhbmQgdGhlbiBJIGNhbiBmdWxseSB1bmRlcnN0YW5kIGhvdyBLQ09WIGludGVyYWN0cyB3aXRoIHRoZSBTb2Z0SVJRIHByb2Nlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2tjb3YuYz04MzM9c3RhdGljIGlubGluZSBib29sIGtjb3ZfbW9kZV9lbmFibGVkKHVuc2lnbmVkIGludCBtb2RlKVxuLS1cbmtlcm5lbC9rY292LmMtODM3LVxua2VybmVsL2tjb3YuYzo4Mzg6c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwva2Nvdi5jLTgzOS1cdF9fbXVzdF9ob2xkKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaylcbi0tXG5rZXJuZWwva2Nvdi5jPTg3MD12b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG4tLVxua2VybmVsL2tjb3YuYy05NTAtXHRpZiAoaW5fc2VydmluZ19zb2Z0aXJxKCkpIHtcbmtlcm5lbC9rY292LmM6OTUxOlx0XHRrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHQpO1xua2VybmVsL2tjb3YuYy05NTItXHRcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEtDT1YgU29mdElSUSBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBJIHNlZSBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgYmVpbmcgY2FsbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0FoYSEgSXQmIzM5O3MgZnJvbSBga2Nvdl9yZW1vdGVfc3RhcnRgICpjb25kaXRpb25hbGx5KiB3aGVuIGBpbl9zZXJ2aW5nX3NvZnRpcnEoKWAgaXMgdHJ1ZS4mIzM0OyBCdXQsIHRoYXQgZG9lc24mIzM5O3QgcXVpdGUgc2VlbSByaWdodC4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBXYWl0IGEgc2Vjb25kLCB0aGUgbW9yZSBsaWtlbHkgc2NlbmFyaW8gaXMgdGhhdCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gYGtjb3Zfc29mdGlycV9zdGFydGAuIE9rYXksIGxldCYjMzk7cyBjb25maXJtIHRoaXMgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBrY292X3NvZnRpcnFfc3RhcnRgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGggdGhlcmUuIE5vIGFzc3VtcHRpb25zLCBuZWVkIHRoZSBoYXJkIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2Nvdl9zb2Z0aXJxX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS0NPViBTb2Z0SVJRIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIFRoZSBvdXRwdXQgc2VlbWVkIHRvIGluZGljYXRlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gd2l0aGluIGBrY292X3JlbW90ZV9zdGFydGAsIGJ1dCB0aGUgaW5pdGlhbCBnbGFuY2UgSSB0b29rIHN1Z2dlc3RlZCBvdGhlcndpc2UuIExldCBtZSBkb3VibGUtY2hlY2sgdGhpcy4gVGhlIG91dHB1dCBzYXlzOiBpZiB0aGUgc3lzdGVtIGlzIHNlcnZpbmcgYSBzb2Z0SVJRLCB0aGVuIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgaXQuIE9rYXksIHNvIG5vdyBJJiMzOTttIHRoaW5raW5nLCBpcyBga2Nvdl9yZW1vdGVfc3RhcnRgIGFjdHVhbGx5ICpjYWxsaW5nKiBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgZGlyZWN0bHk/IEkgbmVlZCB0byB2ZXJpZnkgdGhpcyByZWxhdGlvbnNoaXAuIExldCYjMzk7cyB0cmFjZSBiYWNrIHRvIGBrY292X3JlbW90ZV9zdGFydGAgZGVmaW5pdGlvbiBpbiBga2VybmVsL2tjb3YuY2AgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwva2Nvdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHRcdFx0aWYgKCFhcmVhKSB7XG4gOTQxOlx0XHRcdFx0a2Nvdl9wdXQoa2Nvdik7XG4gOTQyOlx0XHRcdFx0cmV0dXJuO1xuIDk0MzpcdFx0XHR9XG4gOTQ0Olx0XHRcdGxvY2FsX2xvY2tfaXJxc2F2ZShcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcbiA5NDU6XHRcdH1cbiA5NDY6XHRcbiA5NDc6XHRcdC8qIFJlc2V0IGNvdmVyYWdlIHNpemUuICovXG4gOTQ4Olx0XHQqKHU2NCAqKWFyZWEgPSAwO1xuIDk0OTpcdFxuIDk1MDpcdFx0aWYgKGluX3NlcnZpbmdfc29mdGlycSgpKSB7XG4gOTUxOlx0XHRcdGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQodCk7XG4gOTUyOlx0XHRcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMTtcbiA5NTM6XHRcdH1cbiA5NTQ6XHRcdGtjb3Zfc3RhcnQodCwga2Nvdiwgc2l6ZSwgYXJlYSwgbW9kZSwgc2VxdWVuY2UpO1xuIDk1NTpcdFxuIDk1NjpcdFx0bG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrLCBmbGFncyk7XG4gOTU3Olx0XG4gOTU4Olx0fVxuIDk1OTpcdEVYUE9SVF9TWU1CT0woa2Nvdl9yZW1vdGVfc3RhcnQpO1xuIDk2MDpcdFxuIDk2MTpcdHN0YXRpYyB2b2lkIGtjb3ZfbW92ZV9hcmVhKGVudW0ga2Nvdl9tb2RlIG1vZGUsIHZvaWQgKmRzdF9hcmVhLFxuIDk2MjpcdFx0XHRcdFx0dW5zaWduZWQgaW50IGRzdF9hcmVhX3NpemUsIHZvaWQgKnNyY19hcmVhKVxuIDk2MzpcdHtcbiA5NjQ6XHRcdHU2NCB3b3JkX3NpemUgPSBzaXplb2YodW5zaWduZWQgbG9uZyk7XG4gOTY1Olx0XHR1NjQgY291bnRfc2l6ZSwgZW50cnlfc2l6ZV9sb2c7XG4gOTY2Olx0XHR1NjQgZHN0X2xlbiwgc3JjX2xlbjtcbiA5Njc6XHRcdHZvaWQgKmRzdF9lbnRyaWVzLCAqc3JjX2VudHJpZXM7XG4gOTY4Olx0XHR1NjQgZHN0X29jY3VwaWVkLCBkc3RfZnJlZSwgYnl0ZXNfdG9fbW92ZSwgZW50cmllc19tb3ZlZDtcbiA5Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5kZXJzdGFuZGluZyB0aGUgUmVtb3RlIEtDT1YgU3RhcnQvU3RvcCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUgZmxvdyBoZXJlLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBnZXRzIGNhbGxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaGFwcGVuaW5nIGZyb20gYSBzb2Z0aXJxIGNvbnRleHQsIGxpa2UgdGhlIGBrY292X3JlbW90ZV9zdGFydF91c2Jfc29mdGlycWAgY2FsbCBzdWdnZXN0cy4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBpbnRlcnJ1cHRzIGNvbWluZyBmcm9tIGV4dGVybmFsIGRldmljZXMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXQgY2hlY2tzIGBpbl9zZXJ2aW5nX3NvZnRpcnEoKWAuICBUaGF04oCZcyB0aGUga2V5IGNvbnRleHQgY2hlY2suIElmIHdlICphcmUqIGluIGEgc29mdGlycSwgaXQgY2FsbHMgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQodClgLiAgVGhpcyBpcyBjbGV2ZXIuIEl0IHNhdmVzIHRoZSBleGlzdGluZyBLQ09WIHN0YXRlLCBpZiBvbmUgZXhpc3RzLCBhbmQgKnN0b3BzKiBpdC4gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgYW55IGNvdmVyYWdlIHRyYWNpbmcgaGFwcGVuaW5nIGF0IHRoZSB0aW1lLiBUaGVuLCBhbmQgb25seSB0aGVuLCBkb2VzIGl0IGtpY2sgb2ZmIGBrY292X3N0YXJ0YCBmb3IgdGhlIHJlbW90ZSBjb3ZlcmFnZS4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgc3dpdGNoaW5nIGZyb20gbG9jYWwgS0NPViB0byByZW1vdGUgS0NPVi4gVGhlIHN5c3RlbSBpcyBwcm9iYWJseSBzd2l0Y2hpbmcgZnJvbSBsb2NhbCBpbnN0cnVtZW50YXRpb24gb2YgdGhlIGtlcm5lbCB0byB1c2luZyBhIHJlbW90ZSBpbnN0YW5jZSBmb3IgcHJvZmlsaW5nLgoKQW5kIGZpbmFsbHksIHdoZW4gYGtjb3ZfcmVtb3RlX3N0b3BgIGlzIGNhbGxlZCwgaXQgcmVzdG9yZXMgdGhlIHNhdmVkIEtDT1Ygc3RhdGUuICBUaGlzIHNlZW1zIGNsZWFuIOKAkyBpdCByZXR1cm5zIHVzIHRvIHRoZSBzdGF0ZSB3ZSB3ZXJlIGluIGJlZm9yZSB0aGUgcmVtb3RlIHByb2ZpbGluZyBzdGFydGVkLCBlbnN1cmluZyBubyBkYXRhIGlzIGxvc3Qgb3IgY29ycnVwdGVkLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm90aGluZyBoYXBwZW5zIHdpdGggb3VyIGV4aXN0aW5nIHRyYWNpbmcsIGlmIGFueS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGtjb3ZfcmVtb3RlX3N0b3BgIGZ1bmN0aW9uIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCByZXN0b3JhdGlvbiBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2tjb3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFxuMTA4MTpcdFx0c3Bpbl9sb2NrKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xuMTA4MjpcdFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgc2l6ZSwgIWluX3Rhc2soKSk7XG4xMDgzOlx0XHRzcGluX3VubG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbjEwODQ6XHRcbjEwODU6XHRcdGxvY2FsX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpO1xuMTA4NjpcdFxuMTA4NzpcdFx0LyogR2V0IGluIGtjb3ZfcmVtb3RlX3N0YXJ0KCkuICovXG4xMDg4Olx0XHRrY292X3B1dChrY292KTtcbjEwODk6XHR9XG4xMDkwOlx0RVhQT1JUX1NZTUJPTChrY292X3JlbW90ZV9zdG9wKTtcbjEwOTE6XHRcbjEwOTI6XHQvKiBTZWUgdGhlIGNvbW1lbnQgYmVmb3JlIGtjb3ZfcmVtb3RlX3N0YXJ0KCkgZm9yIHVzYWdlIGRldGFpbHMuICovXG4xMDkzOlx0c3RydWN0IGtjb3ZfY29tbW9uX2hhbmRsZV9pZCBrY292X2NvbW1vbl9oYW5kbGUodm9pZClcbjEwOTQ6XHR7XG4xMDk1Olx0XHRpZiAoIWluX3Rhc2soKSlcbjEwOTY6XHRcdFx0cmV0dXJuIChzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkKXsgLnZhbCA9IDAgfTtcbjEwOTc6XHRcdHJldHVybiAoc3RydWN0IGtjb3ZfY29tbW9uX2hhbmRsZV9pZCl7IC52YWwgPSBjdXJyZW50LVx1MDAzZWtjb3ZfaGFuZGxlIH07XG4xMDk4Olx0fVxuMTA5OTpcdEVYUE9SVF9TWU1CT0woa2Nvdl9jb21tb25faGFuZGxlKTtcbjExMDA6XHRcbjExMDE6XHQjaWZkZWYgQ09ORklHX0tDT1ZfU0VMRlRFU1RcbjExMDI6XHRzdGF0aWMgdm9pZCBfX2luaXQgc2VsZnRlc3Qodm9pZClcbjExMDM6XHR7XG4xMTA0Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0O1xuMTEwNTpcdFxuMTEwNjpcdFx0cHJfZXJyKFwmIzM0O3J1bm5pbmcgc2VsZiB0ZXN0XFxuXCYjMzQ7KTtcbjExMDc6XHRcdC8qXG4xMTA4Olx0XHQgKiBUZXN0IHRoYXQgaW50ZXJydXB0cyBkb24mIzM5O3QgcHJvZHVjZSBzcHVyaW91cyBjb3ZlcmFnZS5cbjExMDk6XHRcdCAqIFRoZSBjb3ZlcmFnZSBjYWxsYmFjayBmaWx0ZXJzIG91dCBpbnRlcnJ1cHQgY29kZSwgYnV0IG9ubHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGludG8gdGhpcyBjb2RlOgoKKipMb2NhdGluZyB0aGUgQ2FsbGVycyBvZiBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCoqCgpSaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyB0aGlzIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgIGZ1bmN0aW9uIGJlaW5nICp1c2VkKj8gSSBuZWVkIHRvIHNlZSB0aGUgY2FsbCBzaXRlcy4gVW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgaW52b2tlZCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB3aGF0ZXZlciB0aGlzIGtjb3YtcmVsYXRlZCBzdWJzeXN0ZW0gaXMgZG9pbmcuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIHRyYWNlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGljaCB3aWxsIHNob3cgdGhlIGRpZmZlcmVudCBwYXRocyBhbmQgY29uZGl0aW9ucyBpbnZvbHZlZCBpbiBleGVjdXRpbmcgaXQuIFRoYXQmIzM5O3MgdGhlIGJlc3QgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rY292LmM9ODM4PXN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuLS1cbmtlcm5lbC9rY292LmMtODU0LVxua2VybmVsL2tjb3YuYzo4NTU6c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbmtlcm5lbC9rY292LmMtODU2LVx0X19tdXN0X2hvbGQoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKVxuLS1cbmtlcm5lbC9rY292LmM9MTAyNj12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZClcbi0tXG5rZXJuZWwva2Nvdi5jLTEwNjgtXHRcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMDtcbmtlcm5lbC9rY292LmM6MTA2OTpcdFx0a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wKHQpO1xua2VybmVsL2tjb3YuYy0xMDcwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLQ09WIFNvZnRpcnEgQ292ZXJhZ2UgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaG93IEtDT1YgaGFuZGxlcyBzb2Z0aXJxIGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyB0aGUgcHJlZW1wdGlvbiBpc3N1ZXMgdGhhdCBhcmlzZSB3aXRoIGBQUkVFTVBUX1JUYC4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gaW4gbXkgbWluZDoKCkZpcnN0bHksIEkgc2VlIHRoYXQgYGtjb3ZfcmVtb3RlX3N0b3BgIGlzIG5vdyBkaXJlY3RseSBjYWxsaW5nIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBjb3ZlcmFnZSBhcmVhcyBhcmUgbWFuYWdlZC4KClRoZSBrZXkgYWRqdXN0bWVudHMgYXJlIGNsZWFyOiBga2Nvdl9yZW1vdGVfYXJlYXNgIGhhcyBiZWVuIHJlc3RydWN0dXJlZCBpbnRvIGFuIGFycmF5IG9mIHR3byBsaXN0czsgb25lIGZvciB0YXNrcyBhbmQgYW5vdGhlciBmb3IgaW50ZXJydXB0cywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0LiBTZWNvbmRseSwgZnVuY3Rpb25zIGxpa2UgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCBub3cgdGFrZSBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIElSUSBvciBhIHRhc2ssIGVzc2VudGlhbCBmb3IgZGlmZmVyZW50aWF0aW5nIHRoZSB0d28uCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBpbml0aWFsaXphdGlvbjogYGtjb3ZfaW5pdGAgbm93IGFsbG9jYXRlcyBidWZmZXJzIHNwZWNpZmljYWxseSBmb3IgaW50ZXJydXB0cywgc2l6ZWQgYWNjb3JkaW5nIHRvIGBDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFYCwgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBpbnRlcnJ1cHQgbGlzdC4gVGhpcyBpcyBrZXksIHBhcnRpY3VsYXJseSBpbiBhbiBgUFJFRU1QVF9SVGAgZW52aXJvbm1lbnQsIHdoZXJlIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcHJlLWVtcHQgc29mdGlycXMgd2hpbGUgY29sbGVjdGluZyBjb3ZlcmFnZS4KCldoZW4gS0NPViBzdGFydHMsIGl0IGdldHMgYW4gYXJlYSBmcm9tIHRoZSBpbnRlcnJ1cHQgbGlzdCBpZiBpdCYjMzk7cyAqbm90KiBydW5uaW5nIGluIGEgdGFzaywgYW5kIGNvbnZlcnNlbHksIGl0IHB1dHMgdGhlIGFyZWEgYmFjayBpbiB0aGUgaW50ZXJydXB0IGxpc3Qgd2hlbiBpdCBzdG9wcywgYWdhaW4sIGlmIG5vdCBpbiBhIHRhc2suIFRoaXMgZHluYW1pYyBhbGxvY2F0aW9uIGlzIGNyaXRpY2FsIGZvciBtYW5hZ2luZyBjb3ZlcmFnZSBpbiBhIHByZWVtcHRpYmxlIHNvZnRpcnEgY29udGV4dC4gRmluYWxseSwgSSBub3RpY2UgdGhlIHNhdmVkIEtDT1Ygc3RhdGUgaGFzIGJlZW4gbW92ZWQgZnJvbSBga2Nvdl9wZXJjcHVfZGF0YWAgdG8gYHRhc2tfc3RydWN0YCwgYW5vdGhlciBpbXBvcnRhbnQgc3RydWN0dXJhbCBjaGFuZ2UuCgpGdW5jdGlvbmFsbHksIHRoaXMgYWxsb3dzIHNvZnRpcnEgY292ZXJhZ2UgdG8gYmUgcHJlZW1wdGVkLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCYjMzk7cyBuZWVkZWQgZm9yIGBQUkVFTVBUX1JUYCDigJMgdGhlIG1haW4gbW90aXZhdGlvbiwgaXQgc2VlbXMuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyBhIHZhbHVhYmxlIGNoYW5nZSwgcGFydGljdWxhcmx5IGZvciByZWFsLXRpbWUgc3lzdGVtcy4KCklzIGl0IHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgcXVlc3Rpb24uIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBmZWF0dXJlIHRoYXQsIGlmIGJyb2tlbiwgd291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBhY3RzLgoKQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgdGhhdCBmb3IgbXkgdGVzdGluZywgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0tDT1Y9eWAgYW5kIGRlZmluaXRlbHkgYENPTkZJR19QUkVFTVBUX1JUPXlgIHRvIHRlc3QgdGhlIGFjdHVhbCBwcmVlbXB0aW9uIGFzcGVjdCBvZiB0aGlzIHBhdGNoLCB3aGljaCBpcyB0aGUgd2hvbGUgcG9pbnQuIEkga25vdyBpdCYjMzk7cyB0aGVyZS4gSSBkaWQgbXkgY2hlY2tzLiBgQ09ORklHX0tDT1ZfRU5BQkxFX0NPTVBBUklTT05TPXlgIG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgaXMgcHJvYmFibHkgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4gSSB1c3VhbGx5IHdvcmsgd2l0aCBgQ09ORklHX0tDT1ZfSU5TVFJVTUVOVF9BTEw9eWAsIGFuZCBgQ09ORklHX0RFQlVHX0ZTPXlgIGlzIG5lY2Vzc2FyeSwgc2luY2UgS0NPViB1c2VzIGRlYnVnZnMuCgpMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBrY292X2luaXRgIHRvIHNlZSBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9rY292LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcdHdoaWxlICgoamlmZmllcyAtIHN0YXJ0KSAqIE1TRUNfUEVSX1NFQyAvIEhaIFx1MDAzYyAzMDApXG4xMTIxOlx0XHRcdDtcbjExMjI6XHRcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VrY292X21vZGUsIDApO1xuMTEyMzpcdFx0cHJfZXJyKFwmIzM0O2RvbmUgcnVubmluZyBzZWxmIHRlc3RcXG5cJiMzNDspO1xuMTEyNDpcdH1cbjExMjU6XHQjZW5kaWZcbjExMjY6XHRcbjExMjc6XHRzdGF0aWMgaW50IF9faW5pdCBrY292X2luaXQodm9pZClcbjExMjg6XHR7XG4xMTI5Olx0XHRpbnQgY3B1ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbjExMzA6XHRcbjExMzE6XHQjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbjExMzI6XHRcdC8qIEFsbG9jYXRlIHNvbWUgZXh0cmEgYnVmZmVycyBpbiBvcmRlciB0byBwcmVwYXJlIGZvciBzb2Z0aXJxIHByZWVtcHRpb24uICovXG4xMTMzOlx0XHRjcHUgPSBjcHUgXHUwMDNlPSA0ID8gY3B1ICogMiA6IGNwdSAmIzQzOyA0O1xuMTEzNDpcdCNlbmRpZlxuMTEzNTpcdFx0d2hpbGUgKGNwdS0tKSB7XG4xMTM2Olx0XHRcdHZvaWQgKmFyZWEgPSB2bWFsbG9jKENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuMTEzNzpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMTEzODpcdFxuMTEzOTpcdFx0XHRpZiAoIWFyZWEpXG4xMTQwOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTQxOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcbjExNDI6XHRcdFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSwgdHJ1ZSk7XG4xMTQzOlx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2a2Nvdl9yZW1vdGVfbG9jaywgZmxhZ3MpO1xuMTE0NDpcdFx0fVxuMTE0NTpcdFxuMTE0NjpcdFx0LypcbjExNDc6XHRcdCAqIFRoZSBrY292IGRlYnVnZnMgZmlsZSB3b24mIzM5O3QgZXZlciBnZXQgcmVtb3ZlZCBhbmQgdGh1cyxcbjExNDg6XHRcdCAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvdGVjdCBpdCBhZ2FpbnN0IHJlbW92YWwgcmFjZXMuIFRoZVxuMTE0OTpcdFx0ICogdXNlIG9mIGRlYnVnZnNfY3JlYXRlX2ZpbGVfdW5zYWZlKCkgaXMgYWN0dWFsbHkgc2FmZSBoZXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBSZW1vdGUgS0NPViBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgS0NPViBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aCBgS0NPVmAgYW5kIGBQUkVFTVBUX1JUYCBlbmFibGVkLiBJJiMzOTt2ZSBnb3QgYSBzZXQgb2YgZm9jdXMgc3ltYm9scyBpbiBtaW5kOiBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAsIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgLCBga2Nvdl9yZW1vdGVfYXJlYV9nZXRgLCBga2Nvdl9yZW1vdGVfYXJlYV9wdXRgLCBga2Nvdl9yZW1vdGVfc3RhcnRgLCBhbmQgYGtjb3ZfcmVtb3RlX3N0b3BgLiBUaGUgYGtjb3ZfaW5pdGAgZnVuY3Rpb24gaXMgaXJyZWxldmFudCBoZXJlLCBpdCYjMzk7cyBqdXN0IHRoZSBpbml0aWFsaXphdGlvbi4KClRoZSBrZXkgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBga2Nvdl9yZW1vdGVfc3RhcnRgIGFuZCBga2Nvdl9yZW1vdGVfc3RvcGAuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U/IFRoZSBhbnN3ZXIgaXMgeWVzLCB0aHJvdWdoIHRoZSBgS0NPVl9SRU1PVEVfRU5BQkxFYCBpb2N0bC4gSXQgc2V0cyB1cCB0aGUgaGFuZGxlIGZvciByZW1vdGUgY292ZXJhZ2UuIE5vdywgdGhpcyBpcyBjcnVjaWFsOiB0aGUgYWN0dWFsIGBrY292X3JlbW90ZV9zdGFydGAgYW5kIGBrY292X3JlbW90ZV9zdG9wYCBhcmUgaW52b2tlZCBieSBrZXJuZWwgdGhyZWFkcyBvciBzb2Z0aXJxcyAqdXNpbmcqIHRoYXQgaGFuZGxlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIFVTQiwgdmhvc3QsIGFueXRoaW5nIHRoYXQmIzM5O3MgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCBhbmQgbWlnaHQgYmUgZXhlcmNpc2luZyB0aGlzIGNvZGUuCgpTeXprYWxsZXIsIGVzcGVjaWFsbHksIHV0aWxpemVzIGBLQ09WX1JFTU9URV9FTkFCTEVgIHF1aXRlIGEgYml0IHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbSB0aGVzZSBiYWNrZ3JvdW5kIHRocmVhZHMg4oCTIFVTQiwgdmhvc3QsIG1hYzgwMjExX2h3c2ltLCB0aGF0IGtpbmQgb2YgdGhpbmcuIFNvLCB0aG9zZSBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGhlYXZpbHkgZXhlcmNpc2VkLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBpbmNsdWRlIGBrY292X3JlbW90ZV9zdGFydGAgYXMgYSBmb2N1cyBzeW1ib2wsIGFuZCB0aGVuIEkgcmVhbGl6ZWQgdGhhdCBpdCBpcyBhIGRpcmVjdCBhcmVhIG9mIGNoYW5nZS4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgKndlKiBtb2RpZmllZCBhbmQgd2FudCB0byBiZSB0ZXN0aW5nLgoKSXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNtYWxsIGZ1bmN0aW9uLCBzbyBzaG91bGQgSSBsb29rIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnM/IEkmIzM5O20gYWxzbyByZW1lbWJlcmluZyB0aGF0IGBrY292X3Rhc2tfaW5pdGAgaXMgbW9kaWZpZWQsIGJ1dCB0aGF0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSB0YXNrIGNyZWF0aW9uLiBUaGF0JiMzOTtzIGEgaG90IHBhdGgsIGFuZCBwcm9iYWJseSBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZm9jdXMuIGBrY292X3JlbW90ZV9hcmVhX2dldGAgYW5kIGBrY292X3JlbW90ZV9hcmVhX3B1dGAgYXJlIGdvb2QgcG9zc2liaWxpdGllcy4KClJldmlld2luZyB0aGUgZm9jdXMgc3ltYm9scyBhZ2FpbjogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCwgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3N0b3BgLgoKQW5kIGJhY2sgdG8gYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhbmQgYGtjb3ZfcmVtb3RlX3N0b3BgLiBUaGV5IGFyZSBjYWxsZWQgdmVyeSBmcmVxdWVudGx5IGlmIHJlbW90ZSBjb3ZlcmFnZSBpcyBlbmFibGVkLiBTbywgaXMgaXQgYSBob3QgcGF0aD8gWWVzLCBpdCBpcyBmb3IgcmVtb3RlIGNvdmVyYWdlLiBBbmQgdGhpcyBpcyAqZXhhY3RseSogdGhlIGZlYXR1cmUgd2Ugd2FudCB0byB0ZXN0LiBTbywgSSB3aWxsIGluY2x1ZGUgdGhlbS4KClNvLCBpbiBzdW1tYXJ5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIHJlbW90ZSBLQ09WIGZ1bmN0aW9ucy4gVGhlIGNvbmZpZ3MgYXJlIGBLQ09WYCBhbmQgYFBSRUVNUFRfUlRgLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRvIGJlIHN1cmUgYFBSRUVNUFRfUlRgIGRvZXNuJiMzOTt0IGhhdmUgYW55IGRlcGVuZGVuY2llcyBhbmQgaXMganVzdCBhIGJvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVFTVBUX1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9OTA9ZW5kY2hvaWNlXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxua2VybmVsL0tjb25maWcucHJlZW1wdDo5Mjpjb25maWcgUFJFRU1QVF9SVFxua2VybmVsL0tjb25maWcucHJlZW1wdC05My1cdGJvb2wgXCYjMzQ7RnVsbHkgUHJlZW1wdGlibGUgS2VybmVsIChSZWFsLVRpbWUpXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMDgtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjEwOTpjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cdGJvb2wgXCYjMzQ7RW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBQcmVlbXB0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByZWVtcHRpb24gY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL0tjb25maWcucHJlZW1wdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5Mi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgcHJlZW1wdGlvbi1yZWxhdGVkIHNldHRpbmdzIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSBsaWtlbHkgbGFpZCBvdXQg4oCTIHRoZSBgY29uZmlnIFBSRUVNUFRgLCBgY29uZmlnIFBSRUVNUFRfUlRgIGFuZCByZWxhdGVkIG9wdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgdHJhZGUtb2ZmczogdGhlIGltcGFjdCBvbiByZWFsLXRpbWUgcGVyZm9ybWFuY2UsIHNjaGVkdWxpbmcgbGF0ZW5jeSwgYW5kIG92ZXJhbGwga2VybmVsIGNvbXBsZXhpdHkuIEkmIzM5O20gaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0IG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMgaW4gaG93IHByZWVtcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCB0aGF0IGxldmVsLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0JiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9OT19QUkVFTVBUXG4gIDgxOlx0XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxuICA4MjpcdFx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xuICA4MzpcdFx0aGVscFxuICA4NDpcdFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHNjaGVkdWxlciBkcml2ZW4gcHJlZW1wdGlvbiBtb2RlbCB0aGF0XG4gIDg1Olx0XHQgIGlzIGZ1bmRhbWVudGFsbHkgc2ltaWxhciB0byBmdWxsIHByZWVtcHRpb24sIGJ1dCBpcyBsZXNzXG4gIDg2Olx0XHQgIGVhZ2VyIHRvIHByZWVtcHQgU0NIRURfTk9STUFMIHRhc2tzIGluIGFuIGF0dGVtcHQgdG9cbiAgODc6XHRcdCAgcmVkdWNlIGxvY2sgaG9sZGVyIHByZWVtcHRpb24gYW5kIHJlY292ZXIgc29tZSBvZiB0aGUgcGVyZm9ybWFuY2VcbiAgODg6XHRcdCAgZ2FpbnMgc2VlbiBmcm9tIHVzaW5nIFZvbHVudGFyeSBwcmVlbXB0aW9uLlxuICA4OTpcdFxuICA5MDpcdGVuZGNob2ljZVxuICA5MTpcdFxuICA5MjpcdGNvbmZpZyBQUkVFTVBUX1JUXG4gIDkzOlx0XHRib29sIFwmIzM0O0Z1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVwmIzM0O1xuICA5NDpcdFx0ZGVwZW5kcyBvbiBFWFBFUlQgXHUwMDI2XHUwMDI2IEFSQ0hfU1VQUE9SVFNfUlQgXHUwMDI2XHUwMDI2ICFDT01QSUxFX1RFU1RcbiAgOTU6XHRcdHNlbGVjdCBQUkVFTVBUSU9OXG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIHR1cm5zIHRoZSBrZXJuZWwgaW50byBhIHJlYWwtdGltZSBrZXJuZWwgYnkgcmVwbGFjaW5nXG4gIDk4Olx0XHQgIHZhcmlvdXMgbG9ja2luZyBwcmltaXRpdmVzIChzcGlubG9ja3MsIHJ3bG9ja3MsIGV0Yy4pIHdpdGhcbiAgOTk6XHRcdCAgcHJlZW1wdGlibGUgcHJpb3JpdHktaW5oZXJpdGFuY2UgYXdhcmUgdmFyaWFudHMsIGVuZm9yY2luZ1xuIDEwMDpcdFx0ICBpbnRlcnJ1cHQgdGhyZWFkaW5nIGFuZCBpbnRyb2R1Y2luZyBtZWNoYW5pc21zIHRvIGJyZWFrIHVwIGxvbmdcbiAxMDE6XHRcdCAgbm9uLXByZWVtcHRpYmxlIHNlY3Rpb25zLiBUaGlzIG1ha2VzIHRoZSBrZXJuZWwsIGV4Y2VwdCBmb3IgdmVyeVxuIDEwMjpcdFx0ICBsb3cgbGV2ZWwgYW5kIGNyaXRpY2FsIGNvZGUgcGF0aHMgKGVudHJ5IGNvZGUsIHNjaGVkdWxlciwgbG93XG4gMTAzOlx0XHQgIGxldmVsIGludGVycnVwdCBoYW5kbGluZykgZnVsbHkgcHJlZW1wdGlibGUgYW5kIGJyaW5ncyBtb3N0XG4gMTA0Olx0XHQgIGV4ZWN1dGlvbiBjb250ZXh0cyB1bmRlciBzY2hlZHVsZXIgY29udHJvbC5cbiAxMDU6XHRcbiAxMDY6XHRcdCAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3Igc3lzdGVtcyB3aGljaFxuIDEwNzpcdFx0ICByZXF1aXJlIHJlYWwtdGltZSBndWFyYW50ZWVzLlxuIDEwODpcdFxuIDEwOTpcdGNvbmZpZyBQUkVFTVBUX1JUX05FRURTX0JIX0xPQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gUmVhbC1UaW1lIFByZWVtcHRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBjb25maWd1cmUgYFBSRUVNUFRfUlRgLiBJdCBzZWVtcyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJIG5lZWQgYEVYUEVSVGAsIGBBUkNIX1NVUFBPUlRTX1JUYCwgYW5kICpub3QqIGBDT01QSUxFX1RFU1RgLiBUaGlzIG1lYW5zLCB0byBnZXQgYFBSRUVNUFRfUlRgIHJ1bm5pbmcsIEkgc2hvdWxkIGVuYWJsZSBib3RoIGBQUkVFTVBUX1JUYCBhbmQgYEVYUEVSVGAuIAoKTm93LCBhIHF1aWNrIHJlbWluZGVyOiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYEVYUEVSVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgaW4gbW9zdCBvZiB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zIEkgd29yayB3aXRoLiBUaGF0JiMzOTtzIHVzdWFsbHkgbm90IGFuIGlzc3VlLgoKQnV0LCBJIG5lZWQgdG8gY29uZmlybSBgQVJDSF9TVVBQT1JUU19SVGAgaXMgY29ycmVjdGx5IHNldC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHdoZXRoZXIgdGhhdCBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9TVVBQT1JUU19SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTQ5Mz1jb25maWcgQVJDSF9OT19QUkVFTVBUXG4tLVxuYXJjaC9LY29uZmlnLTE0OTUtXG5hcmNoL0tjb25maWc6MTQ5Njpjb25maWcgQVJDSF9TVVBQT1JUU19SVFxuYXJjaC9LY29uZmlnLTE0OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIFF1ZXJ5KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyB4ODYgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiAqRG9lcyB4ODYgaGF2ZSB0aGUgYEFSQ0hfU1VQUE9SVFNfUlRgIGZsYWcgZW5hYmxlZD8qIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGZpcnN0IGNoZWNrLiBJdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGxvdCBhYm91dCB0aGUgYXJjaGl0ZWN0dXJhbCBjYXBhYmlsaXRpZXMgYW5kIHdoaWNoIHJlYWwtdGltZSBmZWF0dXJlcyBtaWdodCBiZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IHN1cHBvcnRlZCwgYXQgdGhpcyBzdGFnZSBvZiB0aGUgY29uZmlndXJhdGlvbi4gV2l0aG91dCBgQVJDSF9TVVBQT1JUU19SVGAsIEkgbGlrZWx5IHdvbiYjMzk7dCBldmVuICpjb25zaWRlciogbWFueSBvZiB0aGUgcmVhbC10aW1lIG9wdGlvbnMgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBnYXRpbmcgZmFjdG9yLCBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHNwZWNpZmljIHg4NiBzZXR1cCBpcyBjb25maWd1cmVkIGluIHJlbGF0aW9uIHRvIHJlYWwtdGltZSB3b3JrbG9hZHMuIEkgbmVlZCB0byBrbm93IGlmIHRoZSBhcmNoaXRlY3R1cmUgaXRzZWxmIGV2ZW4gKnBlcm1pdHMqIG1lIHRvIHByb2NlZWQgZG93biB0aGF0IHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX1NVUFBPUlRTX1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMzItXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuYXJjaC94ODYvS2NvbmZpZzoxMzM6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFxuYXJjaC94ODYvS2NvbmZpZy0xMzQtXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc2MAoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA2MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgdGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbGl0eSB0aWVkIHRvIGBQUkVFTVBUX1JUYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggS0NPViwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBjb3ZlcmFnZSBjb2xsZWN0aW9uIGluIHNvZnQgaW50ZXJydXB0IGNvbnRleHRzIGFuZCBwb3RlbnRpYWwgc29mdGlycSBwcmVlbXB0aW9uLgoKRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYFBSRUVNUFRfUlRgIGlzIGluZGVlZCBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBpbmNsdWRlZC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBtb2RpZmljYXRpb24gdG8gYGxpYi9LY29uZmlnLmRlYnVnYCwgYnV0IGl0JiMzOTtzIGp1c3QgYSByYW5nZSB1cGRhdGUgYW5kIGhlbHAgdGV4dCBjaGFuZ2UgcmVsYXRlZCB0byBgS0NPVl9JUlFfQVJFQV9TSVpFYCwgbm90IHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBjb25maWcuCgpTaW5jZSB0aGUgZm9jdXMgaXMgbm93IG9uIHRoZSBwcmVlbXB0aW9uIGFzcGVjdCB1bmRlciBgUFJFRU1QVF9SVGAgYW5kIHJlbW90ZSBLQ09WLCBhbmQgZ2l2ZW4gdGhhdCBgS0NPVmAgaXMgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBqdXN0IG5lZWQgdG8gZW5hYmxlIGBQUkVFTVBUX1JUYCB0byBmb2N1cyBvbiB0aGUgbmV3IHByZWVtcHRpb24gZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBub3RpbmcgYEtDT1ZgIHRvIGRvY3VtZW50IGl0IGFzIHRoZSBwcmVyZXF1aXNpdGUgZm9yIHRoaXMgd29yay4KCkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB0aGUga2V5IHN5bWJvbHMsIGFuZCB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZDogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCwgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYW5kIGBrY292X3JlbW90ZV9zdG9wYCBhcmUgcXVpdGUgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gVGhlc2UgYXJlIGFsbCBnb29kIGNhbmRpZGF0ZXMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBLQ09WIGNvdmVyYWdlIGNvbGxlY3Rpb24sIHNwZWNpZmljYWxseSBob3cgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgbGlrZSBVU0IgYW5kIHZob3N0LiBUaGUgcHJlZW1wdGlvbiBhc3BlY3QgYWRkcyBhIG5ldyBsYXllciBvZiBjb21wbGV4aXR5LgoKSGVyZSYjMzk7cyBteSBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFRydWUKKiAgICoqUmVhc29uaW5nKio6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLQ09WIGNvdmVyYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgaG93IHJlbW90ZSBjb3ZlcmFnZSBpcyBjb2xsZWN0ZWQgaW4gc29mdGlycSBjb250ZXh0cyBhbmQgaG93IGl0IGhhbmRsZXMgc29mdGlycSBwcmVlbXB0aW9uICh3aGljaCBpcyBwb3NzaWJsZSB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgS0NPViBpb2N0bHMgYW5kIHJlbW90ZSBjb3ZlcmFnZSB0cmlnZ2VycyAobGlrZSBVU0Igb3Igdmhvc3QpLgoqICAgKipGb2N1c1N5bWJvbHMqKjoKICAgICogICBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0CiAgICAqICAga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wCiAgICAqICAga2Nvdl9yZW1vdGVfYXJlYV9nZXQKICAgICogICBrY292X3JlbW90ZV9hcmVhX3B1dAogICAgKiAgIGtjb3ZfcmVtb3RlX3N0YXJ0CiAgICAqICAga2Nvdl9yZW1vdGVfc3RvcAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgUFJFRU1QVF9SVAoqTm93IHRvIGNhbGwgc2V0LXJlc3VsdHMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAgICYjMzQ7a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wJiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfZ2V0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfcHV0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0YXJ0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAgICYjMzQ7a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wJiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfZ2V0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfcHV0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0YXJ0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjE1LjA2MTM5MDYzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQwOTUxNTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wXCIsXG4gICAgXCJrY292X3JlbW90ZV9hcmVhX2dldFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfYXJlYV9wdXRcIixcbiAgICBcImtjb3ZfcmVtb3RlX3N0YXJ0XCIsXG4gICAgXCJrY292X3JlbW90ZV9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6MTUuMDYxNDAxNTMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODMzNjg0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZGE3MTFjMzVkNTYzOWIwN2Y1NmExMWM3ODU1MDJlMWE1NjllM2RkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDE1OjQ1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbmluZGV4IDM3M2JjYzA1OThkMTBiLi43YTUzYzE1Y2VjYjUyZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcXG5AQCAtMTU0Myw2ICsxNTQzLDE0IEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuIFxcbiBcXHQvKiBDb2xsZWN0IGNvdmVyYWdlIGZyb20gc29mdGlycSBjb250ZXh0OiAqL1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRrY292X3NvZnRpcnE7XFxuK1xcbitcXHQvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3IgcHJlZW1wdGluZyByZW1vdGUgY292ZXJhZ2UgY29sbGVjdGlvbjogKi9cXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0a2Nvdl9zYXZlZF9tb2RlO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRrY292X3NhdmVkX3NpemU7XFxuK1xcdHZvaWRcXHRcXHRcXHRcXHQqa2Nvdl9zYXZlZF9hcmVhO1xcbitcXHRzdHJ1Y3Qga2NvdlxcdFxcdFxcdCprY292X3NhdmVkX2tjb3Y7XFxuK1xcdGludFxcdFxcdFxcdFxcdGtjb3Zfc2F2ZWRfc2VxdWVuY2U7XFxuK1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tjb3YuYyBiL2tlcm5lbC9rY292LmNcXG5pbmRleCAxZGYzNzNmYjU2MmJjOC4uYTc1MTQzMDNlZmYzOGEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2tjb3YuY1xcbisrKyBiL2tlcm5lbC9rY292LmNcXG5AQCAtODYsMTcgKzg2LDEyIEBAIHN0cnVjdCBrY292X3JlbW90ZSB7XFxuIFxcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGtjb3ZfcmVtb3RlX2xvY2spO1xcbiBzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShrY292X3JlbW90ZV9tYXAsIDQpO1xcbi1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBrY292X3JlbW90ZV9hcmVhcyA9IExJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzKTtcXG4rc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXNbMl0gPSB7XFxuK1xcdExJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzWzBdKSwgTElTVF9IRUFEX0lOSVQoa2Nvdl9yZW1vdGVfYXJlYXNbMV0pXFxuK307XFxuIFxcbiBzdHJ1Y3Qga2Nvdl9wZXJjcHVfZGF0YSB7XFxuLVxcdHZvaWRcXHRcXHRcXHQqaXJxX2FyZWE7XFxuIFxcdGxvY2FsX2xvY2tfdFxcdFxcdGxvY2s7XFxuLVxcbi1cXHR1bnNpZ25lZCBpbnRcXHRcXHRzYXZlZF9tb2RlO1xcbi1cXHR1bnNpZ25lZCBpbnRcXHRcXHRzYXZlZF9zaXplO1xcbi1cXHR2b2lkXFx0XFx0XFx0KnNhdmVkX2FyZWE7XFxuLVxcdHN0cnVjdCBrY292XFx0XFx0KnNhdmVkX2tjb3Y7XFxuLVxcdGludFxcdFxcdFxcdHNhdmVkX3NlcXVlbmNlO1xcbiB9O1xcbiBcXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrY292X3BlcmNwdV9kYXRhLCBrY292X3BlcmNwdV9kYXRhKSA9IHtcXG5AQCAtMTMyLDEyICsxMjcsMTMgQEAgc3RhdGljIHN0cnVjdCBrY292X3JlbW90ZSAqa2Nvdl9yZW1vdGVfYWRkKHN0cnVjdCBrY292ICprY292LCB1NjQgaGFuZGxlKVxcbiB9XFxuIFxcbiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGtjb3ZfcmVtb3RlX2xvY2sgbG9ja2VkLiAqL1xcbi1zdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEgKmtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHVuc2lnbmVkIGludCBzaXplKVxcbitzdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEgKmtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHVuc2lnbmVkIGludCBzaXplLCBib29sIGlycSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gXFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzW2lycV07XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoKHBvcywgXFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzKSB7XFxuK1xcdGxpc3RfZm9yX2VhY2gocG9zLCBsaXN0KSB7XFxuIFxcdFxcdGFyZWEgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEsIGxpc3QpO1xcbiBcXHRcXHRpZiAoYXJlYS1cXHUwMDNlc2l6ZSA9PSBzaXplKSB7XFxuIFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZhcmVhLVxcdTAwM2VsaXN0KTtcXG5AQCAtMTQ5LDExICsxNDUsMTEgQEAgc3RhdGljIHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICprY292X3JlbW90ZV9hcmVhX2dldCh1bnNpZ25lZCBpbnQgc2l6ZSlcXG4gXFxuIC8qIE11c3QgYmUgY2FsbGVkIHdpdGgga2Nvdl9yZW1vdGVfbG9jayBsb2NrZWQuICovXFxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX2FyZWFfcHV0KHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhLFxcbi1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzaXplLCBib29sIGlycSlcXG4ge1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YXJlYS1cXHUwMDNlbGlzdCk7XFxuIFxcdGFyZWEtXFx1MDAzZXNpemUgPSBzaXplO1xcbi1cXHRsaXN0X2FkZChcXHUwMDI2YXJlYS1cXHUwMDNlbGlzdCwgXFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzKTtcXG4rXFx0bGlzdF9hZGQoXFx1MDAyNmFyZWEtXFx1MDAzZWxpc3QsIFxcdTAwMjZrY292X3JlbW90ZV9hcmVhc1tpcnFdKTtcXG4gXFx0LypcXG4gXFx0ICogS01TQU4gZG9lc24ndCBpbnN0cnVtZW50IHRoaXMgZmlsZSwgc28gaXQgbWF5IG5vdCBrbm93IGFyZWEtXFx1MDAzZWxpc3RcXG4gXFx0ICogaXMgaW5pdGlhbGl6ZWQuIFVucG9pc29uIGl0IGV4cGxpY2l0bHkgdG8gYXZvaWQgcmVwb3J0cyBpblxcbkBAIC0zOTAsNiArMzg2LDEyIEBAIHZvaWQga2Nvdl90YXNrX2luaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbiBcXHRrY292X3Rhc2tfcmVzZXQodCk7XFxuIFxcdHQtXFx1MDAzZWtjb3ZfcmVtb3RlID0gTlVMTDtcXG4gXFx0dC1cXHUwMDNla2Nvdl9oYW5kbGUgPSBjdXJyZW50LVxcdTAwM2VrY292X2hhbmRsZTtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zb2Z0aXJxID0gMDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9tb2RlID0gMDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9zaXplID0gMDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gTlVMTDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gTlVMTDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9zZXF1ZW5jZSA9IDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVzZXQoc3RydWN0IGtjb3YgKmtjb3YpXFxuQEAgLTgzNiwxNyArODM4LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrY292X21vZGVfZW5hYmxlZCh1bnNpZ25lZCBpbnQgbW9kZSlcXG4gc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuIFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXFxuIHtcXG4tXFx0c3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgKmRhdGEgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbW9kZTtcXG4gXFxuIFxcdG1vZGUgPSBSRUFEX09OQ0UodC1cXHUwMDNla2Nvdl9tb2RlKTtcXG4gXFx0YmFycmllcigpO1xcbiBcXHRpZiAoa2Nvdl9tb2RlX2VuYWJsZWQobW9kZSkpIHtcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlc2F2ZWRfbW9kZSA9IG1vZGU7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX3NpemUgPSB0LVxcdTAwM2VrY292X3NpemU7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX2FyZWEgPSB0LVxcdTAwM2VrY292X2FyZWE7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX3NlcXVlbmNlID0gdC1cXHUwMDNla2Nvdl9zZXF1ZW5jZTtcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlc2F2ZWRfa2NvdiA9IHQtXFx1MDAzZWtjb3Y7XFxuK1xcdFxcdHQtXFx1MDAzZWtjb3Zfc2F2ZWRfbW9kZSA9IG1vZGU7XFxuK1xcdFxcdHQtXFx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSA9IHQtXFx1MDAzZWtjb3Zfc2l6ZTtcXG4rXFx0XFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gdC1cXHUwMDNla2Nvdl9hcmVhO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlID0gdC1cXHUwMDNla2Nvdl9zZXF1ZW5jZTtcXG4rXFx0XFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gdC1cXHUwMDNla2NvdjtcXG4gXFx0XFx0a2Nvdl9zdG9wKHQpO1xcbiBcXHR9XFxuIH1cXG5AQCAtODU0LDE3ICs4NTUsMTUgQEAgc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuIFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXFxuIHtcXG4tXFx0c3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgKmRhdGEgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEpO1xcbi1cXG4tXFx0aWYgKGRhdGEtXFx1MDAzZXNhdmVkX2tjb3YpIHtcXG4tXFx0XFx0a2Nvdl9zdGFydCh0LCBkYXRhLVxcdTAwM2VzYXZlZF9rY292LCBkYXRhLVxcdTAwM2VzYXZlZF9zaXplLFxcbi1cXHRcXHRcXHRcXHRkYXRhLVxcdTAwM2VzYXZlZF9hcmVhLCBkYXRhLVxcdTAwM2VzYXZlZF9tb2RlLFxcbi1cXHRcXHRcXHRcXHRkYXRhLVxcdTAwM2VzYXZlZF9zZXF1ZW5jZSk7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX21vZGUgPSAwO1xcbi1cXHRcXHRkYXRhLVxcdTAwM2VzYXZlZF9zaXplID0gMDtcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlc2F2ZWRfYXJlYSA9IE5VTEw7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX3NlcXVlbmNlID0gMDtcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlc2F2ZWRfa2NvdiA9IE5VTEw7XFxuK1xcdGlmICh0LVxcdTAwM2VrY292X3NhdmVkX2tjb3YpIHtcXG4rXFx0XFx0a2Nvdl9zdGFydCh0LCB0LVxcdTAwM2VrY292X3NhdmVkX2tjb3YsIHQtXFx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSxcXG4rXFx0XFx0XFx0ICAgdC1cXHUwMDNla2Nvdl9zYXZlZF9hcmVhLCB0LVxcdTAwM2VrY292X3NhdmVkX21vZGUsXFxuK1xcdFxcdFxcdCAgIHQtXFx1MDAzZWtjb3Zfc2F2ZWRfc2VxdWVuY2UpO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX21vZGUgPSAwO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX3NpemUgPSAwO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX2FyZWEgPSBOVUxMO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlID0gMDtcXG4rXFx0XFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gTlVMTDtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC05MjcsMTcgKzkyNiwxNyBAQCB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXFxuIFxcdHNlcXVlbmNlID0ga2Nvdi1cXHUwMDNlc2VxdWVuY2U7XFxuIFxcdGlmIChpbl90YXNrKCkpIHtcXG4gXFx0XFx0c2l6ZSA9IGtjb3YtXFx1MDAzZXJlbW90ZV9zaXplO1xcbi1cXHRcXHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSk7XFxuK1xcdFxcdGFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplLCBmYWxzZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHNpemUgPSBDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFO1xcbi1cXHRcXHRhcmVhID0gdGhpc19jcHVfcHRyKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhKS1cXHUwMDNlaXJxX2FyZWE7XFxuK1xcdFxcdGFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplLCB0cnVlKTtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XFxuIFxcbi1cXHQvKiBDYW4gb25seSBoYXBwZW4gd2hlbiBpbl90YXNrKCkuICovXFxuK1xcdC8qIEFsbG9jYXRlIG5ldyBidWZmZXIgaWYgd2UgY2FuIHNsZWVwLiAqL1xcbiBcXHRpZiAoIWFyZWEpIHtcXG4gXFx0XFx0bG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRhcmVhID0gdm1hbGxvYyhzaXplICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4rXFx0XFx0YXJlYSA9IGluX3Rhc2soKSA/IHZtYWxsb2Moc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkgOiBOVUxMO1xcbiBcXHRcXHRpZiAoIWFyZWEpIHtcXG4gXFx0XFx0XFx0a2Nvdl9wdXQoa2Nvdik7XFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtMTA3OSwxMSArMTA3OCw5IEBAIHZvaWQga2Nvdl9yZW1vdGVfc3RvcCh2b2lkKVxcbiBcXHRcXHRrY292X21vdmVfYXJlYShrY292LVxcdTAwM2Vtb2RlLCBrY292LVxcdTAwM2VhcmVhLCBrY292LVxcdTAwM2VzaXplLCBhcmVhKTtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmtjb3YtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0aWYgKGluX3Rhc2soKSkge1xcbi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xcbi1cXHRcXHRrY292X3JlbW90ZV9hcmVhX3B1dChhcmVhLCBzaXplKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xcbi1cXHR9XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XFxuK1xcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIHNpemUsICFpbl90YXNrKCkpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XFxuIFxcbiBcXHRsb2NhbF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrLCBmbGFncyk7XFxuIFxcbkBAIC0xMTI5LDE0ICsxMTI2LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZWxmdGVzdCh2b2lkKVxcbiBcXG4gc3RhdGljIGludCBfX2luaXQga2Nvdl9pbml0KHZvaWQpXFxuIHtcXG4tXFx0aW50IGNwdTtcXG4rXFx0aW50IGNwdSA9IG51bV9wb3NzaWJsZV9jcHVzKCk7XFxuK1xcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcXG4rXFx0LyogQWxsb2NhdGUgc29tZSBleHRyYSBidWZmZXJzIGluIG9yZGVyIHRvIHByZXBhcmUgZm9yIHNvZnRpcnEgcHJlZW1wdGlvbi4gKi9cXG4rXFx0Y3B1ID0gY3B1IFxcdTAwM2U9IDQgPyBjcHUgKiAyIDogY3B1ICsgNDtcXG4rI2VuZGlmXFxuK1xcdHdoaWxlIChjcHUtLSkge1xcbitcXHRcXHR2b2lkICphcmVhID0gdm1hbGxvYyhDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4tXFx0XFx0dm9pZCAqYXJlYSA9IHZtYWxsb2Nfbm9kZShDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFICpcXG4tXFx0XFx0XFx0XFx0c2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBjcHVfdG9fbm9kZShjcHUpKTtcXG4gXFx0XFx0aWYgKCFhcmVhKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0cGVyX2NwdV9wdHIoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEsIGNwdSktXFx1MDAzZWlycV9hcmVhID0gYXJlYTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSwgdHJ1ZSk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1Z1xcbmluZGV4IDEyNDRkY2FjMjI5NGFkLi4xMjc4NjM3OWJmMWQ3MiAxMDA2NDRcXG4tLS0gYS9saWIvS2NvbmZpZy5kZWJ1Z1xcbisrKyBiL2xpYi9LY29uZmlnLmRlYnVnXFxuQEAgLTIyNDcsMTAgKzIyNDcsMTEgQEAgY29uZmlnIEtDT1ZfSU5TVFJVTUVOVF9BTExcXG4gY29uZmlnIEtDT1ZfSVJRX0FSRUFfU0laRVxcbiBcXHRoZXggXFxcIlNpemUgb2YgaW50ZXJydXB0IGNvdmVyYWdlIGNvbGxlY3Rpb24gYXJlYSBpbiB3b3Jkc1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBLQ09WXFxuK1xcdHJhbmdlIDB4ODAgMHgxMDAwMDAwXFxuIFxcdGRlZmF1bHQgMHg0MDAwMFxcbiBcXHRoZWxwXFxuLVxcdCAgS0NPViB1c2VzIHByZWFsbG9jYXRlZCBwZXItY3B1IGFyZWFzIHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbVxcbi1cXHQgIHNvZnQgaW50ZXJydXB0cy4gVGhpcyBzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhvc2UgYXJlYXMgaW4gdGhlXFxuK1xcdCAgS0NPViB1c2VzIHByZWFsbG9jYXRlZCBhcmVhcyB0byBjb2xsZWN0IGNvdmVyYWdlIGZyb20gc29mdFxcbitcXHQgIGludGVycnVwdHMuIFRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRob3NlIGFyZWFzIGluIHRoZVxcbiBcXHQgIG51bWJlciBvZiB1bnNpZ25lZCBsb25nIHdvcmRzLlxcbiBcXG4gY29uZmlnIEtDT1ZfU0VMRlRFU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6MTUuNzQ1NjA5MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDM3MjUyNzc1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJFRU1QVF9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRcIixcbiAgICBcImtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfYXJlYV9nZXRcIixcbiAgICBcImtjb3ZfcmVtb3RlX2FyZWFfcHV0XCIsXG4gICAgXCJrY292X3JlbW90ZV9zdGFydFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtDT1YgY292ZXJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgcmVtb3RlIGNvdmVyYWdlIGlzIGNvbGxlY3RlZCBpbiBzb2Z0aXJxIGNvbnRleHRzIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3Igc29mdGlycSBwcmVlbXB0aW9uICh3aGljaCBvY2N1cnMgdW5kZXIgUFJFRU1QVF9SVCkuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLQ09WIGlvY3RscyBhbmQgcmVtb3RlIGNvdmVyYWdlIHRyaWdnZXJzIChsaWtlIFVTQiBvciB2aG9zdCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGRhNzExYzM1ZDU2MzliMDdmNTZhMTFjNzg1NTAyZTFhNTY5ZTNkZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDE1OjQ1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCAzNzNiY2MwNTk4ZDEwYi4uN2E1M2MxNWNlY2I1MmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTE1NDMsNiArMTU0MywxNCBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFxuIFx0LyogQ29sbGVjdCBjb3ZlcmFnZSBmcm9tIHNvZnRpcnEgY29udGV4dDogKi9cbiBcdHVuc2lnbmVkIGludFx0XHRcdGtjb3Zfc29mdGlycTtcbitcbitcdC8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBwcmVlbXB0aW5nIHJlbW90ZSBjb3ZlcmFnZSBjb2xsZWN0aW9uOiAqL1xuK1x0dW5zaWduZWQgaW50XHRcdFx0a2Nvdl9zYXZlZF9tb2RlO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0a2Nvdl9zYXZlZF9zaXplO1xuK1x0dm9pZFx0XHRcdFx0Kmtjb3Zfc2F2ZWRfYXJlYTtcbitcdHN0cnVjdCBrY292XHRcdFx0Kmtjb3Zfc2F2ZWRfa2NvdjtcbitcdGludFx0XHRcdFx0a2Nvdl9zYXZlZF9zZXF1ZW5jZTtcbitcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tjb3YuYyBiL2tlcm5lbC9rY292LmNcbmluZGV4IDFkZjM3M2ZiNTYyYmM4Li5hNzUxNDMwM2VmZjM4YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rY292LmNcbisrKyBiL2tlcm5lbC9rY292LmNcbkBAIC04NiwxNyArODYsMTIgQEAgc3RydWN0IGtjb3ZfcmVtb3RlIHtcbiBcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGtjb3ZfcmVtb3RlX2xvY2spO1xuIHN0YXRpYyBERUZJTkVfSEFTSFRBQkxFKGtjb3ZfcmVtb3RlX21hcCwgNCk7XG4tc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXMgPSBMSVNUX0hFQURfSU5JVChrY292X3JlbW90ZV9hcmVhcyk7XG4rc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXNbMl0gPSB7XG4rXHRMSVNUX0hFQURfSU5JVChrY292X3JlbW90ZV9hcmVhc1swXSksIExJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzWzFdKVxuK307XG4gXG4gc3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEge1xuLVx0dm9pZFx0XHRcdCppcnFfYXJlYTtcbiBcdGxvY2FsX2xvY2tfdFx0XHRsb2NrO1xuLVxuLVx0dW5zaWduZWQgaW50XHRcdHNhdmVkX21vZGU7XG4tXHR1bnNpZ25lZCBpbnRcdFx0c2F2ZWRfc2l6ZTtcbi1cdHZvaWRcdFx0XHQqc2F2ZWRfYXJlYTtcbi1cdHN0cnVjdCBrY292XHRcdCpzYXZlZF9rY292O1xuLVx0aW50XHRcdFx0c2F2ZWRfc2VxdWVuY2U7XG4gfTtcbiBcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEsIGtjb3ZfcGVyY3B1X2RhdGEpID0ge1xuQEAgLTEzMiwxMiArMTI3LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGUgKmtjb3ZfcmVtb3RlX2FkZChzdHJ1Y3Qga2NvdiAqa2NvdiwgdTY0IGhhbmRsZSlcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBrY292X3JlbW90ZV9sb2NrIGxvY2tlZC4gKi9cbi1zdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEgKmtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHVuc2lnbmVkIGludCBzaXplKVxuK3N0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXJxKVxuIHtcbiBcdHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zO1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9IFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzW2lycV07XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKHBvcywgXHUwMDI2a2Nvdl9yZW1vdGVfYXJlYXMpIHtcbitcdGxpc3RfZm9yX2VhY2gocG9zLCBsaXN0KSB7XG4gXHRcdGFyZWEgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEsIGxpc3QpO1xuIFx0XHRpZiAoYXJlYS1cdTAwM2VzaXplID09IHNpemUpIHtcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZhcmVhLVx1MDAzZWxpc3QpO1xuQEAgLTE0OSwxMSArMTQ1LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUpXG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBrY292X3JlbW90ZV9sb2NrIGxvY2tlZC4gKi9cbiBzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9hcmVhX3B1dChzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYSxcbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHNpemUpXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXJxKVxuIHtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFyZWEtXHUwMDNlbGlzdCk7XG4gXHRhcmVhLVx1MDAzZXNpemUgPSBzaXplO1xuLVx0bGlzdF9hZGQoXHUwMDI2YXJlYS1cdTAwM2VsaXN0LCBcdTAwMjZrY292X3JlbW90ZV9hcmVhcyk7XG4rXHRsaXN0X2FkZChcdTAwMjZhcmVhLVx1MDAzZWxpc3QsIFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzW2lycV0pO1xuIFx0LypcbiBcdCAqIEtNU0FOIGRvZXNuJ3QgaW5zdHJ1bWVudCB0aGlzIGZpbGUsIHNvIGl0IG1heSBub3Qga25vdyBhcmVhLVx1MDAzZWxpc3RcbiBcdCAqIGlzIGluaXRpYWxpemVkLiBVbnBvaXNvbiBpdCBleHBsaWNpdGx5IHRvIGF2b2lkIHJlcG9ydHMgaW5cbkBAIC0zOTAsNiArMzg2LDEyIEBAIHZvaWQga2Nvdl90YXNrX2luaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuIFx0a2Nvdl90YXNrX3Jlc2V0KHQpO1xuIFx0dC1cdTAwM2VrY292X3JlbW90ZSA9IE5VTEw7XG4gXHR0LVx1MDAzZWtjb3ZfaGFuZGxlID0gY3VycmVudC1cdTAwM2VrY292X2hhbmRsZTtcbitcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9tb2RlID0gMDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9zaXplID0gMDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gTlVMTDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gTlVMTDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9zZXF1ZW5jZSA9IDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVzZXQoc3RydWN0IGtjb3YgKmtjb3YpXG5AQCAtODM2LDE3ICs4MzgsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGtjb3ZfbW9kZV9lbmFibGVkKHVuc2lnbmVkIGludCBtb2RlKVxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKVxuIHtcbi1cdHN0cnVjdCBrY292X3BlcmNwdV9kYXRhICpkYXRhID0gdGhpc19jcHVfcHRyKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEpO1xuIFx0dW5zaWduZWQgaW50IG1vZGU7XG4gXG4gXHRtb2RlID0gUkVBRF9PTkNFKHQtXHUwMDNla2Nvdl9tb2RlKTtcbiBcdGJhcnJpZXIoKTtcbiBcdGlmIChrY292X21vZGVfZW5hYmxlZChtb2RlKSkge1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX21vZGUgPSBtb2RlO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX3NpemUgPSB0LVx1MDAzZWtjb3Zfc2l6ZTtcbi1cdFx0ZGF0YS1cdTAwM2VzYXZlZF9hcmVhID0gdC1cdTAwM2VrY292X2FyZWE7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2VxdWVuY2UgPSB0LVx1MDAzZWtjb3Zfc2VxdWVuY2U7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfa2NvdiA9IHQtXHUwMDNla2NvdjtcbitcdFx0dC1cdTAwM2VrY292X3NhdmVkX21vZGUgPSBtb2RlO1xuK1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSA9IHQtXHUwMDNla2Nvdl9zaXplO1xuK1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfYXJlYSA9IHQtXHUwMDNla2Nvdl9hcmVhO1xuK1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2VxdWVuY2UgPSB0LVx1MDAzZWtjb3Zfc2VxdWVuY2U7XG4rXHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gdC1cdTAwM2VrY292O1xuIFx0XHRrY292X3N0b3AodCk7XG4gXHR9XG4gfVxuQEAgLTg1NCwxNyArODU1LDE1IEBAIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4gXHRfX211c3RfaG9sZChcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXG4ge1xuLVx0c3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgKmRhdGEgPSB0aGlzX2NwdV9wdHIoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YSk7XG4tXG4tXHRpZiAoZGF0YS1cdTAwM2VzYXZlZF9rY292KSB7XG4tXHRcdGtjb3Zfc3RhcnQodCwgZGF0YS1cdTAwM2VzYXZlZF9rY292LCBkYXRhLVx1MDAzZXNhdmVkX3NpemUsXG4tXHRcdFx0XHRkYXRhLVx1MDAzZXNhdmVkX2FyZWEsIGRhdGEtXHUwMDNlc2F2ZWRfbW9kZSxcbi1cdFx0XHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2VxdWVuY2UpO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX21vZGUgPSAwO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX3NpemUgPSAwO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX2FyZWEgPSBOVUxMO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX3NlcXVlbmNlID0gMDtcbi1cdFx0ZGF0YS1cdTAwM2VzYXZlZF9rY292ID0gTlVMTDtcbitcdGlmICh0LVx1MDAzZWtjb3Zfc2F2ZWRfa2Nvdikge1xuK1x0XHRrY292X3N0YXJ0KHQsIHQtXHUwMDNla2Nvdl9zYXZlZF9rY292LCB0LVx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSxcbitcdFx0XHQgICB0LVx1MDAzZWtjb3Zfc2F2ZWRfYXJlYSwgdC1cdTAwM2VrY292X3NhdmVkX21vZGUsXG4rXHRcdFx0ICAgdC1cdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlKTtcbitcdFx0dC1cdTAwM2VrY292X3NhdmVkX21vZGUgPSAwO1xuK1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSA9IDA7XG4rXHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gTlVMTDtcbitcdFx0dC1cdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlID0gMDtcbitcdFx0dC1cdTAwM2VrY292X3NhdmVkX2tjb3YgPSBOVUxMO1xuIFx0fVxuIH1cbiBcbkBAIC05MjcsMTcgKzkyNiwxNyBAQCB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG4gXHRzZXF1ZW5jZSA9IGtjb3YtXHUwMDNlc2VxdWVuY2U7XG4gXHRpZiAoaW5fdGFzaygpKSB7XG4gXHRcdHNpemUgPSBrY292LVx1MDAzZXJlbW90ZV9zaXplO1xuLVx0XHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSk7XG4rXHRcdGFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplLCBmYWxzZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzaXplID0gQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRTtcbi1cdFx0YXJlYSA9IHRoaXNfY3B1X3B0cihcdTAwMjZrY292X3BlcmNwdV9kYXRhKS1cdTAwM2VpcnFfYXJlYTtcbitcdFx0YXJlYSA9IGtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHNpemUsIHRydWUpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XG4gXG4tXHQvKiBDYW4gb25seSBoYXBwZW4gd2hlbiBpbl90YXNrKCkuICovXG4rXHQvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyIGlmIHdlIGNhbiBzbGVlcC4gKi9cbiBcdGlmICghYXJlYSkge1xuIFx0XHRsb2NhbF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcbi1cdFx0YXJlYSA9IHZtYWxsb2Moc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXHRcdGFyZWEgPSBpbl90YXNrKCkgPyB2bWFsbG9jKHNpemUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpIDogTlVMTDtcbiBcdFx0aWYgKCFhcmVhKSB7XG4gXHRcdFx0a2Nvdl9wdXQoa2Nvdik7XG4gXHRcdFx0cmV0dXJuO1xuQEAgLTEwNzksMTEgKzEwNzgsOSBAQCB2b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZClcbiBcdFx0a2Nvdl9tb3ZlX2FyZWEoa2Nvdi1cdTAwM2Vtb2RlLCBrY292LVx1MDAzZWFyZWEsIGtjb3YtXHUwMDNlc2l6ZSwgYXJlYSk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZrY292LVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKGluX3Rhc2soKSkge1xuLVx0XHRzcGluX2xvY2soXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XG4tXHRcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIHNpemUpO1xuLVx0XHRzcGluX3VubG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbi1cdH1cbitcdHNwaW5fbG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbitcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIHNpemUsICFpbl90YXNrKCkpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XG4gXG4gXHRsb2NhbF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcbiBcbkBAIC0xMTI5LDE0ICsxMTI2LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZWxmdGVzdCh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IGtjb3ZfaW5pdCh2b2lkKVxuIHtcbi1cdGludCBjcHU7XG4rXHRpbnQgY3B1ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbitcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbitcdC8qIEFsbG9jYXRlIHNvbWUgZXh0cmEgYnVmZmVycyBpbiBvcmRlciB0byBwcmVwYXJlIGZvciBzb2Z0aXJxIHByZWVtcHRpb24uICovXG4rXHRjcHUgPSBjcHUgXHUwMDNlPSA0ID8gY3B1ICogMiA6IGNwdSArIDQ7XG4rI2VuZGlmXG4rXHR3aGlsZSAoY3B1LS0pIHtcbitcdFx0dm9pZCAqYXJlYSA9IHZtYWxsb2MoQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHZvaWQgKmFyZWEgPSB2bWFsbG9jX25vZGUoQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSAqXG4tXHRcdFx0XHRzaXplb2YodW5zaWduZWQgbG9uZyksIGNwdV90b19ub2RlKGNwdSkpO1xuIFx0XHRpZiAoIWFyZWEpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdHBlcl9jcHVfcHRyKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEsIGNwdSktXHUwMDNlaXJxX2FyZWEgPSBhcmVhO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZrY292X3JlbW90ZV9sb2NrLCBmbGFncyk7XG4rXHRcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUsIHRydWUpO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcbiBcdH1cbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1Z1xuaW5kZXggMTI0NGRjYWMyMjk0YWQuLjEyNzg2Mzc5YmYxZDcyIDEwMDY0NFxuLS0tIGEvbGliL0tjb25maWcuZGVidWdcbisrKyBiL2xpYi9LY29uZmlnLmRlYnVnXG5AQCAtMjI0NywxMCArMjI0NywxMSBAQCBjb25maWcgS0NPVl9JTlNUUlVNRU5UX0FMTFxuIGNvbmZpZyBLQ09WX0lSUV9BUkVBX1NJWkVcbiBcdGhleCBcIlNpemUgb2YgaW50ZXJydXB0IGNvdmVyYWdlIGNvbGxlY3Rpb24gYXJlYSBpbiB3b3Jkc1wiXG4gXHRkZXBlbmRzIG9uIEtDT1ZcbitcdHJhbmdlIDB4ODAgMHgxMDAwMDAwXG4gXHRkZWZhdWx0IDB4NDAwMDBcbiBcdGhlbHBcbi1cdCAgS0NPViB1c2VzIHByZWFsbG9jYXRlZCBwZXItY3B1IGFyZWFzIHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbVxuLVx0ICBzb2Z0IGludGVycnVwdHMuIFRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRob3NlIGFyZWFzIGluIHRoZVxuK1x0ICBLQ09WIHVzZXMgcHJlYWxsb2NhdGVkIGFyZWFzIHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbSBzb2Z0XG4rXHQgIGludGVycnVwdHMuIFRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRob3NlIGFyZWFzIGluIHRoZVxuIFx0ICBudW1iZXIgb2YgdW5zaWduZWQgbG9uZyB3b3Jkcy5cbiBcbiBjb25maWcgS0NPVl9TRUxGVEVTVFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6MTUuNzQ1NjEwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MjQ0NzA2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS0NPViBTb2Z0aXJxIENvdmVyYWdlIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgbWFraW5nIGNoYW5nZXMgdG8gdGhlIEtlcm5lbCBDb3ZlcmFnZSAoS0NPVikgbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNvZnRpcnEgY292ZXJhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBLQ09WIGlzIGEgY29yZSBjb21wb25lbnQgdGhhdCBzeXprYWxsZXIsIG91ciBwcmltYXJ5IGZ1enppbmcgdG9vbCwgcmVsaWVzIG9uIGhlYXZpbHkuIEl0J3MgdXNlZCBmb3IgY292ZXJhZ2UgY29sbGVjdGlvbiwgc28gYW55IG1vZGlmaWNhdGlvbnMgdG8gaXQgYXJlIGltbWVkaWF0ZWx5IHJlbGV2YW50LlxuXG5UaGUgcGF0Y2gncyBrZXkgY2hhbmdlIGlzIGhvdyBzb2Z0aXJxIGNvdmVyYWdlIGlzIGdhdGhlcmVkLiBJbnN0ZWFkIG9mIHVzaW5nIHBlci1DUFUgYXJlYXMgZm9yIElSUSBjb3ZlcmFnZSwgaXQgaW50cm9kdWNlcyBhIGdsb2JhbCBsaXN0LCBga2Nvdl9yZW1vdGVfYXJlYXNbMl1gLCBzcGxpdHRpbmcgaXQgYmV0d2VlbiB0YXNrIGFuZCBpcnEuIEl0IGFsc28gcmVsb2NhdGVzIHRoZSBLQ09WIHN0YXRlIGRhdGEsIHByZXZpb3VzbHkgc3RvcmVkIGluIGBrY292X3BlcmNwdV9kYXRhYCwgaW50byBgdGFza19zdHJ1Y3RgLCBwcmVzdW1hYmx5IHRvIHN1cHBvcnQgc29mdGlycSBwcmVlbXB0aW9uLCBzb21ldGhpbmcgdGhhdCdzIHBhcnRpY3VsYXJseSByZWxldmFudCB3aXRoIFBSRUVNUFRfUlQuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBcInN5ei1jbHVzdGVyXCIsIHNvIHRoaXMgaXMgbGlrZWx5IHNvbWV0aGluZyB0aGF0IGhhcyBiZWVuIHJldmlld2VkIGFscmVhZHkuXG5cbk15IGZpcnN0IGltcHVsc2UgaXMgdG8gY2hlY2sgaWYgdGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIEkgcXVpY2tseSBjb25maXJtOyBLQ09WIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBjcnVjaWFsIHRvIHRoZSBzeXprYWxsZXIgd29ya2Zsb3cuIEEgc2xpZ2h0IGhlc2l0YXRpb24gY29tZXMgdXAgYXMgSSBjb25zaWRlciB0aGF0IHdlJ3JlIGVzc2VudGlhbGx5IGZ1enppbmcgdGhlIGZ1enplcidzIG93biBjb3ZlcmFnZSBtZWNoYW5pc20uIEJ1dCBpdCdzIGEgY29yZSBrZXJuZWwgZmVhdHVyZSwgYW5kIG1vZGlmeWluZyB0aGUgY292ZXJhZ2UgY29sbGVjdGlvbiB3YXJyYW50cyBjYXJlZnVsIGF0dGVudGlvbi4gV2UgbmVlZCB0byBhc3Nlc3MgaWYgdGhpcyBtb2RpZmljYXRpb24gaXMgYWZmZWN0aW5nIHRoZSBhY2N1cmFjeSBvciBjb2xsZWN0aW9uIG1ldGhvZG9sb2d5IG9mIHRoZSBLQ09WIGRhdGEuXG5cblRoYW5rZnVsbHksIHN5emthbGxlciBkb2VzIGhhdmUgZGVzY3JpcHRpb25zIGZvciBLQ09WIGlvY3Rscywgc28gd2UgKmNhbiogZnV6eiBpdCBkaXJlY3RseS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuIEkndmUgbm90ZWQgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBmdW5jdGlvbnMgbGlrZSBga2Nvdl90YXNrX2luaXRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAsIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgLCBga2Nvdl9yZW1vdGVfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc3RvcGAsIGFuZCBga2Nvdl9pbml0YC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBzaGlmdCBpcyBtb3ZpbmcgYHNhdmVkX21vZGVgLCBgc2F2ZWRfc2l6ZWAsIGBzYXZlZF9hcmVhYCwgYHNhdmVkX2tjb3ZgLCBhbmQgYHNhdmVkX3NlcXVlbmNlYCBmcm9tIGBrY292X3BlcmNwdV9kYXRhYCB0byBgdGFza19zdHJ1Y3RgLiBBbHNvLCBjaGFuZ2VzIHRvIGBrY292X3JlbW90ZV9hcmVhX2dldGAgYW5kIGBrY292X3JlbW90ZV9hcmVhX3B1dGAgd2hlcmUgYSBgYm9vbCBpcnFgIGFyZ3VtZW50IGlzIGludHJvZHVjZWQsIGFuZCBga2Nvdl9pbml0YCBpcyBjaGFuZ2VkIHRvIHByZWFsbG9jYXRlIGJ1ZmZlcnMuXG5cbkNydWNpYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gYENPTkZJR19LQ09WYCBpcyBvYnZpb3VzbHkgYSBtdXN0LWhhdmUuIEludHJpZ3VpbmdseSwgYENPTkZJR19QUkVFTVBUX1JUYCBpcyBtZW50aW9uZWQgaW4gYGtjb3ZfaW5pdGA6IEl0IHNlZW1zIGxpa2UgdGhlIHNvZnRpcnEgcHJlZW1wdGlvbiBjb2RlIHdpbGwgYWxsb2NhdGUgbW9yZSBidWZmZXJzIGlmIGBQUkVFTVBUX1JUYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgZW5hYmxpbmcgYFBSRUVNUFRfUlRgIGNvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIHRob3JvdWdobHkgdGVzdCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLlxuXG5Ib3dldmVyLCBgUFJFRU1QVF9SVGAgaXMgYSBiaWcgY29uZmlndXJhdGlvbiBjaGFuZ2UsIGFmZmVjdGluZyB0aGUgZW50aXJlIGtlcm5lbCBwcmVlbXB0aW9uIG1vZGVsLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGF2b2lkcyBlbmFibGluZyBpdCB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQuIFNvLCBuZXh0IHN0ZXAgaXMgdG8gZW5zdXJlIHRoYXQgYFBSRUVNUFRfUlRgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY4MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjI1LjY3MDA4NzQ3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQzMDgyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUkVFTVBUX1JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTkwPWVuZGNob2ljZVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtOTEtXFxua2VybmVsL0tjb25maWcucHJlZW1wdDo5Mjpjb25maWcgUFJFRU1QVF9SVFxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtOTMtXFx0Ym9vbCBcXFwiRnVsbHkgUHJlZW1wdGlibGUgS2VybmVsIChSZWFsLVRpbWUpXFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMDgtXFxua2VybmVsL0tjb25maWcucHJlZW1wdDoxMDk6Y29uZmlnIFBSRUVNUFRfUlRfTkVFRFNfQkhfTE9DS1xcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTEwLVxcdGJvb2wgXFxcIkVuZm9yY2Ugc29mdGlycSBzeW5jaHJvbmlzYXRpb24gb24gUFJFRU1QVF9SVFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6MzAuMDEzMTc5MDA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM5MzA3Njk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS0NPViBSZW1vdGUgU29mdElSUSBGdW5jdGlvbnMgd2l0aCBQUkVFTVBUX1JUKipcblxuT2theSwgc28gYFBSRUVNUFRfUlRgIGlzIGluZGVlZCBhbiBvcHRpb24gaGVyZSwgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHRoZSBzcGVjaWZpY3Mgb2YgdGhlc2UgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGFuZCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCBmdW5jdGlvbnMuIFRoZXkncmUgZXhwbGljaXRseSBjYWxsZWQgZnJvbSB0aGUgc29mdGlycSBjb250ZXh0LCB3aGljaCByYWlzZXMgYSBmbGFnLiBJZiB3ZSB3YW50IHRvIHRlc3QgdGhpcywgZW5hYmxpbmcgYFBSRUVNUFRfUlRgIGlzIG5vbi1uZWdvdGlhYmxlLiBUaGUgcGF0Y2ggdGV4dCBpdHNlbGYgZHJpdmVzIHRoYXQgcG9pbnQgaG9tZSDigJMgaXQgbWVudGlvbnMgdGhlIG5lZWQgZm9yIFwidGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHByZWVtcHRpbmcgcmVtb3RlIGNvdmVyYWdlIGNvbGxlY3Rpb25cIiBhbmQgXCJleHRyYSBidWZmZXJzLi4uIGZvciBzb2Z0aXJxIHByZWVtcHRpb24sXCIgc28gYFBSRUVNUFRfUlRgIGl0IGlzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBnZXQgYSBicm9hZGVyIHBpY3R1cmUuIFdlIGhhdmUgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYWxvbmcgd2l0aCB0aGUgZmFtaWxpYXIgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3N0b3BgLCBga2Nvdl9yZW1vdGVfYXJlYV9nZXRgLCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YC5cblxuVGhlIG1vcmUgcHJlc3NpbmcgcXVlc3Rpb24gbm93IGlzOiBhcmUgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGFuZCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCBpbiBhIGhvdCBwYXRoPyBTb2Z0aXJxIHByb2Nlc3NpbmcgKmlzKiBhIGhvdCBwYXRoLCBnZW5lcmFsbHkgc3BlYWtpbmcuIEhvd2V2ZXIsIHRoZXNlIEtDT1YgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiBLQ09WIGlzIGJvdGggZW5hYmxlZCAqYW5kKiBhY3RpdmUuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3MgdHJhY2UgdGhlaXIgY2FsbCBzaXRlcyBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjM1LjQwNjI1OTM3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ5MzExODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rY292LmM9ODMzPXN0YXRpYyBpbmxpbmUgYm9vbCBrY292X21vZGVfZW5hYmxlZCh1bnNpZ25lZCBpbnQgbW9kZSlcXG4tLVxcbmtlcm5lbC9rY292LmMtODM3LVxcbmtlcm5lbC9rY292LmM6ODM4OnN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC9rY292LmMtODM5LVxcdF9fbXVzdF9ob2xkKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXFxuLS1cXG5rZXJuZWwva2Nvdi5jPTg3MD12b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTk1MC1cXHRpZiAoaW5fc2VydmluZ19zb2Z0aXJxKCkpIHtcXG5rZXJuZWwva2Nvdi5jOjk1MTpcXHRcXHRrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHQpO1xcbmtlcm5lbC9rY292LmMtOTUyLVxcdFxcdHQtXFx1MDAzZWtjb3Zfc29mdGlycSA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjM4LjA1NTU4MTQ3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzQ4NTI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtDT1YgUmVtb3RlIFN0YXJ0IEJlaGF2aW9yKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoaXMgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGNhbGxlZCBieSBga2Nvdl9yZW1vdGVfc3RhcnRgLiBBbmQgdGhhdCBtYWtlcyBzZW5zZSwgYXMgSSByZW1lbWJlciBga2Nvdl9yZW1vdGVfc3RhcnRgIGlzIHRyaWdnZXJlZCB3aGVuIGEgcmVtb3RlIEtDT1Ygc2VjdGlvbiBnZXRzIGdvaW5nIOKAkyB0aGluayB2aG9zdCwgbWFjODAyMTFfaHdzaW0sIHRoYXQga2luZCBvZiB0aGluZy4gQnV0IHdhaXTigKYgaXQncyBub3QgYSBkaXJlY3QgdHJpZ2dlciBvbiAqZXZlcnkqIHNvZnRpcnEsIGl0J3MgdGllZCBzcGVjaWZpY2FsbHkgdG8gY2FsbHMgdG8gYGtjb3ZfcmVtb3RlX3N0YXJ0YC4gVG8gY2xhcmlmeSB0aGlzLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aG8ncyBjYWxsaW5nIGBrY292X3JlbW90ZV9zdGFydGAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoZW4gYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGlzIGFjdHVhbGx5IGVuZ2FnZWQuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgc29mdGlycSBpbnRlcmFjdGlvbiBJJ20gc2VlaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDExLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjQyLjA5MDQzNzc3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTYyMTE0MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtjb3ZfcmVtb3RlX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdD0yMjc9VXNpbmcgS0NPViB0byBjb2xsZWN0IHJlbW90ZSBjb3ZlcmFnZSByZXF1aXJlczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTIyOS0xLiBNb2RpZnlpbmcga2VybmVsIGNvZGUgdG8gYW5ub3RhdGUgdGhlIGNvZGUgc2VjdGlvbiBmcm9tIHdoZXJlIGNvdmVyYWdlXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjMwOiAgIHNob3VsZCBiZSBjb2xsZWN0ZWQgd2l0aCBgYGtjb3ZfcmVtb3RlX3N0YXJ0YGAgYW5kIGBga2Nvdl9yZW1vdGVfc3RvcGBgLlxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTIzMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTIzNC1cXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdDoyMzU6Qm90aCBgYGtjb3ZfcmVtb3RlX3N0YXJ0YGAgYW5kIGBga2Nvdl9yZW1vdGVfc3RvcGBgIGFubm90YXRpb25zIGFuZCB0aGVcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdC0yMzYtYGBLQ09WX1JFTU9URV9FTkFCTEVgYCBpb2N0bCBhY2NlcHQgaGFuZGxlcyB0aGF0IGlkZW50aWZ5IHBhcnRpY3VsYXIgY292ZXJhZ2VcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0PTI1NT1Gb3IgIzEgYW5kICMzLCBhIHVuaXF1ZSBnbG9iYWwgaGFuZGxlIG11c3QgYmUgY2hvc2VuIGFuZCBwYXNzZWQgdG8gdGhlXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjU2OmNvcnJlc3BvbmRpbmcgYGBrY292X3JlbW90ZV9zdGFydGBgIGNhbGwuIFRoZW4gYSB1c2Vyc3BhY2UgcHJvY2VzcyBtdXN0IHBhc3NcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdC0yNTctdGhpcyBoYW5kbGUgdG8gYGBLQ09WX1JFTU9URV9FTkFCTEVgYCBpbiB0aGUgYGBoYW5kbGVzYGAgYXJyYXkgZmllbGQgb2YgdGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdD0yNjY9bW9kaWZpY2F0aW9ucy4gVGhvc2UgdGFza3Mgc2hvdWxkIGluIHR1cm4gdXNlIHRoZSBwYXNzZWQgaGFuZGxlIGluIHRoZWlyXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjY3OmBga2Nvdl9yZW1vdGVfc3RhcnRgYCBhbmQgYGBrY292X3JlbW90ZV9zdG9wYGAgYW5ub3RhdGlvbnMuXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3QtMjY4LUluIHRoZSBrZXJuZWwsIGNvbW1vbiBoYW5kbGVzIGFyZSB3cmFwcGVkIGluIGEgYGBrY292X2NvbW1vbl9oYW5kbGVfaWRgYCwgd2hpY2hcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdD0yOD1LQ09WIOS+nei1lue8luivkeWZqOaPkuahqe+8jOimgeaxgiBHQ0MgNi4xLjAg5Y+K5pu06auY54mI5pys5oiW6ICF5YaF5qC45pSv5oyB55qE5Lu75oSP54mI5pys55qEIENsYW5n44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3QtMjI1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyMjY6MS4g5L+u5pS55YaF5qC45rqQ56CB5bm25L2/55SoIGBga2Nvdl9yZW1vdGVfc3RhcnRgYCDlkowgYGBrY292X3JlbW90ZV9zdG9wYGAg5p2l5qCH5rOo6KaB5pS26ZuGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTIyNy0gICDopobnm5bnjofnmoTku6PnoIHniYfmrrXjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yMzAtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0OjIzMTpgYGtjb3ZfcmVtb3RlX3N0YXJ0YGAg5ZKMIGBga2Nvdl9yZW1vdGVfc3RvcGBgIOeahOagh+azqOS7peWPiiBgYEtDT1ZfUkVNT1RFX0VOQUJMRWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTIzMi1pb2N0bCDpg73mjqXlj5flj6/ku6Xor4bliKvnibnlrpropobnm5bnjofmlLbpm4bniYfmrrXnmoTlj6Xmn4TjgILlj6Xmn4TnmoTkvb/nlKjmlrnlvI/lj5blhrPkuo7ljLnphY3ku6PnoIHniYfmrrXmiadcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdD0yMzU9S0NPViDmlK/mjIHlnKjlpoLkuIvkuIrkuIvmlofkuK3mlLbpm4bov5znqIvopobnm5bnjofvvJpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yNDUt5a+55LqOICMxIOWSjCAjM++8jOW/hemhu+mAieaLqeS4gOS4queLrOeJueeahOWFqOWxgOWPpeafhOW5tuWwhuWFtuS8oOmAkue7meWvueW6lOeahFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyNDY6YGBrY292X3JlbW90ZV9zdGFydGBgIOiwg+eUqOOAguS4gOS4queUqOaIt+epuumXtOi/m+eoi+W/hemhu+WwhuivpeWPpeafhOWtmOWCqOWcqFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yNDctYGBrY292X3JlbW90ZV9hcmdgYCDnu5PmnoTkvZPnmoQgYGBoYW5kbGVgYCDmlbDnu4TlrZfmrrXkuK3lubblsIblhbbkvKDpgJLnu5lcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yNTMtYGBrY292X2hhbmRsZWBgIOWtl+auteS4reW5tuS4lOmcgOimgemAmui/h+iHquWumuS5ieWGheaguOS7o+eggeeahOS/ruaUueadpeS8oOmAkue7meaWsOWIm+W7uueahOacrOWcsOS7u+WKoVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyNTQ644CC6L+Z5Lqb5Lu75Yqh6ZyA6KaB5ZyoIGBga2Nvdl9yZW1vdGVfc3RhcnRgYCDlkowgYGBrY292X3JlbW90ZV9zdG9wYGAg5qCH5rOo5Lit5L6d5qyh5L2/55So5Lyg6YCS6L+H5p2l55qEXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTI1NS3lj6Xmn4TjgIJcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmM9MTYzMD1zdGF0aWMgdm9pZCBfX3VzYl9oY2RfZ2l2ZWJhY2tfdXJiKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmMtMTY1NS1cXHQgKi9cXG5kcml2ZXJzL3VzYi9jb3JlL2hjZC5jOjE2NTY6XFx0a2Nvdl9yZW1vdGVfc3RhcnRfdXNiX3NvZnRpcnEoKHU2NCl1cmItXFx1MDAzZWRldi1cXHUwMDNlYnVzLVxcdTAwM2VidXNudW0pO1xcbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmMtMTY1Ny1cXHR1cmItXFx1MDAzZWNvbXBsZXRlKHVyYik7XFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jPTU4NzQ9c3RhdGljIHZvaWQgaHViX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvaHViLmMtNTg4OC1cXG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jOjU4ODk6XFx0a2Nvdl9yZW1vdGVfc3RhcnRfdXNiKCh1NjQpaGRldi1cXHUwMDNlYnVzLVxcdTAwM2VidXNudW0pO1xcbmRyaXZlcnMvdXNiL2NvcmUvaHViLmMtNTg5MC1cXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYz0yNTY9aW50IHZoY2lfcnhfbG9vcCh2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTI2My1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM6MjY0OlxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbih1ZC1cXHUwMDNla2Nvdl9oYW5kbGUpO1xcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy0yNjUtXFx0XFx0dmhjaV9yeF9wZHUodWQpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTQwMD1zdGF0aWMgaW50IHZob3N0X3J1bl93b3JrX2t0aHJlYWRfbGlzdCh2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTQyNi1cXHRcXHRcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjQyNzpcXHRcXHRcXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24od29ya2VyLVxcdTAwM2VrY292X2hhbmRsZSk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTQyOC1cXHRcXHRcXHR3b3JrLVxcdTAwM2Vmbih3b3JrKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz00Mzg9c3RhdGljIGJvb2wgdmhvc3RfcnVuX3dvcmtfbGlzdCh2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTQ1Mi1cXHRcXHRcXHRjbGVhcl9iaXQoVkhPU1RfV09SS19RVUVVRUQsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjQ1MzpcXHRcXHRcXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24od29ya2VyLVxcdTAwM2VrY292X2hhbmRsZSk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTQ1NC1cXHRcXHRcXHR3b3JrLVxcdTAwM2Vmbih3b3JrKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2Nvdi5oPTM3PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC00MS0vKiBTZWUgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3QgZm9yIHVzYWdlIGRldGFpbHMuICovXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NDI6dm9pZCBrY292X3JlbW90ZV9zdGFydCh1NjQgaGFuZGxlKTtcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC00My12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZCk7XFxuaW5jbHVkZS9saW51eC9rY292Lmg9NDQ9c3RydWN0IGtjb3ZfY29tbW9uX2hhbmRsZV9pZCBrY292X2NvbW1vbl9oYW5kbGUodm9pZCk7XFxuaW5jbHVkZS9saW51eC9rY292LmgtNDUtXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NDY6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGlkKVxcbmluY2x1ZGUvbGludXgva2Nvdi5oLTQ3LXtcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo0ODpcXHRrY292X3JlbW90ZV9zdGFydChrY292X3JlbW90ZV9oYW5kbGUoS0NPVl9TVUJTWVNURU1fQ09NTU9OLCBpZC52YWwpKTtcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC00OS19XFxuaW5jbHVkZS9saW51eC9rY292LmgtNTAtXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NTE6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYih1NjQgaWQpXFxuaW5jbHVkZS9saW51eC9rY292LmgtNTIte1xcbmluY2x1ZGUvbGludXgva2Nvdi5oOjUzOlxcdGtjb3ZfcmVtb3RlX3N0YXJ0KGtjb3ZfcmVtb3RlX2hhbmRsZShLQ09WX1NVQlNZU1RFTV9VU0IsIGlkKSk7XFxuaW5jbHVkZS9saW51eC9rY292LmgtNTQtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9rY292LmgtNjItXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NjM6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYl9zb2Z0aXJxKHU2NCBpZClcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC02NC17XFxuaW5jbHVkZS9saW51eC9rY292LmgtNjUtXFx0aWYgKGluX3NlcnZpbmdfc29mdGlycSgpIFxcdTAwMjZcXHUwMDI2ICFpbl9oYXJkaXJxKCkpXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NjY6XFx0XFx0a2Nvdl9yZW1vdGVfc3RhcnRfdXNiKGlkKTtcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC02Ny19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9maW5pc2hfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkge31cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo5ODpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnQodTY0IGhhbmRsZSkge31cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC05OS1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RvcCh2b2lkKSB7fVxcbmluY2x1ZGUvbGludXgva2Nvdi5oPTEwMD1zdGF0aWMgaW5saW5lIHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQga2Nvdl9jb21tb25faGFuZGxlKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC0xMDMtfVxcbmluY2x1ZGUvbGludXgva2Nvdi5oOjEwNDpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQgaWQpIHt9XFxuaW5jbHVkZS9saW51eC9rY292Lmg6MTA1OnN0YXRpYyBpbmxpbmUgdm9pZCBrY292X3JlbW90ZV9zdGFydF91c2IodTY0IGlkKSB7fVxcbmluY2x1ZGUvbGludXgva2Nvdi5oOjEwNjpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnRfdXNiX3NvZnRpcnEodTY0IGlkKSB7fVxcbmluY2x1ZGUvbGludXgva2Nvdi5oLTEwNy1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RvcF9zb2Z0aXJxKHZvaWQpIHt9XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva2Nvdi5oLTgtICogQXJndW1lbnQgZm9yIEtDT1ZfUkVNT1RFX0VOQUJMRSBpb2N0bCwgc2VlIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2tjb3YuaDo5OiAqIGFuZCB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy5cXG5pbmNsdWRlL3VhcGkvbGludXgva2Nvdi5oLTEwLSAqL1xcbi0tXFxua2VybmVsL2tjb3YuYz00MDc9c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfcmVzZXQoc3RydWN0IGtjb3YgKmtjb3YpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTQyMS1cXHR9XFxua2VybmVsL2tjb3YuYzo0MjI6XFx0LyogRG8gcmVzZXQgYmVmb3JlIHVubG9jayB0byBwcmV2ZW50IHJhY2VzIHdpdGgga2Nvdl9yZW1vdGVfc3RhcnQoKS4gKi9cXG5rZXJuZWwva2Nvdi5jLTQyMy1cXHRrY292X3Jlc2V0KGtjb3YpO1xcbi0tXFxua2VybmVsL2tjb3YuYz00NTc9dm9pZCBrY292X3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTQ2Ni1cXHRcXHQvKlxcbmtlcm5lbC9rY292LmM6NDY3OlxcdFxcdCAqIFRoaXMgY291bGQgYmUgYSByZW1vdGUgdGFzayBiZXR3ZWVuIGtjb3ZfcmVtb3RlX3N0YXJ0KCkgYW5kXFxua2VybmVsL2tjb3YuYy00NjgtXFx0XFx0ICoga2Nvdl9yZW1vdGVfc3RvcCgpLlxcbi0tXFxua2VybmVsL2tjb3YuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga2Nvdl9mb3BzID0ge1xcbi0tXFxua2VybmVsL2tjb3YuYy03OTAtLypcXG5rZXJuZWwva2Nvdi5jOjc5MTogKiBrY292X3JlbW90ZV9zdGFydCgpIGFuZCBrY292X3JlbW90ZV9zdG9wKCkgY2FuIGJlIHVzZWQgdG8gYW5ub3RhdGUgYSBzZWN0aW9uXFxua2VybmVsL2tjb3YuYy03OTItICogb2YgY29kZSBpbiBhIGtlcm5lbCBiYWNrZ3JvdW5kIHRocmVhZCBvciBpbiBhIHNvZnRpcnEgdG8gYWxsb3cga2NvdiB0byBiZVxcbi0tXFxua2VybmVsL2tjb3YuYy03OTQtICpcXG5rZXJuZWwva2Nvdi5jOjc5NTogKiBUaGUgaGFuZGxlIGFyZ3VtZW50IG9mIGtjb3ZfcmVtb3RlX3N0YXJ0KCkgaWRlbnRpZmllcyBhIGNvZGUgc2VjdGlvbiB0aGF0IGlzXFxua2VybmVsL2tjb3YuYy03OTYtICogdXNlZCBmb3IgY292ZXJhZ2UgY29sbGVjdGlvbi4gQSB1c2Vyc3BhY2UgcHJvY2VzcyBwYXNzZXMgdGhpcyBoYW5kbGUgdG9cXG4tLVxcbmtlcm5lbC9rY292LmMtODE4LSAqIGFuZCBwYXNzZWQgdG8gdGhlIHNwYXduZWQgdGhyZWFkcyB2aWEgY3VzdG9tIGFubm90YXRpb25zLiBUaG9zZSBrZXJuZWxcXG5rZXJuZWwva2Nvdi5jOjgxOTogKiB0aHJlYWRzIG11c3QgaW4gdHVybiBiZSBhbm5vdGF0ZWQgd2l0aCBrY292X3JlbW90ZV9zdGFydChjb21tb25faGFuZGxlKSBhbmRcXG5rZXJuZWwva2Nvdi5jLTgyMC0gKiBrY292X3JlbW90ZV9zdG9wKCkuIEFsbCBvZiB0aGUgdGhyZWFkcyB0aGF0IGFyZSBzcGF3bmVkIGJ5IHRoZSBzYW1lIHByb2Nlc3NcXG4tLVxcbmtlcm5lbC9rY292LmMtODI0LSAqXFxua2VybmVsL2tjb3YuYzo4MjU6ICogSW50ZXJuYWxseSwga2Nvdl9yZW1vdGVfc3RhcnQoKSBsb29rcyB1cCB0aGUga2NvdiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxcbmtlcm5lbC9rY292LmMtODI2LSAqIHByb3ZpZGVkIGhhbmRsZSwgYWxsb2NhdGVzIGFuIGFyZWEgZm9yIGNvdmVyYWdlIGNvbGxlY3Rpb24sIGFuZCBzYXZlcyB0aGVcXG4tLVxcbmtlcm5lbC9rY292LmM9ODU1PXN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTg2OS1cXG5rZXJuZWwva2Nvdi5jOjg3MDp2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXFxua2VybmVsL2tjb3YuYy04NzEte1xcbi0tXFxua2VybmVsL2tjb3YuYy04ODgtXFx0LypcXG5rZXJuZWwva2Nvdi5jOjg4OTpcXHQgKiBDaGVjayB0aGF0IGtjb3ZfcmVtb3RlX3N0YXJ0KCkgaXMgbm90IGNhbGxlZCB0d2ljZSBpbiBiYWNrZ3JvdW5kXFxua2VybmVsL2tjb3YuYy04OTAtXFx0ICogdGhyZWFkcyBub3IgY2FsbGVkIGJ5IHVzZXIgdGFza3MgKHdpdGggZW5hYmxlZCBrY292KS5cXG4tLVxcbmtlcm5lbC9rY292LmMtODk3LVxcdC8qXFxua2VybmVsL2tjb3YuYzo4OTg6XFx0ICogQ2hlY2sgdGhhdCBrY292X3JlbW90ZV9zdGFydCgpIGlzIG5vdCBjYWxsZWQgdHdpY2UgaW4gc29mdGlycXMuXFxua2VybmVsL2tjb3YuYzo4OTk6XFx0ICogTm90ZSwgdGhhdCBrY292X3JlbW90ZV9zdGFydCgpIGNhbiBiZSBjYWxsZWQgZnJvbSBhIHNvZnRpcnEgdGhhdFxcbmtlcm5lbC9rY292LmMtOTAwLVxcdCAqIGhhcHBlbmVkIHdoaWxlIGNvbGxlY3RpbmcgY292ZXJhZ2UgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkLlxcbi0tXFxua2VybmVsL2tjb3YuYy05NTgtfVxcbmtlcm5lbC9rY292LmM6OTU5OkVYUE9SVF9TWU1CT0woa2Nvdl9yZW1vdGVfc3RhcnQpO1xcbmtlcm5lbC9rY292LmMtOTYwLVxcbmtlcm5lbC9rY292LmM9OTYxPXN0YXRpYyB2b2lkIGtjb3ZfbW92ZV9hcmVhKGVudW0ga2Nvdl9tb2RlIG1vZGUsIHZvaWQgKmRzdF9hcmVhLFxcbi0tXFxua2VybmVsL2tjb3YuYy0xMDI0LVxcbmtlcm5lbC9rY292LmM6MTAyNTovKiBTZWUgdGhlIGNvbW1lbnQgYmVmb3JlIGtjb3ZfcmVtb3RlX3N0YXJ0KCkgZm9yIHVzYWdlIGRldGFpbHMuICovXFxua2VybmVsL2tjb3YuYy0xMDI2LXZvaWQga2Nvdl9yZW1vdGVfc3RvcCh2b2lkKVxcbi0tXFxua2VybmVsL2tjb3YuYy0xMDQ3LVxcdC8qXFxua2VybmVsL2tjb3YuYzoxMDQ4OlxcdCAqIFdoZW4gaW4gc29mdGlycSwgY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcga2Nvdl9yZW1vdGVfc3RhcnQoKVxcbmtlcm5lbC9rY292LmMtMTA0OS1cXHQgKiBhY3R1YWxseSBmb3VuZCB0aGUgcmVtb3RlIGhhbmRsZSBhbmQgc3RhcnRlZCBjb2xsZWN0aW5nIGNvdmVyYWdlLlxcbi0tXFxua2VybmVsL2tjb3YuYy0xMDczLVxcdC8qXFxua2VybmVsL2tjb3YuYzoxMDc0OlxcdCAqIEtDT1ZfRElTQUJMRSBjb3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJldHdlZW4ga2Nvdl9yZW1vdGVfc3RhcnQoKVxcbmtlcm5lbC9rY292LmMtMTA3NS1cXHQgKiBhbmQga2Nvdl9yZW1vdGVfc3RvcCgpLCBoZW5jZSB0aGUgc2VxdWVuY2UgY2hlY2suXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTEwODYtXFxua2VybmVsL2tjb3YuYzoxMDg3OlxcdC8qIEdldCBpbiBrY292X3JlbW90ZV9zdGFydCgpLiAqL1xcbmtlcm5lbC9rY292LmMtMTA4OC1cXHRrY292X3B1dChrY292KTtcXG4tLVxcbmtlcm5lbC9rY292LmM9MTA5MD1FWFBPUlRfU1lNQk9MKGtjb3ZfcmVtb3RlX3N0b3ApO1xcbmtlcm5lbC9rY292LmMtMTA5MS1cXG5rZXJuZWwva2Nvdi5jOjEwOTI6LyogU2VlIHRoZSBjb21tZW50IGJlZm9yZSBrY292X3JlbW90ZV9zdGFydCgpIGZvciB1c2FnZSBkZXRhaWxzLiAqL1xcbmtlcm5lbC9rY292LmMtMTA5My1zdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfY29tbW9uX2hhbmRsZSh2b2lkKVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTM5ODk9c3RhdGljIHZvaWQgaGNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTQwMDEtXFx0Zm9yICg7IChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2aGRldi1cXHUwMDNlcnhfcSkpOyBrY292X3JlbW90ZV9zdG9wKCkpIHtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6NDAwMjpcXHRcXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtNDAwMy1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTE4MDA9c3RhdGljIHZvaWQgaWVlZTgwMjExX2lmYWNlX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODE3LVxcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnNkYXRhLVxcdTAwM2Vza2JfcXVldWUpKSkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjE4MTg6XFx0XFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTgxOS1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE4MzAtXFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2c2RhdGEtXFx1MDAzZXN0YXR1c19xdWV1ZSkpKSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTgzMTpcXHRcXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODMyLVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9NTU1Nz12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtNTY5OS1cXG5uZXQvbWFjODAyMTEvcnguYzo1NzAwOlxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbm5ldC9tYWM4MDIxMS9yeC5jLTU3MDEtXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTUyMD1zdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTUzNi1cXHRcXHRcXHRyZXR1cm47XFxubmV0L25mYy9uY2kvY29yZS5jOjE1Mzc6XFx0XFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XFxubmV0L25mYy9uY2kvY29yZS5jLTE1MzgtXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTU1OT1zdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU2NC1cXHRmb3IgKDsgKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZuZGV2LVxcdTAwM2VyeF9xKSk7IGtjb3ZfcmVtb3RlX3N0b3AoKSkge1xcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTY1OlxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTY2LVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTE2MTE9c3RhdGljIHZvaWQgbmNpX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNjIzLVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNjI0OlxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNjI1LVxcdFxcdGF0b21pY19kZWMoXFx1MDAyNm5kZXYtXFx1MDAzZWNtZF9jbnQpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9NDA1PXN0YXRpYyB2b2lkIG5jaV9oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDEzLVxcdGZvciAoOyAoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNmhkZXYtXFx1MDAzZW1zZ19yeF9xdWV1ZSkpOyBrY292X3JlbW90ZV9zdG9wKCkpIHtcXG5uZXQvbmZjL25jaS9oY2kuYzo0MTQ6XFx0XFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XFxubmV0L25mYy9uY2kvaGNpLmMtNDE1LVxcdFxcdHBpcGUgPSBOQ0lfSENQX01TR19HRVRfUElQRShza2ItXFx1MDAzZWRhdGFbMF0pO1xcbi0tXFxubmV0L25mYy9yYXdzb2NrLmM9MTg4PXN0YXRpYyB2b2lkIHJhd3NvY2tfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL3Jhd3NvY2suYy0yMDMtXFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSk7XFxubmV0L25mYy9yYXdzb2NrLmM6MjA0OlxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbm5ldC9uZmMvcmF3c29jay5jLTIwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6NDQuNjUyNTU5MTkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MzY1MTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBTb2Z0SVJRIEtDT1YgSG9vayoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IEtDT1YgaXMgaW50ZWdyYXRlZCB3aXRoIHNvZnRpcnFzLiBJIHNlZSB0aGF0IGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBpcyBpbnZvbHZlZCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIGJhY2sgaXRzIGNhbGwgcGF0aC4gTm93LCB0aGUgY29udGV4dCBzYXlzIGl0J3MgY2FsbGVkIGZyb20gYF9fZG9fc29mdGlycWAuIEhhbmcgb24gYSBzZWNvbmQuLi4gaXMgdGhhdCBkaXJlY3Q/IE9yIGRvZXMgYGtjb3Zfc29mdGlycV9zdGFydGAgc2l0IGluIGJldHdlZW4/IExldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5LiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlOyBtaXNyZWFkaW5nIHRoZSBjYWxsIGZsb3cgd291bGQgc2VuZCBtZSBkb3duIHRoZSB3cm9uZyBwYXRoIGVudGlyZWx5LiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbiBjYWxscy4gTGV0J3Mgc2VlIGV4YWN0bHkgd2hlcmUgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGlzIGNhbGxlZC4gR290dGEgY29uZmlybSB0aGF0IGNvbm5lY3Rpb24uLi4gYW5kIHRoZW4gSSBjYW4gZnVsbHkgdW5kZXJzdGFuZCBob3cgS0NPViBpbnRlcmFjdHMgd2l0aCB0aGUgU29mdElSUSBwcm9jZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIzOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjUwLjAyNjIxNDM0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2Njg4MDUxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2Nvdi5jPTgzMz1zdGF0aWMgaW5saW5lIGJvb2wga2Nvdl9tb2RlX2VuYWJsZWQodW5zaWduZWQgaW50IG1vZGUpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTgzNy1cXG5rZXJuZWwva2Nvdi5jOjgzODpzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG5rZXJuZWwva2Nvdi5jLTgzOS1cXHRfX211c3RfaG9sZChcXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKVxcbi0tXFxua2VybmVsL2tjb3YuYz04NzA9dm9pZCBrY292X3JlbW90ZV9zdGFydCh1NjQgaGFuZGxlKVxcbi0tXFxua2VybmVsL2tjb3YuYy05NTAtXFx0aWYgKGluX3NlcnZpbmdfc29mdGlycSgpKSB7XFxua2VybmVsL2tjb3YuYzo5NTE6XFx0XFx0a2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydCh0KTtcXG5rZXJuZWwva2Nvdi5jLTk1Mi1cXHRcXHR0LVxcdTAwM2VrY292X3NvZnRpcnEgPSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NTo1Mi41OTMxMTM2NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyMjcxMDI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgS0NPViBTb2Z0SVJRIExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBJIHNlZSBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgYmVpbmcgY2FsbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkFoYSEgSXQncyBmcm9tIGBrY292X3JlbW90ZV9zdGFydGAgKmNvbmRpdGlvbmFsbHkqIHdoZW4gYGluX3NlcnZpbmdfc29mdGlycSgpYCBpcyB0cnVlLlwiIEJ1dCwgdGhhdCBkb2Vzbid0IHF1aXRlIHNlZW0gcmlnaHQuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBXYWl0IGEgc2Vjb25kLCB0aGUgbW9yZSBsaWtlbHkgc2NlbmFyaW8gaXMgdGhhdCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gYGtjb3Zfc29mdGlycV9zdGFydGAuIE9rYXksIGxldCdzIGNvbmZpcm0gdGhpcyBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGtjb3Zfc29mdGlycV9zdGFydGAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gZXhhbWluZSBpdHMgaW1wbGVtZW50YXRpb24gdG8gYmUgc3VyZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGdyYXBoIHRoZXJlLiBObyBhc3N1bXB0aW9ucywgbmVlZCB0aGUgaGFyZCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc3MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjU3LjIxNTgyOTcyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNDQxNzc2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2Nvdl9zb2Z0aXJxX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6NTkuNTUwMjU5OTQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODM4MzI4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgS0NPViBTb2Z0SVJRIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgZnVuY3Rpb24sIGFuZCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuIFRoZSBvdXRwdXQgc2VlbWVkIHRvIGluZGljYXRlIHRoYXQgaXQncyBjYWxsZWQgZnJvbSB3aXRoaW4gYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYnV0IHRoZSBpbml0aWFsIGdsYW5jZSBJIHRvb2sgc3VnZ2VzdGVkIG90aGVyd2lzZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGlzLiBUaGUgb3V0cHV0IHNheXM6IGlmIHRoZSBzeXN0ZW0gaXMgc2VydmluZyBhIHNvZnRJUlEsIHRoZW4gYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGlzIGNhbGxlZC4gSXQgbG9va3MgbGlrZSBpdC4gT2theSwgc28gbm93IEknbSB0aGlua2luZywgaXMgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhY3R1YWxseSAqY2FsbGluZyogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGRpcmVjdGx5PyBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgcmVsYXRpb25zaGlwLiBMZXQncyB0cmFjZSBiYWNrIHRvIGBrY292X3JlbW90ZV9zdGFydGAgZGVmaW5pdGlvbiBpbiBga2VybmVsL2tjb3YuY2AgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MDMuNjM0MDk3MjUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwva2Nvdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0MDpcXHRcXHRcXHRpZiAoIWFyZWEpIHtcXG4gOTQxOlxcdFxcdFxcdFxcdGtjb3ZfcHV0KGtjb3YpO1xcbiA5NDI6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA5NDM6XFx0XFx0XFx0fVxcbiA5NDQ6XFx0XFx0XFx0bG9jYWxfbG9ja19pcnFzYXZlKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcXG4gOTQ1OlxcdFxcdH1cXG4gOTQ2OlxcdFxcbiA5NDc6XFx0XFx0LyogUmVzZXQgY292ZXJhZ2Ugc2l6ZS4gKi9cXG4gOTQ4OlxcdFxcdCoodTY0ICopYXJlYSA9IDA7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdFxcdGlmIChpbl9zZXJ2aW5nX3NvZnRpcnEoKSkge1xcbiA5NTE6XFx0XFx0XFx0a2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydCh0KTtcXG4gOTUyOlxcdFxcdFxcdHQtXFx1MDAzZWtjb3Zfc29mdGlycSA9IDE7XFxuIDk1MzpcXHRcXHR9XFxuIDk1NDpcXHRcXHRrY292X3N0YXJ0KHQsIGtjb3YsIHNpemUsIGFyZWEsIG1vZGUsIHNlcXVlbmNlKTtcXG4gOTU1OlxcdFxcbiA5NTY6XFx0XFx0bG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpO1xcbiA5NTc6XFx0XFxuIDk1ODpcXHR9XFxuIDk1OTpcXHRFWFBPUlRfU1lNQk9MKGtjb3ZfcmVtb3RlX3N0YXJ0KTtcXG4gOTYwOlxcdFxcbiA5NjE6XFx0c3RhdGljIHZvaWQga2Nvdl9tb3ZlX2FyZWEoZW51bSBrY292X21vZGUgbW9kZSwgdm9pZCAqZHN0X2FyZWEsXFxuIDk2MjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZHN0X2FyZWFfc2l6ZSwgdm9pZCAqc3JjX2FyZWEpXFxuIDk2MzpcXHR7XFxuIDk2NDpcXHRcXHR1NjQgd29yZF9zaXplID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xcbiA5NjU6XFx0XFx0dTY0IGNvdW50X3NpemUsIGVudHJ5X3NpemVfbG9nO1xcbiA5NjY6XFx0XFx0dTY0IGRzdF9sZW4sIHNyY19sZW47XFxuIDk2NzpcXHRcXHR2b2lkICpkc3RfZW50cmllcywgKnNyY19lbnRyaWVzO1xcbiA5Njg6XFx0XFx0dTY0IGRzdF9vY2N1cGllZCwgZHN0X2ZyZWUsIGJ5dGVzX3RvX21vdmUsIGVudHJpZXNfbW92ZWQ7XFxuIDk2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MDMuNjM0MjEyMThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIwODU4MTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmRlcnN0YW5kaW5nIHRoZSBSZW1vdGUgS0NPViBTdGFydC9TdG9wIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBmb2xsb3dpbmcgdGhlIGNvZGUgZmxvdyBoZXJlLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBnZXRzIGNhbGxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBoYXBwZW5pbmcgZnJvbSBhIHNvZnRpcnEgY29udGV4dCwgbGlrZSB0aGUgYGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYl9zb2Z0aXJxYCBjYWxsIHN1Z2dlc3RzLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggaW50ZXJydXB0cyBjb21pbmcgZnJvbSBleHRlcm5hbCBkZXZpY2VzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXQgY2hlY2tzIGBpbl9zZXJ2aW5nX3NvZnRpcnEoKWAuICBUaGF04oCZcyB0aGUga2V5IGNvbnRleHQgY2hlY2suIElmIHdlICphcmUqIGluIGEgc29mdGlycSwgaXQgY2FsbHMgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQodClgLiAgVGhpcyBpcyBjbGV2ZXIuIEl0IHNhdmVzIHRoZSBleGlzdGluZyBLQ09WIHN0YXRlLCBpZiBvbmUgZXhpc3RzLCBhbmQgKnN0b3BzKiBpdC4gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgYW55IGNvdmVyYWdlIHRyYWNpbmcgaGFwcGVuaW5nIGF0IHRoZSB0aW1lLiBUaGVuLCBhbmQgb25seSB0aGVuLCBkb2VzIGl0IGtpY2sgb2ZmIGBrY292X3N0YXJ0YCBmb3IgdGhlIHJlbW90ZSBjb3ZlcmFnZS4gVGhpcyBtZWFucyB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBsb2NhbCBLQ09WIHRvIHJlbW90ZSBLQ09WLiBUaGUgc3lzdGVtIGlzIHByb2JhYmx5IHN3aXRjaGluZyBmcm9tIGxvY2FsIGluc3RydW1lbnRhdGlvbiBvZiB0aGUga2VybmVsIHRvIHVzaW5nIGEgcmVtb3RlIGluc3RhbmNlIGZvciBwcm9maWxpbmcuXG5cbkFuZCBmaW5hbGx5LCB3aGVuIGBrY292X3JlbW90ZV9zdG9wYCBpcyBjYWxsZWQsIGl0IHJlc3RvcmVzIHRoZSBzYXZlZCBLQ09WIHN0YXRlLiAgVGhpcyBzZWVtcyBjbGVhbiDigJMgaXQgcmV0dXJucyB1cyB0byB0aGUgc3RhdGUgd2Ugd2VyZSBpbiBiZWZvcmUgdGhlIHJlbW90ZSBwcm9maWxpbmcgc3RhcnRlZCwgZW5zdXJpbmcgbm8gZGF0YSBpcyBsb3N0IG9yIGNvcnJ1cHRlZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vdGhpbmcgaGFwcGVucyB3aXRoIG91ciBleGlzdGluZyB0cmFjaW5nLCBpZiBhbnkuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGtjb3ZfcmVtb3RlX3N0b3BgIGZ1bmN0aW9uIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCByZXN0b3JhdGlvbiBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTUyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MDkuODQyNzk2NjM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwva2Nvdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFxuMTA4MTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xcbjEwODI6XFx0XFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgc2l6ZSwgIWluX3Rhc2soKSk7XFxuMTA4MzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XFxuMTA4NDpcXHRcXG4xMDg1OlxcdFxcdGxvY2FsX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcXG4xMDg2OlxcdFxcbjEwODc6XFx0XFx0LyogR2V0IGluIGtjb3ZfcmVtb3RlX3N0YXJ0KCkuICovXFxuMTA4ODpcXHRcXHRrY292X3B1dChrY292KTtcXG4xMDg5OlxcdH1cXG4xMDkwOlxcdEVYUE9SVF9TWU1CT0woa2Nvdl9yZW1vdGVfc3RvcCk7XFxuMTA5MTpcXHRcXG4xMDkyOlxcdC8qIFNlZSB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy4gKi9cXG4xMDkzOlxcdHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQga2Nvdl9jb21tb25faGFuZGxlKHZvaWQpXFxuMTA5NDpcXHR7XFxuMTA5NTpcXHRcXHRpZiAoIWluX3Rhc2soKSlcXG4xMDk2OlxcdFxcdFxcdHJldHVybiAoc3RydWN0IGtjb3ZfY29tbW9uX2hhbmRsZV9pZCl7IC52YWwgPSAwIH07XFxuMTA5NzpcXHRcXHRyZXR1cm4gKHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQpeyAudmFsID0gY3VycmVudC1cXHUwMDNla2Nvdl9oYW5kbGUgfTtcXG4xMDk4OlxcdH1cXG4xMDk5OlxcdEVYUE9SVF9TWU1CT0woa2Nvdl9jb21tb25faGFuZGxlKTtcXG4xMTAwOlxcdFxcbjExMDE6XFx0I2lmZGVmIENPTkZJR19LQ09WX1NFTEZURVNUXFxuMTEwMjpcXHRzdGF0aWMgdm9pZCBfX2luaXQgc2VsZnRlc3Qodm9pZClcXG4xMTAzOlxcdHtcXG4xMTA0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XFxuMTEwNTpcXHRcXG4xMTA2OlxcdFxcdHByX2VycihcXFwicnVubmluZyBzZWxmIHRlc3RcXFxcblxcXCIpO1xcbjExMDc6XFx0XFx0LypcXG4xMTA4OlxcdFxcdCAqIFRlc3QgdGhhdCBpbnRlcnJ1cHRzIGRvbid0IHByb2R1Y2Ugc3B1cmlvdXMgY292ZXJhZ2UuXFxuMTEwOTpcXHRcXHQgKiBUaGUgY292ZXJhZ2UgY2FsbGJhY2sgZmlsdGVycyBvdXQgaW50ZXJydXB0IGNvZGUsIGJ1dCBvbmx5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ2OjA5Ljg0MjkwMzgxNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk3MDczMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhc3N1bWluZyBJJ20gYWxyZWFkeSBkZWVwIGludG8gdGhpcyBjb2RlOlxuXG4qKkxvY2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgKipcblxuUmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgZnVuY3Rpb24gaXRzZWxmLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgdGhpcyBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCBmdW5jdGlvbiBiZWluZyAqdXNlZCo/IEkgbmVlZCB0byBzZWUgdGhlIGNhbGwgc2l0ZXMuIFVuZGVyc3RhbmRpbmcgaG93IGl0J3MgaW52b2tlZCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB3aGF0ZXZlciB0aGlzIGtjb3YtcmVsYXRlZCBzdWJzeXN0ZW0gaXMgZG9pbmcuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gdHJhY2Ugd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQsIHdoaWNoIHdpbGwgc2hvdyB0aGUgZGlmZmVyZW50IHBhdGhzIGFuZCBjb25kaXRpb25zIGludm9sdmVkIGluIGV4ZWN1dGluZyBpdC4gVGhhdCdzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NjoxMi45Mzk5ODAzMzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTA4NjIzNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2Nvdi5jPTgzOD1zdGF0aWMgdm9pZCBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4tLVxcbmtlcm5lbC9rY292LmMtODU0LVxcbmtlcm5lbC9rY292LmM6ODU1OnN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL2tjb3YuYy04NTYtXFx0X19tdXN0X2hvbGQoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaylcXG4tLVxcbmtlcm5lbC9rY292LmM9MTAyNj12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZClcXG4tLVxcbmtlcm5lbC9rY292LmMtMTA2OC1cXHRcXHR0LVxcdTAwM2VrY292X3NvZnRpcnEgPSAwO1xcbmtlcm5lbC9rY292LmM6MTA2OTpcXHRcXHRrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3AodCk7XFxua2VybmVsL2tjb3YuYy0xMDcwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MTUuODUwODUwNTcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTk4NDE0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS0NPViBTb2Z0aXJxIENvdmVyYWdlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaG93IEtDT1YgaGFuZGxlcyBzb2Z0aXJxIGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyB0aGUgcHJlZW1wdGlvbiBpc3N1ZXMgdGhhdCBhcmlzZSB3aXRoIGBQUkVFTVBUX1JUYC4gTGV0J3MgYnJlYWsgaXQgZG93biBpbiBteSBtaW5kOlxuXG5GaXJzdGx5LCBJIHNlZSB0aGF0IGBrY292X3JlbW90ZV9zdG9wYCBpcyBub3cgZGlyZWN0bHkgY2FsbGluZyBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgc28gdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGhvdyB0aGUgY292ZXJhZ2UgYXJlYXMgYXJlIG1hbmFnZWQuXG5cblRoZSBrZXkgYWRqdXN0bWVudHMgYXJlIGNsZWFyOiBga2Nvdl9yZW1vdGVfYXJlYXNgIGhhcyBiZWVuIHJlc3RydWN0dXJlZCBpbnRvIGFuIGFycmF5IG9mIHR3byBsaXN0czsgb25lIGZvciB0YXNrcyBhbmQgYW5vdGhlciBmb3IgaW50ZXJydXB0cywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0LiBTZWNvbmRseSwgZnVuY3Rpb25zIGxpa2UgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCBub3cgdGFrZSBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgd2hldGhlciB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gSVJRIG9yIGEgdGFzaywgZXNzZW50aWFsIGZvciBkaWZmZXJlbnRpYXRpbmcgdGhlIHR3by5cblxuVGhlbiB0aGVyZSdzIHRoZSBpbml0aWFsaXphdGlvbjogYGtjb3ZfaW5pdGAgbm93IGFsbG9jYXRlcyBidWZmZXJzIHNwZWNpZmljYWxseSBmb3IgaW50ZXJydXB0cywgc2l6ZWQgYWNjb3JkaW5nIHRvIGBDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFYCwgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBpbnRlcnJ1cHQgbGlzdC4gVGhpcyBpcyBrZXksIHBhcnRpY3VsYXJseSBpbiBhbiBgUFJFRU1QVF9SVGAgZW52aXJvbm1lbnQsIHdoZXJlIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcHJlLWVtcHQgc29mdGlycXMgd2hpbGUgY29sbGVjdGluZyBjb3ZlcmFnZS5cblxuV2hlbiBLQ09WIHN0YXJ0cywgaXQgZ2V0cyBhbiBhcmVhIGZyb20gdGhlIGludGVycnVwdCBsaXN0IGlmIGl0J3MgKm5vdCogcnVubmluZyBpbiBhIHRhc2ssIGFuZCBjb252ZXJzZWx5LCBpdCBwdXRzIHRoZSBhcmVhIGJhY2sgaW4gdGhlIGludGVycnVwdCBsaXN0IHdoZW4gaXQgc3RvcHMsIGFnYWluLCBpZiBub3QgaW4gYSB0YXNrLiBUaGlzIGR5bmFtaWMgYWxsb2NhdGlvbiBpcyBjcml0aWNhbCBmb3IgbWFuYWdpbmcgY292ZXJhZ2UgaW4gYSBwcmVlbXB0aWJsZSBzb2Z0aXJxIGNvbnRleHQuIEZpbmFsbHksIEkgbm90aWNlIHRoZSBzYXZlZCBLQ09WIHN0YXRlIGhhcyBiZWVuIG1vdmVkIGZyb20gYGtjb3ZfcGVyY3B1X2RhdGFgIHRvIGB0YXNrX3N0cnVjdGAsIGFub3RoZXIgaW1wb3J0YW50IHN0cnVjdHVyYWwgY2hhbmdlLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgYWxsb3dzIHNvZnRpcnEgY292ZXJhZ2UgdG8gYmUgcHJlZW1wdGVkLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCdzIG5lZWRlZCBmb3IgYFBSRUVNUFRfUlRgIOKAkyB0aGUgbWFpbiBtb3RpdmF0aW9uLCBpdCBzZWVtcy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIGEgdmFsdWFibGUgY2hhbmdlLCBwYXJ0aWN1bGFybHkgZm9yIHJlYWwtdGltZSBzeXN0ZW1zLlxuXG5JcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB3aXRob3V0IHF1ZXN0aW9uLiBUaGlzIGlzIGEgY29yZSBrZXJuZWwgZmVhdHVyZSB0aGF0LCBpZiBicm9rZW4sIHdvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wYWN0cy5cblxuQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgdGhhdCBmb3IgbXkgdGVzdGluZywgSSdsbCBuZWVkIGBDT05GSUdfS0NPVj15YCBhbmQgZGVmaW5pdGVseSBgQ09ORklHX1BSRUVNUFRfUlQ9eWAgdG8gdGVzdCB0aGUgYWN0dWFsIHByZWVtcHRpb24gYXNwZWN0IG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGlzIHRoZSB3aG9sZSBwb2ludC4gSSBrbm93IGl0J3MgdGhlcmUuIEkgZGlkIG15IGNoZWNrcy4gYENPTkZJR19LQ09WX0VOQUJMRV9DT01QQVJJU09OUz15YCBtaWdodCBiZSByZWxldmFudCwgYnV0IGlzIHByb2JhYmx5IG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIHRoaXMgcGF0Y2guIEkgdXN1YWxseSB3b3JrIHdpdGggYENPTkZJR19LQ09WX0lOU1RSVU1FTlRfQUxMPXlgLCBhbmQgYENPTkZJR19ERUJVR19GUz15YCBpcyBuZWNlc3NhcnksIHNpbmNlIEtDT1YgdXNlcyBkZWJ1Z2ZzLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBrY292X2luaXRgIHRvIHNlZSBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NjoyMy42MTA2OTY5NDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9rY292LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMDpcXHRcXHR3aGlsZSAoKGppZmZpZXMgLSBzdGFydCkgKiBNU0VDX1BFUl9TRUMgLyBIWiBcXHUwMDNjIDMwMClcXG4xMTIxOlxcdFxcdFxcdDtcXG4xMTIyOlxcdFxcdFdSSVRFX09OQ0UoY3VycmVudC1cXHUwMDNla2Nvdl9tb2RlLCAwKTtcXG4xMTIzOlxcdFxcdHByX2VycihcXFwiZG9uZSBydW5uaW5nIHNlbGYgdGVzdFxcXFxuXFxcIik7XFxuMTEyNDpcXHR9XFxuMTEyNTpcXHQjZW5kaWZcXG4xMTI2OlxcdFxcbjExMjc6XFx0c3RhdGljIGludCBfX2luaXQga2Nvdl9pbml0KHZvaWQpXFxuMTEyODpcXHR7XFxuMTEyOTpcXHRcXHRpbnQgY3B1ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0I2lmZGVmIENPTkZJR19QUkVFTVBUX1JUXFxuMTEzMjpcXHRcXHQvKiBBbGxvY2F0ZSBzb21lIGV4dHJhIGJ1ZmZlcnMgaW4gb3JkZXIgdG8gcHJlcGFyZSBmb3Igc29mdGlycSBwcmVlbXB0aW9uLiAqL1xcbjExMzM6XFx0XFx0Y3B1ID0gY3B1IFxcdTAwM2U9IDQgPyBjcHUgKiAyIDogY3B1ICsgNDtcXG4xMTM0OlxcdCNlbmRpZlxcbjExMzU6XFx0XFx0d2hpbGUgKGNwdS0tKSB7XFxuMTEzNjpcXHRcXHRcXHR2b2lkICphcmVhID0gdm1hbGxvYyhDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4xMTM3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdFxcdGlmICghYXJlYSlcXG4xMTQwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNDE6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcXG4xMTQyOlxcdFxcdFxcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUsIHRydWUpO1xcbjExNDM6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jaywgZmxhZ3MpO1xcbjExNDQ6XFx0XFx0fVxcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHQvKlxcbjExNDc6XFx0XFx0ICogVGhlIGtjb3YgZGVidWdmcyBmaWxlIHdvbid0IGV2ZXIgZ2V0IHJlbW92ZWQgYW5kIHRodXMsXFxuMTE0ODpcXHRcXHQgKiB0aGVyZSBpcyBubyBuZWVkIHRvIHByb3RlY3QgaXQgYWdhaW5zdCByZW1vdmFsIHJhY2VzLiBUaGVcXG4xMTQ5OlxcdFxcdCAqIHVzZSBvZiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX3Vuc2FmZSgpIGlzIGFjdHVhbGx5IHNhZmUgaGVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MjMuNjEwOTU5Mzc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMzIxMTUwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gUmVtb3RlIEtDT1YgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBLQ09WIG1vZGlmaWNhdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoIGBLQ09WYCBhbmQgYFBSRUVNUFRfUlRgIGVuYWJsZWQuIEkndmUgZ290IGEgc2V0IG9mIGZvY3VzIHN5bWJvbHMgaW4gbWluZDogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCwgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYW5kIGBrY292X3JlbW90ZV9zdG9wYC4gVGhlIGBrY292X2luaXRgIGZ1bmN0aW9uIGlzIGlycmVsZXZhbnQgaGVyZSwgaXQncyBqdXN0IHRoZSBpbml0aWFsaXphdGlvbi5cblxuVGhlIGtleSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIGBrY292X3JlbW90ZV9zdGFydGAgYW5kIGBrY292X3JlbW90ZV9zdG9wYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZT8gVGhlIGFuc3dlciBpcyB5ZXMsIHRocm91Z2ggdGhlIGBLQ09WX1JFTU9URV9FTkFCTEVgIGlvY3RsLiBJdCBzZXRzIHVwIHRoZSBoYW5kbGUgZm9yIHJlbW90ZSBjb3ZlcmFnZS4gTm93LCB0aGlzIGlzIGNydWNpYWw6IHRoZSBhY3R1YWwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhbmQgYGtjb3ZfcmVtb3RlX3N0b3BgIGFyZSBpbnZva2VkIGJ5IGtlcm5lbCB0aHJlYWRzIG9yIHNvZnRpcnFzICp1c2luZyogdGhhdCBoYW5kbGUuIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBVU0IsIHZob3N0LCBhbnl0aGluZyB0aGF0J3MgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCBhbmQgbWlnaHQgYmUgZXhlcmNpc2luZyB0aGlzIGNvZGUuXG5cblN5emthbGxlciwgZXNwZWNpYWxseSwgdXRpbGl6ZXMgYEtDT1ZfUkVNT1RFX0VOQUJMRWAgcXVpdGUgYSBiaXQgdG8gY29sbGVjdCBjb3ZlcmFnZSBmcm9tIHRoZXNlIGJhY2tncm91bmQgdGhyZWFkcyDigJMgVVNCLCB2aG9zdCwgbWFjODAyMTFfaHdzaW0sIHRoYXQga2luZCBvZiB0aGluZy4gU28sIHRob3NlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgaGVhdmlseSBleGVyY2lzZWQuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIGluY2x1ZGUgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhcyBhIGZvY3VzIHN5bWJvbCwgYW5kIHRoZW4gSSByZWFsaXplZCB0aGF0IGl0IGlzIGEgZGlyZWN0IGFyZWEgb2YgY2hhbmdlLiBJdCdzIHRoZSBmdW5jdGlvbiB0aGF0ICp3ZSogbW9kaWZpZWQgYW5kIHdhbnQgdG8gYmUgdGVzdGluZy5cblxuSXQncyBhIHJlbGF0aXZlbHkgc21hbGwgZnVuY3Rpb24sIHNvIHNob3VsZCBJIGxvb2sgZm9yIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucz8gSSdtIGFsc28gcmVtZW1iZXJpbmcgdGhhdCBga2Nvdl90YXNrX2luaXRgIGlzIG1vZGlmaWVkLCBidXQgdGhhdCdzIGNhbGxlZCBvbiBldmVyeSB0YXNrIGNyZWF0aW9uLiBUaGF0J3MgYSBob3QgcGF0aCwgYW5kIHByb2JhYmx5IG5vdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmb2N1cy4gYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCBhcmUgZ29vZCBwb3NzaWJpbGl0aWVzLlxuXG5SZXZpZXdpbmcgdGhlIGZvY3VzIHN5bWJvbHMgYWdhaW46IGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcGAsIGBrY292X3JlbW90ZV9hcmVhX2dldGAsIGBrY292X3JlbW90ZV9hcmVhX3B1dGAsIGBrY292X3JlbW90ZV9zdGFydGAsIGBrY292X3JlbW90ZV9zdG9wYC5cblxuQW5kIGJhY2sgdG8gYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhbmQgYGtjb3ZfcmVtb3RlX3N0b3BgLiBUaGV5IGFyZSBjYWxsZWQgdmVyeSBmcmVxdWVudGx5IGlmIHJlbW90ZSBjb3ZlcmFnZSBpcyBlbmFibGVkLiBTbywgaXMgaXQgYSBob3QgcGF0aD8gWWVzLCBpdCBpcyBmb3IgcmVtb3RlIGNvdmVyYWdlLiBBbmQgdGhpcyBpcyAqZXhhY3RseSogdGhlIGZlYXR1cmUgd2Ugd2FudCB0byB0ZXN0LiBTbywgSSB3aWxsIGluY2x1ZGUgdGhlbS5cblxuU28sIGluIHN1bW1hcnksIEknbSBmb2N1c2luZyBvbiB0aG9zZSByZW1vdGUgS0NPViBmdW5jdGlvbnMuIFRoZSBjb25maWdzIGFyZSBgS0NPVmAgYW5kIGBQUkVFTVBUX1JUYC4gTm93IEkgbmVlZCB0byBjaGVjayB0byBiZSBzdXJlIGBQUkVFTVBUX1JUYCBkb2Vzbid0IGhhdmUgYW55IGRlcGVuZGVuY2llcyBhbmQgaXMganVzdCBhIGJvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTQ0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MzIuNzQzMDc3OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyOTAyOTM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJFRU1QVF9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD05MD1lbmRjaG9pY2VcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6OTI6Y29uZmlnIFBSRUVNUFRfUlRcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkzLVxcdGJvb2wgXFxcIkZ1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTA4LVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTA5OmNvbmZpZyBQUkVFTVBUX1JUX05FRURTX0JIX0xPQ0tcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cXHRib29sIFxcXCJFbmZvcmNlIHNvZnRpcnEgc3luY2hyb25pc2F0aW9uIG9uIFBSRUVNUFRfUlRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ2OjM1LjM3MjExNjM4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5OTM1ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFByZWVtcHRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVlbXB0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL0tjb25maWcucHJlZW1wdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5Mi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwcmVlbXB0aW9uLXJlbGF0ZWQgc2V0dGluZ3MgdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMgYXJlIGxpa2VseSBsYWlkIG91dCDigJMgdGhlIGBjb25maWcgUFJFRU1QVGAsIGBjb25maWcgUFJFRU1QVF9SVGAgYW5kIHJlbGF0ZWQgb3B0aW9ucy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIHRyYWRlLW9mZnM6IHRoZSBpbXBhY3Qgb24gcmVhbC10aW1lIHBlcmZvcm1hbmNlLCBzY2hlZHVsaW5nIGxhdGVuY3ksIGFuZCBvdmVyYWxsIGtlcm5lbCBjb21wbGV4aXR5LiBJJ20gaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0IG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMgaW4gaG93IHByZWVtcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCB0aGF0IGxldmVsLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NjozOS40MjIwNTg3MTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9OT19QUkVFTVBUXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbiAgODI6XFx0XFx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHNjaGVkdWxlciBkcml2ZW4gcHJlZW1wdGlvbiBtb2RlbCB0aGF0XFxuICA4NTpcXHRcXHQgIGlzIGZ1bmRhbWVudGFsbHkgc2ltaWxhciB0byBmdWxsIHByZWVtcHRpb24sIGJ1dCBpcyBsZXNzXFxuICA4NjpcXHRcXHQgIGVhZ2VyIHRvIHByZWVtcHQgU0NIRURfTk9STUFMIHRhc2tzIGluIGFuIGF0dGVtcHQgdG9cXG4gIDg3OlxcdFxcdCAgcmVkdWNlIGxvY2sgaG9sZGVyIHByZWVtcHRpb24gYW5kIHJlY292ZXIgc29tZSBvZiB0aGUgcGVyZm9ybWFuY2VcXG4gIDg4OlxcdFxcdCAgZ2FpbnMgc2VlbiBmcm9tIHVzaW5nIFZvbHVudGFyeSBwcmVlbXB0aW9uLlxcbiAgODk6XFx0XFxuICA5MDpcXHRlbmRjaG9pY2VcXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIFBSRUVNUFRfUlRcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkZ1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVxcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gRVhQRVJUIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1VQUE9SVFNfUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbiAgOTU6XFx0XFx0c2VsZWN0IFBSRUVNUFRJT05cXG4gIDk2OlxcdFxcdGhlbHBcXG4gIDk3OlxcdFxcdCAgVGhpcyBvcHRpb24gdHVybnMgdGhlIGtlcm5lbCBpbnRvIGEgcmVhbC10aW1lIGtlcm5lbCBieSByZXBsYWNpbmdcXG4gIDk4OlxcdFxcdCAgdmFyaW91cyBsb2NraW5nIHByaW1pdGl2ZXMgKHNwaW5sb2Nrcywgcndsb2NrcywgZXRjLikgd2l0aFxcbiAgOTk6XFx0XFx0ICBwcmVlbXB0aWJsZSBwcmlvcml0eS1pbmhlcml0YW5jZSBhd2FyZSB2YXJpYW50cywgZW5mb3JjaW5nXFxuIDEwMDpcXHRcXHQgIGludGVycnVwdCB0aHJlYWRpbmcgYW5kIGludHJvZHVjaW5nIG1lY2hhbmlzbXMgdG8gYnJlYWsgdXAgbG9uZ1xcbiAxMDE6XFx0XFx0ICBub24tcHJlZW1wdGlibGUgc2VjdGlvbnMuIFRoaXMgbWFrZXMgdGhlIGtlcm5lbCwgZXhjZXB0IGZvciB2ZXJ5XFxuIDEwMjpcXHRcXHQgIGxvdyBsZXZlbCBhbmQgY3JpdGljYWwgY29kZSBwYXRocyAoZW50cnkgY29kZSwgc2NoZWR1bGVyLCBsb3dcXG4gMTAzOlxcdFxcdCAgbGV2ZWwgaW50ZXJydXB0IGhhbmRsaW5nKSBmdWxseSBwcmVlbXB0aWJsZSBhbmQgYnJpbmdzIG1vc3RcXG4gMTA0OlxcdFxcdCAgZXhlY3V0aW9uIGNvbnRleHRzIHVuZGVyIHNjaGVkdWxlciBjb250cm9sLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIHN5c3RlbXMgd2hpY2hcXG4gMTA3OlxcdFxcdCAgcmVxdWlyZSByZWFsLXRpbWUgZ3VhcmFudGVlcy5cXG4gMTA4OlxcdFxcbiAxMDk6XFx0Y29uZmlnIFBSRUVNUFRfUlRfTkVFRFNfQkhfTE9DS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NjozOS40MjIyMzg0ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MzExMDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gUmVhbC1UaW1lIFByZWVtcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdG8gY29uZmlndXJlIGBQUkVFTVBUX1JUYC4gSXQgc2VlbXMgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSBuZWVkIGBFWFBFUlRgLCBgQVJDSF9TVVBQT1JUU19SVGAsIGFuZCAqbm90KiBgQ09NUElMRV9URVNUYC4gVGhpcyBtZWFucywgdG8gZ2V0IGBQUkVFTVBUX1JUYCBydW5uaW5nLCBJIHNob3VsZCBlbmFibGUgYm90aCBgUFJFRU1QVF9SVGAgYW5kIGBFWFBFUlRgLiBcblxuTm93LCBhIHF1aWNrIHJlbWluZGVyOiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYEVYUEVSVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgaW4gbW9zdCBvZiB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zIEkgd29yayB3aXRoLiBUaGF0J3MgdXN1YWxseSBub3QgYW4gaXNzdWUuXG5cbkJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gYEFSQ0hfU1VQUE9SVFNfUlRgIGlzIGNvcnJlY3RseSBzZXQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB3aGV0aGVyIHRoYXQgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ2OjQzLjY3NTM1MzgyMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3OTUyNjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9TVVBQT1JUU19SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTE0OTM9Y29uZmlnIEFSQ0hfTk9fUFJFRU1QVFxcbi0tXFxuYXJjaC9LY29uZmlnLTE0OTUtXFxuYXJjaC9LY29uZmlnOjE0OTY6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUlRcXG5hcmNoL0tjb25maWctMTQ5Ny1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ2OjQ2LjI1NDg4ODMyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTk4ODEzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBRdWVyeSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHg4NiBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6ICpEb2VzIHg4NiBoYXZlIHRoZSBgQVJDSF9TVVBQT1JUU19SVGAgZmxhZyBlbmFibGVkPyogVGhhdCdzIHRoZSBjcml0aWNhbCBmaXJzdCBjaGVjay4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBsb3QgYWJvdXQgdGhlIGFyY2hpdGVjdHVyYWwgY2FwYWJpbGl0aWVzIGFuZCB3aGljaCByZWFsLXRpbWUgZmVhdHVyZXMgbWlnaHQgYmUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBwb3RlbnRpYWxseSBzdXBwb3J0ZWQsIGF0IHRoaXMgc3RhZ2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24uIFdpdGhvdXQgYEFSQ0hfU1VQUE9SVFNfUlRgLCBJIGxpa2VseSB3b24ndCBldmVuICpjb25zaWRlciogbWFueSBvZiB0aGUgcmVhbC10aW1lIG9wdGlvbnMgZG93biB0aGUgbGluZS4gSXQncyBhIGZ1bmRhbWVudGFsIGdhdGluZyBmYWN0b3IsIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc3BlY2lmaWMgeDg2IHNldHVwIGlzIGNvbmZpZ3VyZWQgaW4gcmVsYXRpb24gdG8gcmVhbC10aW1lIHdvcmtsb2Fkcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYgZXZlbiAqcGVybWl0cyogbWUgdG8gcHJvY2VlZCBkb3duIHRoYXQgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0Njo0OS42MTQ3NzU2NjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDczMzQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTMyLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR19USElOXFxuYXJjaC94ODYvS2NvbmZpZzoxMzM6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcXG5hcmNoL3g4Ni9LY29uZmlnLTEzNC1cXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0Njo0OS43NTU1MjExOTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU4MzMzMjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgdGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbGl0eSB0aWVkIHRvIGBQUkVFTVBUX1JUYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggS0NPViwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBjb3ZlcmFnZSBjb2xsZWN0aW9uIGluIHNvZnQgaW50ZXJydXB0IGNvbnRleHRzIGFuZCBwb3RlbnRpYWwgc29mdGlycSBwcmVlbXB0aW9uLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgUFJFRU1QVF9SVGAgaXMgaW5kZWVkIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIGluY2x1ZGVkLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBpbmNsdWRlcyBhIG1vZGlmaWNhdGlvbiB0byBgbGliL0tjb25maWcuZGVidWdgLCBidXQgaXQncyBqdXN0IGEgcmFuZ2UgdXBkYXRlIGFuZCBoZWxwIHRleHQgY2hhbmdlIHJlbGF0ZWQgdG8gYEtDT1ZfSVJRX0FSRUFfU0laRWAsIG5vdCB0aGUgYWRkaXRpb24gb2YgYSBuZXcgY29uZmlnLlxuXG5TaW5jZSB0aGUgZm9jdXMgaXMgbm93IG9uIHRoZSBwcmVlbXB0aW9uIGFzcGVjdCB1bmRlciBgUFJFRU1QVF9SVGAgYW5kIHJlbW90ZSBLQ09WLCBhbmQgZ2l2ZW4gdGhhdCBgS0NPVmAgaXMgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLCBJJ2xsIGp1c3QgbmVlZCB0byBlbmFibGUgYFBSRUVNUFRfUlRgIHRvIGZvY3VzIG9uIHRoZSBuZXcgcHJlZW1wdGlvbiBmdW5jdGlvbmFsaXR5LiBJJ20gbm90aW5nIGBLQ09WYCB0byBkb2N1bWVudCBpdCBhcyB0aGUgcHJlcmVxdWlzaXRlIGZvciB0aGlzIHdvcmsuXG5cbkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB0aGUga2V5IHN5bWJvbHMsIGFuZCB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZDogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCwgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYW5kIGBrY292X3JlbW90ZV9zdG9wYCBhcmUgcXVpdGUgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gVGhlc2UgYXJlIGFsbCBnb29kIGNhbmRpZGF0ZXMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCdzIHRvdWNoaW5nIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGNvdmVyYWdlIGlzIGNvbGxlY3RlZCBpbiBzb2Z0aXJxIGNvbnRleHRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLQ09WIGlvY3RscyBhbmQgcmVtb3RlIGNvdmVyYWdlIHRyaWdnZXJzIGxpa2UgVVNCIGFuZCB2aG9zdC4gVGhlIHByZWVtcHRpb24gYXNwZWN0IGFkZHMgYSBuZXcgbGF5ZXIgb2YgY29tcGxleGl0eS5cblxuSGVyZSdzIG15IHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlXG4qICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtDT1YgY292ZXJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBob3cgcmVtb3RlIGNvdmVyYWdlIGlzIGNvbGxlY3RlZCBpbiBzb2Z0aXJxIGNvbnRleHRzIGFuZCBob3cgaXQgaGFuZGxlcyBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIGlzIHBvc3NpYmxlIHVuZGVyIFBSRUVNUFRfUlQpLiBUaGlzIGlzIGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBLQ09WIGlvY3RscyBhbmQgcmVtb3RlIGNvdmVyYWdlIHRyaWdnZXJzIChsaWtlIFVTQiBvciB2aG9zdCkuXG4qICAgKipGb2N1c1N5bWJvbHMqKjpcbiAgICAqICAga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydFxuICAgICogICBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BcbiAgICAqICAga2Nvdl9yZW1vdGVfYXJlYV9nZXRcbiAgICAqICAga2Nvdl9yZW1vdGVfYXJlYV9wdXRcbiAgICAqICAga2Nvdl9yZW1vdGVfc3RhcnRcbiAgICAqICAga2Nvdl9yZW1vdGVfc3RvcFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOlxuICAgICogICBQUkVFTVBUX1JUXG4qTm93IHRvIGNhbGwgc2V0LXJlc3VsdHMqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc2MCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6NTkuMzM4ODU2NDA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMDIzMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wXCIsXG4gICAgXCJrY292X3JlbW90ZV9hcmVhX2dldFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfYXJlYV9wdXRcIixcbiAgICBcImtjb3ZfcmVtb3RlX3N0YXJ0XCIsXG4gICAgXCJrY292X3JlbW90ZV9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wXCIsXG4gICAgXCJrY292X3JlbW90ZV9hcmVhX2dldFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfYXJlYV9wdXRcIixcbiAgICBcImtjb3ZfcmVtb3RlX3N0YXJ0XCIsXG4gICAgXCJrY292X3JlbW90ZV9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow99c7r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 15:28:44 +0000 UTC FinishedAt: 2026-07-20 15:47:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PREEMPT_RT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PREEMPT_RT" ], "series_id": "33930a89-bb2a-4c5a-b6c5-d45829d5c94c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kcov_remote_softirq_start", "kcov_remote_softirq_stop", "kcov_remote_area_get", "kcov_remote_area_put", "kcov_remote_start", "kcov_remote_stop" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BSRUVNUFRfUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcCYjMzQ7LAogICAgJiMzNDtrY292X3JlbW90ZV9hcmVhX2dldCYjMzQ7LAogICAgJiMzNDtrY292X3JlbW90ZV9hcmVhX3B1dCYjMzQ7LAogICAgJiMzNDtrY292X3JlbW90ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtrY292X3JlbW90ZV9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtDT1YgY292ZXJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgcmVtb3RlIGNvdmVyYWdlIGlzIGNvbGxlY3RlZCBpbiBzb2Z0aXJxIGNvbnRleHRzIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3Igc29mdGlycSBwcmVlbXB0aW9uICh3aGljaCBvY2N1cnMgdW5kZXIgUFJFRU1QVF9SVCkuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLQ09WIGlvY3RscyBhbmQgcmVtb3RlIGNvdmVyYWdlIHRyaWdnZXJzIChsaWtlIFVTQiBvciB2aG9zdCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGE3MTFjMzVkNTYzOWIwN2Y1NmExMWM3ODU1MDJlMWE1NjllM2RkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTU6NDU6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCAzNzNiY2MwNTk4ZDEwYi4uN2E1M2MxNWNlY2I1MmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTE1NDMsNiAmIzQzOzE1NDMsMTQgQEAgc3RydWN0IHRhc2tfc3RydWN0IHtcbiBcbiBcdC8qIENvbGxlY3QgY292ZXJhZ2UgZnJvbSBzb2Z0aXJxIGNvbnRleHQ6ICovXG4gXHR1bnNpZ25lZCBpbnRcdFx0XHRrY292X3NvZnRpcnE7XG4mIzQzO1xuJiM0MztcdC8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBwcmVlbXB0aW5nIHJlbW90ZSBjb3ZlcmFnZSBjb2xsZWN0aW9uOiAqL1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdGtjb3Zfc2F2ZWRfbW9kZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0XHRrY292X3NhdmVkX3NpemU7XG4mIzQzO1x0dm9pZFx0XHRcdFx0Kmtjb3Zfc2F2ZWRfYXJlYTtcbiYjNDM7XHRzdHJ1Y3Qga2Nvdlx0XHRcdCprY292X3NhdmVkX2tjb3Y7XG4mIzQzO1x0aW50XHRcdFx0XHRrY292X3NhdmVkX3NlcXVlbmNlO1xuJiM0MztcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tjb3YuYyBiL2tlcm5lbC9rY292LmNcbmluZGV4IDFkZjM3M2ZiNTYyYmM4Li5hNzUxNDMwM2VmZjM4YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rY292LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9rY292LmNcbkBAIC04NiwxNyAmIzQzOzg2LDEyIEBAIHN0cnVjdCBrY292X3JlbW90ZSB7XG4gXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhrY292X3JlbW90ZV9sb2NrKTtcbiBzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShrY292X3JlbW90ZV9tYXAsIDQpO1xuLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGtjb3ZfcmVtb3RlX2FyZWFzID0gTElTVF9IRUFEX0lOSVQoa2Nvdl9yZW1vdGVfYXJlYXMpO1xuJiM0MztzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBrY292X3JlbW90ZV9hcmVhc1syXSA9IHtcbiYjNDM7XHRMSVNUX0hFQURfSU5JVChrY292X3JlbW90ZV9hcmVhc1swXSksIExJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzWzFdKVxuJiM0Mzt9O1xuIFxuIHN0cnVjdCBrY292X3BlcmNwdV9kYXRhIHtcbi1cdHZvaWRcdFx0XHQqaXJxX2FyZWE7XG4gXHRsb2NhbF9sb2NrX3RcdFx0bG9jaztcbi1cbi1cdHVuc2lnbmVkIGludFx0XHRzYXZlZF9tb2RlO1xuLVx0dW5zaWduZWQgaW50XHRcdHNhdmVkX3NpemU7XG4tXHR2b2lkXHRcdFx0KnNhdmVkX2FyZWE7XG4tXHRzdHJ1Y3Qga2Nvdlx0XHQqc2F2ZWRfa2Nvdjtcbi1cdGludFx0XHRcdHNhdmVkX3NlcXVlbmNlO1xuIH07XG4gXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrY292X3BlcmNwdV9kYXRhLCBrY292X3BlcmNwdV9kYXRhKSA9IHtcbkBAIC0xMzIsMTIgJiM0MzsxMjcsMTMgQEAgc3RhdGljIHN0cnVjdCBrY292X3JlbW90ZSAqa2Nvdl9yZW1vdGVfYWRkKHN0cnVjdCBrY292ICprY292LCB1NjQgaGFuZGxlKVxuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGtjb3ZfcmVtb3RlX2xvY2sgbG9ja2VkLiAqL1xuLXN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXJxKVxuIHtcbiBcdHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSBcdTAwMjZrY292X3JlbW90ZV9hcmVhc1tpcnFdO1xuIFxuLVx0bGlzdF9mb3JfZWFjaChwb3MsIFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzKSB7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaChwb3MsIGxpc3QpIHtcbiBcdFx0YXJlYSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSwgbGlzdCk7XG4gXHRcdGlmIChhcmVhLVx1MDAzZXNpemUgPT0gc2l6ZSkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmFyZWEtXHUwMDNlbGlzdCk7XG5AQCAtMTQ5LDExICYjNDM7MTQ1LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUpXG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBrY292X3JlbW90ZV9sb2NrIGxvY2tlZC4gKi9cbiBzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9hcmVhX3B1dChzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYSxcbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHNpemUpXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGludCBzaXplLCBib29sIGlycSlcbiB7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhcmVhLVx1MDAzZWxpc3QpO1xuIFx0YXJlYS1cdTAwM2VzaXplID0gc2l6ZTtcbi1cdGxpc3RfYWRkKFx1MDAyNmFyZWEtXHUwMDNlbGlzdCwgXHUwMDI2a2Nvdl9yZW1vdGVfYXJlYXMpO1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNmFyZWEtXHUwMDNlbGlzdCwgXHUwMDI2a2Nvdl9yZW1vdGVfYXJlYXNbaXJxXSk7XG4gXHQvKlxuIFx0ICogS01TQU4gZG9lc24mIzM5O3QgaW5zdHJ1bWVudCB0aGlzIGZpbGUsIHNvIGl0IG1heSBub3Qga25vdyBhcmVhLVx1MDAzZWxpc3RcbiBcdCAqIGlzIGluaXRpYWxpemVkLiBVbnBvaXNvbiBpdCBleHBsaWNpdGx5IHRvIGF2b2lkIHJlcG9ydHMgaW5cbkBAIC0zOTAsNiAmIzQzOzM4NiwxMiBAQCB2b2lkIGtjb3ZfdGFza19pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbiBcdGtjb3ZfdGFza19yZXNldCh0KTtcbiBcdHQtXHUwMDNla2Nvdl9yZW1vdGUgPSBOVUxMO1xuIFx0dC1cdTAwM2VrY292X2hhbmRsZSA9IGN1cnJlbnQtXHUwMDNla2Nvdl9oYW5kbGU7XG4mIzQzO1x0dC1cdTAwM2VrY292X3NvZnRpcnEgPSAwO1xuJiM0MztcdHQtXHUwMDNla2Nvdl9zYXZlZF9tb2RlID0gMDtcbiYjNDM7XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSA9IDA7XG4mIzQzO1x0dC1cdTAwM2VrY292X3NhdmVkX2FyZWEgPSBOVUxMO1xuJiM0MztcdHQtXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gTlVMTDtcbiYjNDM7XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2VxdWVuY2UgPSAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBrY292X3Jlc2V0KHN0cnVjdCBrY292ICprY292KVxuQEAgLTgzNiwxNyAmIzQzOzgzOCwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wga2Nvdl9tb2RlX2VuYWJsZWQodW5zaWduZWQgaW50IG1vZGUpXG4gc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4gXHRfX211c3RfaG9sZChcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXG4ge1xuLVx0c3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgKmRhdGEgPSB0aGlzX2NwdV9wdHIoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YSk7XG4gXHR1bnNpZ25lZCBpbnQgbW9kZTtcbiBcbiBcdG1vZGUgPSBSRUFEX09OQ0UodC1cdTAwM2VrY292X21vZGUpO1xuIFx0YmFycmllcigpO1xuIFx0aWYgKGtjb3ZfbW9kZV9lbmFibGVkKG1vZGUpKSB7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfbW9kZSA9IG1vZGU7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2l6ZSA9IHQtXHUwMDNla2Nvdl9zaXplO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX2FyZWEgPSB0LVx1MDAzZWtjb3ZfYXJlYTtcbi1cdFx0ZGF0YS1cdTAwM2VzYXZlZF9zZXF1ZW5jZSA9IHQtXHUwMDNla2Nvdl9zZXF1ZW5jZTtcbi1cdFx0ZGF0YS1cdTAwM2VzYXZlZF9rY292ID0gdC1cdTAwM2VrY292O1xuJiM0MztcdFx0dC1cdTAwM2VrY292X3NhdmVkX21vZGUgPSBtb2RlO1xuJiM0MztcdFx0dC1cdTAwM2VrY292X3NhdmVkX3NpemUgPSB0LVx1MDAzZWtjb3Zfc2l6ZTtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gdC1cdTAwM2VrY292X2FyZWE7XG4mIzQzO1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2VxdWVuY2UgPSB0LVx1MDAzZWtjb3Zfc2VxdWVuY2U7XG4mIzQzO1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfa2NvdiA9IHQtXHUwMDNla2NvdjtcbiBcdFx0a2Nvdl9zdG9wKHQpO1xuIFx0fVxuIH1cbkBAIC04NTQsMTcgJiM0Mzs4NTUsMTUgQEAgc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4gc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbiBcdF9fbXVzdF9ob2xkKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaylcbiB7XG4tXHRzdHJ1Y3Qga2Nvdl9wZXJjcHVfZGF0YSAqZGF0YSA9IHRoaXNfY3B1X3B0cihcdTAwMjZrY292X3BlcmNwdV9kYXRhKTtcbi1cbi1cdGlmIChkYXRhLVx1MDAzZXNhdmVkX2tjb3YpIHtcbi1cdFx0a2Nvdl9zdGFydCh0LCBkYXRhLVx1MDAzZXNhdmVkX2tjb3YsIGRhdGEtXHUwMDNlc2F2ZWRfc2l6ZSxcbi1cdFx0XHRcdGRhdGEtXHUwMDNlc2F2ZWRfYXJlYSwgZGF0YS1cdTAwM2VzYXZlZF9tb2RlLFxuLVx0XHRcdFx0ZGF0YS1cdTAwM2VzYXZlZF9zZXF1ZW5jZSk7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfbW9kZSA9IDA7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2l6ZSA9IDA7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfYXJlYSA9IE5VTEw7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2VxdWVuY2UgPSAwO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX2tjb3YgPSBOVUxMO1xuJiM0MztcdGlmICh0LVx1MDAzZWtjb3Zfc2F2ZWRfa2Nvdikge1xuJiM0MztcdFx0a2Nvdl9zdGFydCh0LCB0LVx1MDAzZWtjb3Zfc2F2ZWRfa2NvdiwgdC1cdTAwM2VrY292X3NhdmVkX3NpemUsXG4mIzQzO1x0XHRcdCAgIHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhLCB0LVx1MDAzZWtjb3Zfc2F2ZWRfbW9kZSxcbiYjNDM7XHRcdFx0ICAgdC1cdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlKTtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9tb2RlID0gMDtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9zaXplID0gMDtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gTlVMTDtcbiYjNDM7XHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9zZXF1ZW5jZSA9IDA7XG4mIzQzO1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfa2NvdiA9IE5VTEw7XG4gXHR9XG4gfVxuIFxuQEAgLTkyNywxNyAmIzQzOzkyNiwxNyBAQCB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG4gXHRzZXF1ZW5jZSA9IGtjb3YtXHUwMDNlc2VxdWVuY2U7XG4gXHRpZiAoaW5fdGFzaygpKSB7XG4gXHRcdHNpemUgPSBrY292LVx1MDAzZXJlbW90ZV9zaXplO1xuLVx0XHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSk7XG4mIzQzO1x0XHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c2l6ZSA9IENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkU7XG4tXHRcdGFyZWEgPSB0aGlzX2NwdV9wdHIoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YSktXHUwMDNlaXJxX2FyZWE7XG4mIzQzO1x0XHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSwgdHJ1ZSk7XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbiBcbi1cdC8qIENhbiBvbmx5IGhhcHBlbiB3aGVuIGluX3Rhc2soKS4gKi9cbiYjNDM7XHQvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyIGlmIHdlIGNhbiBzbGVlcC4gKi9cbiBcdGlmICghYXJlYSkge1xuIFx0XHRsb2NhbF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcbi1cdFx0YXJlYSA9IHZtYWxsb2Moc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1x0XHRhcmVhID0gaW5fdGFzaygpID8gdm1hbGxvYyhzaXplICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSA6IE5VTEw7XG4gXHRcdGlmICghYXJlYSkge1xuIFx0XHRcdGtjb3ZfcHV0KGtjb3YpO1xuIFx0XHRcdHJldHVybjtcbkBAIC0xMDc5LDExICYjNDM7MTA3OCw5IEBAIHZvaWQga2Nvdl9yZW1vdGVfc3RvcCh2b2lkKVxuIFx0XHRrY292X21vdmVfYXJlYShrY292LVx1MDAzZW1vZGUsIGtjb3YtXHUwMDNlYXJlYSwga2Nvdi1cdTAwM2VzaXplLCBhcmVhKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmtjb3YtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoaW5fdGFzaygpKSB7XG4tXHRcdHNwaW5fbG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbi1cdFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgc2l6ZSk7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xuLVx0fVxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbiYjNDM7XHRrY292X3JlbW90ZV9hcmVhX3B1dChhcmVhLCBzaXplLCAhaW5fdGFzaygpKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbiBcbiBcdGxvY2FsX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpO1xuIFxuQEAgLTExMjksMTQgJiM0MzsxMTI2LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZWxmdGVzdCh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IGtjb3ZfaW5pdCh2b2lkKVxuIHtcbi1cdGludCBjcHU7XG4mIzQzO1x0aW50IGNwdSA9IG51bV9wb3NzaWJsZV9jcHVzKCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbiYjNDM7XHQvKiBBbGxvY2F0ZSBzb21lIGV4dHJhIGJ1ZmZlcnMgaW4gb3JkZXIgdG8gcHJlcGFyZSBmb3Igc29mdGlycSBwcmVlbXB0aW9uLiAqL1xuJiM0MztcdGNwdSA9IGNwdSBcdTAwM2U9IDQgPyBjcHUgKiAyIDogY3B1ICYjNDM7IDQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHdoaWxlIChjcHUtLSkge1xuJiM0MztcdFx0dm9pZCAqYXJlYSA9IHZtYWxsb2MoQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHR2b2lkICphcmVhID0gdm1hbGxvY19ub2RlKENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUgKlxuLVx0XHRcdFx0c2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBjcHVfdG9fbm9kZShjcHUpKTtcbiBcdFx0aWYgKCFhcmVhKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRwZXJfY3B1X3B0cihcdTAwMjZrY292X3BlcmNwdV9kYXRhLCBjcHUpLVx1MDAzZWlycV9hcmVhID0gYXJlYTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUsIHRydWUpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrY292X3JlbW90ZV9sb2NrLCBmbGFncyk7XG4gXHR9XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWdcbmluZGV4IDEyNDRkY2FjMjI5NGFkLi4xMjc4NjM3OWJmMWQ3MiAxMDA2NDRcbi0tLSBhL2xpYi9LY29uZmlnLmRlYnVnXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvS2NvbmZpZy5kZWJ1Z1xuQEAgLTIyNDcsMTAgJiM0MzsyMjQ3LDExIEBAIGNvbmZpZyBLQ09WX0lOU1RSVU1FTlRfQUxMXG4gY29uZmlnIEtDT1ZfSVJRX0FSRUFfU0laRVxuIFx0aGV4IFwmIzM0O1NpemUgb2YgaW50ZXJydXB0IGNvdmVyYWdlIGNvbGxlY3Rpb24gYXJlYSBpbiB3b3Jkc1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBLQ09WXG4mIzQzO1x0cmFuZ2UgMHg4MCAweDEwMDAwMDBcbiBcdGRlZmF1bHQgMHg0MDAwMFxuIFx0aGVscFxuLVx0ICBLQ09WIHVzZXMgcHJlYWxsb2NhdGVkIHBlci1jcHUgYXJlYXMgdG8gY29sbGVjdCBjb3ZlcmFnZSBmcm9tXG4tXHQgIHNvZnQgaW50ZXJydXB0cy4gVGhpcyBzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhvc2UgYXJlYXMgaW4gdGhlXG4mIzQzO1x0ICBLQ09WIHVzZXMgcHJlYWxsb2NhdGVkIGFyZWFzIHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbSBzb2Z0XG4mIzQzO1x0ICBpbnRlcnJ1cHRzLiBUaGlzIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aG9zZSBhcmVhcyBpbiB0aGVcbiBcdCAgbnVtYmVyIG9mIHVuc2lnbmVkIGxvbmcgd29yZHMuXG4gXG4gY29uZmlnIEtDT1ZfU0VMRlRFU1RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAgICYjMzQ7a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wJiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfZ2V0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfcHV0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0YXJ0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGRhNzExYzM1ZDU2MzliMDdmNTZhMTFjNzg1NTAyZTFhNTY5ZTNkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDE1OjQ1OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDM3M2JjYzA1OThkMTBiLi43YTUzYzE1Y2VjYjUyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTU0Myw2ICYjNDM7MTU0MywxNCBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgewogCiAJLyogQ29sbGVjdCBjb3ZlcmFnZSBmcm9tIHNvZnRpcnEgY29udGV4dDogKi8KIAl1bnNpZ25lZCBpbnQJCQlrY292X3NvZnRpcnE7CiYjNDM7CiYjNDM7CS8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBwcmVlbXB0aW5nIHJlbW90ZSBjb3ZlcmFnZSBjb2xsZWN0aW9uOiAqLwomIzQzOwl1bnNpZ25lZCBpbnQJCQlrY292X3NhdmVkX21vZGU7CiYjNDM7CXVuc2lnbmVkIGludAkJCWtjb3Zfc2F2ZWRfc2l6ZTsKJiM0MzsJdm9pZAkJCQkqa2Nvdl9zYXZlZF9hcmVhOwomIzQzOwlzdHJ1Y3Qga2NvdgkJCSprY292X3NhdmVkX2tjb3Y7CiYjNDM7CWludAkJCQlrY292X3NhdmVkX3NlcXVlbmNlOwomIzQzOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKZGlmZiAtLWdpdCBhL2tlcm5lbC9rY292LmMgYi9rZXJuZWwva2Nvdi5jCmluZGV4IDFkZjM3M2ZiNTYyYmM4Li5hNzUxNDMwM2VmZjM4YSAxMDA2NDQKLS0tIGEva2VybmVsL2tjb3YuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwva2Nvdi5jCkBAIC04NiwxNyAmIzQzOzg2LDEyIEBAIHN0cnVjdCBrY292X3JlbW90ZSB7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2Nvdl9yZW1vdGVfbG9jayk7CiBzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShrY292X3JlbW90ZV9tYXAsIDQpOwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXMgPSBMSVNUX0hFQURfSU5JVChrY292X3JlbW90ZV9hcmVhcyk7CiYjNDM7c3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXNbMl0gPSB7CiYjNDM7CUxJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzWzBdKSwgTElTVF9IRUFEX0lOSVQoa2Nvdl9yZW1vdGVfYXJlYXNbMV0pCiYjNDM7fTsKIAogc3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgewotCXZvaWQJCQkqaXJxX2FyZWE7CiAJbG9jYWxfbG9ja190CQlsb2NrOwotCi0JdW5zaWduZWQgaW50CQlzYXZlZF9tb2RlOwotCXVuc2lnbmVkIGludAkJc2F2ZWRfc2l6ZTsKLQl2b2lkCQkJKnNhdmVkX2FyZWE7Ci0Jc3RydWN0IGtjb3YJCSpzYXZlZF9rY292OwotCWludAkJCXNhdmVkX3NlcXVlbmNlOwogfTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrY292X3BlcmNwdV9kYXRhLCBrY292X3BlcmNwdV9kYXRhKSA9IHsKQEAgLTEzMiwxMiAmIzQzOzEyNywxMyBAQCBzdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlICprY292X3JlbW90ZV9hZGQoc3RydWN0IGtjb3YgKmtjb3YsIHU2NCBoYW5kbGUpCiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIHdpdGgga2Nvdl9yZW1vdGVfbG9jayBsb2NrZWQuICovCi1zdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEgKmtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHVuc2lnbmVkIGludCBzaXplKQomIzQzO3N0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXJxKQogewogCXN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZhbXA7a2Nvdl9yZW1vdGVfYXJlYXNbaXJxXTsKIAotCWxpc3RfZm9yX2VhY2gocG9zLCAmYW1wO2tjb3ZfcmVtb3RlX2FyZWFzKSB7CiYjNDM7CWxpc3RfZm9yX2VhY2gocG9zLCBsaXN0KSB7CiAJCWFyZWEgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEsIGxpc3QpOwogCQlpZiAoYXJlYS0mZ3Q7c2l6ZSA9PSBzaXplKSB7CiAJCQlsaXN0X2RlbCgmYW1wO2FyZWEtJmd0O2xpc3QpOwpAQCAtMTQ5LDExICYjNDM7MTQ1LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUpCiAKIC8qIE11c3QgYmUgY2FsbGVkIHdpdGgga2Nvdl9yZW1vdGVfbG9jayBsb2NrZWQuICovCiBzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9hcmVhX3B1dChzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYSwKLQkJCQkJdW5zaWduZWQgaW50IHNpemUpCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBpcnEpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDthcmVhLSZndDtsaXN0KTsKIAlhcmVhLSZndDtzaXplID0gc2l6ZTsKLQlsaXN0X2FkZCgmYW1wO2FyZWEtJmd0O2xpc3QsICZhbXA7a2Nvdl9yZW1vdGVfYXJlYXMpOwomIzQzOwlsaXN0X2FkZCgmYW1wO2FyZWEtJmd0O2xpc3QsICZhbXA7a2Nvdl9yZW1vdGVfYXJlYXNbaXJxXSk7CiAJLyoKIAkgKiBLTVNBTiBkb2VzbiYjMzk7dCBpbnN0cnVtZW50IHRoaXMgZmlsZSwgc28gaXQgbWF5IG5vdCBrbm93IGFyZWEtJmd0O2xpc3QKIAkgKiBpcyBpbml0aWFsaXplZC4gVW5wb2lzb24gaXQgZXhwbGljaXRseSB0byBhdm9pZCByZXBvcnRzIGluCkBAIC0zOTAsNiAmIzQzOzM4NiwxMiBAQCB2b2lkIGtjb3ZfdGFza19pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIAlrY292X3Rhc2tfcmVzZXQodCk7CiAJdC0mZ3Q7a2Nvdl9yZW1vdGUgPSBOVUxMOwogCXQtJmd0O2tjb3ZfaGFuZGxlID0gY3VycmVudC0mZ3Q7a2Nvdl9oYW5kbGU7CiYjNDM7CXQtJmd0O2tjb3Zfc29mdGlycSA9IDA7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfbW9kZSA9IDA7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfc2l6ZSA9IDA7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfYXJlYSA9IE5VTEw7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfa2NvdiA9IE5VTEw7CiYjNDM7CXQtJmd0O2tjb3Zfc2F2ZWRfc2VxdWVuY2UgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBrY292X3Jlc2V0KHN0cnVjdCBrY292ICprY292KQpAQCAtODM2LDE3ICYjNDM7ODM4LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrY292X21vZGVfZW5hYmxlZCh1bnNpZ25lZCBpbnQgbW9kZSkKIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KQogCV9fbXVzdF9ob2xkKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKQogewotCXN0cnVjdCBrY292X3BlcmNwdV9kYXRhICpkYXRhID0gdGhpc19jcHVfcHRyKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YSk7CiAJdW5zaWduZWQgaW50IG1vZGU7CiAKIAltb2RlID0gUkVBRF9PTkNFKHQtJmd0O2tjb3ZfbW9kZSk7CiAJYmFycmllcigpOwogCWlmIChrY292X21vZGVfZW5hYmxlZChtb2RlKSkgewotCQlkYXRhLSZndDtzYXZlZF9tb2RlID0gbW9kZTsKLQkJZGF0YS0mZ3Q7c2F2ZWRfc2l6ZSA9IHQtJmd0O2tjb3Zfc2l6ZTsKLQkJZGF0YS0mZ3Q7c2F2ZWRfYXJlYSA9IHQtJmd0O2tjb3ZfYXJlYTsKLQkJZGF0YS0mZ3Q7c2F2ZWRfc2VxdWVuY2UgPSB0LSZndDtrY292X3NlcXVlbmNlOwotCQlkYXRhLSZndDtzYXZlZF9rY292ID0gdC0mZ3Q7a2NvdjsKJiM0MzsJCXQtJmd0O2tjb3Zfc2F2ZWRfbW9kZSA9IG1vZGU7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX3NpemUgPSB0LSZndDtrY292X3NpemU7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX2FyZWEgPSB0LSZndDtrY292X2FyZWE7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX3NlcXVlbmNlID0gdC0mZ3Q7a2Nvdl9zZXF1ZW5jZTsKJiM0MzsJCXQtJmd0O2tjb3Zfc2F2ZWRfa2NvdiA9IHQtJmd0O2tjb3Y7CiAJCWtjb3Zfc3RvcCh0KTsKIAl9CiB9CkBAIC04NTQsMTcgJiM0Mzs4NTUsMTUgQEAgc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiBzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3Aoc3RydWN0IHRhc2tfc3RydWN0ICp0KQogCV9fbXVzdF9ob2xkKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKQogewotCXN0cnVjdCBrY292X3BlcmNwdV9kYXRhICpkYXRhID0gdGhpc19jcHVfcHRyKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YSk7Ci0KLQlpZiAoZGF0YS0mZ3Q7c2F2ZWRfa2NvdikgewotCQlrY292X3N0YXJ0KHQsIGRhdGEtJmd0O3NhdmVkX2tjb3YsIGRhdGEtJmd0O3NhdmVkX3NpemUsCi0JCQkJZGF0YS0mZ3Q7c2F2ZWRfYXJlYSwgZGF0YS0mZ3Q7c2F2ZWRfbW9kZSwKLQkJCQlkYXRhLSZndDtzYXZlZF9zZXF1ZW5jZSk7Ci0JCWRhdGEtJmd0O3NhdmVkX21vZGUgPSAwOwotCQlkYXRhLSZndDtzYXZlZF9zaXplID0gMDsKLQkJZGF0YS0mZ3Q7c2F2ZWRfYXJlYSA9IE5VTEw7Ci0JCWRhdGEtJmd0O3NhdmVkX3NlcXVlbmNlID0gMDsKLQkJZGF0YS0mZ3Q7c2F2ZWRfa2NvdiA9IE5VTEw7CiYjNDM7CWlmICh0LSZndDtrY292X3NhdmVkX2tjb3YpIHsKJiM0MzsJCWtjb3Zfc3RhcnQodCwgdC0mZ3Q7a2Nvdl9zYXZlZF9rY292LCB0LSZndDtrY292X3NhdmVkX3NpemUsCiYjNDM7CQkJICAgdC0mZ3Q7a2Nvdl9zYXZlZF9hcmVhLCB0LSZndDtrY292X3NhdmVkX21vZGUsCiYjNDM7CQkJICAgdC0mZ3Q7a2Nvdl9zYXZlZF9zZXF1ZW5jZSk7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX21vZGUgPSAwOwomIzQzOwkJdC0mZ3Q7a2Nvdl9zYXZlZF9zaXplID0gMDsKJiM0MzsJCXQtJmd0O2tjb3Zfc2F2ZWRfYXJlYSA9IE5VTEw7CiYjNDM7CQl0LSZndDtrY292X3NhdmVkX3NlcXVlbmNlID0gMDsKJiM0MzsJCXQtJmd0O2tjb3Zfc2F2ZWRfa2NvdiA9IE5VTEw7CiAJfQogfQogCkBAIC05MjcsMTcgJiM0Mzs5MjYsMTcgQEAgdm9pZCBrY292X3JlbW90ZV9zdGFydCh1NjQgaGFuZGxlKQogCXNlcXVlbmNlID0ga2Nvdi0mZ3Q7c2VxdWVuY2U7CiAJaWYgKGluX3Rhc2soKSkgewogCQlzaXplID0ga2Nvdi0mZ3Q7cmVtb3RlX3NpemU7Ci0JCWFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplKTsKJiM0MzsJCWFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplLCBmYWxzZSk7CiAJfSBlbHNlIHsKIAkJc2l6ZSA9IENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkU7Ci0JCWFyZWEgPSB0aGlzX2NwdV9wdHIoJmFtcDtrY292X3BlcmNwdV9kYXRhKS0mZ3Q7aXJxX2FyZWE7CiYjNDM7CQlhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSwgdHJ1ZSk7CiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7a2Nvdl9yZW1vdGVfbG9jayk7CiAKLQkvKiBDYW4gb25seSBoYXBwZW4gd2hlbiBpbl90YXNrKCkuICovCiYjNDM7CS8qIEFsbG9jYXRlIG5ldyBidWZmZXIgaWYgd2UgY2FuIHNsZWVwLiAqLwogCWlmICghYXJlYSkgewogCQlsb2NhbF91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2tjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpOwotCQlhcmVhID0gdm1hbGxvYyhzaXplICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKJiM0MzsJCWFyZWEgPSBpbl90YXNrKCkgPyB2bWFsbG9jKHNpemUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpIDogTlVMTDsKIAkJaWYgKCFhcmVhKSB7CiAJCQlrY292X3B1dChrY292KTsKIAkJCXJldHVybjsKQEAgLTEwNzksMTEgJiM0MzsxMDc4LDkgQEAgdm9pZCBrY292X3JlbW90ZV9zdG9wKHZvaWQpCiAJCWtjb3ZfbW92ZV9hcmVhKGtjb3YtJmd0O21vZGUsIGtjb3YtJmd0O2FyZWEsIGtjb3YtJmd0O3NpemUsIGFyZWEpOwogCXNwaW5fdW5sb2NrKCZhbXA7a2Nvdi0mZ3Q7bG9jayk7CiAKLQlpZiAoaW5fdGFzaygpKSB7Ci0JCXNwaW5fbG9jaygmYW1wO2tjb3ZfcmVtb3RlX2xvY2spOwotCQlrY292X3JlbW90ZV9hcmVhX3B1dChhcmVhLCBzaXplKTsKLQkJc3Bpbl91bmxvY2soJmFtcDtrY292X3JlbW90ZV9sb2NrKTsKLQl9CiYjNDM7CXNwaW5fbG9jaygmYW1wO2tjb3ZfcmVtb3RlX2xvY2spOwomIzQzOwlrY292X3JlbW90ZV9hcmVhX3B1dChhcmVhLCBzaXplLCAhaW5fdGFzaygpKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtrY292X3JlbW90ZV9sb2NrKTsKIAogCWxvY2FsX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7a2Nvdl9wZXJjcHVfZGF0YS5sb2NrLCBmbGFncyk7CiAKQEAgLTExMjksMTQgJiM0MzsxMTI2LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZWxmdGVzdCh2b2lkKQogCiBzdGF0aWMgaW50IF9faW5pdCBrY292X2luaXQodm9pZCkKIHsKLQlpbnQgY3B1OwomIzQzOwlpbnQgY3B1ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlQKJiM0MzsJLyogQWxsb2NhdGUgc29tZSBleHRyYSBidWZmZXJzIGluIG9yZGVyIHRvIHByZXBhcmUgZm9yIHNvZnRpcnEgcHJlZW1wdGlvbi4gKi8KJiM0MzsJY3B1ID0gY3B1ICZndDs9IDQgPyBjcHUgKiAyIDogY3B1ICYjNDM7IDQ7CiYjNDM7I2VuZGlmCiYjNDM7CXdoaWxlIChjcHUtLSkgewomIzQzOwkJdm9pZCAqYXJlYSA9IHZtYWxsb2MoQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQl2b2lkICphcmVhID0gdm1hbGxvY19ub2RlKENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUgKgotCQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSwgY3B1X3RvX25vZGUoY3B1KSk7CiAJCWlmICghYXJlYSkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlwZXJfY3B1X3B0cigmYW1wO2tjb3ZfcGVyY3B1X2RhdGEsIGNwdSktJmd0O2lycV9hcmVhID0gYXJlYTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7a2Nvdl9yZW1vdGVfbG9jaywgZmxhZ3MpOwomIzQzOwkJa2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSwgdHJ1ZSk7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7a2Nvdl9yZW1vdGVfbG9jaywgZmxhZ3MpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDEyNDRkY2FjMjI5NGFkLi4xMjc4NjM3OWJmMWQ3MiAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKJiM0MzsmIzQzOyYjNDM7IGIvbGliL0tjb25maWcuZGVidWcKQEAgLTIyNDcsMTAgJiM0MzsyMjQ3LDExIEBAIGNvbmZpZyBLQ09WX0lOU1RSVU1FTlRfQUxMCiBjb25maWcgS0NPVl9JUlFfQVJFQV9TSVpFCiAJaGV4ICYjMzQ7U2l6ZSBvZiBpbnRlcnJ1cHQgY292ZXJhZ2UgY29sbGVjdGlvbiBhcmVhIGluIHdvcmRzJiMzNDsKIAlkZXBlbmRzIG9uIEtDT1YKJiM0MzsJcmFuZ2UgMHg4MCAweDEwMDAwMDAKIAlkZWZhdWx0IDB4NDAwMDAKIAloZWxwCi0JICBLQ09WIHVzZXMgcHJlYWxsb2NhdGVkIHBlci1jcHUgYXJlYXMgdG8gY29sbGVjdCBjb3ZlcmFnZSBmcm9tCi0JICBzb2Z0IGludGVycnVwdHMuIFRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRob3NlIGFyZWFzIGluIHRoZQomIzQzOwkgIEtDT1YgdXNlcyBwcmVhbGxvY2F0ZWQgYXJlYXMgdG8gY29sbGVjdCBjb3ZlcmFnZSBmcm9tIHNvZnQKJiM0MzsJICBpbnRlcnJ1cHRzLiBUaGlzIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aG9zZSBhcmVhcyBpbiB0aGUKIAkgIG51bWJlciBvZiB1bnNpZ25lZCBsb25nIHdvcmRzLgogCiBjb25maWcgS0NPVl9TRUxGVEVTVAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjgyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktDT1YgU29mdGlycSBDb3ZlcmFnZSBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBLZXJuZWwgQ292ZXJhZ2UgKEtDT1YpIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzb2Z0aXJxIGNvdmVyYWdlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgS0NPViBpcyBhIGNvcmUgY29tcG9uZW50IHRoYXQgc3l6a2FsbGVyLCBvdXIgcHJpbWFyeSBmdXp6aW5nIHRvb2wsIHJlbGllcyBvbiBoZWF2aWx5LiBJdCYjMzk7cyB1c2VkIGZvciBjb3ZlcmFnZSBjb2xsZWN0aW9uLCBzbyBhbnkgbW9kaWZpY2F0aW9ucyB0byBpdCBhcmUgaW1tZWRpYXRlbHkgcmVsZXZhbnQuCgpUaGUgcGF0Y2gmIzM5O3Mga2V5IGNoYW5nZSBpcyBob3cgc29mdGlycSBjb3ZlcmFnZSBpcyBnYXRoZXJlZC4gSW5zdGVhZCBvZiB1c2luZyBwZXItQ1BVIGFyZWFzIGZvciBJUlEgY292ZXJhZ2UsIGl0IGludHJvZHVjZXMgYSBnbG9iYWwgbGlzdCwgYGtjb3ZfcmVtb3RlX2FyZWFzWzJdYCwgc3BsaXR0aW5nIGl0IGJldHdlZW4gdGFzayBhbmQgaXJxLiBJdCBhbHNvIHJlbG9jYXRlcyB0aGUgS0NPViBzdGF0ZSBkYXRhLCBwcmV2aW91c2x5IHN0b3JlZCBpbiBga2Nvdl9wZXJjcHVfZGF0YWAsIGludG8gYHRhc2tfc3RydWN0YCwgcHJlc3VtYWJseSB0byBzdXBwb3J0IHNvZnRpcnEgcHJlZW1wdGlvbiwgc29tZXRoaW5nIHRoYXQmIzM5O3MgcGFydGljdWxhcmx5IHJlbGV2YW50IHdpdGggUFJFRU1QVF9SVC4gVGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zICYjMzQ7c3l6LWNsdXN0ZXImIzM0Oywgc28gdGhpcyBpcyBsaWtlbHkgc29tZXRoaW5nIHRoYXQgaGFzIGJlZW4gcmV2aWV3ZWQgYWxyZWFkeS4KCk15IGZpcnN0IGltcHVsc2UgaXMgdG8gY2hlY2sgaWYgdGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIEkgcXVpY2tseSBjb25maXJtOyBLQ09WIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBjcnVjaWFsIHRvIHRoZSBzeXprYWxsZXIgd29ya2Zsb3cuIEEgc2xpZ2h0IGhlc2l0YXRpb24gY29tZXMgdXAgYXMgSSBjb25zaWRlciB0aGF0IHdlJiMzOTtyZSBlc3NlbnRpYWxseSBmdXp6aW5nIHRoZSBmdXp6ZXImIzM5O3Mgb3duIGNvdmVyYWdlIG1lY2hhbmlzbS4gQnV0IGl0JiMzOTtzIGEgY29yZSBrZXJuZWwgZmVhdHVyZSwgYW5kIG1vZGlmeWluZyB0aGUgY292ZXJhZ2UgY29sbGVjdGlvbiB3YXJyYW50cyBjYXJlZnVsIGF0dGVudGlvbi4gV2UgbmVlZCB0byBhc3Nlc3MgaWYgdGhpcyBtb2RpZmljYXRpb24gaXMgYWZmZWN0aW5nIHRoZSBhY2N1cmFjeSBvciBjb2xsZWN0aW9uIG1ldGhvZG9sb2d5IG9mIHRoZSBLQ09WIGRhdGEuCgpUaGFua2Z1bGx5LCBzeXprYWxsZXIgZG9lcyBoYXZlIGRlc2NyaXB0aW9ucyBmb3IgS0NPViBpb2N0bHMsIHNvIHdlICpjYW4qIGZ1enogaXQgZGlyZWN0bHkuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgZnVuY3Rpb25zIGxpa2UgYGtjb3ZfdGFza19pbml0YCwgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3N0b3BgLCBhbmQgYGtjb3ZfaW5pdGAuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgc2hpZnQgaXMgbW92aW5nIGBzYXZlZF9tb2RlYCwgYHNhdmVkX3NpemVgLCBgc2F2ZWRfYXJlYWAsIGBzYXZlZF9rY292YCwgYW5kIGBzYXZlZF9zZXF1ZW5jZWAgZnJvbSBga2Nvdl9wZXJjcHVfZGF0YWAgdG8gYHRhc2tfc3RydWN0YC4gQWxzbywgY2hhbmdlcyB0byBga2Nvdl9yZW1vdGVfYXJlYV9nZXRgIGFuZCBga2Nvdl9yZW1vdGVfYXJlYV9wdXRgIHdoZXJlIGEgYGJvb2wgaXJxYCBhcmd1bWVudCBpcyBpbnRyb2R1Y2VkLCBhbmQgYGtjb3ZfaW5pdGAgaXMgY2hhbmdlZCB0byBwcmVhbGxvY2F0ZSBidWZmZXJzLgoKQ3J1Y2lhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX0tDT1ZgIGlzIG9idmlvdXNseSBhIG11c3QtaGF2ZS4gSW50cmlndWluZ2x5LCBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIG1lbnRpb25lZCBpbiBga2Nvdl9pbml0YDogSXQgc2VlbXMgbGlrZSB0aGUgc29mdGlycSBwcmVlbXB0aW9uIGNvZGUgd2lsbCBhbGxvY2F0ZSBtb3JlIGJ1ZmZlcnMgaWYgYFBSRUVNUFRfUlRgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgZW5hYmxpbmcgYFBSRUVNUFRfUlRgIGNvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIHRob3JvdWdobHkgdGVzdCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLgoKSG93ZXZlciwgYFBSRUVNUFRfUlRgIGlzIGEgYmlnIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCBhZmZlY3RpbmcgdGhlIGVudGlyZSBrZXJuZWwgcHJlZW1wdGlvbiBtb2RlbC4gU3l6a2FsbGVyIGdlbmVyYWxseSBhdm9pZHMgZW5hYmxpbmcgaXQgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiBTbywgbmV4dCBzdGVwIGlzIHRvIGVuc3VyZSB0aGF0IGBQUkVFTVBUX1JUYCBpcyBhY3R1YWxseSBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBSRUVNUFRfUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdD05MD1lbmRjaG9pY2Vcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtOTEtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjkyOmNvbmZpZyBQUkVFTVBUX1JUXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkzLVx0Ym9vbCBcJiMzNDtGdWxseSBQcmVlbXB0aWJsZSBLZXJuZWwgKFJlYWwtVGltZSlcJiMzNDtcbi0tXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTEwOC1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTA5OmNvbmZpZyBQUkVFTVBUX1JUX05FRURTX0JIX0xPQ0tcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTEwLVx0Ym9vbCBcJiMzNDtFbmZvcmNlIHNvZnRpcnEgc3luY2hyb25pc2F0aW9uIG9uIFBSRUVNUFRfUlRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLQ09WIFJlbW90ZSBTb2Z0SVJRIEZ1bmN0aW9ucyB3aXRoIFBSRUVNUFRfUlQqKgoKT2theSwgc28gYFBSRUVNUFRfUlRgIGlzIGluZGVlZCBhbiBvcHRpb24gaGVyZSwgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHRoZSBzcGVjaWZpY3Mgb2YgdGhlc2UgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGFuZCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgY2FsbGVkIGZyb20gdGhlIHNvZnRpcnEgY29udGV4dCwgd2hpY2ggcmFpc2VzIGEgZmxhZy4gSWYgd2Ugd2FudCB0byB0ZXN0IHRoaXMsIGVuYWJsaW5nIGBQUkVFTVBUX1JUYCBpcyBub24tbmVnb3RpYWJsZS4gVGhlIHBhdGNoIHRleHQgaXRzZWxmIGRyaXZlcyB0aGF0IHBvaW50IGhvbWUg4oCTIGl0IG1lbnRpb25zIHRoZSBuZWVkIGZvciAmIzM0O3RlbXBvcmFyeSBzdG9yYWdlIGZvciBwcmVlbXB0aW5nIHJlbW90ZSBjb3ZlcmFnZSBjb2xsZWN0aW9uJiMzNDsgYW5kICYjMzQ7ZXh0cmEgYnVmZmVycy4uLiBmb3Igc29mdGlycSBwcmVlbXB0aW9uLCYjMzQ7IHNvIGBQUkVFTVBUX1JUYCBpdCBpcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBnZXQgYSBicm9hZGVyIHBpY3R1cmUuIFdlIGhhdmUgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYWxvbmcgd2l0aCB0aGUgZmFtaWxpYXIgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3N0b3BgLCBga2Nvdl9yZW1vdGVfYXJlYV9nZXRgLCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YC4KClRoZSBtb3JlIHByZXNzaW5nIHF1ZXN0aW9uIG5vdyBpczogYXJlIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBhbmQgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcGAgaW4gYSBob3QgcGF0aD8gU29mdGlycSBwcm9jZXNzaW5nICppcyogYSBob3QgcGF0aCwgZ2VuZXJhbGx5IHNwZWFraW5nLiBIb3dldmVyLCB0aGVzZSBLQ09WIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgS0NPViBpcyBib3RoIGVuYWJsZWQgKmFuZCogYWN0aXZlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyB0cmFjZSB0aGVpciBjYWxsIHNpdGVzIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2tjb3YuYz04MzM9c3RhdGljIGlubGluZSBib29sIGtjb3ZfbW9kZV9lbmFibGVkKHVuc2lnbmVkIGludCBtb2RlKVxuLS1cbmtlcm5lbC9rY292LmMtODM3LVxua2VybmVsL2tjb3YuYzo4Mzg6c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwva2Nvdi5jLTgzOS1cdF9fbXVzdF9ob2xkKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaylcbi0tXG5rZXJuZWwva2Nvdi5jPTg3MD12b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG4tLVxua2VybmVsL2tjb3YuYy05NTAtXHRpZiAoaW5fc2VydmluZ19zb2Z0aXJxKCkpIHtcbmtlcm5lbC9rY292LmM6OTUxOlx0XHRrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHQpO1xua2VybmVsL2tjb3YuYy05NTItXHRcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDExCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLQ09WIFJlbW90ZSBTdGFydCBCZWhhdmlvcioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoaXMgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGtjb3ZfcmVtb3RlX3N0YXJ0YC4gQW5kIHRoYXQgbWFrZXMgc2Vuc2UsIGFzIEkgcmVtZW1iZXIgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBpcyB0cmlnZ2VyZWQgd2hlbiBhIHJlbW90ZSBLQ09WIHNlY3Rpb24gZ2V0cyBnb2luZyDigJMgdGhpbmsgdmhvc3QsIG1hYzgwMjExX2h3c2ltLCB0aGF0IGtpbmQgb2YgdGhpbmcuIEJ1dCB3YWl04oCmIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCB0cmlnZ2VyIG9uICpldmVyeSogc29mdGlycSwgaXQmIzM5O3MgdGllZCBzcGVjaWZpY2FsbHkgdG8gY2FsbHMgdG8gYGtjb3ZfcmVtb3RlX3N0YXJ0YC4gVG8gY2xhcmlmeSB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hvJiMzOTtzIGNhbGxpbmcgYGtjb3ZfcmVtb3RlX3N0YXJ0YCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hlbiBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgaXMgYWN0dWFsbHkgZW5nYWdlZC4gVGhhdCBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBzb2Z0aXJxIGludGVyYWN0aW9uIEkmIzM5O20gc2VlaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tjb3ZfcmVtb3RlX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0PTIyNz1Vc2luZyBLQ09WIHRvIGNvbGxlY3QgcmVtb3RlIGNvdmVyYWdlIHJlcXVpcmVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTIyOS0xLiBNb2RpZnlpbmcga2VybmVsIGNvZGUgdG8gYW5ub3RhdGUgdGhlIGNvZGUgc2VjdGlvbiBmcm9tIHdoZXJlIGNvdmVyYWdlXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdDoyMzA6ICAgc2hvdWxkIGJlIGNvbGxlY3RlZCB3aXRoIGBga2Nvdl9yZW1vdGVfc3RhcnRgYCBhbmQgYGBrY292X3JlbW90ZV9zdG9wYGAuXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdC0yMzEtXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3QtMjM0LVxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjM1OkJvdGggYGBrY292X3JlbW90ZV9zdGFydGBgIGFuZCBgYGtjb3ZfcmVtb3RlX3N0b3BgYCBhbm5vdGF0aW9ucyBhbmQgdGhlXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdC0yMzYtYGBLQ09WX1JFTU9URV9FTkFCTEVgYCBpb2N0bCBhY2NlcHQgaGFuZGxlcyB0aGF0IGlkZW50aWZ5IHBhcnRpY3VsYXIgY292ZXJhZ2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdD0yNTU9Rm9yICMxIGFuZCAjMywgYSB1bmlxdWUgZ2xvYmFsIGhhbmRsZSBtdXN0IGJlIGNob3NlbiBhbmQgcGFzc2VkIHRvIHRoZVxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjU2OmNvcnJlc3BvbmRpbmcgYGBrY292X3JlbW90ZV9zdGFydGBgIGNhbGwuIFRoZW4gYSB1c2Vyc3BhY2UgcHJvY2VzcyBtdXN0IHBhc3NcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTI1Ny10aGlzIGhhbmRsZSB0byBgYEtDT1ZfUkVNT1RFX0VOQUJMRWBgIGluIHRoZSBgYGhhbmRsZXNgYCBhcnJheSBmaWVsZCBvZiB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdD0yNjY9bW9kaWZpY2F0aW9ucy4gVGhvc2UgdGFza3Mgc2hvdWxkIGluIHR1cm4gdXNlIHRoZSBwYXNzZWQgaGFuZGxlIGluIHRoZWlyXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdDoyNjc6YGBrY292X3JlbW90ZV9zdGFydGBgIGFuZCBgYGtjb3ZfcmVtb3RlX3N0b3BgYCBhbm5vdGF0aW9ucy5cbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTI2OC1JbiB0aGUga2VybmVsLCBjb21tb24gaGFuZGxlcyBhcmUgd3JhcHBlZCBpbiBhIGBga2Nvdl9jb21tb25faGFuZGxlX2lkYGAsIHdoaWNoXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0PTI4PUtDT1Yg5L6d6LWW57yW6K+R5Zmo5o+S5qGp77yM6KaB5rGCIEdDQyA2LjEuMCDlj4rmm7Tpq5jniYjmnKzmiJbogIXlhoXmoLjmlK/mjIHnmoTku7vmhI/niYjmnKznmoQgQ2xhbmfjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3QtMjI1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0OjIyNjoxLiDkv67mlLnlhoXmoLjmupDnoIHlubbkvb/nlKggYGBrY292X3JlbW90ZV9zdGFydGBgIOWSjCBgYGtjb3ZfcmVtb3RlX3N0b3BgYCDmnaXmoIfms6jopoHmlLbpm4ZcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yMjctICAg6KaG55uW546H55qE5Luj56CB54mH5q6144CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTIzMC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyMzE6YGBrY292X3JlbW90ZV9zdGFydGBgIOWSjCBgYGtjb3ZfcmVtb3RlX3N0b3BgYCDnmoTmoIfms6jku6Xlj4ogYGBLQ09WX1JFTU9URV9FTkFCTEVgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTIzMi1pb2N0bCDpg73mjqXlj5flj6/ku6Xor4bliKvnibnlrpropobnm5bnjofmlLbpm4bniYfmrrXnmoTlj6Xmn4TjgILlj6Xmn4TnmoTkvb/nlKjmlrnlvI/lj5blhrPkuo7ljLnphY3ku6PnoIHniYfmrrXmiadcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3Q9MjM1PUtDT1Yg5pSv5oyB5Zyo5aaC5LiL5LiK5LiL5paH5Lit5pS26ZuG6L+c56iL6KaG55uW546H77yaXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTI0NS3lr7nkuo4gIzEg5ZKMICMz77yM5b+F6aG76YCJ5oup5LiA5Liq54us54m555qE5YWo5bGA5Y+l5p+E5bm25bCG5YW25Lyg6YCS57uZ5a+55bqU55qEXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjQ2OmBga2Nvdl9yZW1vdGVfc3RhcnRgYCDosIPnlKjjgILkuIDkuKrnlKjmiLfnqbrpl7Tov5vnqIvlv4XpobvlsIbor6Xlj6Xmn4TlrZjlgqjlnKhcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yNDctYGBrY292X3JlbW90ZV9hcmdgYCDnu5PmnoTkvZPnmoQgYGBoYW5kbGVgYCDmlbDnu4TlrZfmrrXkuK3lubblsIblhbbkvKDpgJLnu5lcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3QtMjUzLWBga2Nvdl9oYW5kbGVgYCDlrZfmrrXkuK3lubbkuJTpnIDopoHpgJrov4foh6rlrprkuYnlhoXmoLjku6PnoIHnmoTkv67mlLnmnaXkvKDpgJLnu5nmlrDliJvlu7rnmoTmnKzlnLDku7vliqFcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyNTQ644CC6L+Z5Lqb5Lu75Yqh6ZyA6KaB5ZyoIGBga2Nvdl9yZW1vdGVfc3RhcnRgYCDlkowgYGBrY292X3JlbW90ZV9zdG9wYGAg5qCH5rOo5Lit5L6d5qyh5L2/55So5Lyg6YCS6L+H5p2l55qEXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3QtMjU1LeWPpeafhOOAglxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmM9MTYzMD1zdGF0aWMgdm9pZCBfX3VzYl9oY2RfZ2l2ZWJhY2tfdXJiKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2hjZC5jLTE2NTUtXHQgKi9cbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmM6MTY1NjpcdGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYl9zb2Z0aXJxKCh1NjQpdXJiLVx1MDAzZWRldi1cdTAwM2VidXMtXHUwMDNlYnVzbnVtKTtcbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmMtMTY1Ny1cdHVyYi1cdTAwM2Vjb21wbGV0ZSh1cmIpO1xuLS1cbmRyaXZlcnMvdXNiL2NvcmUvaHViLmM9NTg3ND1zdGF0aWMgdm9pZCBodWJfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvaHViLmMtNTg4OC1cbmRyaXZlcnMvdXNiL2NvcmUvaHViLmM6NTg4OTpcdGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYigodTY0KWhkZXYtXHUwMDNlYnVzLVx1MDAzZWJ1c251bSk7XG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jLTU4OTAtXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jPTI1Nj1pbnQgdmhjaV9yeF9sb29wKHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTI2My1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzoyNjQ6XHRcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbih1ZC1cdTAwM2VrY292X2hhbmRsZSk7XG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtMjY1LVx0XHR2aGNpX3J4X3BkdSh1ZCk7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTQwMD1zdGF0aWMgaW50IHZob3N0X3J1bl93b3JrX2t0aHJlYWRfbGlzdCh2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy00MjYtXHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjQyNzpcdFx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24od29ya2VyLVx1MDAzZWtjb3ZfaGFuZGxlKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy00MjgtXHRcdFx0d29yay1cdTAwM2Vmbih3b3JrKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9NDM4PXN0YXRpYyBib29sIHZob3N0X3J1bl93b3JrX2xpc3Qodm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNDUyLVx0XHRcdGNsZWFyX2JpdChWSE9TVF9XT1JLX1FVRVVFRCwgXHUwMDI2d29yay1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NDUzOlx0XHRcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbih3b3JrZXItXHUwMDNla2Nvdl9oYW5kbGUpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTQ1NC1cdFx0XHR3b3JrLVx1MDAzZWZuKHdvcmspO1xuLS1cbmluY2x1ZGUvbGludXgva2Nvdi5oPTM3PWRvIHtcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgva2Nvdi5oLTQxLS8qIFNlZSBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdCBmb3IgdXNhZ2UgZGV0YWlscy4gKi9cbmluY2x1ZGUvbGludXgva2Nvdi5oOjQyOnZvaWQga2Nvdl9yZW1vdGVfc3RhcnQodTY0IGhhbmRsZSk7XG5pbmNsdWRlL2xpbnV4L2tjb3YuaC00My12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2tjb3YuaD00ND1zdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfY29tbW9uX2hhbmRsZSh2b2lkKTtcbmluY2x1ZGUvbGludXgva2Nvdi5oLTQ1LVxuaW5jbHVkZS9saW51eC9rY292Lmg6NDY6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGlkKVxuaW5jbHVkZS9saW51eC9rY292LmgtNDcte1xuaW5jbHVkZS9saW51eC9rY292Lmg6NDg6XHRrY292X3JlbW90ZV9zdGFydChrY292X3JlbW90ZV9oYW5kbGUoS0NPVl9TVUJTWVNURU1fQ09NTU9OLCBpZC52YWwpKTtcbmluY2x1ZGUvbGludXgva2Nvdi5oLTQ5LX1cbmluY2x1ZGUvbGludXgva2Nvdi5oLTUwLVxuaW5jbHVkZS9saW51eC9rY292Lmg6NTE6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYih1NjQgaWQpXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC01Mi17XG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo1MzpcdGtjb3ZfcmVtb3RlX3N0YXJ0KGtjb3ZfcmVtb3RlX2hhbmRsZShLQ09WX1NVQlNZU1RFTV9VU0IsIGlkKSk7XG5pbmNsdWRlL2xpbnV4L2tjb3YuaC01NC19XG4tLVxuaW5jbHVkZS9saW51eC9rY292LmgtNjItXG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo2MzpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnRfdXNiX3NvZnRpcnEodTY0IGlkKVxuaW5jbHVkZS9saW51eC9rY292LmgtNjQte1xuaW5jbHVkZS9saW51eC9rY292LmgtNjUtXHRpZiAoaW5fc2VydmluZ19zb2Z0aXJxKCkgXHUwMDI2XHUwMDI2ICFpbl9oYXJkaXJxKCkpXG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo2NjpcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfdXNiKGlkKTtcbmluY2x1ZGUvbGludXgva2Nvdi5oLTY3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2tjb3YuaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9maW5pc2hfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkge31cbmluY2x1ZGUvbGludXgva2Nvdi5oOjk4OnN0YXRpYyBpbmxpbmUgdm9pZCBrY292X3JlbW90ZV9zdGFydCh1NjQgaGFuZGxlKSB7fVxuaW5jbHVkZS9saW51eC9rY292LmgtOTktc3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZCkge31cbmluY2x1ZGUvbGludXgva2Nvdi5oPTEwMD1zdGF0aWMgaW5saW5lIHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQga2Nvdl9jb21tb25faGFuZGxlKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9rY292LmgtMTAzLX1cbmluY2x1ZGUvbGludXgva2Nvdi5oOjEwNDpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQgaWQpIHt9XG5pbmNsdWRlL2xpbnV4L2tjb3YuaDoxMDU6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYih1NjQgaWQpIHt9XG5pbmNsdWRlL2xpbnV4L2tjb3YuaDoxMDY6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYl9zb2Z0aXJxKHU2NCBpZCkge31cbmluY2x1ZGUvbGludXgva2Nvdi5oLTEwNy1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RvcF9zb2Z0aXJxKHZvaWQpIHt9XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2tjb3YuaC04LSAqIEFyZ3VtZW50IGZvciBLQ09WX1JFTU9URV9FTkFCTEUgaW9jdGwsIHNlZSBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdFxuaW5jbHVkZS91YXBpL2xpbnV4L2tjb3YuaDo5OiAqIGFuZCB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy5cbmluY2x1ZGUvdWFwaS9saW51eC9rY292LmgtMTAtICovXG4tLVxua2VybmVsL2tjb3YuYz00MDc9c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfcmVzZXQoc3RydWN0IGtjb3YgKmtjb3YpXG4tLVxua2VybmVsL2tjb3YuYy00MjEtXHR9XG5rZXJuZWwva2Nvdi5jOjQyMjpcdC8qIERvIHJlc2V0IGJlZm9yZSB1bmxvY2sgdG8gcHJldmVudCByYWNlcyB3aXRoIGtjb3ZfcmVtb3RlX3N0YXJ0KCkuICovXG5rZXJuZWwva2Nvdi5jLTQyMy1cdGtjb3ZfcmVzZXQoa2Nvdik7XG4tLVxua2VybmVsL2tjb3YuYz00NTc9dm9pZCBrY292X3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4tLVxua2VybmVsL2tjb3YuYy00NjYtXHRcdC8qXG5rZXJuZWwva2Nvdi5jOjQ2NzpcdFx0ICogVGhpcyBjb3VsZCBiZSBhIHJlbW90ZSB0YXNrIGJldHdlZW4ga2Nvdl9yZW1vdGVfc3RhcnQoKSBhbmRcbmtlcm5lbC9rY292LmMtNDY4LVx0XHQgKiBrY292X3JlbW90ZV9zdG9wKCkuXG4tLVxua2VybmVsL2tjb3YuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga2Nvdl9mb3BzID0ge1xuLS1cbmtlcm5lbC9rY292LmMtNzkwLS8qXG5rZXJuZWwva2Nvdi5jOjc5MTogKiBrY292X3JlbW90ZV9zdGFydCgpIGFuZCBrY292X3JlbW90ZV9zdG9wKCkgY2FuIGJlIHVzZWQgdG8gYW5ub3RhdGUgYSBzZWN0aW9uXG5rZXJuZWwva2Nvdi5jLTc5Mi0gKiBvZiBjb2RlIGluIGEga2VybmVsIGJhY2tncm91bmQgdGhyZWFkIG9yIGluIGEgc29mdGlycSB0byBhbGxvdyBrY292IHRvIGJlXG4tLVxua2VybmVsL2tjb3YuYy03OTQtICpcbmtlcm5lbC9rY292LmM6Nzk1OiAqIFRoZSBoYW5kbGUgYXJndW1lbnQgb2Yga2Nvdl9yZW1vdGVfc3RhcnQoKSBpZGVudGlmaWVzIGEgY29kZSBzZWN0aW9uIHRoYXQgaXNcbmtlcm5lbC9rY292LmMtNzk2LSAqIHVzZWQgZm9yIGNvdmVyYWdlIGNvbGxlY3Rpb24uIEEgdXNlcnNwYWNlIHByb2Nlc3MgcGFzc2VzIHRoaXMgaGFuZGxlIHRvXG4tLVxua2VybmVsL2tjb3YuYy04MTgtICogYW5kIHBhc3NlZCB0byB0aGUgc3Bhd25lZCB0aHJlYWRzIHZpYSBjdXN0b20gYW5ub3RhdGlvbnMuIFRob3NlIGtlcm5lbFxua2VybmVsL2tjb3YuYzo4MTk6ICogdGhyZWFkcyBtdXN0IGluIHR1cm4gYmUgYW5ub3RhdGVkIHdpdGgga2Nvdl9yZW1vdGVfc3RhcnQoY29tbW9uX2hhbmRsZSkgYW5kXG5rZXJuZWwva2Nvdi5jLTgyMC0gKiBrY292X3JlbW90ZV9zdG9wKCkuIEFsbCBvZiB0aGUgdGhyZWFkcyB0aGF0IGFyZSBzcGF3bmVkIGJ5IHRoZSBzYW1lIHByb2Nlc3Ncbi0tXG5rZXJuZWwva2Nvdi5jLTgyNC0gKlxua2VybmVsL2tjb3YuYzo4MjU6ICogSW50ZXJuYWxseSwga2Nvdl9yZW1vdGVfc3RhcnQoKSBsb29rcyB1cCB0aGUga2NvdiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxua2VybmVsL2tjb3YuYy04MjYtICogcHJvdmlkZWQgaGFuZGxlLCBhbGxvY2F0ZXMgYW4gYXJlYSBmb3IgY292ZXJhZ2UgY29sbGVjdGlvbiwgYW5kIHNhdmVzIHRoZVxuLS1cbmtlcm5lbC9rY292LmM9ODU1PXN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4tLVxua2VybmVsL2tjb3YuYy04NjktXG5rZXJuZWwva2Nvdi5jOjg3MDp2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG5rZXJuZWwva2Nvdi5jLTg3MS17XG4tLVxua2VybmVsL2tjb3YuYy04ODgtXHQvKlxua2VybmVsL2tjb3YuYzo4ODk6XHQgKiBDaGVjayB0aGF0IGtjb3ZfcmVtb3RlX3N0YXJ0KCkgaXMgbm90IGNhbGxlZCB0d2ljZSBpbiBiYWNrZ3JvdW5kXG5rZXJuZWwva2Nvdi5jLTg5MC1cdCAqIHRocmVhZHMgbm9yIGNhbGxlZCBieSB1c2VyIHRhc2tzICh3aXRoIGVuYWJsZWQga2NvdikuXG4tLVxua2VybmVsL2tjb3YuYy04OTctXHQvKlxua2VybmVsL2tjb3YuYzo4OTg6XHQgKiBDaGVjayB0aGF0IGtjb3ZfcmVtb3RlX3N0YXJ0KCkgaXMgbm90IGNhbGxlZCB0d2ljZSBpbiBzb2Z0aXJxcy5cbmtlcm5lbC9rY292LmM6ODk5Olx0ICogTm90ZSwgdGhhdCBrY292X3JlbW90ZV9zdGFydCgpIGNhbiBiZSBjYWxsZWQgZnJvbSBhIHNvZnRpcnEgdGhhdFxua2VybmVsL2tjb3YuYy05MDAtXHQgKiBoYXBwZW5lZCB3aGlsZSBjb2xsZWN0aW5nIGNvdmVyYWdlIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVhZC5cbi0tXG5rZXJuZWwva2Nvdi5jLTk1OC19XG5rZXJuZWwva2Nvdi5jOjk1OTpFWFBPUlRfU1lNQk9MKGtjb3ZfcmVtb3RlX3N0YXJ0KTtcbmtlcm5lbC9rY292LmMtOTYwLVxua2VybmVsL2tjb3YuYz05NjE9c3RhdGljIHZvaWQga2Nvdl9tb3ZlX2FyZWEoZW51bSBrY292X21vZGUgbW9kZSwgdm9pZCAqZHN0X2FyZWEsXG4tLVxua2VybmVsL2tjb3YuYy0xMDI0LVxua2VybmVsL2tjb3YuYzoxMDI1Oi8qIFNlZSB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy4gKi9cbmtlcm5lbC9rY292LmMtMTAyNi12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZClcbi0tXG5rZXJuZWwva2Nvdi5jLTEwNDctXHQvKlxua2VybmVsL2tjb3YuYzoxMDQ4Olx0ICogV2hlbiBpbiBzb2Z0aXJxLCBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBrY292X3JlbW90ZV9zdGFydCgpXG5rZXJuZWwva2Nvdi5jLTEwNDktXHQgKiBhY3R1YWxseSBmb3VuZCB0aGUgcmVtb3RlIGhhbmRsZSBhbmQgc3RhcnRlZCBjb2xsZWN0aW5nIGNvdmVyYWdlLlxuLS1cbmtlcm5lbC9rY292LmMtMTA3My1cdC8qXG5rZXJuZWwva2Nvdi5jOjEwNzQ6XHQgKiBLQ09WX0RJU0FCTEUgY291bGQgaGF2ZSBiZWVuIGNhbGxlZCBiZXR3ZWVuIGtjb3ZfcmVtb3RlX3N0YXJ0KClcbmtlcm5lbC9rY292LmMtMTA3NS1cdCAqIGFuZCBrY292X3JlbW90ZV9zdG9wKCksIGhlbmNlIHRoZSBzZXF1ZW5jZSBjaGVjay5cbi0tXG5rZXJuZWwva2Nvdi5jLTEwODYtXG5rZXJuZWwva2Nvdi5jOjEwODc6XHQvKiBHZXQgaW4ga2Nvdl9yZW1vdGVfc3RhcnQoKS4gKi9cbmtlcm5lbC9rY292LmMtMTA4OC1cdGtjb3ZfcHV0KGtjb3YpO1xuLS1cbmtlcm5lbC9rY292LmM9MTA5MD1FWFBPUlRfU1lNQk9MKGtjb3ZfcmVtb3RlX3N0b3ApO1xua2VybmVsL2tjb3YuYy0xMDkxLVxua2VybmVsL2tjb3YuYzoxMDkyOi8qIFNlZSB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy4gKi9cbmtlcm5lbC9rY292LmMtMTA5My1zdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfY29tbW9uX2hhbmRsZSh2b2lkKVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2NvcmUuYz0zOTg5PXN0YXRpYyB2b2lkIGhjaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtNDAwMS1cdGZvciAoOyAoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2aGRldi1cdTAwM2VyeF9xKSk7IGtjb3ZfcmVtb3RlX3N0b3AoKSkge1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jOjQwMDI6XHRcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTQwMDMtXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTgwMD1zdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZhY2Vfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODE3LVx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUpKSkge1xubmV0L21hYzgwMjExL2lmYWNlLmM6MTgxODpcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODE5LVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE4MzAtXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnNkYXRhLVx1MDAzZXN0YXR1c19xdWV1ZSkpKSB7XG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxODMxOlx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE4MzItXG4tLVxubmV0L21hYzgwMjExL3J4LmM9NTU1Nz12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTU2OTktXG5uZXQvbWFjODAyMTEvcnguYzo1NzAwOlx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG5uZXQvbWFjODAyMTEvcnguYy01NzAxLVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xNTIwPXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTUzNi1cdFx0XHRyZXR1cm47XG5uZXQvbmZjL25jaS9jb3JlLmM6MTUzNzpcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTUzOC1cbi0tXG5uZXQvbmZjL25jaS9jb3JlLmM9MTU1OT1zdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTE1NjQtXHRmb3IgKDsgKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNm5kZXYtXHUwMDNlcnhfcSkpOyBrY292X3JlbW90ZV9zdG9wKCkpIHtcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTY1Olx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTY2LVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xNjExPXN0YXRpYyB2b2lkIG5jaV9jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTE2MjMtXG5uZXQvbmZjL25jaS9jb3JlLmM6MTYyNDpcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTYyNS1cdFx0YXRvbWljX2RlYyhcdTAwMjZuZGV2LVx1MDAzZWNtZF9jbnQpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jPTQwNT1zdGF0aWMgdm9pZCBuY2lfaGNpX21zZ19yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy00MTMtXHRmb3IgKDsgKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3F1ZXVlKSk7IGtjb3ZfcmVtb3RlX3N0b3AoKSkge1xubmV0L25mYy9uY2kvaGNpLmM6NDE0Olx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQxNS1cdFx0cGlwZSA9IE5DSV9IQ1BfTVNHX0dFVF9QSVBFKHNrYi1cdTAwM2VkYXRhWzBdKTtcbi0tXG5uZXQvbmZjL3Jhd3NvY2suYz0xODg9c3RhdGljIHZvaWQgcmF3c29ja190eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL3Jhd3NvY2suYy0yMDMtXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSk7XG5uZXQvbmZjL3Jhd3NvY2suYzoyMDQ6XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbm5ldC9uZmMvcmF3c29jay5jLTIwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgU29mdElSUSBLQ09WIEhvb2sqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IEtDT1YgaXMgaW50ZWdyYXRlZCB3aXRoIHNvZnRpcnFzLiBJIHNlZSB0aGF0IGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBpcyBpbnZvbHZlZCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIGJhY2sgaXRzIGNhbGwgcGF0aC4gTm93LCB0aGUgY29udGV4dCBzYXlzIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX2RvX3NvZnRpcnFgLiBIYW5nIG9uIGEgc2Vjb25kLi4uIGlzIHRoYXQgZGlyZWN0PyBPciBkb2VzIGBrY292X3NvZnRpcnFfc3RhcnRgIHNpdCBpbiBiZXR3ZWVuPyBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeS4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZTsgbWlzcmVhZGluZyB0aGUgY2FsbCBmbG93IHdvdWxkIHNlbmQgbWUgZG93biB0aGUgd3JvbmcgcGF0aCBlbnRpcmVseS4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb24gY2FsbHMuIExldCYjMzk7cyBzZWUgZXhhY3RseSB3aGVyZSBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgaXMgY2FsbGVkLiBHb3R0YSBjb25maXJtIHRoYXQgY29ubmVjdGlvbi4uLiBhbmQgdGhlbiBJIGNhbiBmdWxseSB1bmRlcnN0YW5kIGhvdyBLQ09WIGludGVyYWN0cyB3aXRoIHRoZSBTb2Z0SVJRIHByb2Nlc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2tjb3YuYz04MzM9c3RhdGljIGlubGluZSBib29sIGtjb3ZfbW9kZV9lbmFibGVkKHVuc2lnbmVkIGludCBtb2RlKVxuLS1cbmtlcm5lbC9rY292LmMtODM3LVxua2VybmVsL2tjb3YuYzo4Mzg6c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwva2Nvdi5jLTgzOS1cdF9fbXVzdF9ob2xkKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaylcbi0tXG5rZXJuZWwva2Nvdi5jPTg3MD12b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG4tLVxua2VybmVsL2tjb3YuYy05NTAtXHRpZiAoaW5fc2VydmluZ19zb2Z0aXJxKCkpIHtcbmtlcm5lbC9rY292LmM6OTUxOlx0XHRrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHQpO1xua2VybmVsL2tjb3YuYy05NTItXHRcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEtDT1YgU29mdElSUSBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBJIHNlZSBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgYmVpbmcgY2FsbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0FoYSEgSXQmIzM5O3MgZnJvbSBga2Nvdl9yZW1vdGVfc3RhcnRgICpjb25kaXRpb25hbGx5KiB3aGVuIGBpbl9zZXJ2aW5nX3NvZnRpcnEoKWAgaXMgdHJ1ZS4mIzM0OyBCdXQsIHRoYXQgZG9lc24mIzM5O3QgcXVpdGUgc2VlbSByaWdodC4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBXYWl0IGEgc2Vjb25kLCB0aGUgbW9yZSBsaWtlbHkgc2NlbmFyaW8gaXMgdGhhdCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gYGtjb3Zfc29mdGlycV9zdGFydGAuIE9rYXksIGxldCYjMzk7cyBjb25maXJtIHRoaXMgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBrY292X3NvZnRpcnFfc3RhcnRgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGggdGhlcmUuIE5vIGFzc3VtcHRpb25zLCBuZWVkIHRoZSBoYXJkIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2Nvdl9zb2Z0aXJxX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS0NPViBTb2Z0SVJRIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIFRoZSBvdXRwdXQgc2VlbWVkIHRvIGluZGljYXRlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gd2l0aGluIGBrY292X3JlbW90ZV9zdGFydGAsIGJ1dCB0aGUgaW5pdGlhbCBnbGFuY2UgSSB0b29rIHN1Z2dlc3RlZCBvdGhlcndpc2UuIExldCBtZSBkb3VibGUtY2hlY2sgdGhpcy4gVGhlIG91dHB1dCBzYXlzOiBpZiB0aGUgc3lzdGVtIGlzIHNlcnZpbmcgYSBzb2Z0SVJRLCB0aGVuIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgaXQuIE9rYXksIHNvIG5vdyBJJiMzOTttIHRoaW5raW5nLCBpcyBga2Nvdl9yZW1vdGVfc3RhcnRgIGFjdHVhbGx5ICpjYWxsaW5nKiBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgZGlyZWN0bHk/IEkgbmVlZCB0byB2ZXJpZnkgdGhpcyByZWxhdGlvbnNoaXAuIExldCYjMzk7cyB0cmFjZSBiYWNrIHRvIGBrY292X3JlbW90ZV9zdGFydGAgZGVmaW5pdGlvbiBpbiBga2VybmVsL2tjb3YuY2AgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwva2Nvdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDA6XHRcdFx0aWYgKCFhcmVhKSB7XG4gOTQxOlx0XHRcdFx0a2Nvdl9wdXQoa2Nvdik7XG4gOTQyOlx0XHRcdFx0cmV0dXJuO1xuIDk0MzpcdFx0XHR9XG4gOTQ0Olx0XHRcdGxvY2FsX2xvY2tfaXJxc2F2ZShcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcbiA5NDU6XHRcdH1cbiA5NDY6XHRcbiA5NDc6XHRcdC8qIFJlc2V0IGNvdmVyYWdlIHNpemUuICovXG4gOTQ4Olx0XHQqKHU2NCAqKWFyZWEgPSAwO1xuIDk0OTpcdFxuIDk1MDpcdFx0aWYgKGluX3NlcnZpbmdfc29mdGlycSgpKSB7XG4gOTUxOlx0XHRcdGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQodCk7XG4gOTUyOlx0XHRcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMTtcbiA5NTM6XHRcdH1cbiA5NTQ6XHRcdGtjb3Zfc3RhcnQodCwga2Nvdiwgc2l6ZSwgYXJlYSwgbW9kZSwgc2VxdWVuY2UpO1xuIDk1NTpcdFxuIDk1NjpcdFx0bG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrLCBmbGFncyk7XG4gOTU3Olx0XG4gOTU4Olx0fVxuIDk1OTpcdEVYUE9SVF9TWU1CT0woa2Nvdl9yZW1vdGVfc3RhcnQpO1xuIDk2MDpcdFxuIDk2MTpcdHN0YXRpYyB2b2lkIGtjb3ZfbW92ZV9hcmVhKGVudW0ga2Nvdl9tb2RlIG1vZGUsIHZvaWQgKmRzdF9hcmVhLFxuIDk2MjpcdFx0XHRcdFx0dW5zaWduZWQgaW50IGRzdF9hcmVhX3NpemUsIHZvaWQgKnNyY19hcmVhKVxuIDk2MzpcdHtcbiA5NjQ6XHRcdHU2NCB3b3JkX3NpemUgPSBzaXplb2YodW5zaWduZWQgbG9uZyk7XG4gOTY1Olx0XHR1NjQgY291bnRfc2l6ZSwgZW50cnlfc2l6ZV9sb2c7XG4gOTY2Olx0XHR1NjQgZHN0X2xlbiwgc3JjX2xlbjtcbiA5Njc6XHRcdHZvaWQgKmRzdF9lbnRyaWVzLCAqc3JjX2VudHJpZXM7XG4gOTY4Olx0XHR1NjQgZHN0X29jY3VwaWVkLCBkc3RfZnJlZSwgYnl0ZXNfdG9fbW92ZSwgZW50cmllc19tb3ZlZDtcbiA5Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5kZXJzdGFuZGluZyB0aGUgUmVtb3RlIEtDT1YgU3RhcnQvU3RvcCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUgZmxvdyBoZXJlLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBnZXRzIGNhbGxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaGFwcGVuaW5nIGZyb20gYSBzb2Z0aXJxIGNvbnRleHQsIGxpa2UgdGhlIGBrY292X3JlbW90ZV9zdGFydF91c2Jfc29mdGlycWAgY2FsbCBzdWdnZXN0cy4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBpbnRlcnJ1cHRzIGNvbWluZyBmcm9tIGV4dGVybmFsIGRldmljZXMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXQgY2hlY2tzIGBpbl9zZXJ2aW5nX3NvZnRpcnEoKWAuICBUaGF04oCZcyB0aGUga2V5IGNvbnRleHQgY2hlY2suIElmIHdlICphcmUqIGluIGEgc29mdGlycSwgaXQgY2FsbHMgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQodClgLiAgVGhpcyBpcyBjbGV2ZXIuIEl0IHNhdmVzIHRoZSBleGlzdGluZyBLQ09WIHN0YXRlLCBpZiBvbmUgZXhpc3RzLCBhbmQgKnN0b3BzKiBpdC4gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgYW55IGNvdmVyYWdlIHRyYWNpbmcgaGFwcGVuaW5nIGF0IHRoZSB0aW1lLiBUaGVuLCBhbmQgb25seSB0aGVuLCBkb2VzIGl0IGtpY2sgb2ZmIGBrY292X3N0YXJ0YCBmb3IgdGhlIHJlbW90ZSBjb3ZlcmFnZS4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgc3dpdGNoaW5nIGZyb20gbG9jYWwgS0NPViB0byByZW1vdGUgS0NPVi4gVGhlIHN5c3RlbSBpcyBwcm9iYWJseSBzd2l0Y2hpbmcgZnJvbSBsb2NhbCBpbnN0cnVtZW50YXRpb24gb2YgdGhlIGtlcm5lbCB0byB1c2luZyBhIHJlbW90ZSBpbnN0YW5jZSBmb3IgcHJvZmlsaW5nLgoKQW5kIGZpbmFsbHksIHdoZW4gYGtjb3ZfcmVtb3RlX3N0b3BgIGlzIGNhbGxlZCwgaXQgcmVzdG9yZXMgdGhlIHNhdmVkIEtDT1Ygc3RhdGUuICBUaGlzIHNlZW1zIGNsZWFuIOKAkyBpdCByZXR1cm5zIHVzIHRvIHRoZSBzdGF0ZSB3ZSB3ZXJlIGluIGJlZm9yZSB0aGUgcmVtb3RlIHByb2ZpbGluZyBzdGFydGVkLCBlbnN1cmluZyBubyBkYXRhIGlzIGxvc3Qgb3IgY29ycnVwdGVkLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm90aGluZyBoYXBwZW5zIHdpdGggb3VyIGV4aXN0aW5nIHRyYWNpbmcsIGlmIGFueS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGtjb3ZfcmVtb3RlX3N0b3BgIGZ1bmN0aW9uIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCByZXN0b3JhdGlvbiBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2tjb3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFxuMTA4MTpcdFx0c3Bpbl9sb2NrKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xuMTA4MjpcdFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgc2l6ZSwgIWluX3Rhc2soKSk7XG4xMDgzOlx0XHRzcGluX3VubG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbjEwODQ6XHRcbjEwODU6XHRcdGxvY2FsX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpO1xuMTA4NjpcdFxuMTA4NzpcdFx0LyogR2V0IGluIGtjb3ZfcmVtb3RlX3N0YXJ0KCkuICovXG4xMDg4Olx0XHRrY292X3B1dChrY292KTtcbjEwODk6XHR9XG4xMDkwOlx0RVhQT1JUX1NZTUJPTChrY292X3JlbW90ZV9zdG9wKTtcbjEwOTE6XHRcbjEwOTI6XHQvKiBTZWUgdGhlIGNvbW1lbnQgYmVmb3JlIGtjb3ZfcmVtb3RlX3N0YXJ0KCkgZm9yIHVzYWdlIGRldGFpbHMuICovXG4xMDkzOlx0c3RydWN0IGtjb3ZfY29tbW9uX2hhbmRsZV9pZCBrY292X2NvbW1vbl9oYW5kbGUodm9pZClcbjEwOTQ6XHR7XG4xMDk1Olx0XHRpZiAoIWluX3Rhc2soKSlcbjEwOTY6XHRcdFx0cmV0dXJuIChzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkKXsgLnZhbCA9IDAgfTtcbjEwOTc6XHRcdHJldHVybiAoc3RydWN0IGtjb3ZfY29tbW9uX2hhbmRsZV9pZCl7IC52YWwgPSBjdXJyZW50LVx1MDAzZWtjb3ZfaGFuZGxlIH07XG4xMDk4Olx0fVxuMTA5OTpcdEVYUE9SVF9TWU1CT0woa2Nvdl9jb21tb25faGFuZGxlKTtcbjExMDA6XHRcbjExMDE6XHQjaWZkZWYgQ09ORklHX0tDT1ZfU0VMRlRFU1RcbjExMDI6XHRzdGF0aWMgdm9pZCBfX2luaXQgc2VsZnRlc3Qodm9pZClcbjExMDM6XHR7XG4xMTA0Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0O1xuMTEwNTpcdFxuMTEwNjpcdFx0cHJfZXJyKFwmIzM0O3J1bm5pbmcgc2VsZiB0ZXN0XFxuXCYjMzQ7KTtcbjExMDc6XHRcdC8qXG4xMTA4Olx0XHQgKiBUZXN0IHRoYXQgaW50ZXJydXB0cyBkb24mIzM5O3QgcHJvZHVjZSBzcHVyaW91cyBjb3ZlcmFnZS5cbjExMDk6XHRcdCAqIFRoZSBjb3ZlcmFnZSBjYWxsYmFjayBmaWx0ZXJzIG91dCBpbnRlcnJ1cHQgY29kZSwgYnV0IG9ubHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGludG8gdGhpcyBjb2RlOgoKKipMb2NhdGluZyB0aGUgQ2FsbGVycyBvZiBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCoqCgpSaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyB0aGlzIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgIGZ1bmN0aW9uIGJlaW5nICp1c2VkKj8gSSBuZWVkIHRvIHNlZSB0aGUgY2FsbCBzaXRlcy4gVW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgaW52b2tlZCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB3aGF0ZXZlciB0aGlzIGtjb3YtcmVsYXRlZCBzdWJzeXN0ZW0gaXMgZG9pbmcuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIHRyYWNlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGljaCB3aWxsIHNob3cgdGhlIGRpZmZlcmVudCBwYXRocyBhbmQgY29uZGl0aW9ucyBpbnZvbHZlZCBpbiBleGVjdXRpbmcgaXQuIFRoYXQmIzM5O3MgdGhlIGJlc3QgZmlyc3Qgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rY292LmM9ODM4PXN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuLS1cbmtlcm5lbC9rY292LmMtODU0LVxua2VybmVsL2tjb3YuYzo4NTU6c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbmtlcm5lbC9rY292LmMtODU2LVx0X19tdXN0X2hvbGQoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKVxuLS1cbmtlcm5lbC9rY292LmM9MTAyNj12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZClcbi0tXG5rZXJuZWwva2Nvdi5jLTEwNjgtXHRcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMDtcbmtlcm5lbC9rY292LmM6MTA2OTpcdFx0a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wKHQpO1xua2VybmVsL2tjb3YuYy0xMDcwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLQ09WIFNvZnRpcnEgQ292ZXJhZ2UgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaG93IEtDT1YgaGFuZGxlcyBzb2Z0aXJxIGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyB0aGUgcHJlZW1wdGlvbiBpc3N1ZXMgdGhhdCBhcmlzZSB3aXRoIGBQUkVFTVBUX1JUYC4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gaW4gbXkgbWluZDoKCkZpcnN0bHksIEkgc2VlIHRoYXQgYGtjb3ZfcmVtb3RlX3N0b3BgIGlzIG5vdyBkaXJlY3RseSBjYWxsaW5nIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IHRoZSBjb3ZlcmFnZSBhcmVhcyBhcmUgbWFuYWdlZC4KClRoZSBrZXkgYWRqdXN0bWVudHMgYXJlIGNsZWFyOiBga2Nvdl9yZW1vdGVfYXJlYXNgIGhhcyBiZWVuIHJlc3RydWN0dXJlZCBpbnRvIGFuIGFycmF5IG9mIHR3byBsaXN0czsgb25lIGZvciB0YXNrcyBhbmQgYW5vdGhlciBmb3IgaW50ZXJydXB0cywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0LiBTZWNvbmRseSwgZnVuY3Rpb25zIGxpa2UgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCBub3cgdGFrZSBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIElSUSBvciBhIHRhc2ssIGVzc2VudGlhbCBmb3IgZGlmZmVyZW50aWF0aW5nIHRoZSB0d28uCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBpbml0aWFsaXphdGlvbjogYGtjb3ZfaW5pdGAgbm93IGFsbG9jYXRlcyBidWZmZXJzIHNwZWNpZmljYWxseSBmb3IgaW50ZXJydXB0cywgc2l6ZWQgYWNjb3JkaW5nIHRvIGBDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFYCwgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBpbnRlcnJ1cHQgbGlzdC4gVGhpcyBpcyBrZXksIHBhcnRpY3VsYXJseSBpbiBhbiBgUFJFRU1QVF9SVGAgZW52aXJvbm1lbnQsIHdoZXJlIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcHJlLWVtcHQgc29mdGlycXMgd2hpbGUgY29sbGVjdGluZyBjb3ZlcmFnZS4KCldoZW4gS0NPViBzdGFydHMsIGl0IGdldHMgYW4gYXJlYSBmcm9tIHRoZSBpbnRlcnJ1cHQgbGlzdCBpZiBpdCYjMzk7cyAqbm90KiBydW5uaW5nIGluIGEgdGFzaywgYW5kIGNvbnZlcnNlbHksIGl0IHB1dHMgdGhlIGFyZWEgYmFjayBpbiB0aGUgaW50ZXJydXB0IGxpc3Qgd2hlbiBpdCBzdG9wcywgYWdhaW4sIGlmIG5vdCBpbiBhIHRhc2suIFRoaXMgZHluYW1pYyBhbGxvY2F0aW9uIGlzIGNyaXRpY2FsIGZvciBtYW5hZ2luZyBjb3ZlcmFnZSBpbiBhIHByZWVtcHRpYmxlIHNvZnRpcnEgY29udGV4dC4gRmluYWxseSwgSSBub3RpY2UgdGhlIHNhdmVkIEtDT1Ygc3RhdGUgaGFzIGJlZW4gbW92ZWQgZnJvbSBga2Nvdl9wZXJjcHVfZGF0YWAgdG8gYHRhc2tfc3RydWN0YCwgYW5vdGhlciBpbXBvcnRhbnQgc3RydWN0dXJhbCBjaGFuZ2UuCgpGdW5jdGlvbmFsbHksIHRoaXMgYWxsb3dzIHNvZnRpcnEgY292ZXJhZ2UgdG8gYmUgcHJlZW1wdGVkLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCYjMzk7cyBuZWVkZWQgZm9yIGBQUkVFTVBUX1JUYCDigJMgdGhlIG1haW4gbW90aXZhdGlvbiwgaXQgc2VlbXMuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyBhIHZhbHVhYmxlIGNoYW5nZSwgcGFydGljdWxhcmx5IGZvciByZWFsLXRpbWUgc3lzdGVtcy4KCklzIGl0IHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgcXVlc3Rpb24uIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBmZWF0dXJlIHRoYXQsIGlmIGJyb2tlbiwgd291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBhY3RzLgoKQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgdGhhdCBmb3IgbXkgdGVzdGluZywgSSYjMzk7bGwgbmVlZCBgQ09ORklHX0tDT1Y9eWAgYW5kIGRlZmluaXRlbHkgYENPTkZJR19QUkVFTVBUX1JUPXlgIHRvIHRlc3QgdGhlIGFjdHVhbCBwcmVlbXB0aW9uIGFzcGVjdCBvZiB0aGlzIHBhdGNoLCB3aGljaCBpcyB0aGUgd2hvbGUgcG9pbnQuIEkga25vdyBpdCYjMzk7cyB0aGVyZS4gSSBkaWQgbXkgY2hlY2tzLiBgQ09ORklHX0tDT1ZfRU5BQkxFX0NPTVBBUklTT05TPXlgIG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgaXMgcHJvYmFibHkgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4gSSB1c3VhbGx5IHdvcmsgd2l0aCBgQ09ORklHX0tDT1ZfSU5TVFJVTUVOVF9BTEw9eWAsIGFuZCBgQ09ORklHX0RFQlVHX0ZTPXlgIGlzIG5lY2Vzc2FyeSwgc2luY2UgS0NPViB1c2VzIGRlYnVnZnMuCgpMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBrY292X2luaXRgIHRvIHNlZSBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9rY292LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcdHdoaWxlICgoamlmZmllcyAtIHN0YXJ0KSAqIE1TRUNfUEVSX1NFQyAvIEhaIFx1MDAzYyAzMDApXG4xMTIxOlx0XHRcdDtcbjExMjI6XHRcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VrY292X21vZGUsIDApO1xuMTEyMzpcdFx0cHJfZXJyKFwmIzM0O2RvbmUgcnVubmluZyBzZWxmIHRlc3RcXG5cJiMzNDspO1xuMTEyNDpcdH1cbjExMjU6XHQjZW5kaWZcbjExMjY6XHRcbjExMjc6XHRzdGF0aWMgaW50IF9faW5pdCBrY292X2luaXQodm9pZClcbjExMjg6XHR7XG4xMTI5Olx0XHRpbnQgY3B1ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbjExMzA6XHRcbjExMzE6XHQjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbjExMzI6XHRcdC8qIEFsbG9jYXRlIHNvbWUgZXh0cmEgYnVmZmVycyBpbiBvcmRlciB0byBwcmVwYXJlIGZvciBzb2Z0aXJxIHByZWVtcHRpb24uICovXG4xMTMzOlx0XHRjcHUgPSBjcHUgXHUwMDNlPSA0ID8gY3B1ICogMiA6IGNwdSAmIzQzOyA0O1xuMTEzNDpcdCNlbmRpZlxuMTEzNTpcdFx0d2hpbGUgKGNwdS0tKSB7XG4xMTM2Olx0XHRcdHZvaWQgKmFyZWEgPSB2bWFsbG9jKENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuMTEzNzpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMTEzODpcdFxuMTEzOTpcdFx0XHRpZiAoIWFyZWEpXG4xMTQwOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTQxOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcbjExNDI6XHRcdFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSwgdHJ1ZSk7XG4xMTQzOlx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2a2Nvdl9yZW1vdGVfbG9jaywgZmxhZ3MpO1xuMTE0NDpcdFx0fVxuMTE0NTpcdFxuMTE0NjpcdFx0LypcbjExNDc6XHRcdCAqIFRoZSBrY292IGRlYnVnZnMgZmlsZSB3b24mIzM5O3QgZXZlciBnZXQgcmVtb3ZlZCBhbmQgdGh1cyxcbjExNDg6XHRcdCAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvdGVjdCBpdCBhZ2FpbnN0IHJlbW92YWwgcmFjZXMuIFRoZVxuMTE0OTpcdFx0ICogdXNlIG9mIGRlYnVnZnNfY3JlYXRlX2ZpbGVfdW5zYWZlKCkgaXMgYWN0dWFsbHkgc2FmZSBoZXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBSZW1vdGUgS0NPViBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgS0NPViBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aCBgS0NPVmAgYW5kIGBQUkVFTVBUX1JUYCBlbmFibGVkLiBJJiMzOTt2ZSBnb3QgYSBzZXQgb2YgZm9jdXMgc3ltYm9scyBpbiBtaW5kOiBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAsIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgLCBga2Nvdl9yZW1vdGVfYXJlYV9nZXRgLCBga2Nvdl9yZW1vdGVfYXJlYV9wdXRgLCBga2Nvdl9yZW1vdGVfc3RhcnRgLCBhbmQgYGtjb3ZfcmVtb3RlX3N0b3BgLiBUaGUgYGtjb3ZfaW5pdGAgZnVuY3Rpb24gaXMgaXJyZWxldmFudCBoZXJlLCBpdCYjMzk7cyBqdXN0IHRoZSBpbml0aWFsaXphdGlvbi4KClRoZSBrZXkgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBga2Nvdl9yZW1vdGVfc3RhcnRgIGFuZCBga2Nvdl9yZW1vdGVfc3RvcGAuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U/IFRoZSBhbnN3ZXIgaXMgeWVzLCB0aHJvdWdoIHRoZSBgS0NPVl9SRU1PVEVfRU5BQkxFYCBpb2N0bC4gSXQgc2V0cyB1cCB0aGUgaGFuZGxlIGZvciByZW1vdGUgY292ZXJhZ2UuIE5vdywgdGhpcyBpcyBjcnVjaWFsOiB0aGUgYWN0dWFsIGBrY292X3JlbW90ZV9zdGFydGAgYW5kIGBrY292X3JlbW90ZV9zdG9wYCBhcmUgaW52b2tlZCBieSBrZXJuZWwgdGhyZWFkcyBvciBzb2Z0aXJxcyAqdXNpbmcqIHRoYXQgaGFuZGxlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIFVTQiwgdmhvc3QsIGFueXRoaW5nIHRoYXQmIzM5O3MgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCBhbmQgbWlnaHQgYmUgZXhlcmNpc2luZyB0aGlzIGNvZGUuCgpTeXprYWxsZXIsIGVzcGVjaWFsbHksIHV0aWxpemVzIGBLQ09WX1JFTU9URV9FTkFCTEVgIHF1aXRlIGEgYml0IHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbSB0aGVzZSBiYWNrZ3JvdW5kIHRocmVhZHMg4oCTIFVTQiwgdmhvc3QsIG1hYzgwMjExX2h3c2ltLCB0aGF0IGtpbmQgb2YgdGhpbmcuIFNvLCB0aG9zZSBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGhlYXZpbHkgZXhlcmNpc2VkLiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBpbmNsdWRlIGBrY292X3JlbW90ZV9zdGFydGAgYXMgYSBmb2N1cyBzeW1ib2wsIGFuZCB0aGVuIEkgcmVhbGl6ZWQgdGhhdCBpdCBpcyBhIGRpcmVjdCBhcmVhIG9mIGNoYW5nZS4gSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgKndlKiBtb2RpZmllZCBhbmQgd2FudCB0byBiZSB0ZXN0aW5nLgoKSXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNtYWxsIGZ1bmN0aW9uLCBzbyBzaG91bGQgSSBsb29rIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnM/IEkmIzM5O20gYWxzbyByZW1lbWJlcmluZyB0aGF0IGBrY292X3Rhc2tfaW5pdGAgaXMgbW9kaWZpZWQsIGJ1dCB0aGF0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSB0YXNrIGNyZWF0aW9uLiBUaGF0JiMzOTtzIGEgaG90IHBhdGgsIGFuZCBwcm9iYWJseSBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZm9jdXMuIGBrY292X3JlbW90ZV9hcmVhX2dldGAgYW5kIGBrY292X3JlbW90ZV9hcmVhX3B1dGAgYXJlIGdvb2QgcG9zc2liaWxpdGllcy4KClJldmlld2luZyB0aGUgZm9jdXMgc3ltYm9scyBhZ2FpbjogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCwgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3N0b3BgLgoKQW5kIGJhY2sgdG8gYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhbmQgYGtjb3ZfcmVtb3RlX3N0b3BgLiBUaGV5IGFyZSBjYWxsZWQgdmVyeSBmcmVxdWVudGx5IGlmIHJlbW90ZSBjb3ZlcmFnZSBpcyBlbmFibGVkLiBTbywgaXMgaXQgYSBob3QgcGF0aD8gWWVzLCBpdCBpcyBmb3IgcmVtb3RlIGNvdmVyYWdlLiBBbmQgdGhpcyBpcyAqZXhhY3RseSogdGhlIGZlYXR1cmUgd2Ugd2FudCB0byB0ZXN0LiBTbywgSSB3aWxsIGluY2x1ZGUgdGhlbS4KClNvLCBpbiBzdW1tYXJ5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIHJlbW90ZSBLQ09WIGZ1bmN0aW9ucy4gVGhlIGNvbmZpZ3MgYXJlIGBLQ09WYCBhbmQgYFBSRUVNUFRfUlRgLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRvIGJlIHN1cmUgYFBSRUVNUFRfUlRgIGRvZXNuJiMzOTt0IGhhdmUgYW55IGRlcGVuZGVuY2llcyBhbmQgaXMganVzdCBhIGJvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVFTVBUX1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9OTA9ZW5kY2hvaWNlXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxua2VybmVsL0tjb25maWcucHJlZW1wdDo5Mjpjb25maWcgUFJFRU1QVF9SVFxua2VybmVsL0tjb25maWcucHJlZW1wdC05My1cdGJvb2wgXCYjMzQ7RnVsbHkgUHJlZW1wdGlibGUgS2VybmVsIChSZWFsLVRpbWUpXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMDgtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjEwOTpjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cdGJvb2wgXCYjMzQ7RW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBQcmVlbXB0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByZWVtcHRpb24gY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL0tjb25maWcucHJlZW1wdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5Mi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgcHJlZW1wdGlvbi1yZWxhdGVkIHNldHRpbmdzIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSBsaWtlbHkgbGFpZCBvdXQg4oCTIHRoZSBgY29uZmlnIFBSRUVNUFRgLCBgY29uZmlnIFBSRUVNUFRfUlRgIGFuZCByZWxhdGVkIG9wdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgdHJhZGUtb2ZmczogdGhlIGltcGFjdCBvbiByZWFsLXRpbWUgcGVyZm9ybWFuY2UsIHNjaGVkdWxpbmcgbGF0ZW5jeSwgYW5kIG92ZXJhbGwga2VybmVsIGNvbXBsZXhpdHkuIEkmIzM5O20gaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0IG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMgaW4gaG93IHByZWVtcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCB0aGF0IGxldmVsLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0JiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9OT19QUkVFTVBUXG4gIDgxOlx0XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxuICA4MjpcdFx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xuICA4MzpcdFx0aGVscFxuICA4NDpcdFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHNjaGVkdWxlciBkcml2ZW4gcHJlZW1wdGlvbiBtb2RlbCB0aGF0XG4gIDg1Olx0XHQgIGlzIGZ1bmRhbWVudGFsbHkgc2ltaWxhciB0byBmdWxsIHByZWVtcHRpb24sIGJ1dCBpcyBsZXNzXG4gIDg2Olx0XHQgIGVhZ2VyIHRvIHByZWVtcHQgU0NIRURfTk9STUFMIHRhc2tzIGluIGFuIGF0dGVtcHQgdG9cbiAgODc6XHRcdCAgcmVkdWNlIGxvY2sgaG9sZGVyIHByZWVtcHRpb24gYW5kIHJlY292ZXIgc29tZSBvZiB0aGUgcGVyZm9ybWFuY2VcbiAgODg6XHRcdCAgZ2FpbnMgc2VlbiBmcm9tIHVzaW5nIFZvbHVudGFyeSBwcmVlbXB0aW9uLlxuICA4OTpcdFxuICA5MDpcdGVuZGNob2ljZVxuICA5MTpcdFxuICA5MjpcdGNvbmZpZyBQUkVFTVBUX1JUXG4gIDkzOlx0XHRib29sIFwmIzM0O0Z1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVwmIzM0O1xuICA5NDpcdFx0ZGVwZW5kcyBvbiBFWFBFUlQgXHUwMDI2XHUwMDI2IEFSQ0hfU1VQUE9SVFNfUlQgXHUwMDI2XHUwMDI2ICFDT01QSUxFX1RFU1RcbiAgOTU6XHRcdHNlbGVjdCBQUkVFTVBUSU9OXG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIHR1cm5zIHRoZSBrZXJuZWwgaW50byBhIHJlYWwtdGltZSBrZXJuZWwgYnkgcmVwbGFjaW5nXG4gIDk4Olx0XHQgIHZhcmlvdXMgbG9ja2luZyBwcmltaXRpdmVzIChzcGlubG9ja3MsIHJ3bG9ja3MsIGV0Yy4pIHdpdGhcbiAgOTk6XHRcdCAgcHJlZW1wdGlibGUgcHJpb3JpdHktaW5oZXJpdGFuY2UgYXdhcmUgdmFyaWFudHMsIGVuZm9yY2luZ1xuIDEwMDpcdFx0ICBpbnRlcnJ1cHQgdGhyZWFkaW5nIGFuZCBpbnRyb2R1Y2luZyBtZWNoYW5pc21zIHRvIGJyZWFrIHVwIGxvbmdcbiAxMDE6XHRcdCAgbm9uLXByZWVtcHRpYmxlIHNlY3Rpb25zLiBUaGlzIG1ha2VzIHRoZSBrZXJuZWwsIGV4Y2VwdCBmb3IgdmVyeVxuIDEwMjpcdFx0ICBsb3cgbGV2ZWwgYW5kIGNyaXRpY2FsIGNvZGUgcGF0aHMgKGVudHJ5IGNvZGUsIHNjaGVkdWxlciwgbG93XG4gMTAzOlx0XHQgIGxldmVsIGludGVycnVwdCBoYW5kbGluZykgZnVsbHkgcHJlZW1wdGlibGUgYW5kIGJyaW5ncyBtb3N0XG4gMTA0Olx0XHQgIGV4ZWN1dGlvbiBjb250ZXh0cyB1bmRlciBzY2hlZHVsZXIgY29udHJvbC5cbiAxMDU6XHRcbiAxMDY6XHRcdCAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3Igc3lzdGVtcyB3aGljaFxuIDEwNzpcdFx0ICByZXF1aXJlIHJlYWwtdGltZSBndWFyYW50ZWVzLlxuIDEwODpcdFxuIDEwOTpcdGNvbmZpZyBQUkVFTVBUX1JUX05FRURTX0JIX0xPQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gUmVhbC1UaW1lIFByZWVtcHRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBjb25maWd1cmUgYFBSRUVNUFRfUlRgLiBJdCBzZWVtcyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJIG5lZWQgYEVYUEVSVGAsIGBBUkNIX1NVUFBPUlRTX1JUYCwgYW5kICpub3QqIGBDT01QSUxFX1RFU1RgLiBUaGlzIG1lYW5zLCB0byBnZXQgYFBSRUVNUFRfUlRgIHJ1bm5pbmcsIEkgc2hvdWxkIGVuYWJsZSBib3RoIGBQUkVFTVBUX1JUYCBhbmQgYEVYUEVSVGAuIAoKTm93LCBhIHF1aWNrIHJlbWluZGVyOiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYEVYUEVSVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgaW4gbW9zdCBvZiB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zIEkgd29yayB3aXRoLiBUaGF0JiMzOTtzIHVzdWFsbHkgbm90IGFuIGlzc3VlLgoKQnV0LCBJIG5lZWQgdG8gY29uZmlybSBgQVJDSF9TVVBQT1JUU19SVGAgaXMgY29ycmVjdGx5IHNldC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHdoZXRoZXIgdGhhdCBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9TVVBQT1JUU19SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTQ5Mz1jb25maWcgQVJDSF9OT19QUkVFTVBUXG4tLVxuYXJjaC9LY29uZmlnLTE0OTUtXG5hcmNoL0tjb25maWc6MTQ5Njpjb25maWcgQVJDSF9TVVBQT1JUU19SVFxuYXJjaC9LY29uZmlnLTE0OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIFF1ZXJ5KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyB4ODYgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiAqRG9lcyB4ODYgaGF2ZSB0aGUgYEFSQ0hfU1VQUE9SVFNfUlRgIGZsYWcgZW5hYmxlZD8qIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGZpcnN0IGNoZWNrLiBJdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGxvdCBhYm91dCB0aGUgYXJjaGl0ZWN0dXJhbCBjYXBhYmlsaXRpZXMgYW5kIHdoaWNoIHJlYWwtdGltZSBmZWF0dXJlcyBtaWdodCBiZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IHN1cHBvcnRlZCwgYXQgdGhpcyBzdGFnZSBvZiB0aGUgY29uZmlndXJhdGlvbi4gV2l0aG91dCBgQVJDSF9TVVBQT1JUU19SVGAsIEkgbGlrZWx5IHdvbiYjMzk7dCBldmVuICpjb25zaWRlciogbWFueSBvZiB0aGUgcmVhbC10aW1lIG9wdGlvbnMgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBnYXRpbmcgZmFjdG9yLCBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHNwZWNpZmljIHg4NiBzZXR1cCBpcyBjb25maWd1cmVkIGluIHJlbGF0aW9uIHRvIHJlYWwtdGltZSB3b3JrbG9hZHMuIEkgbmVlZCB0byBrbm93IGlmIHRoZSBhcmNoaXRlY3R1cmUgaXRzZWxmIGV2ZW4gKnBlcm1pdHMqIG1lIHRvIHByb2NlZWQgZG93biB0aGF0IHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX1NVUFBPUlRTX1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMzItXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuYXJjaC94ODYvS2NvbmZpZzoxMzM6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFxuYXJjaC94ODYvS2NvbmZpZy0xMzQtXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc2MAoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA2MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgdGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbGl0eSB0aWVkIHRvIGBQUkVFTVBUX1JUYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggS0NPViwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBjb3ZlcmFnZSBjb2xsZWN0aW9uIGluIHNvZnQgaW50ZXJydXB0IGNvbnRleHRzIGFuZCBwb3RlbnRpYWwgc29mdGlycSBwcmVlbXB0aW9uLgoKRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYFBSRUVNUFRfUlRgIGlzIGluZGVlZCBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBpbmNsdWRlZC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBtb2RpZmljYXRpb24gdG8gYGxpYi9LY29uZmlnLmRlYnVnYCwgYnV0IGl0JiMzOTtzIGp1c3QgYSByYW5nZSB1cGRhdGUgYW5kIGhlbHAgdGV4dCBjaGFuZ2UgcmVsYXRlZCB0byBgS0NPVl9JUlFfQVJFQV9TSVpFYCwgbm90IHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBjb25maWcuCgpTaW5jZSB0aGUgZm9jdXMgaXMgbm93IG9uIHRoZSBwcmVlbXB0aW9uIGFzcGVjdCB1bmRlciBgUFJFRU1QVF9SVGAgYW5kIHJlbW90ZSBLQ09WLCBhbmQgZ2l2ZW4gdGhhdCBgS0NPVmAgaXMgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBqdXN0IG5lZWQgdG8gZW5hYmxlIGBQUkVFTVBUX1JUYCB0byBmb2N1cyBvbiB0aGUgbmV3IHByZWVtcHRpb24gZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBub3RpbmcgYEtDT1ZgIHRvIGRvY3VtZW50IGl0IGFzIHRoZSBwcmVyZXF1aXNpdGUgZm9yIHRoaXMgd29yay4KCkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB0aGUga2V5IHN5bWJvbHMsIGFuZCB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZDogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCwgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYW5kIGBrY292X3JlbW90ZV9zdG9wYCBhcmUgcXVpdGUgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gVGhlc2UgYXJlIGFsbCBnb29kIGNhbmRpZGF0ZXMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBLQ09WIGNvdmVyYWdlIGNvbGxlY3Rpb24sIHNwZWNpZmljYWxseSBob3cgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgbGlrZSBVU0IgYW5kIHZob3N0LiBUaGUgcHJlZW1wdGlvbiBhc3BlY3QgYWRkcyBhIG5ldyBsYXllciBvZiBjb21wbGV4aXR5LgoKSGVyZSYjMzk7cyBteSBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFRydWUKKiAgICoqUmVhc29uaW5nKio6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLQ09WIGNvdmVyYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgaG93IHJlbW90ZSBjb3ZlcmFnZSBpcyBjb2xsZWN0ZWQgaW4gc29mdGlycSBjb250ZXh0cyBhbmQgaG93IGl0IGhhbmRsZXMgc29mdGlycSBwcmVlbXB0aW9uICh3aGljaCBpcyBwb3NzaWJsZSB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgS0NPViBpb2N0bHMgYW5kIHJlbW90ZSBjb3ZlcmFnZSB0cmlnZ2VycyAobGlrZSBVU0Igb3Igdmhvc3QpLgoqICAgKipGb2N1c1N5bWJvbHMqKjoKICAgICogICBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0CiAgICAqICAga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wCiAgICAqICAga2Nvdl9yZW1vdGVfYXJlYV9nZXQKICAgICogICBrY292X3JlbW90ZV9hcmVhX3B1dAogICAgKiAgIGtjb3ZfcmVtb3RlX3N0YXJ0CiAgICAqICAga2Nvdl9yZW1vdGVfc3RvcAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgUFJFRU1QVF9SVAoqTm93IHRvIGNhbGwgc2V0LXJlc3VsdHMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAgICYjMzQ7a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wJiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfZ2V0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfcHV0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0YXJ0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQmIzM0OywKICAgICYjMzQ7a2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wJiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfZ2V0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX2FyZWFfcHV0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0YXJ0JiMzNDssCiAgICAmIzM0O2tjb3ZfcmVtb3RlX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjE1LjA2MTM5MDYzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQwOTUxNTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wXCIsXG4gICAgXCJrY292X3JlbW90ZV9hcmVhX2dldFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfYXJlYV9wdXRcIixcbiAgICBcImtjb3ZfcmVtb3RlX3N0YXJ0XCIsXG4gICAgXCJrY292X3JlbW90ZV9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6MTUuMDYxNDAxNTMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODMzNjg0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZGE3MTFjMzVkNTYzOWIwN2Y1NmExMWM3ODU1MDJlMWE1NjllM2RkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDE1OjQ1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbmluZGV4IDM3M2JjYzA1OThkMTBiLi43YTUzYzE1Y2VjYjUyZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcXG5AQCAtMTU0Myw2ICsxNTQzLDE0IEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuIFxcbiBcXHQvKiBDb2xsZWN0IGNvdmVyYWdlIGZyb20gc29mdGlycSBjb250ZXh0OiAqL1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRrY292X3NvZnRpcnE7XFxuK1xcbitcXHQvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3IgcHJlZW1wdGluZyByZW1vdGUgY292ZXJhZ2UgY29sbGVjdGlvbjogKi9cXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0a2Nvdl9zYXZlZF9tb2RlO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRcXHRrY292X3NhdmVkX3NpemU7XFxuK1xcdHZvaWRcXHRcXHRcXHRcXHQqa2Nvdl9zYXZlZF9hcmVhO1xcbitcXHRzdHJ1Y3Qga2NvdlxcdFxcdFxcdCprY292X3NhdmVkX2tjb3Y7XFxuK1xcdGludFxcdFxcdFxcdFxcdGtjb3Zfc2F2ZWRfc2VxdWVuY2U7XFxuK1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tjb3YuYyBiL2tlcm5lbC9rY292LmNcXG5pbmRleCAxZGYzNzNmYjU2MmJjOC4uYTc1MTQzMDNlZmYzOGEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2tjb3YuY1xcbisrKyBiL2tlcm5lbC9rY292LmNcXG5AQCAtODYsMTcgKzg2LDEyIEBAIHN0cnVjdCBrY292X3JlbW90ZSB7XFxuIFxcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGtjb3ZfcmVtb3RlX2xvY2spO1xcbiBzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShrY292X3JlbW90ZV9tYXAsIDQpO1xcbi1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBrY292X3JlbW90ZV9hcmVhcyA9IExJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzKTtcXG4rc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXNbMl0gPSB7XFxuK1xcdExJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzWzBdKSwgTElTVF9IRUFEX0lOSVQoa2Nvdl9yZW1vdGVfYXJlYXNbMV0pXFxuK307XFxuIFxcbiBzdHJ1Y3Qga2Nvdl9wZXJjcHVfZGF0YSB7XFxuLVxcdHZvaWRcXHRcXHRcXHQqaXJxX2FyZWE7XFxuIFxcdGxvY2FsX2xvY2tfdFxcdFxcdGxvY2s7XFxuLVxcbi1cXHR1bnNpZ25lZCBpbnRcXHRcXHRzYXZlZF9tb2RlO1xcbi1cXHR1bnNpZ25lZCBpbnRcXHRcXHRzYXZlZF9zaXplO1xcbi1cXHR2b2lkXFx0XFx0XFx0KnNhdmVkX2FyZWE7XFxuLVxcdHN0cnVjdCBrY292XFx0XFx0KnNhdmVkX2tjb3Y7XFxuLVxcdGludFxcdFxcdFxcdHNhdmVkX3NlcXVlbmNlO1xcbiB9O1xcbiBcXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrY292X3BlcmNwdV9kYXRhLCBrY292X3BlcmNwdV9kYXRhKSA9IHtcXG5AQCAtMTMyLDEyICsxMjcsMTMgQEAgc3RhdGljIHN0cnVjdCBrY292X3JlbW90ZSAqa2Nvdl9yZW1vdGVfYWRkKHN0cnVjdCBrY292ICprY292LCB1NjQgaGFuZGxlKVxcbiB9XFxuIFxcbiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGtjb3ZfcmVtb3RlX2xvY2sgbG9ja2VkLiAqL1xcbi1zdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEgKmtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHVuc2lnbmVkIGludCBzaXplKVxcbitzdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEgKmtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHVuc2lnbmVkIGludCBzaXplLCBib29sIGlycSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gXFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzW2lycV07XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoKHBvcywgXFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzKSB7XFxuK1xcdGxpc3RfZm9yX2VhY2gocG9zLCBsaXN0KSB7XFxuIFxcdFxcdGFyZWEgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEsIGxpc3QpO1xcbiBcXHRcXHRpZiAoYXJlYS1cXHUwMDNlc2l6ZSA9PSBzaXplKSB7XFxuIFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZhcmVhLVxcdTAwM2VsaXN0KTtcXG5AQCAtMTQ5LDExICsxNDUsMTEgQEAgc3RhdGljIHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICprY292X3JlbW90ZV9hcmVhX2dldCh1bnNpZ25lZCBpbnQgc2l6ZSlcXG4gXFxuIC8qIE11c3QgYmUgY2FsbGVkIHdpdGgga2Nvdl9yZW1vdGVfbG9jayBsb2NrZWQuICovXFxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX2FyZWFfcHV0KHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhLFxcbi1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzaXplLCBib29sIGlycSlcXG4ge1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YXJlYS1cXHUwMDNlbGlzdCk7XFxuIFxcdGFyZWEtXFx1MDAzZXNpemUgPSBzaXplO1xcbi1cXHRsaXN0X2FkZChcXHUwMDI2YXJlYS1cXHUwMDNlbGlzdCwgXFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzKTtcXG4rXFx0bGlzdF9hZGQoXFx1MDAyNmFyZWEtXFx1MDAzZWxpc3QsIFxcdTAwMjZrY292X3JlbW90ZV9hcmVhc1tpcnFdKTtcXG4gXFx0LypcXG4gXFx0ICogS01TQU4gZG9lc24ndCBpbnN0cnVtZW50IHRoaXMgZmlsZSwgc28gaXQgbWF5IG5vdCBrbm93IGFyZWEtXFx1MDAzZWxpc3RcXG4gXFx0ICogaXMgaW5pdGlhbGl6ZWQuIFVucG9pc29uIGl0IGV4cGxpY2l0bHkgdG8gYXZvaWQgcmVwb3J0cyBpblxcbkBAIC0zOTAsNiArMzg2LDEyIEBAIHZvaWQga2Nvdl90YXNrX2luaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbiBcXHRrY292X3Rhc2tfcmVzZXQodCk7XFxuIFxcdHQtXFx1MDAzZWtjb3ZfcmVtb3RlID0gTlVMTDtcXG4gXFx0dC1cXHUwMDNla2Nvdl9oYW5kbGUgPSBjdXJyZW50LVxcdTAwM2VrY292X2hhbmRsZTtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zb2Z0aXJxID0gMDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9tb2RlID0gMDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9zaXplID0gMDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gTlVMTDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gTlVMTDtcXG4rXFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9zZXF1ZW5jZSA9IDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVzZXQoc3RydWN0IGtjb3YgKmtjb3YpXFxuQEAgLTgzNiwxNyArODM4LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrY292X21vZGVfZW5hYmxlZCh1bnNpZ25lZCBpbnQgbW9kZSlcXG4gc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuIFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXFxuIHtcXG4tXFx0c3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgKmRhdGEgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbW9kZTtcXG4gXFxuIFxcdG1vZGUgPSBSRUFEX09OQ0UodC1cXHUwMDNla2Nvdl9tb2RlKTtcXG4gXFx0YmFycmllcigpO1xcbiBcXHRpZiAoa2Nvdl9tb2RlX2VuYWJsZWQobW9kZSkpIHtcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlc2F2ZWRfbW9kZSA9IG1vZGU7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX3NpemUgPSB0LVxcdTAwM2VrY292X3NpemU7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX2FyZWEgPSB0LVxcdTAwM2VrY292X2FyZWE7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX3NlcXVlbmNlID0gdC1cXHUwMDNla2Nvdl9zZXF1ZW5jZTtcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlc2F2ZWRfa2NvdiA9IHQtXFx1MDAzZWtjb3Y7XFxuK1xcdFxcdHQtXFx1MDAzZWtjb3Zfc2F2ZWRfbW9kZSA9IG1vZGU7XFxuK1xcdFxcdHQtXFx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSA9IHQtXFx1MDAzZWtjb3Zfc2l6ZTtcXG4rXFx0XFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gdC1cXHUwMDNla2Nvdl9hcmVhO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlID0gdC1cXHUwMDNla2Nvdl9zZXF1ZW5jZTtcXG4rXFx0XFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gdC1cXHUwMDNla2NvdjtcXG4gXFx0XFx0a2Nvdl9zdG9wKHQpO1xcbiBcXHR9XFxuIH1cXG5AQCAtODU0LDE3ICs4NTUsMTUgQEAgc3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuIFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXFxuIHtcXG4tXFx0c3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgKmRhdGEgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEpO1xcbi1cXG4tXFx0aWYgKGRhdGEtXFx1MDAzZXNhdmVkX2tjb3YpIHtcXG4tXFx0XFx0a2Nvdl9zdGFydCh0LCBkYXRhLVxcdTAwM2VzYXZlZF9rY292LCBkYXRhLVxcdTAwM2VzYXZlZF9zaXplLFxcbi1cXHRcXHRcXHRcXHRkYXRhLVxcdTAwM2VzYXZlZF9hcmVhLCBkYXRhLVxcdTAwM2VzYXZlZF9tb2RlLFxcbi1cXHRcXHRcXHRcXHRkYXRhLVxcdTAwM2VzYXZlZF9zZXF1ZW5jZSk7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX21vZGUgPSAwO1xcbi1cXHRcXHRkYXRhLVxcdTAwM2VzYXZlZF9zaXplID0gMDtcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlc2F2ZWRfYXJlYSA9IE5VTEw7XFxuLVxcdFxcdGRhdGEtXFx1MDAzZXNhdmVkX3NlcXVlbmNlID0gMDtcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlc2F2ZWRfa2NvdiA9IE5VTEw7XFxuK1xcdGlmICh0LVxcdTAwM2VrY292X3NhdmVkX2tjb3YpIHtcXG4rXFx0XFx0a2Nvdl9zdGFydCh0LCB0LVxcdTAwM2VrY292X3NhdmVkX2tjb3YsIHQtXFx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSxcXG4rXFx0XFx0XFx0ICAgdC1cXHUwMDNla2Nvdl9zYXZlZF9hcmVhLCB0LVxcdTAwM2VrY292X3NhdmVkX21vZGUsXFxuK1xcdFxcdFxcdCAgIHQtXFx1MDAzZWtjb3Zfc2F2ZWRfc2VxdWVuY2UpO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX21vZGUgPSAwO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX3NpemUgPSAwO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX2FyZWEgPSBOVUxMO1xcbitcXHRcXHR0LVxcdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlID0gMDtcXG4rXFx0XFx0dC1cXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gTlVMTDtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC05MjcsMTcgKzkyNiwxNyBAQCB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXFxuIFxcdHNlcXVlbmNlID0ga2Nvdi1cXHUwMDNlc2VxdWVuY2U7XFxuIFxcdGlmIChpbl90YXNrKCkpIHtcXG4gXFx0XFx0c2l6ZSA9IGtjb3YtXFx1MDAzZXJlbW90ZV9zaXplO1xcbi1cXHRcXHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSk7XFxuK1xcdFxcdGFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplLCBmYWxzZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHNpemUgPSBDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFO1xcbi1cXHRcXHRhcmVhID0gdGhpc19jcHVfcHRyKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhKS1cXHUwMDNlaXJxX2FyZWE7XFxuK1xcdFxcdGFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplLCB0cnVlKTtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XFxuIFxcbi1cXHQvKiBDYW4gb25seSBoYXBwZW4gd2hlbiBpbl90YXNrKCkuICovXFxuK1xcdC8qIEFsbG9jYXRlIG5ldyBidWZmZXIgaWYgd2UgY2FuIHNsZWVwLiAqL1xcbiBcXHRpZiAoIWFyZWEpIHtcXG4gXFx0XFx0bG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRhcmVhID0gdm1hbGxvYyhzaXplICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4rXFx0XFx0YXJlYSA9IGluX3Rhc2soKSA/IHZtYWxsb2Moc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkgOiBOVUxMO1xcbiBcXHRcXHRpZiAoIWFyZWEpIHtcXG4gXFx0XFx0XFx0a2Nvdl9wdXQoa2Nvdik7XFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtMTA3OSwxMSArMTA3OCw5IEBAIHZvaWQga2Nvdl9yZW1vdGVfc3RvcCh2b2lkKVxcbiBcXHRcXHRrY292X21vdmVfYXJlYShrY292LVxcdTAwM2Vtb2RlLCBrY292LVxcdTAwM2VhcmVhLCBrY292LVxcdTAwM2VzaXplLCBhcmVhKTtcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmtjb3YtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0aWYgKGluX3Rhc2soKSkge1xcbi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xcbi1cXHRcXHRrY292X3JlbW90ZV9hcmVhX3B1dChhcmVhLCBzaXplKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xcbi1cXHR9XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XFxuK1xcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIHNpemUsICFpbl90YXNrKCkpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XFxuIFxcbiBcXHRsb2NhbF91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrLCBmbGFncyk7XFxuIFxcbkBAIC0xMTI5LDE0ICsxMTI2LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZWxmdGVzdCh2b2lkKVxcbiBcXG4gc3RhdGljIGludCBfX2luaXQga2Nvdl9pbml0KHZvaWQpXFxuIHtcXG4tXFx0aW50IGNwdTtcXG4rXFx0aW50IGNwdSA9IG51bV9wb3NzaWJsZV9jcHVzKCk7XFxuK1xcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcXG4rXFx0LyogQWxsb2NhdGUgc29tZSBleHRyYSBidWZmZXJzIGluIG9yZGVyIHRvIHByZXBhcmUgZm9yIHNvZnRpcnEgcHJlZW1wdGlvbi4gKi9cXG4rXFx0Y3B1ID0gY3B1IFxcdTAwM2U9IDQgPyBjcHUgKiAyIDogY3B1ICsgNDtcXG4rI2VuZGlmXFxuK1xcdHdoaWxlIChjcHUtLSkge1xcbitcXHRcXHR2b2lkICphcmVhID0gdm1hbGxvYyhDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4tXFx0XFx0dm9pZCAqYXJlYSA9IHZtYWxsb2Nfbm9kZShDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFICpcXG4tXFx0XFx0XFx0XFx0c2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBjcHVfdG9fbm9kZShjcHUpKTtcXG4gXFx0XFx0aWYgKCFhcmVhKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0cGVyX2NwdV9wdHIoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEsIGNwdSktXFx1MDAzZWlycV9hcmVhID0gYXJlYTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSwgdHJ1ZSk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1Z1xcbmluZGV4IDEyNDRkY2FjMjI5NGFkLi4xMjc4NjM3OWJmMWQ3MiAxMDA2NDRcXG4tLS0gYS9saWIvS2NvbmZpZy5kZWJ1Z1xcbisrKyBiL2xpYi9LY29uZmlnLmRlYnVnXFxuQEAgLTIyNDcsMTAgKzIyNDcsMTEgQEAgY29uZmlnIEtDT1ZfSU5TVFJVTUVOVF9BTExcXG4gY29uZmlnIEtDT1ZfSVJRX0FSRUFfU0laRVxcbiBcXHRoZXggXFxcIlNpemUgb2YgaW50ZXJydXB0IGNvdmVyYWdlIGNvbGxlY3Rpb24gYXJlYSBpbiB3b3Jkc1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBLQ09WXFxuK1xcdHJhbmdlIDB4ODAgMHgxMDAwMDAwXFxuIFxcdGRlZmF1bHQgMHg0MDAwMFxcbiBcXHRoZWxwXFxuLVxcdCAgS0NPViB1c2VzIHByZWFsbG9jYXRlZCBwZXItY3B1IGFyZWFzIHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbVxcbi1cXHQgIHNvZnQgaW50ZXJydXB0cy4gVGhpcyBzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhvc2UgYXJlYXMgaW4gdGhlXFxuK1xcdCAgS0NPViB1c2VzIHByZWFsbG9jYXRlZCBhcmVhcyB0byBjb2xsZWN0IGNvdmVyYWdlIGZyb20gc29mdFxcbitcXHQgIGludGVycnVwdHMuIFRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRob3NlIGFyZWFzIGluIHRoZVxcbiBcXHQgIG51bWJlciBvZiB1bnNpZ25lZCBsb25nIHdvcmRzLlxcbiBcXG4gY29uZmlnIEtDT1ZfU0VMRlRFU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6MTUuNzQ1NjA5MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDM3MjUyNzc1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJFRU1QVF9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRcIixcbiAgICBcImtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfYXJlYV9nZXRcIixcbiAgICBcImtjb3ZfcmVtb3RlX2FyZWFfcHV0XCIsXG4gICAgXCJrY292X3JlbW90ZV9zdGFydFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtDT1YgY292ZXJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgcmVtb3RlIGNvdmVyYWdlIGlzIGNvbGxlY3RlZCBpbiBzb2Z0aXJxIGNvbnRleHRzIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3Igc29mdGlycSBwcmVlbXB0aW9uICh3aGljaCBvY2N1cnMgdW5kZXIgUFJFRU1QVF9SVCkuIFRoaXMgaXMgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMgcmVhY2hhYmxlIHZpYSBLQ09WIGlvY3RscyBhbmQgcmVtb3RlIGNvdmVyYWdlIHRyaWdnZXJzIChsaWtlIFVTQiBvciB2aG9zdCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGRhNzExYzM1ZDU2MzliMDdmNTZhMTFjNzg1NTAyZTFhNTY5ZTNkZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDE1OjQ1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCAzNzNiY2MwNTk4ZDEwYi4uN2E1M2MxNWNlY2I1MmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTE1NDMsNiArMTU0MywxNCBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFxuIFx0LyogQ29sbGVjdCBjb3ZlcmFnZSBmcm9tIHNvZnRpcnEgY29udGV4dDogKi9cbiBcdHVuc2lnbmVkIGludFx0XHRcdGtjb3Zfc29mdGlycTtcbitcbitcdC8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBwcmVlbXB0aW5nIHJlbW90ZSBjb3ZlcmFnZSBjb2xsZWN0aW9uOiAqL1xuK1x0dW5zaWduZWQgaW50XHRcdFx0a2Nvdl9zYXZlZF9tb2RlO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0a2Nvdl9zYXZlZF9zaXplO1xuK1x0dm9pZFx0XHRcdFx0Kmtjb3Zfc2F2ZWRfYXJlYTtcbitcdHN0cnVjdCBrY292XHRcdFx0Kmtjb3Zfc2F2ZWRfa2NvdjtcbitcdGludFx0XHRcdFx0a2Nvdl9zYXZlZF9zZXF1ZW5jZTtcbitcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG5kaWZmIC0tZ2l0IGEva2VybmVsL2tjb3YuYyBiL2tlcm5lbC9rY292LmNcbmluZGV4IDFkZjM3M2ZiNTYyYmM4Li5hNzUxNDMwM2VmZjM4YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9rY292LmNcbisrKyBiL2tlcm5lbC9rY292LmNcbkBAIC04NiwxNyArODYsMTIgQEAgc3RydWN0IGtjb3ZfcmVtb3RlIHtcbiBcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGtjb3ZfcmVtb3RlX2xvY2spO1xuIHN0YXRpYyBERUZJTkVfSEFTSFRBQkxFKGtjb3ZfcmVtb3RlX21hcCwgNCk7XG4tc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXMgPSBMSVNUX0hFQURfSU5JVChrY292X3JlbW90ZV9hcmVhcyk7XG4rc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQga2Nvdl9yZW1vdGVfYXJlYXNbMl0gPSB7XG4rXHRMSVNUX0hFQURfSU5JVChrY292X3JlbW90ZV9hcmVhc1swXSksIExJU1RfSEVBRF9JTklUKGtjb3ZfcmVtb3RlX2FyZWFzWzFdKVxuK307XG4gXG4gc3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEge1xuLVx0dm9pZFx0XHRcdCppcnFfYXJlYTtcbiBcdGxvY2FsX2xvY2tfdFx0XHRsb2NrO1xuLVxuLVx0dW5zaWduZWQgaW50XHRcdHNhdmVkX21vZGU7XG4tXHR1bnNpZ25lZCBpbnRcdFx0c2F2ZWRfc2l6ZTtcbi1cdHZvaWRcdFx0XHQqc2F2ZWRfYXJlYTtcbi1cdHN0cnVjdCBrY292XHRcdCpzYXZlZF9rY292O1xuLVx0aW50XHRcdFx0c2F2ZWRfc2VxdWVuY2U7XG4gfTtcbiBcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEsIGtjb3ZfcGVyY3B1X2RhdGEpID0ge1xuQEAgLTEzMiwxMiArMTI3LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGUgKmtjb3ZfcmVtb3RlX2FkZChzdHJ1Y3Qga2NvdiAqa2NvdiwgdTY0IGhhbmRsZSlcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBrY292X3JlbW90ZV9sb2NrIGxvY2tlZC4gKi9cbi1zdGF0aWMgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEgKmtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHVuc2lnbmVkIGludCBzaXplKVxuK3N0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXJxKVxuIHtcbiBcdHN0cnVjdCBrY292X3JlbW90ZV9hcmVhICphcmVhO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqcG9zO1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9IFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzW2lycV07XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKHBvcywgXHUwMDI2a2Nvdl9yZW1vdGVfYXJlYXMpIHtcbitcdGxpc3RfZm9yX2VhY2gocG9zLCBsaXN0KSB7XG4gXHRcdGFyZWEgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGtjb3ZfcmVtb3RlX2FyZWEsIGxpc3QpO1xuIFx0XHRpZiAoYXJlYS1cdTAwM2VzaXplID09IHNpemUpIHtcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZhcmVhLVx1MDAzZWxpc3QpO1xuQEAgLTE0OSwxMSArMTQ1LDExIEBAIHN0YXRpYyBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqa2Nvdl9yZW1vdGVfYXJlYV9nZXQodW5zaWduZWQgaW50IHNpemUpXG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBrY292X3JlbW90ZV9sb2NrIGxvY2tlZC4gKi9cbiBzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9hcmVhX3B1dChzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSAqYXJlYSxcbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHNpemUpXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXJxKVxuIHtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFyZWEtXHUwMDNlbGlzdCk7XG4gXHRhcmVhLVx1MDAzZXNpemUgPSBzaXplO1xuLVx0bGlzdF9hZGQoXHUwMDI2YXJlYS1cdTAwM2VsaXN0LCBcdTAwMjZrY292X3JlbW90ZV9hcmVhcyk7XG4rXHRsaXN0X2FkZChcdTAwMjZhcmVhLVx1MDAzZWxpc3QsIFx1MDAyNmtjb3ZfcmVtb3RlX2FyZWFzW2lycV0pO1xuIFx0LypcbiBcdCAqIEtNU0FOIGRvZXNuJ3QgaW5zdHJ1bWVudCB0aGlzIGZpbGUsIHNvIGl0IG1heSBub3Qga25vdyBhcmVhLVx1MDAzZWxpc3RcbiBcdCAqIGlzIGluaXRpYWxpemVkLiBVbnBvaXNvbiBpdCBleHBsaWNpdGx5IHRvIGF2b2lkIHJlcG9ydHMgaW5cbkBAIC0zOTAsNiArMzg2LDEyIEBAIHZvaWQga2Nvdl90YXNrX2luaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuIFx0a2Nvdl90YXNrX3Jlc2V0KHQpO1xuIFx0dC1cdTAwM2VrY292X3JlbW90ZSA9IE5VTEw7XG4gXHR0LVx1MDAzZWtjb3ZfaGFuZGxlID0gY3VycmVudC1cdTAwM2VrY292X2hhbmRsZTtcbitcdHQtXHUwMDNla2Nvdl9zb2Z0aXJxID0gMDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9tb2RlID0gMDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9zaXplID0gMDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gTlVMTDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gTlVMTDtcbitcdHQtXHUwMDNla2Nvdl9zYXZlZF9zZXF1ZW5jZSA9IDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVzZXQoc3RydWN0IGtjb3YgKmtjb3YpXG5AQCAtODM2LDE3ICs4MzgsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGtjb3ZfbW9kZV9lbmFibGVkKHVuc2lnbmVkIGludCBtb2RlKVxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKVxuIHtcbi1cdHN0cnVjdCBrY292X3BlcmNwdV9kYXRhICpkYXRhID0gdGhpc19jcHVfcHRyKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEpO1xuIFx0dW5zaWduZWQgaW50IG1vZGU7XG4gXG4gXHRtb2RlID0gUkVBRF9PTkNFKHQtXHUwMDNla2Nvdl9tb2RlKTtcbiBcdGJhcnJpZXIoKTtcbiBcdGlmIChrY292X21vZGVfZW5hYmxlZChtb2RlKSkge1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX21vZGUgPSBtb2RlO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX3NpemUgPSB0LVx1MDAzZWtjb3Zfc2l6ZTtcbi1cdFx0ZGF0YS1cdTAwM2VzYXZlZF9hcmVhID0gdC1cdTAwM2VrY292X2FyZWE7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2VxdWVuY2UgPSB0LVx1MDAzZWtjb3Zfc2VxdWVuY2U7XG4tXHRcdGRhdGEtXHUwMDNlc2F2ZWRfa2NvdiA9IHQtXHUwMDNla2NvdjtcbitcdFx0dC1cdTAwM2VrY292X3NhdmVkX21vZGUgPSBtb2RlO1xuK1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSA9IHQtXHUwMDNla2Nvdl9zaXplO1xuK1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfYXJlYSA9IHQtXHUwMDNla2Nvdl9hcmVhO1xuK1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2VxdWVuY2UgPSB0LVx1MDAzZWtjb3Zfc2VxdWVuY2U7XG4rXHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9rY292ID0gdC1cdTAwM2VrY292O1xuIFx0XHRrY292X3N0b3AodCk7XG4gXHR9XG4gfVxuQEAgLTg1NCwxNyArODU1LDE1IEBAIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuIHN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4gXHRfX211c3RfaG9sZChcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXG4ge1xuLVx0c3RydWN0IGtjb3ZfcGVyY3B1X2RhdGEgKmRhdGEgPSB0aGlzX2NwdV9wdHIoXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YSk7XG4tXG4tXHRpZiAoZGF0YS1cdTAwM2VzYXZlZF9rY292KSB7XG4tXHRcdGtjb3Zfc3RhcnQodCwgZGF0YS1cdTAwM2VzYXZlZF9rY292LCBkYXRhLVx1MDAzZXNhdmVkX3NpemUsXG4tXHRcdFx0XHRkYXRhLVx1MDAzZXNhdmVkX2FyZWEsIGRhdGEtXHUwMDNlc2F2ZWRfbW9kZSxcbi1cdFx0XHRcdGRhdGEtXHUwMDNlc2F2ZWRfc2VxdWVuY2UpO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX21vZGUgPSAwO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX3NpemUgPSAwO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX2FyZWEgPSBOVUxMO1xuLVx0XHRkYXRhLVx1MDAzZXNhdmVkX3NlcXVlbmNlID0gMDtcbi1cdFx0ZGF0YS1cdTAwM2VzYXZlZF9rY292ID0gTlVMTDtcbitcdGlmICh0LVx1MDAzZWtjb3Zfc2F2ZWRfa2Nvdikge1xuK1x0XHRrY292X3N0YXJ0KHQsIHQtXHUwMDNla2Nvdl9zYXZlZF9rY292LCB0LVx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSxcbitcdFx0XHQgICB0LVx1MDAzZWtjb3Zfc2F2ZWRfYXJlYSwgdC1cdTAwM2VrY292X3NhdmVkX21vZGUsXG4rXHRcdFx0ICAgdC1cdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlKTtcbitcdFx0dC1cdTAwM2VrY292X3NhdmVkX21vZGUgPSAwO1xuK1x0XHR0LVx1MDAzZWtjb3Zfc2F2ZWRfc2l6ZSA9IDA7XG4rXHRcdHQtXHUwMDNla2Nvdl9zYXZlZF9hcmVhID0gTlVMTDtcbitcdFx0dC1cdTAwM2VrY292X3NhdmVkX3NlcXVlbmNlID0gMDtcbitcdFx0dC1cdTAwM2VrY292X3NhdmVkX2tjb3YgPSBOVUxMO1xuIFx0fVxuIH1cbiBcbkBAIC05MjcsMTcgKzkyNiwxNyBAQCB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXG4gXHRzZXF1ZW5jZSA9IGtjb3YtXHUwMDNlc2VxdWVuY2U7XG4gXHRpZiAoaW5fdGFzaygpKSB7XG4gXHRcdHNpemUgPSBrY292LVx1MDAzZXJlbW90ZV9zaXplO1xuLVx0XHRhcmVhID0ga2Nvdl9yZW1vdGVfYXJlYV9nZXQoc2l6ZSk7XG4rXHRcdGFyZWEgPSBrY292X3JlbW90ZV9hcmVhX2dldChzaXplLCBmYWxzZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzaXplID0gQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRTtcbi1cdFx0YXJlYSA9IHRoaXNfY3B1X3B0cihcdTAwMjZrY292X3BlcmNwdV9kYXRhKS1cdTAwM2VpcnFfYXJlYTtcbitcdFx0YXJlYSA9IGtjb3ZfcmVtb3RlX2FyZWFfZ2V0KHNpemUsIHRydWUpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XG4gXG4tXHQvKiBDYW4gb25seSBoYXBwZW4gd2hlbiBpbl90YXNrKCkuICovXG4rXHQvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyIGlmIHdlIGNhbiBzbGVlcC4gKi9cbiBcdGlmICghYXJlYSkge1xuIFx0XHRsb2NhbF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcbi1cdFx0YXJlYSA9IHZtYWxsb2Moc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXHRcdGFyZWEgPSBpbl90YXNrKCkgPyB2bWFsbG9jKHNpemUgKiBzaXplb2YodW5zaWduZWQgbG9uZykpIDogTlVMTDtcbiBcdFx0aWYgKCFhcmVhKSB7XG4gXHRcdFx0a2Nvdl9wdXQoa2Nvdik7XG4gXHRcdFx0cmV0dXJuO1xuQEAgLTEwNzksMTEgKzEwNzgsOSBAQCB2b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZClcbiBcdFx0a2Nvdl9tb3ZlX2FyZWEoa2Nvdi1cdTAwM2Vtb2RlLCBrY292LVx1MDAzZWFyZWEsIGtjb3YtXHUwMDNlc2l6ZSwgYXJlYSk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZrY292LVx1MDAzZWxvY2spO1xuIFxuLVx0aWYgKGluX3Rhc2soKSkge1xuLVx0XHRzcGluX2xvY2soXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XG4tXHRcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIHNpemUpO1xuLVx0XHRzcGluX3VubG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbi1cdH1cbitcdHNwaW5fbG9jayhcdTAwMjZrY292X3JlbW90ZV9sb2NrKTtcbitcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIHNpemUsICFpbl90YXNrKCkpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XG4gXG4gXHRsb2NhbF91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcbiBcbkBAIC0xMTI5LDE0ICsxMTI2LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZWxmdGVzdCh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IGtjb3ZfaW5pdCh2b2lkKVxuIHtcbi1cdGludCBjcHU7XG4rXHRpbnQgY3B1ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbitcbisjaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbitcdC8qIEFsbG9jYXRlIHNvbWUgZXh0cmEgYnVmZmVycyBpbiBvcmRlciB0byBwcmVwYXJlIGZvciBzb2Z0aXJxIHByZWVtcHRpb24uICovXG4rXHRjcHUgPSBjcHUgXHUwMDNlPSA0ID8gY3B1ICogMiA6IGNwdSArIDQ7XG4rI2VuZGlmXG4rXHR3aGlsZSAoY3B1LS0pIHtcbitcdFx0dm9pZCAqYXJlYSA9IHZtYWxsb2MoQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHZvaWQgKmFyZWEgPSB2bWFsbG9jX25vZGUoQ09ORklHX0tDT1ZfSVJRX0FSRUFfU0laRSAqXG4tXHRcdFx0XHRzaXplb2YodW5zaWduZWQgbG9uZyksIGNwdV90b19ub2RlKGNwdSkpO1xuIFx0XHRpZiAoIWFyZWEpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdHBlcl9jcHVfcHRyKFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEsIGNwdSktXHUwMDNlaXJxX2FyZWEgPSBhcmVhO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZrY292X3JlbW90ZV9sb2NrLCBmbGFncyk7XG4rXHRcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUsIHRydWUpO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcbiBcdH1cbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1Z1xuaW5kZXggMTI0NGRjYWMyMjk0YWQuLjEyNzg2Mzc5YmYxZDcyIDEwMDY0NFxuLS0tIGEvbGliL0tjb25maWcuZGVidWdcbisrKyBiL2xpYi9LY29uZmlnLmRlYnVnXG5AQCAtMjI0NywxMCArMjI0NywxMSBAQCBjb25maWcgS0NPVl9JTlNUUlVNRU5UX0FMTFxuIGNvbmZpZyBLQ09WX0lSUV9BUkVBX1NJWkVcbiBcdGhleCBcIlNpemUgb2YgaW50ZXJydXB0IGNvdmVyYWdlIGNvbGxlY3Rpb24gYXJlYSBpbiB3b3Jkc1wiXG4gXHRkZXBlbmRzIG9uIEtDT1ZcbitcdHJhbmdlIDB4ODAgMHgxMDAwMDAwXG4gXHRkZWZhdWx0IDB4NDAwMDBcbiBcdGhlbHBcbi1cdCAgS0NPViB1c2VzIHByZWFsbG9jYXRlZCBwZXItY3B1IGFyZWFzIHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbVxuLVx0ICBzb2Z0IGludGVycnVwdHMuIFRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRob3NlIGFyZWFzIGluIHRoZVxuK1x0ICBLQ09WIHVzZXMgcHJlYWxsb2NhdGVkIGFyZWFzIHRvIGNvbGxlY3QgY292ZXJhZ2UgZnJvbSBzb2Z0XG4rXHQgIGludGVycnVwdHMuIFRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRob3NlIGFyZWFzIGluIHRoZVxuIFx0ICBudW1iZXIgb2YgdW5zaWduZWQgbG9uZyB3b3Jkcy5cbiBcbiBjb25maWcgS0NPVl9TRUxGVEVTVFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6MTUuNzQ1NjEwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MjQ0NzA2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS0NPViBTb2Z0aXJxIENvdmVyYWdlIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgbWFraW5nIGNoYW5nZXMgdG8gdGhlIEtlcm5lbCBDb3ZlcmFnZSAoS0NPVikgbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNvZnRpcnEgY292ZXJhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBLQ09WIGlzIGEgY29yZSBjb21wb25lbnQgdGhhdCBzeXprYWxsZXIsIG91ciBwcmltYXJ5IGZ1enppbmcgdG9vbCwgcmVsaWVzIG9uIGhlYXZpbHkuIEl0J3MgdXNlZCBmb3IgY292ZXJhZ2UgY29sbGVjdGlvbiwgc28gYW55IG1vZGlmaWNhdGlvbnMgdG8gaXQgYXJlIGltbWVkaWF0ZWx5IHJlbGV2YW50LlxuXG5UaGUgcGF0Y2gncyBrZXkgY2hhbmdlIGlzIGhvdyBzb2Z0aXJxIGNvdmVyYWdlIGlzIGdhdGhlcmVkLiBJbnN0ZWFkIG9mIHVzaW5nIHBlci1DUFUgYXJlYXMgZm9yIElSUSBjb3ZlcmFnZSwgaXQgaW50cm9kdWNlcyBhIGdsb2JhbCBsaXN0LCBga2Nvdl9yZW1vdGVfYXJlYXNbMl1gLCBzcGxpdHRpbmcgaXQgYmV0d2VlbiB0YXNrIGFuZCBpcnEuIEl0IGFsc28gcmVsb2NhdGVzIHRoZSBLQ09WIHN0YXRlIGRhdGEsIHByZXZpb3VzbHkgc3RvcmVkIGluIGBrY292X3BlcmNwdV9kYXRhYCwgaW50byBgdGFza19zdHJ1Y3RgLCBwcmVzdW1hYmx5IHRvIHN1cHBvcnQgc29mdGlycSBwcmVlbXB0aW9uLCBzb21ldGhpbmcgdGhhdCdzIHBhcnRpY3VsYXJseSByZWxldmFudCB3aXRoIFBSRUVNUFRfUlQuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBcInN5ei1jbHVzdGVyXCIsIHNvIHRoaXMgaXMgbGlrZWx5IHNvbWV0aGluZyB0aGF0IGhhcyBiZWVuIHJldmlld2VkIGFscmVhZHkuXG5cbk15IGZpcnN0IGltcHVsc2UgaXMgdG8gY2hlY2sgaWYgdGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIEkgcXVpY2tseSBjb25maXJtOyBLQ09WIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBjcnVjaWFsIHRvIHRoZSBzeXprYWxsZXIgd29ya2Zsb3cuIEEgc2xpZ2h0IGhlc2l0YXRpb24gY29tZXMgdXAgYXMgSSBjb25zaWRlciB0aGF0IHdlJ3JlIGVzc2VudGlhbGx5IGZ1enppbmcgdGhlIGZ1enplcidzIG93biBjb3ZlcmFnZSBtZWNoYW5pc20uIEJ1dCBpdCdzIGEgY29yZSBrZXJuZWwgZmVhdHVyZSwgYW5kIG1vZGlmeWluZyB0aGUgY292ZXJhZ2UgY29sbGVjdGlvbiB3YXJyYW50cyBjYXJlZnVsIGF0dGVudGlvbi4gV2UgbmVlZCB0byBhc3Nlc3MgaWYgdGhpcyBtb2RpZmljYXRpb24gaXMgYWZmZWN0aW5nIHRoZSBhY2N1cmFjeSBvciBjb2xsZWN0aW9uIG1ldGhvZG9sb2d5IG9mIHRoZSBLQ09WIGRhdGEuXG5cblRoYW5rZnVsbHksIHN5emthbGxlciBkb2VzIGhhdmUgZGVzY3JpcHRpb25zIGZvciBLQ09WIGlvY3Rscywgc28gd2UgKmNhbiogZnV6eiBpdCBkaXJlY3RseS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuIEkndmUgbm90ZWQgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBmdW5jdGlvbnMgbGlrZSBga2Nvdl90YXNrX2luaXRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAsIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgLCBga2Nvdl9yZW1vdGVfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc3RvcGAsIGFuZCBga2Nvdl9pbml0YC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBzaGlmdCBpcyBtb3ZpbmcgYHNhdmVkX21vZGVgLCBgc2F2ZWRfc2l6ZWAsIGBzYXZlZF9hcmVhYCwgYHNhdmVkX2tjb3ZgLCBhbmQgYHNhdmVkX3NlcXVlbmNlYCBmcm9tIGBrY292X3BlcmNwdV9kYXRhYCB0byBgdGFza19zdHJ1Y3RgLiBBbHNvLCBjaGFuZ2VzIHRvIGBrY292X3JlbW90ZV9hcmVhX2dldGAgYW5kIGBrY292X3JlbW90ZV9hcmVhX3B1dGAgd2hlcmUgYSBgYm9vbCBpcnFgIGFyZ3VtZW50IGlzIGludHJvZHVjZWQsIGFuZCBga2Nvdl9pbml0YCBpcyBjaGFuZ2VkIHRvIHByZWFsbG9jYXRlIGJ1ZmZlcnMuXG5cbkNydWNpYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gYENPTkZJR19LQ09WYCBpcyBvYnZpb3VzbHkgYSBtdXN0LWhhdmUuIEludHJpZ3VpbmdseSwgYENPTkZJR19QUkVFTVBUX1JUYCBpcyBtZW50aW9uZWQgaW4gYGtjb3ZfaW5pdGA6IEl0IHNlZW1zIGxpa2UgdGhlIHNvZnRpcnEgcHJlZW1wdGlvbiBjb2RlIHdpbGwgYWxsb2NhdGUgbW9yZSBidWZmZXJzIGlmIGBQUkVFTVBUX1JUYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgZW5hYmxpbmcgYFBSRUVNUFRfUlRgIGNvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIHRob3JvdWdobHkgdGVzdCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLlxuXG5Ib3dldmVyLCBgUFJFRU1QVF9SVGAgaXMgYSBiaWcgY29uZmlndXJhdGlvbiBjaGFuZ2UsIGFmZmVjdGluZyB0aGUgZW50aXJlIGtlcm5lbCBwcmVlbXB0aW9uIG1vZGVsLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGF2b2lkcyBlbmFibGluZyBpdCB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQuIFNvLCBuZXh0IHN0ZXAgaXMgdG8gZW5zdXJlIHRoYXQgYFBSRUVNUFRfUlRgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY4MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjI1LjY3MDA4NzQ3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQzMDgyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUkVFTVBUX1JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTkwPWVuZGNob2ljZVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtOTEtXFxua2VybmVsL0tjb25maWcucHJlZW1wdDo5Mjpjb25maWcgUFJFRU1QVF9SVFxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtOTMtXFx0Ym9vbCBcXFwiRnVsbHkgUHJlZW1wdGlibGUgS2VybmVsIChSZWFsLVRpbWUpXFxcIlxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMDgtXFxua2VybmVsL0tjb25maWcucHJlZW1wdDoxMDk6Y29uZmlnIFBSRUVNUFRfUlRfTkVFRFNfQkhfTE9DS1xcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTEwLVxcdGJvb2wgXFxcIkVuZm9yY2Ugc29mdGlycSBzeW5jaHJvbmlzYXRpb24gb24gUFJFRU1QVF9SVFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6MzAuMDEzMTc5MDA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM5MzA3Njk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS0NPViBSZW1vdGUgU29mdElSUSBGdW5jdGlvbnMgd2l0aCBQUkVFTVBUX1JUKipcblxuT2theSwgc28gYFBSRUVNUFRfUlRgIGlzIGluZGVlZCBhbiBvcHRpb24gaGVyZSwgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUga2V5IGlzIGluIHRoZSBzcGVjaWZpY3Mgb2YgdGhlc2UgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGFuZCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCBmdW5jdGlvbnMuIFRoZXkncmUgZXhwbGljaXRseSBjYWxsZWQgZnJvbSB0aGUgc29mdGlycSBjb250ZXh0LCB3aGljaCByYWlzZXMgYSBmbGFnLiBJZiB3ZSB3YW50IHRvIHRlc3QgdGhpcywgZW5hYmxpbmcgYFBSRUVNUFRfUlRgIGlzIG5vbi1uZWdvdGlhYmxlLiBUaGUgcGF0Y2ggdGV4dCBpdHNlbGYgZHJpdmVzIHRoYXQgcG9pbnQgaG9tZSDigJMgaXQgbWVudGlvbnMgdGhlIG5lZWQgZm9yIFwidGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHByZWVtcHRpbmcgcmVtb3RlIGNvdmVyYWdlIGNvbGxlY3Rpb25cIiBhbmQgXCJleHRyYSBidWZmZXJzLi4uIGZvciBzb2Z0aXJxIHByZWVtcHRpb24sXCIgc28gYFBSRUVNUFRfUlRgIGl0IGlzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBnZXQgYSBicm9hZGVyIHBpY3R1cmUuIFdlIGhhdmUgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYWxvbmcgd2l0aCB0aGUgZmFtaWxpYXIgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3N0b3BgLCBga2Nvdl9yZW1vdGVfYXJlYV9nZXRgLCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YC5cblxuVGhlIG1vcmUgcHJlc3NpbmcgcXVlc3Rpb24gbm93IGlzOiBhcmUgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGFuZCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCBpbiBhIGhvdCBwYXRoPyBTb2Z0aXJxIHByb2Nlc3NpbmcgKmlzKiBhIGhvdCBwYXRoLCBnZW5lcmFsbHkgc3BlYWtpbmcuIEhvd2V2ZXIsIHRoZXNlIEtDT1YgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiBLQ09WIGlzIGJvdGggZW5hYmxlZCAqYW5kKiBhY3RpdmUuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3MgdHJhY2UgdGhlaXIgY2FsbCBzaXRlcyBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjM1LjQwNjI1OTM3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ5MzExODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9rY292LmM9ODMzPXN0YXRpYyBpbmxpbmUgYm9vbCBrY292X21vZGVfZW5hYmxlZCh1bnNpZ25lZCBpbnQgbW9kZSlcXG4tLVxcbmtlcm5lbC9rY292LmMtODM3LVxcbmtlcm5lbC9rY292LmM6ODM4OnN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC9rY292LmMtODM5LVxcdF9fbXVzdF9ob2xkKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2spXFxuLS1cXG5rZXJuZWwva2Nvdi5jPTg3MD12b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTk1MC1cXHRpZiAoaW5fc2VydmluZ19zb2Z0aXJxKCkpIHtcXG5rZXJuZWwva2Nvdi5jOjk1MTpcXHRcXHRrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHQpO1xcbmtlcm5lbC9rY292LmMtOTUyLVxcdFxcdHQtXFx1MDAzZWtjb3Zfc29mdGlycSA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjM4LjA1NTU4MTQ3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzQ4NTI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtDT1YgUmVtb3RlIFN0YXJ0IEJlaGF2aW9yKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoaXMgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGNhbGxlZCBieSBga2Nvdl9yZW1vdGVfc3RhcnRgLiBBbmQgdGhhdCBtYWtlcyBzZW5zZSwgYXMgSSByZW1lbWJlciBga2Nvdl9yZW1vdGVfc3RhcnRgIGlzIHRyaWdnZXJlZCB3aGVuIGEgcmVtb3RlIEtDT1Ygc2VjdGlvbiBnZXRzIGdvaW5nIOKAkyB0aGluayB2aG9zdCwgbWFjODAyMTFfaHdzaW0sIHRoYXQga2luZCBvZiB0aGluZy4gQnV0IHdhaXTigKYgaXQncyBub3QgYSBkaXJlY3QgdHJpZ2dlciBvbiAqZXZlcnkqIHNvZnRpcnEsIGl0J3MgdGllZCBzcGVjaWZpY2FsbHkgdG8gY2FsbHMgdG8gYGtjb3ZfcmVtb3RlX3N0YXJ0YC4gVG8gY2xhcmlmeSB0aGlzLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aG8ncyBjYWxsaW5nIGBrY292X3JlbW90ZV9zdGFydGAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoZW4gYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGlzIGFjdHVhbGx5IGVuZ2FnZWQuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgc29mdGlycSBpbnRlcmFjdGlvbiBJJ20gc2VlaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDExLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjQyLjA5MDQzNzc3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTYyMTE0MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtjb3ZfcmVtb3RlX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdD0yMjc9VXNpbmcgS0NPViB0byBjb2xsZWN0IHJlbW90ZSBjb3ZlcmFnZSByZXF1aXJlczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTIyOS0xLiBNb2RpZnlpbmcga2VybmVsIGNvZGUgdG8gYW5ub3RhdGUgdGhlIGNvZGUgc2VjdGlvbiBmcm9tIHdoZXJlIGNvdmVyYWdlXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjMwOiAgIHNob3VsZCBiZSBjb2xsZWN0ZWQgd2l0aCBgYGtjb3ZfcmVtb3RlX3N0YXJ0YGAgYW5kIGBga2Nvdl9yZW1vdGVfc3RvcGBgLlxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTIzMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0LTIzNC1cXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdDoyMzU6Qm90aCBgYGtjb3ZfcmVtb3RlX3N0YXJ0YGAgYW5kIGBga2Nvdl9yZW1vdGVfc3RvcGBgIGFubm90YXRpb25zIGFuZCB0aGVcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdC0yMzYtYGBLQ09WX1JFTU9URV9FTkFCTEVgYCBpb2N0bCBhY2NlcHQgaGFuZGxlcyB0aGF0IGlkZW50aWZ5IHBhcnRpY3VsYXIgY292ZXJhZ2VcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0PTI1NT1Gb3IgIzEgYW5kICMzLCBhIHVuaXF1ZSBnbG9iYWwgaGFuZGxlIG11c3QgYmUgY2hvc2VuIGFuZCBwYXNzZWQgdG8gdGhlXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjU2OmNvcnJlc3BvbmRpbmcgYGBrY292X3JlbW90ZV9zdGFydGBgIGNhbGwuIFRoZW4gYSB1c2Vyc3BhY2UgcHJvY2VzcyBtdXN0IHBhc3NcXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdC0yNTctdGhpcyBoYW5kbGUgdG8gYGBLQ09WX1JFTU9URV9FTkFCTEVgYCBpbiB0aGUgYGBoYW5kbGVzYGAgYXJyYXkgZmllbGQgb2YgdGhlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdD0yNjY9bW9kaWZpY2F0aW9ucy4gVGhvc2UgdGFza3Mgc2hvdWxkIGluIHR1cm4gdXNlIHRoZSBwYXNzZWQgaGFuZGxlIGluIHRoZWlyXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3Q6MjY3OmBga2Nvdl9yZW1vdGVfc3RhcnRgYCBhbmQgYGBrY292X3JlbW90ZV9zdG9wYGAgYW5ub3RhdGlvbnMuXFxuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3QtMjY4LUluIHRoZSBrZXJuZWwsIGNvbW1vbiBoYW5kbGVzIGFyZSB3cmFwcGVkIGluIGEgYGBrY292X2NvbW1vbl9oYW5kbGVfaWRgYCwgd2hpY2hcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdD0yOD1LQ09WIOS+nei1lue8luivkeWZqOaPkuahqe+8jOimgeaxgiBHQ0MgNi4xLjAg5Y+K5pu06auY54mI5pys5oiW6ICF5YaF5qC45pSv5oyB55qE5Lu75oSP54mI5pys55qEIENsYW5n44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9kZXYtdG9vbHMva2Nvdi5yc3QtMjI1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyMjY6MS4g5L+u5pS55YaF5qC45rqQ56CB5bm25L2/55SoIGBga2Nvdl9yZW1vdGVfc3RhcnRgYCDlkowgYGBrY292X3JlbW90ZV9zdG9wYGAg5p2l5qCH5rOo6KaB5pS26ZuGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTIyNy0gICDopobnm5bnjofnmoTku6PnoIHniYfmrrXjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yMzAtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0OjIzMTpgYGtjb3ZfcmVtb3RlX3N0YXJ0YGAg5ZKMIGBga2Nvdl9yZW1vdGVfc3RvcGBgIOeahOagh+azqOS7peWPiiBgYEtDT1ZfUkVNT1RFX0VOQUJMRWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTIzMi1pb2N0bCDpg73mjqXlj5flj6/ku6Xor4bliKvnibnlrpropobnm5bnjofmlLbpm4bniYfmrrXnmoTlj6Xmn4TjgILlj6Xmn4TnmoTkvb/nlKjmlrnlvI/lj5blhrPkuo7ljLnphY3ku6PnoIHniYfmrrXmiadcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdD0yMzU9S0NPViDmlK/mjIHlnKjlpoLkuIvkuIrkuIvmlofkuK3mlLbpm4bov5znqIvopobnm5bnjofvvJpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yNDUt5a+55LqOICMxIOWSjCAjM++8jOW/hemhu+mAieaLqeS4gOS4queLrOeJueeahOWFqOWxgOWPpeafhOW5tuWwhuWFtuS8oOmAkue7meWvueW6lOeahFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyNDY6YGBrY292X3JlbW90ZV9zdGFydGBgIOiwg+eUqOOAguS4gOS4queUqOaIt+epuumXtOi/m+eoi+W/hemhu+WwhuivpeWPpeafhOWtmOWCqOWcqFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yNDctYGBrY292X3JlbW90ZV9hcmdgYCDnu5PmnoTkvZPnmoQgYGBoYW5kbGVgYCDmlbDnu4TlrZfmrrXkuK3lubblsIblhbbkvKDpgJLnu5lcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdC0yNTMtYGBrY292X2hhbmRsZWBgIOWtl+auteS4reW5tuS4lOmcgOimgemAmui/h+iHquWumuS5ieWGheaguOS7o+eggeeahOS/ruaUueadpeS8oOmAkue7meaWsOWIm+W7uueahOacrOWcsOS7u+WKoVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Rldi10b29scy9rY292LnJzdDoyNTQ644CC6L+Z5Lqb5Lu75Yqh6ZyA6KaB5ZyoIGBga2Nvdl9yZW1vdGVfc3RhcnRgYCDlkowgYGBrY292X3JlbW90ZV9zdG9wYGAg5qCH5rOo5Lit5L6d5qyh5L2/55So5Lyg6YCS6L+H5p2l55qEXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vZGV2LXRvb2xzL2tjb3YucnN0LTI1NS3lj6Xmn4TjgIJcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmM9MTYzMD1zdGF0aWMgdm9pZCBfX3VzYl9oY2RfZ2l2ZWJhY2tfdXJiKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmMtMTY1NS1cXHQgKi9cXG5kcml2ZXJzL3VzYi9jb3JlL2hjZC5jOjE2NTY6XFx0a2Nvdl9yZW1vdGVfc3RhcnRfdXNiX3NvZnRpcnEoKHU2NCl1cmItXFx1MDAzZWRldi1cXHUwMDNlYnVzLVxcdTAwM2VidXNudW0pO1xcbmRyaXZlcnMvdXNiL2NvcmUvaGNkLmMtMTY1Ny1cXHR1cmItXFx1MDAzZWNvbXBsZXRlKHVyYik7XFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jPTU4NzQ9c3RhdGljIHZvaWQgaHViX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvaHViLmMtNTg4OC1cXG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jOjU4ODk6XFx0a2Nvdl9yZW1vdGVfc3RhcnRfdXNiKCh1NjQpaGRldi1cXHUwMDNlYnVzLVxcdTAwM2VidXNudW0pO1xcbmRyaXZlcnMvdXNiL2NvcmUvaHViLmMtNTg5MC1cXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYz0yNTY9aW50IHZoY2lfcnhfbG9vcCh2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTI2My1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM6MjY0OlxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbih1ZC1cXHUwMDNla2Nvdl9oYW5kbGUpO1xcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy0yNjUtXFx0XFx0dmhjaV9yeF9wZHUodWQpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTQwMD1zdGF0aWMgaW50IHZob3N0X3J1bl93b3JrX2t0aHJlYWRfbGlzdCh2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTQyNi1cXHRcXHRcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjQyNzpcXHRcXHRcXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24od29ya2VyLVxcdTAwM2VrY292X2hhbmRsZSk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTQyOC1cXHRcXHRcXHR3b3JrLVxcdTAwM2Vmbih3b3JrKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz00Mzg9c3RhdGljIGJvb2wgdmhvc3RfcnVuX3dvcmtfbGlzdCh2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTQ1Mi1cXHRcXHRcXHRjbGVhcl9iaXQoVkhPU1RfV09SS19RVUVVRUQsIFxcdTAwMjZ3b3JrLVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjQ1MzpcXHRcXHRcXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24od29ya2VyLVxcdTAwM2VrY292X2hhbmRsZSk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTQ1NC1cXHRcXHRcXHR3b3JrLVxcdTAwM2Vmbih3b3JrKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2Nvdi5oPTM3PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC00MS0vKiBTZWUgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3QgZm9yIHVzYWdlIGRldGFpbHMuICovXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NDI6dm9pZCBrY292X3JlbW90ZV9zdGFydCh1NjQgaGFuZGxlKTtcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC00My12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZCk7XFxuaW5jbHVkZS9saW51eC9rY292Lmg9NDQ9c3RydWN0IGtjb3ZfY29tbW9uX2hhbmRsZV9pZCBrY292X2NvbW1vbl9oYW5kbGUodm9pZCk7XFxuaW5jbHVkZS9saW51eC9rY292LmgtNDUtXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NDY6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGlkKVxcbmluY2x1ZGUvbGludXgva2Nvdi5oLTQ3LXtcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo0ODpcXHRrY292X3JlbW90ZV9zdGFydChrY292X3JlbW90ZV9oYW5kbGUoS0NPVl9TVUJTWVNURU1fQ09NTU9OLCBpZC52YWwpKTtcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC00OS19XFxuaW5jbHVkZS9saW51eC9rY292LmgtNTAtXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NTE6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYih1NjQgaWQpXFxuaW5jbHVkZS9saW51eC9rY292LmgtNTIte1xcbmluY2x1ZGUvbGludXgva2Nvdi5oOjUzOlxcdGtjb3ZfcmVtb3RlX3N0YXJ0KGtjb3ZfcmVtb3RlX2hhbmRsZShLQ09WX1NVQlNZU1RFTV9VU0IsIGlkKSk7XFxuaW5jbHVkZS9saW51eC9rY292LmgtNTQtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9rY292LmgtNjItXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NjM6c3RhdGljIGlubGluZSB2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYl9zb2Z0aXJxKHU2NCBpZClcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC02NC17XFxuaW5jbHVkZS9saW51eC9rY292LmgtNjUtXFx0aWYgKGluX3NlcnZpbmdfc29mdGlycSgpIFxcdTAwMjZcXHUwMDI2ICFpbl9oYXJkaXJxKCkpXFxuaW5jbHVkZS9saW51eC9rY292Lmg6NjY6XFx0XFx0a2Nvdl9yZW1vdGVfc3RhcnRfdXNiKGlkKTtcXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC02Ny19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9maW5pc2hfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkge31cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaDo5ODpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnQodTY0IGhhbmRsZSkge31cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC05OS1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RvcCh2b2lkKSB7fVxcbmluY2x1ZGUvbGludXgva2Nvdi5oPTEwMD1zdGF0aWMgaW5saW5lIHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQga2Nvdl9jb21tb25faGFuZGxlKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjb3YuaC0xMDMtfVxcbmluY2x1ZGUvbGludXgva2Nvdi5oOjEwNDpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQgaWQpIHt9XFxuaW5jbHVkZS9saW51eC9rY292Lmg6MTA1OnN0YXRpYyBpbmxpbmUgdm9pZCBrY292X3JlbW90ZV9zdGFydF91c2IodTY0IGlkKSB7fVxcbmluY2x1ZGUvbGludXgva2Nvdi5oOjEwNjpzdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RhcnRfdXNiX3NvZnRpcnEodTY0IGlkKSB7fVxcbmluY2x1ZGUvbGludXgva2Nvdi5oLTEwNy1zdGF0aWMgaW5saW5lIHZvaWQga2Nvdl9yZW1vdGVfc3RvcF9zb2Z0aXJxKHZvaWQpIHt9XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva2Nvdi5oLTgtICogQXJndW1lbnQgZm9yIEtDT1ZfUkVNT1RFX0VOQUJMRSBpb2N0bCwgc2VlIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjb3YucnN0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2tjb3YuaDo5OiAqIGFuZCB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy5cXG5pbmNsdWRlL3VhcGkvbGludXgva2Nvdi5oLTEwLSAqL1xcbi0tXFxua2VybmVsL2tjb3YuYz00MDc9c3RhdGljIHZvaWQga2Nvdl9yZW1vdGVfcmVzZXQoc3RydWN0IGtjb3YgKmtjb3YpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTQyMS1cXHR9XFxua2VybmVsL2tjb3YuYzo0MjI6XFx0LyogRG8gcmVzZXQgYmVmb3JlIHVubG9jayB0byBwcmV2ZW50IHJhY2VzIHdpdGgga2Nvdl9yZW1vdGVfc3RhcnQoKS4gKi9cXG5rZXJuZWwva2Nvdi5jLTQyMy1cXHRrY292X3Jlc2V0KGtjb3YpO1xcbi0tXFxua2VybmVsL2tjb3YuYz00NTc9dm9pZCBrY292X3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTQ2Ni1cXHRcXHQvKlxcbmtlcm5lbC9rY292LmM6NDY3OlxcdFxcdCAqIFRoaXMgY291bGQgYmUgYSByZW1vdGUgdGFzayBiZXR3ZWVuIGtjb3ZfcmVtb3RlX3N0YXJ0KCkgYW5kXFxua2VybmVsL2tjb3YuYy00NjgtXFx0XFx0ICoga2Nvdl9yZW1vdGVfc3RvcCgpLlxcbi0tXFxua2VybmVsL2tjb3YuYz03ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga2Nvdl9mb3BzID0ge1xcbi0tXFxua2VybmVsL2tjb3YuYy03OTAtLypcXG5rZXJuZWwva2Nvdi5jOjc5MTogKiBrY292X3JlbW90ZV9zdGFydCgpIGFuZCBrY292X3JlbW90ZV9zdG9wKCkgY2FuIGJlIHVzZWQgdG8gYW5ub3RhdGUgYSBzZWN0aW9uXFxua2VybmVsL2tjb3YuYy03OTItICogb2YgY29kZSBpbiBhIGtlcm5lbCBiYWNrZ3JvdW5kIHRocmVhZCBvciBpbiBhIHNvZnRpcnEgdG8gYWxsb3cga2NvdiB0byBiZVxcbi0tXFxua2VybmVsL2tjb3YuYy03OTQtICpcXG5rZXJuZWwva2Nvdi5jOjc5NTogKiBUaGUgaGFuZGxlIGFyZ3VtZW50IG9mIGtjb3ZfcmVtb3RlX3N0YXJ0KCkgaWRlbnRpZmllcyBhIGNvZGUgc2VjdGlvbiB0aGF0IGlzXFxua2VybmVsL2tjb3YuYy03OTYtICogdXNlZCBmb3IgY292ZXJhZ2UgY29sbGVjdGlvbi4gQSB1c2Vyc3BhY2UgcHJvY2VzcyBwYXNzZXMgdGhpcyBoYW5kbGUgdG9cXG4tLVxcbmtlcm5lbC9rY292LmMtODE4LSAqIGFuZCBwYXNzZWQgdG8gdGhlIHNwYXduZWQgdGhyZWFkcyB2aWEgY3VzdG9tIGFubm90YXRpb25zLiBUaG9zZSBrZXJuZWxcXG5rZXJuZWwva2Nvdi5jOjgxOTogKiB0aHJlYWRzIG11c3QgaW4gdHVybiBiZSBhbm5vdGF0ZWQgd2l0aCBrY292X3JlbW90ZV9zdGFydChjb21tb25faGFuZGxlKSBhbmRcXG5rZXJuZWwva2Nvdi5jLTgyMC0gKiBrY292X3JlbW90ZV9zdG9wKCkuIEFsbCBvZiB0aGUgdGhyZWFkcyB0aGF0IGFyZSBzcGF3bmVkIGJ5IHRoZSBzYW1lIHByb2Nlc3NcXG4tLVxcbmtlcm5lbC9rY292LmMtODI0LSAqXFxua2VybmVsL2tjb3YuYzo4MjU6ICogSW50ZXJuYWxseSwga2Nvdl9yZW1vdGVfc3RhcnQoKSBsb29rcyB1cCB0aGUga2NvdiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxcbmtlcm5lbC9rY292LmMtODI2LSAqIHByb3ZpZGVkIGhhbmRsZSwgYWxsb2NhdGVzIGFuIGFyZWEgZm9yIGNvdmVyYWdlIGNvbGxlY3Rpb24sIGFuZCBzYXZlcyB0aGVcXG4tLVxcbmtlcm5lbC9rY292LmM9ODU1PXN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTg2OS1cXG5rZXJuZWwva2Nvdi5jOjg3MDp2b2lkIGtjb3ZfcmVtb3RlX3N0YXJ0KHU2NCBoYW5kbGUpXFxua2VybmVsL2tjb3YuYy04NzEte1xcbi0tXFxua2VybmVsL2tjb3YuYy04ODgtXFx0LypcXG5rZXJuZWwva2Nvdi5jOjg4OTpcXHQgKiBDaGVjayB0aGF0IGtjb3ZfcmVtb3RlX3N0YXJ0KCkgaXMgbm90IGNhbGxlZCB0d2ljZSBpbiBiYWNrZ3JvdW5kXFxua2VybmVsL2tjb3YuYy04OTAtXFx0ICogdGhyZWFkcyBub3IgY2FsbGVkIGJ5IHVzZXIgdGFza3MgKHdpdGggZW5hYmxlZCBrY292KS5cXG4tLVxcbmtlcm5lbC9rY292LmMtODk3LVxcdC8qXFxua2VybmVsL2tjb3YuYzo4OTg6XFx0ICogQ2hlY2sgdGhhdCBrY292X3JlbW90ZV9zdGFydCgpIGlzIG5vdCBjYWxsZWQgdHdpY2UgaW4gc29mdGlycXMuXFxua2VybmVsL2tjb3YuYzo4OTk6XFx0ICogTm90ZSwgdGhhdCBrY292X3JlbW90ZV9zdGFydCgpIGNhbiBiZSBjYWxsZWQgZnJvbSBhIHNvZnRpcnEgdGhhdFxcbmtlcm5lbC9rY292LmMtOTAwLVxcdCAqIGhhcHBlbmVkIHdoaWxlIGNvbGxlY3RpbmcgY292ZXJhZ2UgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkLlxcbi0tXFxua2VybmVsL2tjb3YuYy05NTgtfVxcbmtlcm5lbC9rY292LmM6OTU5OkVYUE9SVF9TWU1CT0woa2Nvdl9yZW1vdGVfc3RhcnQpO1xcbmtlcm5lbC9rY292LmMtOTYwLVxcbmtlcm5lbC9rY292LmM9OTYxPXN0YXRpYyB2b2lkIGtjb3ZfbW92ZV9hcmVhKGVudW0ga2Nvdl9tb2RlIG1vZGUsIHZvaWQgKmRzdF9hcmVhLFxcbi0tXFxua2VybmVsL2tjb3YuYy0xMDI0LVxcbmtlcm5lbC9rY292LmM6MTAyNTovKiBTZWUgdGhlIGNvbW1lbnQgYmVmb3JlIGtjb3ZfcmVtb3RlX3N0YXJ0KCkgZm9yIHVzYWdlIGRldGFpbHMuICovXFxua2VybmVsL2tjb3YuYy0xMDI2LXZvaWQga2Nvdl9yZW1vdGVfc3RvcCh2b2lkKVxcbi0tXFxua2VybmVsL2tjb3YuYy0xMDQ3LVxcdC8qXFxua2VybmVsL2tjb3YuYzoxMDQ4OlxcdCAqIFdoZW4gaW4gc29mdGlycSwgY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcga2Nvdl9yZW1vdGVfc3RhcnQoKVxcbmtlcm5lbC9rY292LmMtMTA0OS1cXHQgKiBhY3R1YWxseSBmb3VuZCB0aGUgcmVtb3RlIGhhbmRsZSBhbmQgc3RhcnRlZCBjb2xsZWN0aW5nIGNvdmVyYWdlLlxcbi0tXFxua2VybmVsL2tjb3YuYy0xMDczLVxcdC8qXFxua2VybmVsL2tjb3YuYzoxMDc0OlxcdCAqIEtDT1ZfRElTQUJMRSBjb3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJldHdlZW4ga2Nvdl9yZW1vdGVfc3RhcnQoKVxcbmtlcm5lbC9rY292LmMtMTA3NS1cXHQgKiBhbmQga2Nvdl9yZW1vdGVfc3RvcCgpLCBoZW5jZSB0aGUgc2VxdWVuY2UgY2hlY2suXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTEwODYtXFxua2VybmVsL2tjb3YuYzoxMDg3OlxcdC8qIEdldCBpbiBrY292X3JlbW90ZV9zdGFydCgpLiAqL1xcbmtlcm5lbC9rY292LmMtMTA4OC1cXHRrY292X3B1dChrY292KTtcXG4tLVxcbmtlcm5lbC9rY292LmM9MTA5MD1FWFBPUlRfU1lNQk9MKGtjb3ZfcmVtb3RlX3N0b3ApO1xcbmtlcm5lbC9rY292LmMtMTA5MS1cXG5rZXJuZWwva2Nvdi5jOjEwOTI6LyogU2VlIHRoZSBjb21tZW50IGJlZm9yZSBrY292X3JlbW90ZV9zdGFydCgpIGZvciB1c2FnZSBkZXRhaWxzLiAqL1xcbmtlcm5lbC9rY292LmMtMTA5My1zdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfY29tbW9uX2hhbmRsZSh2b2lkKVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jPTM5ODk9c3RhdGljIHZvaWQgaGNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfY29yZS5jLTQwMDEtXFx0Zm9yICg7IChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2aGRldi1cXHUwMDNlcnhfcSkpOyBrY292X3JlbW90ZV9zdG9wKCkpIHtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmM6NDAwMjpcXHRcXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMtNDAwMy1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTE4MDA9c3RhdGljIHZvaWQgaWVlZTgwMjExX2lmYWNlX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODE3LVxcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnNkYXRhLVxcdTAwM2Vza2JfcXVldWUpKSkge1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjE4MTg6XFx0XFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTgxOS1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE4MzAtXFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2c2RhdGEtXFx1MDAzZXN0YXR1c19xdWV1ZSkpKSB7XFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTgzMTpcXHRcXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xODMyLVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9NTU1Nz12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtNTY5OS1cXG5uZXQvbWFjODAyMTEvcnguYzo1NzAwOlxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbm5ldC9tYWM4MDIxMS9yeC5jLTU3MDEtXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTUyMD1zdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTUzNi1cXHRcXHRcXHRyZXR1cm47XFxubmV0L25mYy9uY2kvY29yZS5jOjE1Mzc6XFx0XFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XFxubmV0L25mYy9uY2kvY29yZS5jLTE1MzgtXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTU1OT1zdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU2NC1cXHRmb3IgKDsgKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZuZGV2LVxcdTAwM2VyeF9xKSk7IGtjb3ZfcmVtb3RlX3N0b3AoKSkge1xcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTY1OlxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTY2LVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTE2MTE9c3RhdGljIHZvaWQgbmNpX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNjIzLVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNjI0OlxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNjI1LVxcdFxcdGF0b21pY19kZWMoXFx1MDAyNm5kZXYtXFx1MDAzZWNtZF9jbnQpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9NDA1PXN0YXRpYyB2b2lkIG5jaV9oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDEzLVxcdGZvciAoOyAoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNmhkZXYtXFx1MDAzZW1zZ19yeF9xdWV1ZSkpOyBrY292X3JlbW90ZV9zdG9wKCkpIHtcXG5uZXQvbmZjL25jaS9oY2kuYzo0MTQ6XFx0XFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XFxubmV0L25mYy9uY2kvaGNpLmMtNDE1LVxcdFxcdHBpcGUgPSBOQ0lfSENQX01TR19HRVRfUElQRShza2ItXFx1MDAzZWRhdGFbMF0pO1xcbi0tXFxubmV0L25mYy9yYXdzb2NrLmM9MTg4PXN0YXRpYyB2b2lkIHJhd3NvY2tfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL3Jhd3NvY2suYy0yMDMtXFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSk7XFxubmV0L25mYy9yYXdzb2NrLmM6MjA0OlxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbm5ldC9uZmMvcmF3c29jay5jLTIwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6NDQuNjUyNTU5MTkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MzY1MTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBTb2Z0SVJRIEtDT1YgSG9vayoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IEtDT1YgaXMgaW50ZWdyYXRlZCB3aXRoIHNvZnRpcnFzLiBJIHNlZSB0aGF0IGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCBpcyBpbnZvbHZlZCwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyYWNlIGJhY2sgaXRzIGNhbGwgcGF0aC4gTm93LCB0aGUgY29udGV4dCBzYXlzIGl0J3MgY2FsbGVkIGZyb20gYF9fZG9fc29mdGlycWAuIEhhbmcgb24gYSBzZWNvbmQuLi4gaXMgdGhhdCBkaXJlY3Q/IE9yIGRvZXMgYGtjb3Zfc29mdGlycV9zdGFydGAgc2l0IGluIGJldHdlZW4/IExldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5LiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlOyBtaXNyZWFkaW5nIHRoZSBjYWxsIGZsb3cgd291bGQgc2VuZCBtZSBkb3duIHRoZSB3cm9uZyBwYXRoIGVudGlyZWx5LiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbiBjYWxscy4gTGV0J3Mgc2VlIGV4YWN0bHkgd2hlcmUgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGlzIGNhbGxlZC4gR290dGEgY29uZmlybSB0aGF0IGNvbm5lY3Rpb24uLi4gYW5kIHRoZW4gSSBjYW4gZnVsbHkgdW5kZXJzdGFuZCBob3cgS0NPViBpbnRlcmFjdHMgd2l0aCB0aGUgU29mdElSUSBwcm9jZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIzOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjUwLjAyNjIxNDM0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2Njg4MDUxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2Nvdi5jPTgzMz1zdGF0aWMgaW5saW5lIGJvb2wga2Nvdl9tb2RlX2VuYWJsZWQodW5zaWduZWQgaW50IG1vZGUpXFxuLS1cXG5rZXJuZWwva2Nvdi5jLTgzNy1cXG5rZXJuZWwva2Nvdi5jOjgzODpzdGF0aWMgdm9pZCBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG5rZXJuZWwva2Nvdi5jLTgzOS1cXHRfX211c3RfaG9sZChcXHUwMDI2a2Nvdl9wZXJjcHVfZGF0YS5sb2NrKVxcbi0tXFxua2VybmVsL2tjb3YuYz04NzA9dm9pZCBrY292X3JlbW90ZV9zdGFydCh1NjQgaGFuZGxlKVxcbi0tXFxua2VybmVsL2tjb3YuYy05NTAtXFx0aWYgKGluX3NlcnZpbmdfc29mdGlycSgpKSB7XFxua2VybmVsL2tjb3YuYzo5NTE6XFx0XFx0a2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydCh0KTtcXG5rZXJuZWwva2Nvdi5jLTk1Mi1cXHRcXHR0LVxcdTAwM2VrY292X3NvZnRpcnEgPSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NTo1Mi41OTMxMTM2NjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyMjcxMDI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgS0NPViBTb2Z0SVJRIExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBJIHNlZSBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgYmVpbmcgY2FsbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkFoYSEgSXQncyBmcm9tIGBrY292X3JlbW90ZV9zdGFydGAgKmNvbmRpdGlvbmFsbHkqIHdoZW4gYGluX3NlcnZpbmdfc29mdGlycSgpYCBpcyB0cnVlLlwiIEJ1dCwgdGhhdCBkb2Vzbid0IHF1aXRlIHNlZW0gcmlnaHQuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBXYWl0IGEgc2Vjb25kLCB0aGUgbW9yZSBsaWtlbHkgc2NlbmFyaW8gaXMgdGhhdCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20gYGtjb3Zfc29mdGlycV9zdGFydGAuIE9rYXksIGxldCdzIGNvbmZpcm0gdGhpcyBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGtjb3Zfc29mdGlycV9zdGFydGAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gZXhhbWluZSBpdHMgaW1wbGVtZW50YXRpb24gdG8gYmUgc3VyZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGdyYXBoIHRoZXJlLiBObyBhc3N1bXB0aW9ucywgbmVlZCB0aGUgaGFyZCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc3MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ1OjU3LjIxNTgyOTcyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNDQxNzc2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2Nvdl9zb2Z0aXJxX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDU6NTkuNTUwMjU5OTQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODM4MzI4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgS0NPViBTb2Z0SVJRIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydGAgZnVuY3Rpb24sIGFuZCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuIFRoZSBvdXRwdXQgc2VlbWVkIHRvIGluZGljYXRlIHRoYXQgaXQncyBjYWxsZWQgZnJvbSB3aXRoaW4gYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYnV0IHRoZSBpbml0aWFsIGdsYW5jZSBJIHRvb2sgc3VnZ2VzdGVkIG90aGVyd2lzZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGlzLiBUaGUgb3V0cHV0IHNheXM6IGlmIHRoZSBzeXN0ZW0gaXMgc2VydmluZyBhIHNvZnRJUlEsIHRoZW4gYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGlzIGNhbGxlZC4gSXQgbG9va3MgbGlrZSBpdC4gT2theSwgc28gbm93IEknbSB0aGlua2luZywgaXMgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhY3R1YWxseSAqY2FsbGluZyogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgIGRpcmVjdGx5PyBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgcmVsYXRpb25zaGlwLiBMZXQncyB0cmFjZSBiYWNrIHRvIGBrY292X3JlbW90ZV9zdGFydGAgZGVmaW5pdGlvbiBpbiBga2VybmVsL2tjb3YuY2AgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MDMuNjM0MDk3MjUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwva2Nvdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0MDpcXHRcXHRcXHRpZiAoIWFyZWEpIHtcXG4gOTQxOlxcdFxcdFxcdFxcdGtjb3ZfcHV0KGtjb3YpO1xcbiA5NDI6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA5NDM6XFx0XFx0XFx0fVxcbiA5NDQ6XFx0XFx0XFx0bG9jYWxfbG9ja19pcnFzYXZlKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcXG4gOTQ1OlxcdFxcdH1cXG4gOTQ2OlxcdFxcbiA5NDc6XFx0XFx0LyogUmVzZXQgY292ZXJhZ2Ugc2l6ZS4gKi9cXG4gOTQ4OlxcdFxcdCoodTY0ICopYXJlYSA9IDA7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdFxcdGlmIChpbl9zZXJ2aW5nX3NvZnRpcnEoKSkge1xcbiA5NTE6XFx0XFx0XFx0a2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydCh0KTtcXG4gOTUyOlxcdFxcdFxcdHQtXFx1MDAzZWtjb3Zfc29mdGlycSA9IDE7XFxuIDk1MzpcXHRcXHR9XFxuIDk1NDpcXHRcXHRrY292X3N0YXJ0KHQsIGtjb3YsIHNpemUsIGFyZWEsIG1vZGUsIHNlcXVlbmNlKTtcXG4gOTU1OlxcdFxcbiA5NTY6XFx0XFx0bG9jYWxfdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaywgZmxhZ3MpO1xcbiA5NTc6XFx0XFxuIDk1ODpcXHR9XFxuIDk1OTpcXHRFWFBPUlRfU1lNQk9MKGtjb3ZfcmVtb3RlX3N0YXJ0KTtcXG4gOTYwOlxcdFxcbiA5NjE6XFx0c3RhdGljIHZvaWQga2Nvdl9tb3ZlX2FyZWEoZW51bSBrY292X21vZGUgbW9kZSwgdm9pZCAqZHN0X2FyZWEsXFxuIDk2MjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZHN0X2FyZWFfc2l6ZSwgdm9pZCAqc3JjX2FyZWEpXFxuIDk2MzpcXHR7XFxuIDk2NDpcXHRcXHR1NjQgd29yZF9zaXplID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xcbiA5NjU6XFx0XFx0dTY0IGNvdW50X3NpemUsIGVudHJ5X3NpemVfbG9nO1xcbiA5NjY6XFx0XFx0dTY0IGRzdF9sZW4sIHNyY19sZW47XFxuIDk2NzpcXHRcXHR2b2lkICpkc3RfZW50cmllcywgKnNyY19lbnRyaWVzO1xcbiA5Njg6XFx0XFx0dTY0IGRzdF9vY2N1cGllZCwgZHN0X2ZyZWUsIGJ5dGVzX3RvX21vdmUsIGVudHJpZXNfbW92ZWQ7XFxuIDk2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MDMuNjM0MjEyMThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIwODU4MTY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmRlcnN0YW5kaW5nIHRoZSBSZW1vdGUgS0NPViBTdGFydC9TdG9wIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBmb2xsb3dpbmcgdGhlIGNvZGUgZmxvdyBoZXJlLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBnZXRzIGNhbGxlZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBoYXBwZW5pbmcgZnJvbSBhIHNvZnRpcnEgY29udGV4dCwgbGlrZSB0aGUgYGtjb3ZfcmVtb3RlX3N0YXJ0X3VzYl9zb2Z0aXJxYCBjYWxsIHN1Z2dlc3RzLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggaW50ZXJydXB0cyBjb21pbmcgZnJvbSBleHRlcm5hbCBkZXZpY2VzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXQgY2hlY2tzIGBpbl9zZXJ2aW5nX3NvZnRpcnEoKWAuICBUaGF04oCZcyB0aGUga2V5IGNvbnRleHQgY2hlY2suIElmIHdlICphcmUqIGluIGEgc29mdGlycSwgaXQgY2FsbHMgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnQodClgLiAgVGhpcyBpcyBjbGV2ZXIuIEl0IHNhdmVzIHRoZSBleGlzdGluZyBLQ09WIHN0YXRlLCBpZiBvbmUgZXhpc3RzLCBhbmQgKnN0b3BzKiBpdC4gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgYW55IGNvdmVyYWdlIHRyYWNpbmcgaGFwcGVuaW5nIGF0IHRoZSB0aW1lLiBUaGVuLCBhbmQgb25seSB0aGVuLCBkb2VzIGl0IGtpY2sgb2ZmIGBrY292X3N0YXJ0YCBmb3IgdGhlIHJlbW90ZSBjb3ZlcmFnZS4gVGhpcyBtZWFucyB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBsb2NhbCBLQ09WIHRvIHJlbW90ZSBLQ09WLiBUaGUgc3lzdGVtIGlzIHByb2JhYmx5IHN3aXRjaGluZyBmcm9tIGxvY2FsIGluc3RydW1lbnRhdGlvbiBvZiB0aGUga2VybmVsIHRvIHVzaW5nIGEgcmVtb3RlIGluc3RhbmNlIGZvciBwcm9maWxpbmcuXG5cbkFuZCBmaW5hbGx5LCB3aGVuIGBrY292X3JlbW90ZV9zdG9wYCBpcyBjYWxsZWQsIGl0IHJlc3RvcmVzIHRoZSBzYXZlZCBLQ09WIHN0YXRlLiAgVGhpcyBzZWVtcyBjbGVhbiDigJMgaXQgcmV0dXJucyB1cyB0byB0aGUgc3RhdGUgd2Ugd2VyZSBpbiBiZWZvcmUgdGhlIHJlbW90ZSBwcm9maWxpbmcgc3RhcnRlZCwgZW5zdXJpbmcgbm8gZGF0YSBpcyBsb3N0IG9yIGNvcnJ1cHRlZC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vdGhpbmcgaGFwcGVucyB3aXRoIG91ciBleGlzdGluZyB0cmFjaW5nLCBpZiBhbnkuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYGtjb3ZfcmVtb3RlX3N0b3BgIGZ1bmN0aW9uIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCByZXN0b3JhdGlvbiBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTUyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MDkuODQyNzk2NjM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwva2Nvdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFxuMTA4MTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2spO1xcbjEwODI6XFx0XFx0a2Nvdl9yZW1vdGVfYXJlYV9wdXQoYXJlYSwgc2l6ZSwgIWluX3Rhc2soKSk7XFxuMTA4MzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jayk7XFxuMTA4NDpcXHRcXG4xMDg1OlxcdFxcdGxvY2FsX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZrY292X3BlcmNwdV9kYXRhLmxvY2ssIGZsYWdzKTtcXG4xMDg2OlxcdFxcbjEwODc6XFx0XFx0LyogR2V0IGluIGtjb3ZfcmVtb3RlX3N0YXJ0KCkuICovXFxuMTA4ODpcXHRcXHRrY292X3B1dChrY292KTtcXG4xMDg5OlxcdH1cXG4xMDkwOlxcdEVYUE9SVF9TWU1CT0woa2Nvdl9yZW1vdGVfc3RvcCk7XFxuMTA5MTpcXHRcXG4xMDkyOlxcdC8qIFNlZSB0aGUgY29tbWVudCBiZWZvcmUga2Nvdl9yZW1vdGVfc3RhcnQoKSBmb3IgdXNhZ2UgZGV0YWlscy4gKi9cXG4xMDkzOlxcdHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQga2Nvdl9jb21tb25faGFuZGxlKHZvaWQpXFxuMTA5NDpcXHR7XFxuMTA5NTpcXHRcXHRpZiAoIWluX3Rhc2soKSlcXG4xMDk2OlxcdFxcdFxcdHJldHVybiAoc3RydWN0IGtjb3ZfY29tbW9uX2hhbmRsZV9pZCl7IC52YWwgPSAwIH07XFxuMTA5NzpcXHRcXHRyZXR1cm4gKHN0cnVjdCBrY292X2NvbW1vbl9oYW5kbGVfaWQpeyAudmFsID0gY3VycmVudC1cXHUwMDNla2Nvdl9oYW5kbGUgfTtcXG4xMDk4OlxcdH1cXG4xMDk5OlxcdEVYUE9SVF9TWU1CT0woa2Nvdl9jb21tb25faGFuZGxlKTtcXG4xMTAwOlxcdFxcbjExMDE6XFx0I2lmZGVmIENPTkZJR19LQ09WX1NFTEZURVNUXFxuMTEwMjpcXHRzdGF0aWMgdm9pZCBfX2luaXQgc2VsZnRlc3Qodm9pZClcXG4xMTAzOlxcdHtcXG4xMTA0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XFxuMTEwNTpcXHRcXG4xMTA2OlxcdFxcdHByX2VycihcXFwicnVubmluZyBzZWxmIHRlc3RcXFxcblxcXCIpO1xcbjExMDc6XFx0XFx0LypcXG4xMTA4OlxcdFxcdCAqIFRlc3QgdGhhdCBpbnRlcnJ1cHRzIGRvbid0IHByb2R1Y2Ugc3B1cmlvdXMgY292ZXJhZ2UuXFxuMTEwOTpcXHRcXHQgKiBUaGUgY292ZXJhZ2UgY2FsbGJhY2sgZmlsdGVycyBvdXQgaW50ZXJydXB0IGNvZGUsIGJ1dCBvbmx5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ2OjA5Ljg0MjkwMzgxNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk3MDczMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhc3N1bWluZyBJJ20gYWxyZWFkeSBkZWVwIGludG8gdGhpcyBjb2RlOlxuXG4qKkxvY2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BgKipcblxuUmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgZnVuY3Rpb24gaXRzZWxmLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgdGhpcyBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCBmdW5jdGlvbiBiZWluZyAqdXNlZCo/IEkgbmVlZCB0byBzZWUgdGhlIGNhbGwgc2l0ZXMuIFVuZGVyc3RhbmRpbmcgaG93IGl0J3MgaW52b2tlZCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB3aGF0ZXZlciB0aGlzIGtjb3YtcmVsYXRlZCBzdWJzeXN0ZW0gaXMgZG9pbmcuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gdHJhY2Ugd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQsIHdoaWNoIHdpbGwgc2hvdyB0aGUgZGlmZmVyZW50IHBhdGhzIGFuZCBjb25kaXRpb25zIGludm9sdmVkIGluIGV4ZWN1dGluZyBpdC4gVGhhdCdzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NjoxMi45Mzk5ODAzMzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTA4NjIzNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva2Nvdi5jPTgzOD1zdGF0aWMgdm9pZCBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4tLVxcbmtlcm5lbC9rY292LmMtODU0LVxcbmtlcm5lbC9rY292LmM6ODU1OnN0YXRpYyB2b2lkIGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL2tjb3YuYy04NTYtXFx0X19tdXN0X2hvbGQoXFx1MDAyNmtjb3ZfcGVyY3B1X2RhdGEubG9jaylcXG4tLVxcbmtlcm5lbC9rY292LmM9MTAyNj12b2lkIGtjb3ZfcmVtb3RlX3N0b3Aodm9pZClcXG4tLVxcbmtlcm5lbC9rY292LmMtMTA2OC1cXHRcXHR0LVxcdTAwM2VrY292X3NvZnRpcnEgPSAwO1xcbmtlcm5lbC9rY292LmM6MTA2OTpcXHRcXHRrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3AodCk7XFxua2VybmVsL2tjb3YuYy0xMDcwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MTUuODUwODUwNTcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTk4NDE0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS0NPViBTb2Z0aXJxIENvdmVyYWdlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaG93IEtDT1YgaGFuZGxlcyBzb2Z0aXJxIGNvdmVyYWdlLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyB0aGUgcHJlZW1wdGlvbiBpc3N1ZXMgdGhhdCBhcmlzZSB3aXRoIGBQUkVFTVBUX1JUYC4gTGV0J3MgYnJlYWsgaXQgZG93biBpbiBteSBtaW5kOlxuXG5GaXJzdGx5LCBJIHNlZSB0aGF0IGBrY292X3JlbW90ZV9zdG9wYCBpcyBub3cgZGlyZWN0bHkgY2FsbGluZyBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgc28gdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGhvdyB0aGUgY292ZXJhZ2UgYXJlYXMgYXJlIG1hbmFnZWQuXG5cblRoZSBrZXkgYWRqdXN0bWVudHMgYXJlIGNsZWFyOiBga2Nvdl9yZW1vdGVfYXJlYXNgIGhhcyBiZWVuIHJlc3RydWN0dXJlZCBpbnRvIGFuIGFycmF5IG9mIHR3byBsaXN0czsgb25lIGZvciB0YXNrcyBhbmQgYW5vdGhlciBmb3IgaW50ZXJydXB0cywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0LiBTZWNvbmRseSwgZnVuY3Rpb25zIGxpa2UgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCBub3cgdGFrZSBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgd2hldGhlciB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gSVJRIG9yIGEgdGFzaywgZXNzZW50aWFsIGZvciBkaWZmZXJlbnRpYXRpbmcgdGhlIHR3by5cblxuVGhlbiB0aGVyZSdzIHRoZSBpbml0aWFsaXphdGlvbjogYGtjb3ZfaW5pdGAgbm93IGFsbG9jYXRlcyBidWZmZXJzIHNwZWNpZmljYWxseSBmb3IgaW50ZXJydXB0cywgc2l6ZWQgYWNjb3JkaW5nIHRvIGBDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFYCwgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBpbnRlcnJ1cHQgbGlzdC4gVGhpcyBpcyBrZXksIHBhcnRpY3VsYXJseSBpbiBhbiBgUFJFRU1QVF9SVGAgZW52aXJvbm1lbnQsIHdoZXJlIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcHJlLWVtcHQgc29mdGlycXMgd2hpbGUgY29sbGVjdGluZyBjb3ZlcmFnZS5cblxuV2hlbiBLQ09WIHN0YXJ0cywgaXQgZ2V0cyBhbiBhcmVhIGZyb20gdGhlIGludGVycnVwdCBsaXN0IGlmIGl0J3MgKm5vdCogcnVubmluZyBpbiBhIHRhc2ssIGFuZCBjb252ZXJzZWx5LCBpdCBwdXRzIHRoZSBhcmVhIGJhY2sgaW4gdGhlIGludGVycnVwdCBsaXN0IHdoZW4gaXQgc3RvcHMsIGFnYWluLCBpZiBub3QgaW4gYSB0YXNrLiBUaGlzIGR5bmFtaWMgYWxsb2NhdGlvbiBpcyBjcml0aWNhbCBmb3IgbWFuYWdpbmcgY292ZXJhZ2UgaW4gYSBwcmVlbXB0aWJsZSBzb2Z0aXJxIGNvbnRleHQuIEZpbmFsbHksIEkgbm90aWNlIHRoZSBzYXZlZCBLQ09WIHN0YXRlIGhhcyBiZWVuIG1vdmVkIGZyb20gYGtjb3ZfcGVyY3B1X2RhdGFgIHRvIGB0YXNrX3N0cnVjdGAsIGFub3RoZXIgaW1wb3J0YW50IHN0cnVjdHVyYWwgY2hhbmdlLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgYWxsb3dzIHNvZnRpcnEgY292ZXJhZ2UgdG8gYmUgcHJlZW1wdGVkLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCdzIG5lZWRlZCBmb3IgYFBSRUVNUFRfUlRgIOKAkyB0aGUgbWFpbiBtb3RpdmF0aW9uLCBpdCBzZWVtcy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIGEgdmFsdWFibGUgY2hhbmdlLCBwYXJ0aWN1bGFybHkgZm9yIHJlYWwtdGltZSBzeXN0ZW1zLlxuXG5JcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB3aXRob3V0IHF1ZXN0aW9uLiBUaGlzIGlzIGEgY29yZSBrZXJuZWwgZmVhdHVyZSB0aGF0LCBpZiBicm9rZW4sIHdvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wYWN0cy5cblxuQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgdGhhdCBmb3IgbXkgdGVzdGluZywgSSdsbCBuZWVkIGBDT05GSUdfS0NPVj15YCBhbmQgZGVmaW5pdGVseSBgQ09ORklHX1BSRUVNUFRfUlQ9eWAgdG8gdGVzdCB0aGUgYWN0dWFsIHByZWVtcHRpb24gYXNwZWN0IG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGlzIHRoZSB3aG9sZSBwb2ludC4gSSBrbm93IGl0J3MgdGhlcmUuIEkgZGlkIG15IGNoZWNrcy4gYENPTkZJR19LQ09WX0VOQUJMRV9DT01QQVJJU09OUz15YCBtaWdodCBiZSByZWxldmFudCwgYnV0IGlzIHByb2JhYmx5IG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIHRoaXMgcGF0Y2guIEkgdXN1YWxseSB3b3JrIHdpdGggYENPTkZJR19LQ09WX0lOU1RSVU1FTlRfQUxMPXlgLCBhbmQgYENPTkZJR19ERUJVR19GUz15YCBpcyBuZWNlc3NhcnksIHNpbmNlIEtDT1YgdXNlcyBkZWJ1Z2ZzLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGBrY292X2luaXRgIHRvIHNlZSBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NjoyMy42MTA2OTY5NDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9rY292LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMDpcXHRcXHR3aGlsZSAoKGppZmZpZXMgLSBzdGFydCkgKiBNU0VDX1BFUl9TRUMgLyBIWiBcXHUwMDNjIDMwMClcXG4xMTIxOlxcdFxcdFxcdDtcXG4xMTIyOlxcdFxcdFdSSVRFX09OQ0UoY3VycmVudC1cXHUwMDNla2Nvdl9tb2RlLCAwKTtcXG4xMTIzOlxcdFxcdHByX2VycihcXFwiZG9uZSBydW5uaW5nIHNlbGYgdGVzdFxcXFxuXFxcIik7XFxuMTEyNDpcXHR9XFxuMTEyNTpcXHQjZW5kaWZcXG4xMTI2OlxcdFxcbjExMjc6XFx0c3RhdGljIGludCBfX2luaXQga2Nvdl9pbml0KHZvaWQpXFxuMTEyODpcXHR7XFxuMTEyOTpcXHRcXHRpbnQgY3B1ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0I2lmZGVmIENPTkZJR19QUkVFTVBUX1JUXFxuMTEzMjpcXHRcXHQvKiBBbGxvY2F0ZSBzb21lIGV4dHJhIGJ1ZmZlcnMgaW4gb3JkZXIgdG8gcHJlcGFyZSBmb3Igc29mdGlycSBwcmVlbXB0aW9uLiAqL1xcbjExMzM6XFx0XFx0Y3B1ID0gY3B1IFxcdTAwM2U9IDQgPyBjcHUgKiAyIDogY3B1ICsgNDtcXG4xMTM0OlxcdCNlbmRpZlxcbjExMzU6XFx0XFx0d2hpbGUgKGNwdS0tKSB7XFxuMTEzNjpcXHRcXHRcXHR2b2lkICphcmVhID0gdm1hbGxvYyhDT05GSUdfS0NPVl9JUlFfQVJFQV9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4xMTM3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdFxcdGlmICghYXJlYSlcXG4xMTQwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNDE6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmtjb3ZfcmVtb3RlX2xvY2ssIGZsYWdzKTtcXG4xMTQyOlxcdFxcdFxcdGtjb3ZfcmVtb3RlX2FyZWFfcHV0KGFyZWEsIENPTkZJR19LQ09WX0lSUV9BUkVBX1NJWkUsIHRydWUpO1xcbjExNDM6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2a2Nvdl9yZW1vdGVfbG9jaywgZmxhZ3MpO1xcbjExNDQ6XFx0XFx0fVxcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHQvKlxcbjExNDc6XFx0XFx0ICogVGhlIGtjb3YgZGVidWdmcyBmaWxlIHdvbid0IGV2ZXIgZ2V0IHJlbW92ZWQgYW5kIHRodXMsXFxuMTE0ODpcXHRcXHQgKiB0aGVyZSBpcyBubyBuZWVkIHRvIHByb3RlY3QgaXQgYWdhaW5zdCByZW1vdmFsIHJhY2VzLiBUaGVcXG4xMTQ5OlxcdFxcdCAqIHVzZSBvZiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlX3Vuc2FmZSgpIGlzIGFjdHVhbGx5IHNhZmUgaGVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MjMuNjEwOTU5Mzc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxMzIxMTUwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gUmVtb3RlIEtDT1YgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBLQ09WIG1vZGlmaWNhdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoIGBLQ09WYCBhbmQgYFBSRUVNUFRfUlRgIGVuYWJsZWQuIEkndmUgZ290IGEgc2V0IG9mIGZvY3VzIHN5bWJvbHMgaW4gbWluZDogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCwgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYW5kIGBrY292X3JlbW90ZV9zdG9wYC4gVGhlIGBrY292X2luaXRgIGZ1bmN0aW9uIGlzIGlycmVsZXZhbnQgaGVyZSwgaXQncyBqdXN0IHRoZSBpbml0aWFsaXphdGlvbi5cblxuVGhlIGtleSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIGBrY292X3JlbW90ZV9zdGFydGAgYW5kIGBrY292X3JlbW90ZV9zdG9wYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25zIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZT8gVGhlIGFuc3dlciBpcyB5ZXMsIHRocm91Z2ggdGhlIGBLQ09WX1JFTU9URV9FTkFCTEVgIGlvY3RsLiBJdCBzZXRzIHVwIHRoZSBoYW5kbGUgZm9yIHJlbW90ZSBjb3ZlcmFnZS4gTm93LCB0aGlzIGlzIGNydWNpYWw6IHRoZSBhY3R1YWwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhbmQgYGtjb3ZfcmVtb3RlX3N0b3BgIGFyZSBpbnZva2VkIGJ5IGtlcm5lbCB0aHJlYWRzIG9yIHNvZnRpcnFzICp1c2luZyogdGhhdCBoYW5kbGUuIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBVU0IsIHZob3N0LCBhbnl0aGluZyB0aGF0J3MgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCBhbmQgbWlnaHQgYmUgZXhlcmNpc2luZyB0aGlzIGNvZGUuXG5cblN5emthbGxlciwgZXNwZWNpYWxseSwgdXRpbGl6ZXMgYEtDT1ZfUkVNT1RFX0VOQUJMRWAgcXVpdGUgYSBiaXQgdG8gY29sbGVjdCBjb3ZlcmFnZSBmcm9tIHRoZXNlIGJhY2tncm91bmQgdGhyZWFkcyDigJMgVVNCLCB2aG9zdCwgbWFjODAyMTFfaHdzaW0sIHRoYXQga2luZCBvZiB0aGluZy4gU28sIHRob3NlIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUgaGVhdmlseSBleGVyY2lzZWQuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIGluY2x1ZGUgYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhcyBhIGZvY3VzIHN5bWJvbCwgYW5kIHRoZW4gSSByZWFsaXplZCB0aGF0IGl0IGlzIGEgZGlyZWN0IGFyZWEgb2YgY2hhbmdlLiBJdCdzIHRoZSBmdW5jdGlvbiB0aGF0ICp3ZSogbW9kaWZpZWQgYW5kIHdhbnQgdG8gYmUgdGVzdGluZy5cblxuSXQncyBhIHJlbGF0aXZlbHkgc21hbGwgZnVuY3Rpb24sIHNvIHNob3VsZCBJIGxvb2sgZm9yIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucz8gSSdtIGFsc28gcmVtZW1iZXJpbmcgdGhhdCBga2Nvdl90YXNrX2luaXRgIGlzIG1vZGlmaWVkLCBidXQgdGhhdCdzIGNhbGxlZCBvbiBldmVyeSB0YXNrIGNyZWF0aW9uLiBUaGF0J3MgYSBob3QgcGF0aCwgYW5kIHByb2JhYmx5IG5vdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmb2N1cy4gYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCBhbmQgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCBhcmUgZ29vZCBwb3NzaWJpbGl0aWVzLlxuXG5SZXZpZXdpbmcgdGhlIGZvY3VzIHN5bWJvbHMgYWdhaW46IGBrY292X3JlbW90ZV9zb2Z0aXJxX3N0YXJ0YCwgYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RvcGAsIGBrY292X3JlbW90ZV9hcmVhX2dldGAsIGBrY292X3JlbW90ZV9hcmVhX3B1dGAsIGBrY292X3JlbW90ZV9zdGFydGAsIGBrY292X3JlbW90ZV9zdG9wYC5cblxuQW5kIGJhY2sgdG8gYGtjb3ZfcmVtb3RlX3N0YXJ0YCBhbmQgYGtjb3ZfcmVtb3RlX3N0b3BgLiBUaGV5IGFyZSBjYWxsZWQgdmVyeSBmcmVxdWVudGx5IGlmIHJlbW90ZSBjb3ZlcmFnZSBpcyBlbmFibGVkLiBTbywgaXMgaXQgYSBob3QgcGF0aD8gWWVzLCBpdCBpcyBmb3IgcmVtb3RlIGNvdmVyYWdlLiBBbmQgdGhpcyBpcyAqZXhhY3RseSogdGhlIGZlYXR1cmUgd2Ugd2FudCB0byB0ZXN0LiBTbywgSSB3aWxsIGluY2x1ZGUgdGhlbS5cblxuU28sIGluIHN1bW1hcnksIEknbSBmb2N1c2luZyBvbiB0aG9zZSByZW1vdGUgS0NPViBmdW5jdGlvbnMuIFRoZSBjb25maWdzIGFyZSBgS0NPVmAgYW5kIGBQUkVFTVBUX1JUYC4gTm93IEkgbmVlZCB0byBjaGVjayB0byBiZSBzdXJlIGBQUkVFTVBUX1JUYCBkb2Vzbid0IGhhdmUgYW55IGRlcGVuZGVuY2llcyBhbmQgaXMganVzdCBhIGJvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTQ0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6MzIuNzQzMDc3OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyOTAyOTM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJFRU1QVF9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD05MD1lbmRjaG9pY2VcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6OTI6Y29uZmlnIFBSRUVNUFRfUlRcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkzLVxcdGJvb2wgXFxcIkZ1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVxcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTA4LVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTA5OmNvbmZpZyBQUkVFTVBUX1JUX05FRURTX0JIX0xPQ0tcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cXHRib29sIFxcXCJFbmZvcmNlIHNvZnRpcnEgc3luY2hyb25pc2F0aW9uIG9uIFBSRUVNUFRfUlRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ2OjM1LjM3MjExNjM4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5OTM1ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFByZWVtcHRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVlbXB0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL0tjb25maWcucHJlZW1wdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5Mi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwcmVlbXB0aW9uLXJlbGF0ZWQgc2V0dGluZ3MgdGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMgYXJlIGxpa2VseSBsYWlkIG91dCDigJMgdGhlIGBjb25maWcgUFJFRU1QVGAsIGBjb25maWcgUFJFRU1QVF9SVGAgYW5kIHJlbGF0ZWQgb3B0aW9ucy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIHRyYWRlLW9mZnM6IHRoZSBpbXBhY3Qgb24gcmVhbC10aW1lIHBlcmZvcm1hbmNlLCBzY2hlZHVsaW5nIGxhdGVuY3ksIGFuZCBvdmVyYWxsIGtlcm5lbCBjb21wbGV4aXR5LiBJJ20gaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0IG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG51YW5jZXMgaW4gaG93IHByZWVtcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCB0aGF0IGxldmVsLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NjozOS40MjIwNTg3MTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9OT19QUkVFTVBUXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbiAgODI6XFx0XFx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHNjaGVkdWxlciBkcml2ZW4gcHJlZW1wdGlvbiBtb2RlbCB0aGF0XFxuICA4NTpcXHRcXHQgIGlzIGZ1bmRhbWVudGFsbHkgc2ltaWxhciB0byBmdWxsIHByZWVtcHRpb24sIGJ1dCBpcyBsZXNzXFxuICA4NjpcXHRcXHQgIGVhZ2VyIHRvIHByZWVtcHQgU0NIRURfTk9STUFMIHRhc2tzIGluIGFuIGF0dGVtcHQgdG9cXG4gIDg3OlxcdFxcdCAgcmVkdWNlIGxvY2sgaG9sZGVyIHByZWVtcHRpb24gYW5kIHJlY292ZXIgc29tZSBvZiB0aGUgcGVyZm9ybWFuY2VcXG4gIDg4OlxcdFxcdCAgZ2FpbnMgc2VlbiBmcm9tIHVzaW5nIFZvbHVudGFyeSBwcmVlbXB0aW9uLlxcbiAgODk6XFx0XFxuICA5MDpcXHRlbmRjaG9pY2VcXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIFBSRUVNUFRfUlRcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkZ1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVxcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gRVhQRVJUIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1VQUE9SVFNfUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbiAgOTU6XFx0XFx0c2VsZWN0IFBSRUVNUFRJT05cXG4gIDk2OlxcdFxcdGhlbHBcXG4gIDk3OlxcdFxcdCAgVGhpcyBvcHRpb24gdHVybnMgdGhlIGtlcm5lbCBpbnRvIGEgcmVhbC10aW1lIGtlcm5lbCBieSByZXBsYWNpbmdcXG4gIDk4OlxcdFxcdCAgdmFyaW91cyBsb2NraW5nIHByaW1pdGl2ZXMgKHNwaW5sb2Nrcywgcndsb2NrcywgZXRjLikgd2l0aFxcbiAgOTk6XFx0XFx0ICBwcmVlbXB0aWJsZSBwcmlvcml0eS1pbmhlcml0YW5jZSBhd2FyZSB2YXJpYW50cywgZW5mb3JjaW5nXFxuIDEwMDpcXHRcXHQgIGludGVycnVwdCB0aHJlYWRpbmcgYW5kIGludHJvZHVjaW5nIG1lY2hhbmlzbXMgdG8gYnJlYWsgdXAgbG9uZ1xcbiAxMDE6XFx0XFx0ICBub24tcHJlZW1wdGlibGUgc2VjdGlvbnMuIFRoaXMgbWFrZXMgdGhlIGtlcm5lbCwgZXhjZXB0IGZvciB2ZXJ5XFxuIDEwMjpcXHRcXHQgIGxvdyBsZXZlbCBhbmQgY3JpdGljYWwgY29kZSBwYXRocyAoZW50cnkgY29kZSwgc2NoZWR1bGVyLCBsb3dcXG4gMTAzOlxcdFxcdCAgbGV2ZWwgaW50ZXJydXB0IGhhbmRsaW5nKSBmdWxseSBwcmVlbXB0aWJsZSBhbmQgYnJpbmdzIG1vc3RcXG4gMTA0OlxcdFxcdCAgZXhlY3V0aW9uIGNvbnRleHRzIHVuZGVyIHNjaGVkdWxlciBjb250cm9sLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIHN5c3RlbXMgd2hpY2hcXG4gMTA3OlxcdFxcdCAgcmVxdWlyZSByZWFsLXRpbWUgZ3VhcmFudGVlcy5cXG4gMTA4OlxcdFxcbiAxMDk6XFx0Y29uZmlnIFBSRUVNUFRfUlRfTkVFRFNfQkhfTE9DS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0NjozOS40MjIyMzg0ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MzExMDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gUmVhbC1UaW1lIFByZWVtcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdG8gY29uZmlndXJlIGBQUkVFTVBUX1JUYC4gSXQgc2VlbXMgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSBuZWVkIGBFWFBFUlRgLCBgQVJDSF9TVVBQT1JUU19SVGAsIGFuZCAqbm90KiBgQ09NUElMRV9URVNUYC4gVGhpcyBtZWFucywgdG8gZ2V0IGBQUkVFTVBUX1JUYCBydW5uaW5nLCBJIHNob3VsZCBlbmFibGUgYm90aCBgUFJFRU1QVF9SVGAgYW5kIGBFWFBFUlRgLiBcblxuTm93LCBhIHF1aWNrIHJlbWluZGVyOiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYEVYUEVSVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgaW4gbW9zdCBvZiB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zIEkgd29yayB3aXRoLiBUaGF0J3MgdXN1YWxseSBub3QgYW4gaXNzdWUuXG5cbkJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gYEFSQ0hfU1VQUE9SVFNfUlRgIGlzIGNvcnJlY3RseSBzZXQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB3aGV0aGVyIHRoYXQgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ2OjQzLjY3NTM1MzgyMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3OTUyNjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9TVVBQT1JUU19SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTE0OTM9Y29uZmlnIEFSQ0hfTk9fUFJFRU1QVFxcbi0tXFxuYXJjaC9LY29uZmlnLTE0OTUtXFxuYXJjaC9LY29uZmlnOjE0OTY6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUlRcXG5hcmNoL0tjb25maWctMTQ5Ny1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjQ2OjQ2LjI1NDg4ODMyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTk4ODEzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBRdWVyeSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHg4NiBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6ICpEb2VzIHg4NiBoYXZlIHRoZSBgQVJDSF9TVVBQT1JUU19SVGAgZmxhZyBlbmFibGVkPyogVGhhdCdzIHRoZSBjcml0aWNhbCBmaXJzdCBjaGVjay4gSXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBsb3QgYWJvdXQgdGhlIGFyY2hpdGVjdHVyYWwgY2FwYWJpbGl0aWVzIGFuZCB3aGljaCByZWFsLXRpbWUgZmVhdHVyZXMgbWlnaHQgYmUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBwb3RlbnRpYWxseSBzdXBwb3J0ZWQsIGF0IHRoaXMgc3RhZ2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24uIFdpdGhvdXQgYEFSQ0hfU1VQUE9SVFNfUlRgLCBJIGxpa2VseSB3b24ndCBldmVuICpjb25zaWRlciogbWFueSBvZiB0aGUgcmVhbC10aW1lIG9wdGlvbnMgZG93biB0aGUgbGluZS4gSXQncyBhIGZ1bmRhbWVudGFsIGdhdGluZyBmYWN0b3IsIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc3BlY2lmaWMgeDg2IHNldHVwIGlzIGNvbmZpZ3VyZWQgaW4gcmVsYXRpb24gdG8gcmVhbC10aW1lIHdvcmtsb2Fkcy4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYgZXZlbiAqcGVybWl0cyogbWUgdG8gcHJvY2VlZCBkb3duIHRoYXQgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0Njo0OS42MTQ3NzU2NjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDczMzQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTMyLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR19USElOXFxuYXJjaC94ODYvS2NvbmZpZzoxMzM6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcXG5hcmNoL3g4Ni9LY29uZmlnLTEzNC1cXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTo0Njo0OS43NTU1MjExOTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU4MzMzMjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgdGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbGl0eSB0aWVkIHRvIGBQUkVFTVBUX1JUYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggS0NPViwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBjb3ZlcmFnZSBjb2xsZWN0aW9uIGluIHNvZnQgaW50ZXJydXB0IGNvbnRleHRzIGFuZCBwb3RlbnRpYWwgc29mdGlycSBwcmVlbXB0aW9uLlxuXG5GaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgUFJFRU1QVF9SVGAgaXMgaW5kZWVkIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIGluY2x1ZGVkLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBpbmNsdWRlcyBhIG1vZGlmaWNhdGlvbiB0byBgbGliL0tjb25maWcuZGVidWdgLCBidXQgaXQncyBqdXN0IGEgcmFuZ2UgdXBkYXRlIGFuZCBoZWxwIHRleHQgY2hhbmdlIHJlbGF0ZWQgdG8gYEtDT1ZfSVJRX0FSRUFfU0laRWAsIG5vdCB0aGUgYWRkaXRpb24gb2YgYSBuZXcgY29uZmlnLlxuXG5TaW5jZSB0aGUgZm9jdXMgaXMgbm93IG9uIHRoZSBwcmVlbXB0aW9uIGFzcGVjdCB1bmRlciBgUFJFRU1QVF9SVGAgYW5kIHJlbW90ZSBLQ09WLCBhbmQgZ2l2ZW4gdGhhdCBgS0NPVmAgaXMgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLCBJJ2xsIGp1c3QgbmVlZCB0byBlbmFibGUgYFBSRUVNUFRfUlRgIHRvIGZvY3VzIG9uIHRoZSBuZXcgcHJlZW1wdGlvbiBmdW5jdGlvbmFsaXR5LiBJJ20gbm90aW5nIGBLQ09WYCB0byBkb2N1bWVudCBpdCBhcyB0aGUgcHJlcmVxdWlzaXRlIGZvciB0aGlzIHdvcmsuXG5cbkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB0aGUga2V5IHN5bWJvbHMsIGFuZCB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZDogYGtjb3ZfcmVtb3RlX3NvZnRpcnFfc3RhcnRgLCBga2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wYCwgYGtjb3ZfcmVtb3RlX2FyZWFfZ2V0YCwgYGtjb3ZfcmVtb3RlX2FyZWFfcHV0YCwgYGtjb3ZfcmVtb3RlX3N0YXJ0YCwgYW5kIGBrY292X3JlbW90ZV9zdG9wYCBhcmUgcXVpdGUgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gVGhlc2UgYXJlIGFsbCBnb29kIGNhbmRpZGF0ZXMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCdzIHRvdWNoaW5nIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGNvdmVyYWdlIGlzIGNvbGxlY3RlZCBpbiBzb2Z0aXJxIGNvbnRleHRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBLQ09WIGlvY3RscyBhbmQgcmVtb3RlIGNvdmVyYWdlIHRyaWdnZXJzIGxpa2UgVVNCIGFuZCB2aG9zdC4gVGhlIHByZWVtcHRpb24gYXNwZWN0IGFkZHMgYSBuZXcgbGF5ZXIgb2YgY29tcGxleGl0eS5cblxuSGVyZSdzIG15IHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlXG4qICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIEtDT1YgY292ZXJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20sIHNwZWNpZmljYWxseSBob3cgcmVtb3RlIGNvdmVyYWdlIGlzIGNvbGxlY3RlZCBpbiBzb2Z0aXJxIGNvbnRleHRzIGFuZCBob3cgaXQgaGFuZGxlcyBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIGlzIHBvc3NpYmxlIHVuZGVyIFBSRUVNUFRfUlQpLiBUaGlzIGlzIGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBLQ09WIGlvY3RscyBhbmQgcmVtb3RlIGNvdmVyYWdlIHRyaWdnZXJzIChsaWtlIFVTQiBvciB2aG9zdCkuXG4qICAgKipGb2N1c1N5bWJvbHMqKjpcbiAgICAqICAga2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydFxuICAgICogICBrY292X3JlbW90ZV9zb2Z0aXJxX3N0b3BcbiAgICAqICAga2Nvdl9yZW1vdGVfYXJlYV9nZXRcbiAgICAqICAga2Nvdl9yZW1vdGVfYXJlYV9wdXRcbiAgICAqICAga2Nvdl9yZW1vdGVfc3RhcnRcbiAgICAqICAga2Nvdl9yZW1vdGVfc3RvcFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOlxuICAgICogICBQUkVFTVBUX1JUXG4qTm93IHRvIGNhbGwgc2V0LXJlc3VsdHMqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc2MCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6NDY6NTkuMzM4ODU2NDA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMDIzMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wXCIsXG4gICAgXCJrY292X3JlbW90ZV9hcmVhX2dldFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfYXJlYV9wdXRcIixcbiAgICBcImtjb3ZfcmVtb3RlX3N0YXJ0XCIsXG4gICAgXCJrY292X3JlbW90ZV9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUkVFTVBUX1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdGFydFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfc29mdGlycV9zdG9wXCIsXG4gICAgXCJrY292X3JlbW90ZV9hcmVhX2dldFwiLFxuICAgIFwia2Nvdl9yZW1vdGVfYXJlYV9wdXRcIixcbiAgICBcImtjb3ZfcmVtb3RlX3N0YXJ0XCIsXG4gICAgXCJrY292X3JlbW90ZV9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgS0NPViBjb3ZlcmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyByZW1vdGUgY292ZXJhZ2UgaXMgY29sbGVjdGVkIGluIHNvZnRpcnEgY29udGV4dHMgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBzb2Z0aXJxIHByZWVtcHRpb24gKHdoaWNoIG9jY3VycyB1bmRlciBQUkVFTVBUX1JUKS4gVGhpcyBpcyBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdmlhIEtDT1YgaW9jdGxzIGFuZCByZW1vdGUgY292ZXJhZ2UgdHJpZ2dlcnMgKGxpa2UgVVNCIG9yIHZob3N0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow99c7r[1] Phase: Succeeded StartedAt: 2026-07-20 15:47:10 +0000 UTC FinishedAt: 2026-07-20 15:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 15:47:10 +0000 UTC FinishedAt: 2026-07-20 15:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2] Phase: Succeeded StartedAt: 2026-07-20 15:47:10 +0000 UTC FinishedAt: 2026-07-20 19:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 15:47:10 +0000 UTC FinishedAt: 2026-07-20 19:53:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 15:47:10 +0000 UTC FinishedAt: 2026-07-20 15:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 15:47:10 +0000 UTC FinishedAt: 2026-07-20 15:47:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow99c7r/series-workflow99c7r-convert-artifact-1362962635/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 15:47:20 +0000 UTC FinishedAt: 2026-07-20 16:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 15:47:20 +0000 UTC FinishedAt: 2026-07-20 16:11:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f7f79306-e254-4f32-9a8b-cebb36e9e3a0,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-workflow99c7r/series-workflow99c7r-convert-artifact-1362962635/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": "e69c200f-e6f0-4999-99fa-b632d72d6d29", "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-workflow99c7r/series-workflow99c7r-build-action-838901705/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 15:47:20 +0000 UTC FinishedAt: 2026-07-20 16:11:24 +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:*f7f79306-e254-4f32-9a8b-cebb36e9e3a0,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-workflow99c7r/series-workflow99c7r-convert-artifact-1362962635/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": "e69c200f-e6f0-4999-99fa-b632d72d6d29", "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-workflow99c7r/series-workflow99c7r-build-action-838901705/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 16:11:35 +0000 UTC FinishedAt: 2026-07-20 16:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 16:11:35 +0000 UTC FinishedAt: 2026-07-20 16:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 16:11:35 +0000 UTC FinishedAt: 2026-07-20 16:11:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 16:11:35 +0000 UTC FinishedAt: 2026-07-20 16:11:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow99c7r/series-workflow99c7r-convert-artifact-3969198882/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 16:11:47 +0000 UTC FinishedAt: 2026-07-20 16:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 16:11:47 +0000 UTC FinishedAt: 2026-07-20 16:14:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e69c200f-e6f0-4999-99fa-b632d72d6d29,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-workflow99c7r/series-workflow99c7r-build-action-838901705/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-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 16:14:15 +0000 UTC FinishedAt: 2026-07-20 16:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 16:14:15 +0000 UTC FinishedAt: 2026-07-20 16:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 16:14:15 +0000 UTC FinishedAt: 2026-07-20 16:48:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 16:14:15 +0000 UTC FinishedAt: 2026-07-20 16:48:56 +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:*f7f79306-e254-4f32-9a8b-cebb36e9e3a0,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-workflow99c7r/series-workflow99c7r-convert-artifact-3969198882/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": "93fa931d-4a7b-45a8-8ec3-8a43de254c74", "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-workflow99c7r/series-workflow99c7r-build-action-2054056822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 16:14:15 +0000 UTC FinishedAt: 2026-07-20 16:48:46 +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:*f7f79306-e254-4f32-9a8b-cebb36e9e3a0,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-workflow99c7r/series-workflow99c7r-convert-artifact-3969198882/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": "93fa931d-4a7b-45a8-8ec3-8a43de254c74", "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-workflow99c7r/series-workflow99c7r-build-action-2054056822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 16:48:56 +0000 UTC FinishedAt: 2026-07-20 16:48:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 16:48:56 +0000 UTC FinishedAt: 2026-07-20 16:48:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 16:48:56 +0000 UTC FinishedAt: 2026-07-20 16:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 16:48:56 +0000 UTC FinishedAt: 2026-07-20 16:50:52 +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:*93fa931d-4a7b-45a8-8ec3-8a43de254c74,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-workflow99c7r/series-workflow99c7r-build-action-2054056822/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-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 16:51:02 +0000 UTC FinishedAt: 2026-07-20 19:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 16:51:02 +0000 UTC FinishedAt: 2026-07-20 19:53:58 +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":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"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:*e69c200f-e6f0-4999-99fa-b632d72d6d29,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*93fa931d-4a7b-45a8-8ec3-8a43de254c74,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-workflow99c7r/series-workflow99c7r-build-action-838901705/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-workflow99c7r/series-workflow99c7r-build-action-2054056822/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 16:51:02 +0000 UTC FinishedAt: 2026-07-20 16:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 16:51:02 +0000 UTC FinishedAt: 2026-07-20 16:51:08 +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":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"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-workflow99c7r/series-workflow99c7r-convert-artifact-4253539671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 16:51:02 +0000 UTC FinishedAt: 2026-07-20 16:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 16:51:02 +0000 UTC FinishedAt: 2026-07-20 16:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 16:51:02 +0000 UTC FinishedAt: 2026-07-20 16:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 16:51:12 +0000 UTC FinishedAt: 2026-07-20 19:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99c7r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kcov_remote_softirq_start","kcov_remote_softirq_stop","kcov_remote_area_get","kcov_remote_area_put","kcov_remote_start","kcov_remote_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPT_RT"],"series_id":"33930a89-bb2a-4c5a-b6c5-d45829d5c94c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 16:51:12 +0000 UTC FinishedAt: 2026-07-20 19:53:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e69c200f-e6f0-4999-99fa-b632d72d6d29,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*93fa931d-4a7b-45a8-8ec3-8a43de254c74,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-workflow99c7r/series-workflow99c7r-build-action-838901705/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-workflow99c7r/series-workflow99c7r-build-action-2054056822/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-workflow99c7r/series-workflow99c7r-convert-artifact-4253539671/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,}