Name: series-workflowmmffg Phase: Succeeded StartedAt: 2026-07-27 07:01:47 +0000 UTC FinishedAt: 2026-07-27 11:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[0] Phase: Succeeded StartedAt: 2026-07-27 07:01:47 +0000 UTC FinishedAt: 2026-07-27 07:32:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 07:01:47 +0000 UTC FinishedAt: 2026-07-27 07:32:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_FQ", "NET_PKTGEN", "ETHTOOL_NETLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_FQ", "NET_PKTGEN", "ETHTOOL_NETLINK" ], "series_id": "a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fq_change", "fq_dequeue", "fq_classify", "ethnl_set_rings", "pktgen_if_write", "pktgen_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7LAogICAgJiMzNDtFVEhUT09MX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmcV9jbGFzc2lmeSYjMzQ7LAogICAgJiMzNDtldGhubF9zZXRfcmluZ3MmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDssCiAgICAmIzM0O3BrdGdlbl94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbi4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgRmFpciBRdWV1ZSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfZnEuYyksIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIChwa3RnZW4uYyksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSAocmluZ3MuYykgdG8gc3VwcG9ydCBjb25maWd1cmluZyBhbmQgdXNpbmcgdGhpcyBob3Jpem9uLiBUaGVzZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIHRvIHRoZSBpZHBmIGRyaXZlciBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCBlbXVsYXRlZCwgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIHN1ZmZpY2llbnQgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTZkMzJiNzM5NTg0NTU5NTU4ZTk2NGEyZDcwM2I3OWYyMjQ4YjRiYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDA3OjI5OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uYzc4MDY4NGNhMWJjMGMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5AQCAtNDQ4LDYgJiM0Mzs0NDgsMTIgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogaGRzLXRocmVzaC1tYXhcbiAgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiBcbiAgIC1cbiAgICAgbmFtZTogbW0tc3RhdFxuQEAgLTIxNjgsNiAmIzQzOzIxNzQsOCBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gdHgtcHVzaC1idWYtbGVuLW1heFxuICAgICAgICAgICAgIC0gaGRzLXRocmVzaFxuICAgICAgICAgICAgIC0gaGRzLXRocmVzaC1tYXhcbiYjNDM7ICAgICAgICAgICAgLSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uXG4mIzQzOyAgICAgICAgICAgIC0gcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcbiAgICAgICBkdW1wOiAqcmluZy1nZXQtb3BcbiAgICAgLVxuICAgICAgIG5hbWU6IHJpbmdzLXNldFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdFxuaW5kZXggNTEyZjZkNmZhM2Q4ZjguLjNiOWNlMWM2ZTEwNTc4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcbkBAIC0xODMsNyAmIzQzOzE4Myw4IEBAIHN0cnVjdCBkZXZsaW5rX3BvcnQqICAgICAgICAgICAgICAgIGRldmxpbmtfcG9ydFxuIHN0cnVjdCBkcGxsX3BpbiogICAgICAgICAgICAgICAgICAgIGRwbGxfcGluXG4gc3RydWN0IGhsaXN0X2hlYWQgICAgICAgICAgICAgICAgICAgcGFnZV9wb29sc1xuIHN0cnVjdCBkaW1faXJxX21vZGVyKiAgICAgICAgICAgICAgIGlycV9tb2RlclxuLXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uXG4mIzQzO3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2luZ19vZmZsb2FkX2hvcml6b25cbiYjNDM7dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b25cbiBzdHJ1Y3RfbmFwaV9jb25maWcqICAgICAgICAgICAgICAgICBuYXBpX2NvbmZpZ1xuIHVuc2lnbmVkX2xvbmcgICAgICAgICAgICAgICAgICAgICAgIGdyb19mbHVzaF90aW1lb3V0XG4gdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFwaV9kZWZlcl9oYXJkX2lycXNcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xuaW5kZXggYmI5OWQ5ZTdjNjVkNTEuLjVkZGYzNDc5MjdkYzNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xuQEAgLTE4MDEsNyAmIzQzOzE4MDEsOCBAQCBzdGF0aWMgdm9pZCBpZHBmX2dldF90c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWRwZl9ldGh0b29sX29wcyA9IHtcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLFxuLVx0LnN1cHBvcnRlZF9yaW5nX3BhcmFtc1x0PSBFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElULFxuJiM0MztcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCB8XG4mIzQzO1x0XHRcdFx0ICBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sXG4gXHQuZ2V0X21zZ2xldmVsXHRcdD0gaWRwZl9nZXRfbXNnbGV2ZWwsXG4gXHQuc2V0X21zZ2xldmVsXHRcdD0gaWRwZl9zZXRfbXNnbGV2ZWwsXG4gXHQuZ2V0X2xpbmtcdFx0PSBldGh0b29sX29wX2dldF9saW5rLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuaW5kZXggY2Y5NjZmZTZjNzU5Y2UuLmRlNDE3MGMyYWEzYmEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbkBAIC04ODgsNiAmIzQzOzg4OCwxMSBAQCBzdGF0aWMgaW50IGlkcGZfY2ZnX25ldGRldihzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRuZXRkZXYtXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xuIFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSB2cG9ydC1cdTAwM2VtYXhfbXR1O1xuIFxuJiM0MztcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVx1MDAzZWRmbHRfcXZfcnNyYy50eHFfbW9kZWwpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaWRwZl9pc19jYXBfZW5hKGFkYXB0ZXIsIElEUEZfT1RIRVJfQ0FQUyxcbiYjNDM7XHRcdFx0ICAgIFZJUlRDSE5MMl9DQVBfU1BMSVRRX1FTQ0hFRCkpXG4mIzQzO1x0XHRuZXRkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSAxMjgwMDA7XG4mIzQzO1xuIFx0ZGZsdF9mZWF0dXJlcyA9IE5FVElGX0ZfU0dcdHxcbiBcdFx0XHRORVRJRl9GX0hJR0hETUE7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbmluZGV4IDU2NmIwOGNhM2E2Y2IxLi44ZjExZGU1N2M4YmM3NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbkBAIC0xLDYgJiM0MzsxLDggQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gLyogQ29weXJpZ2h0IChDKSAyMDIzIEludGVsIENvcnBvcmF0aW9uICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldHBvbGwuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtpZHBmLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpZHBmX3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWRwZl92aXJ0Y2hubC5oXCYjMzQ7XG5AQCAtMjQwOCw5ICYjNDM7MjQxMCwxMyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICpwYXJhbXMsXG4gXHRcdFx0XHQgICAgdTE2IHRkX2NtZCwgdTE2IHNpemUpXG4ge1xuLVx0Kih1MzIgKilcdTAwMjZkZXNjLVx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLVx1MDAzZWR0eXBlIHwgdGRfY21kKTtcbiYjNDM7XHQqKF9fbGUzMiAqKVx1MDAyNmRlc2MtXHUwMDNlZmxvdy5xdzEuY21kX2R0eXBlID0gY3B1X3RvX2xlMzIoKHU4KShwYXJhbXMtXHUwMDNlZHR5cGUgfCB0ZF9jbWQpKTtcbiBcdGRlc2MtXHUwMDNlZmxvdy5xdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNigodTE2KXNpemUpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtXHUwMDNlY29tcGxfdGFnKTtcbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1swXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF07XG4mIzQzO1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1sxXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XG4mIzQzO1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1syXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl07XG4gfVxuIFxuIC8qKlxuQEAgLTMwMTEsNiAmIzQzOzMwMTcsNjMgQEAgc3RhdGljIGJvb2wgaWRwZl90eF9zcGxpdHFfbmVlZF9yZShzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSlcbiBcdHJldHVybiBnYXAgXHUwMDNlPSBJRFBGX1RYX1NQTElUUV9SRV9NSU5fR0FQO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZShjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnR4X3BhcmFtcylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGludCB0c19ncmFuX3BvdzIgPSA5O1xuJiM0MztcdHU2NCB0cywgbm93LCBob3Jpem9uO1xuJiM0MztcbiYjNDM7XHRob3Jpem9uID0gUkVBRF9PTkNFKHNrYi1cdTAwM2VkZXYtXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4mIzQzO1x0aWYgKCFob3Jpem9uKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBTa2lwIGlmIG5ldHBvbGw6IG5vdCBuZWVkZWQgYW5kIG5vdCBzYWZlIHRvIGNhbGwga3RpbWUgaGVscGVycyAqL1xuJiM0MztcdGlmIChuZXRwb2xsX3R4X3J1bm5pbmcoc2tiLVx1MDAzZWRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2tiLVx1MDAzZXRzdGFtcF90eXBlKSB7XG4mIzQzO1x0Y2FzZSBTS0JfQ0xPQ0tfUkVBTFRJTUU6XG4mIzQzO1x0XHR0cyA9IGt0aW1lX3RvX25zKGt0aW1lX2FkZChza2ItXHUwMDNldHN0YW1wLFxuJiM0MztcdFx0XHRcdFx0ICAga3RpbWVfbW9ub190b19hbnkoMCwgVEtfT0ZGU19UQUkpIC1cbiYjNDM7XHRcdFx0XHRcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU0tCX0NMT0NLX01PTk9UT05JQzpcbiYjNDM7XHRcdHRzID0ga3RpbWVfdG9fbnMoa3RpbWVfbW9ub190b19hbnkoc2tiLVx1MDAzZXRzdGFtcCwgVEtfT0ZGU19UQUkpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU0tCX0NMT0NLX1RBSTpcbiYjNDM7XHRcdHRzID0ga3RpbWVfdG9fbnMoc2tiLVx1MDAzZXRzdGFtcCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bm93ID0ga3RpbWVfZ2V0X2Nsb2NrdGFpX25zKCk7XG4mIzQzO1x0aWYgKHRzIFx1MDAzYyBub3cpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIGJleW9uZCBvZmZsb2FkIGhvcml6b24/IHNldCBvdmVyZmxvdyBiaXQgb25seSAqL1xuJiM0MztcdGlmICh0cyBcdTAwM2Ugbm93ICYjNDM7IChob3Jpem9uICogTlNFQ19QRVJfVVNFQykpIHtcbiYjNDM7XHRcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAxIFx1MDAzY1x1MDAzYyA3O1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHMgXHUwMDNlXHUwMDNlPSB0c19ncmFuX3BvdzI7XG4mIzQzO1xuJiM0MztcdC8qIDAgaXMgdmFsaWQgMjRiIHRpbWVzdGFtcCwgYnV0IGFsc28gbWVhbnMgZmllbGQgdW5zZXQuXG4mIzQzO1x0ICogQWRkIDUxMiBucyAodHNfZ3Jhbl9wb3cyKSB0byBhdm9pZCB0aGlzIGNhc2VcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKHRzIFx1MDAyNiAweDdmZmZmZikgPT0gMCkge1xuJiM0MztcdFx0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1swXSA9IDE7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1sxXSA9ICh0cyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXSA9ICgodHMgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHg3Zik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWRwZl90eF9zcGxpdHFfZnJhbWUgLSBTZW5kcyBidWZmZXIgb24gVHggcmluZyB1c2luZyBmbGV4IGRlc2NyaXB0b3JzXG4gICogQHNrYjogc2VuZCBidWZmZXJcbkBAIC0zMDk3LDYgJiM0MzszMTYwLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpZHBmX3R4X3NwbGl0cV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0XHR0eF9wYXJhbXMuZHR5cGUgPSBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEU7XG4gXHRcdHR4X3BhcmFtcy5lb3BfY21kID0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9FT1A7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2V0c3RhbXApXG4mIzQzO1x0XHRcdGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUodHhfcSwgc2tiLCBcdTAwMjZ0eF9wYXJhbXMpO1xuJiM0MztcbiBcdFx0LyogU2V0IHRoZSBSRSBiaXQgdG8gcGVyaW9kaWNhbGx5IFwmIzM0O2NsZWFuXCYjMzQ7IHRoZSBkZXNjcmlwdG9yIHJpbmcuXG4gXHRcdCAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0XG4gXHRcdCAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuaW5kZXggNGJlNWIzYjZkM2VkMmIuLjg2NTQwOGI1N2IwZDU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuQEAgLTE2MSw2ICYjNDM7MTYxLDcgQEAgdW5pb24gaWRwZl90eF9mbGV4X2Rlc2Mge1xuICAqIEB0c29fc2VnczogTnVtYmVyIG9mIHNlZ21lbnRzIHRvIGJlIHNlbnRcbiAgKiBAdHNvX2hkcl9sZW46IExlbmd0aCBvZiBoZWFkZXJzIHRvIGJlIGR1cGxpY2F0ZWRcbiAgKiBAdGRfY21kOiBDb21tYW5kIGZpZWxkIHRvIGJlIGluc2VydGVkIGludG8gZGVzY3JpcHRvclxuJiM0MzsgKiBAZGVzY190czogRmxvdyBzY2hlZHVsaW5nIG9mZmxvYWQgdGltZXN0YW1wXG4gICovXG4gc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xuIFx0dTMyIHR4X2ZsYWdzO1xuQEAgLTE3NCw2ICYjNDM7MTc1LDcgQEAgc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xuIFx0dTE2IHRzb19oZHJfbGVuO1xuIFxuIFx0dTE2IHRkX2NtZDtcbiYjNDM7XHR1OCBkZXNjX3RzWzNdO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuaW5kZXggNWQ0OTFhOTgyNjVlZjkuLmFkZWViYmY1M2RhZGVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5AQCAtODUsNiAmIzQzOzg1LDggQEAgZW51bSB7XG4gICogQHR4X3B1c2hfYnVmX21heF9sZW46IE1heGltdW0gYWxsb3dlZCBzaXplIG9mIFRYIHB1c2ggYnVmZmVyXG4gICogQGhkc190aHJlc2g6IFBhY2tldCBzaXplIHRocmVzaG9sZCBmb3IgaGVhZGVyIGRhdGEgc3BsaXQgKEhEUylcbiAgKiBAaGRzX3RocmVzaF9tYXg6IE1heGltdW0gc3VwcG9ydGVkIHNldHRpbmcgZm9yIEBoZHNfdGhyZXNob2xkXG4mIzQzOyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcbiYjNDM7ICogQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjXG4gICpcbiAgKi9cbiBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbkBAIC05Nyw2ICYjNDM7OTksOCBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbiBcdHUzMlx0dHhfcHVzaF9idWZfbWF4X2xlbjtcbiBcdHUzMlx0aGRzX3RocmVzaDtcbiBcdHUzMlx0aGRzX3RocmVzaF9tYXg7XG4mIzQzO1x0dTMyXHRwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuJiM0MztcdHUzMlx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gfTtcbiBcbiAvKipcbkBAIC0xMDgsNiAmIzQzOzExMiw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0ge1xuICAqIEBFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTjogY2FwdHVyZSBmb3Igc2V0dGluZyB0eF9wdXNoX2J1Zl9sZW5cbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVDogY2FwdHVyZSBmb3Igc2V0dGluZyB0Y3BfZGF0YV9zcGxpdFxuICAqIEBFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTOiBjYXB0dXJlIGZvciBzZXR0aW5nIGhlYWRlci1kYXRhLXNwbGl0LXRocmVzaFxuJiM0MzsgKiBARVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OOiBjYXB0dXJlIGZvciBzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b25cbiAgKi9cbiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xuIFx0RVRIVE9PTF9SSU5HX1VTRV9SWF9CVUZfTEVOXHRcdD0gQklUKDApLFxuQEAgLTExNyw2ICYjNDM7MTIyLDcgQEAgZW51bSBldGh0b29sX3N1cHBvcnRlZF9yaW5nX3BhcmFtIHtcbiBcdEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOXHQ9IEJJVCg0KSxcbiBcdEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVRcdFx0PSBCSVQoNSksXG4gXHRFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTXHRcdD0gQklUKDYpLFxuJiM0MztcdEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTlx0PSBCSVQoNyksXG4gfTtcbiBcbiAjZGVmaW5lIF9fRVRIX1JTU19IQVNIX0JJVChiaXQpXHQoKHUzMikxIFx1MDAzY1x1MDAzYyAoYml0KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOGRiMjViNzk1NzNlM2MuLjNjMmVkNDViNTVkY2FkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTIxMjksNyAmIzQzOzIxMjksOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRAZHBsbF9waW46IFBvaW50ZXIgdG8gdGhlIFN5bmNFIHNvdXJjZSBwaW4gb2YgYSBEUExMIHN1YnN5c3RlbSxcbiAgKlx0XHQgICB3aGVyZSB0aGUgY2xvY2sgaXMgcmVjb3ZlcmVkLlxuICAqXG4tICpcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IEVEVCBvZmZsb2FkIGhvcml6b24gaW4gbnNlYy5cbiYjNDM7ICpcdEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBhY3RpdmUgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxuJiM0MzsgKlx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxuICAqXHRAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSVxuICAqXHRcdCAgICAgIHNldHRpbmdzLlxuICAqXHRAbnVtX25hcGlfY29uZmlnczpcdG51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cyxcbkBAIC0yNTUyLDcgJiM0MzsyNTUzLDggQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xuIFx0LyoqIEBpcnFfbW9kZXI6IGRpbSBwYXJhbWV0ZXJzIHVzZWQgaWYgSVNfRU5BQkxFRChDT05GSUdfRElNTElCKS4gKi9cbiBcdHN0cnVjdCBkaW1faXJxX21vZGVyXHQqaXJxX21vZGVyO1xuIFxuLVx0dTY0XHRcdFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4mIzQzO1x0dTMyXHRcdFx0cGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiYjNDM7XHR1MzJcdFx0XHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiBcdHN0cnVjdCBuYXBpX2NvbmZpZ1x0Km5hcGlfY29uZmlnO1xuIFx0dTMyXHRcdFx0bnVtX25hcGlfY29uZmlncztcbiBcdHUzMlx0XHRcdG5hcGlfZGVmZXJfaGFyZF9pcnFzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5pbmRleCA4MTM0YmFmNzg2MGYzYy4uNmYxYTJmYTM2MTU3ZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5AQCAtMTkzLDYgJiM0MzsxOTMsOCBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYLFxuIFx0RVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsXG4gXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXG4mIzQzO1x0RVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sXG4mIzQzO1x0RVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxuIFxuIFx0X19FVEhUT09MX0FfUklOR1NfQ05ULFxuIFx0RVRIVE9PTF9BX1JJTkdTX01BWCA9IChfX0VUSFRPT0xfQV9SSU5HU19DTlQgLSAxKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3BrdGdlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9wa3RnZW4uY1xuQEAgLTIwMSw2ICYjNDM7MjAxLDcgQEBcbiBcdHBmKFNWSURfUk5EKVx0XHQvKiBSYW5kb20gU1ZMQU4gSUQgKi9cdFx0XHRcXFxuIFx0cGYoTk9ERSlcdFx0LyogTm9kZSBtZW1vcnkgYWxsb2MqL1x0XHRcdFxcXG4gXHRwZihTSEFSRUQpXHRcdC8qIFNoYXJlZCBTS0IgKi9cdFx0XHRcXFxuJiM0MztcdHBmKFRYVElNRSlcdFx0LyogU09fVFhUSU1FIHN1cHBvcnQgKi9cdFx0XHRcXFxuIFxuICNkZWZpbmUgcGYoZmxhZylcdFx0ZmxhZyMjX1NISUZULFxuIGVudW0gcGt0X2ZsYWdzIHtcbkBAIC0yOTEsNiAmIzQzOzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHU2NCBkZWxheTtcdFx0LyogbmFuby1zZWNvbmRzICovXG4gXG4mIzQzO1x0LyogVFhUSU1FIHN1cHBvcnQgKi9cbiYjNDM7XHR1NjQgdHh0aW1lX2RlbGF5O1x0LyogdHJhbnNtaXQgdGltZSBkZWxheSBpbiBucyAqL1xuJiM0MztcdGNsb2NraWRfdCB0eHRpbWVfY2xvY2tpZDsgLyogY2xvY2tpZCBmb3IgU09fVFhUSU1FICovXG4mIzQzO1xuIFx0X191NjQgY291bnQ7XHRcdC8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovXG4gXHRfX3U2NCBzb2ZhcjtcdFx0LyogSG93IG1hbnkgcGt0cyB3ZSYjMzk7dmUgc2VudCBzbyBmYXIgKi9cbiBcdF9fdTY0IHR4X2J5dGVzO1x0XHQvKiBIb3cgbWFueSBieXRlcyB3ZSYjMzk7dmUgdHJhbnNtaXR0ZWQgKi9cbkBAIC02NjYsNiAmIzQzOzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFx0aWYgKHBrdF9kZXYtXHUwMDNlbm9kZSBcdTAwM2U9IDApXG4gXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDsgICAgIG5vZGU6ICVkXFxuXCYjMzQ7LCBwa3RfZGV2LVx1MDAzZW5vZGUpO1xuIFxuJiM0MztcdGlmIChwa3RfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBGX1RYVElNRSkge1xuJiM0MztcdFx0Y2xvY2tpZF90IGNsb2NraWQgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCk7XG4mIzQzO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyAgICAgdHh0aW1lX2RlbGF5OiAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KTtcbiYjNDM7XHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDsgICAgIHR4dGltZV9jbG9ja2lkOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19NT05PVE9OSUMgPyBcJiMzNDttb25vdG9uaWNcJiMzNDsgOlxuJiM0MztcdFx0XHQgICBjbG9ja2lkID09IENMT0NLX1JFQUxUSU1FID8gXCYjMzQ7cmVhbHRpbWVcJiMzNDsgOlxuJiM0MztcdFx0XHQgICBjbG9ja2lkID09IENMT0NLX1RBSSA/IFwmIzM0O3RhaVwmIzM0OyA6IFwmIzM0O3Vua25vd25cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocGt0X2Rldi1cdTAwM2V4bWl0X21vZGUgPT0gTV9ORVRJRl9SRUNFSVZFKVxuIFx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0OyAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXFxuXCYjMzQ7KTtcbiBcdGVsc2UgaWYgKHBrdF9kZXYtXHUwMDNleG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVClcbkBAIC0xMTQxLDYgJiM0MzsxMTU3LDUwIEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LVx1MDAzZWRlbGF5KTtcbiBcdFx0cmV0dXJuIGNvdW50O1xuIFx0fVxuJiM0MztcdGlmICghc3RyY21wKG5hbWUsIFwmIzM0O3R4dGltZV9kZWxheVwmIzM0OykpIHtcbiYjNDM7XHRcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcbiYjNDM7XHRcdGxlbiA9IG51bV9hcmcoXHUwMDI2dXNlcl9idWZmZXJbaV0sIG1heCwgXHUwMDI2dmFsdWUpO1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIGxlbjtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpbiBxdWV1ZV94bWl0IG1vZGUgZnEgbWF5IGNsZWFyIHRzdGFtcCwgZG8gbm90IHJldXNlIHNrYiAqL1xuJiM0MztcdFx0aWYgKHZhbHVlIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSwgKHU2NCl2YWx1ZSk7XG4mIzQzO1x0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCYjMzQ7T0s6IHR4dGltZV9kZWxheT0lbGx1XCYjMzQ7LFxuJiM0MztcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlKTtcbiYjNDM7XHRcdHJldHVybiBjb3VudDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFzdHJjbXAobmFtZSwgXCYjMzQ7dHh0aW1lX2Nsb2NraWRcJiMzNDspKSB7XG4mIzQzO1x0XHRjaGFyIGNsb2Nrc3RyWzMyXTtcbiYjNDM7XHRcdGNsb2NraWRfdCBjbGs7XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KGNsb2Nrc3RyLCAwLCBzaXplb2YoY2xvY2tzdHIpKTtcbiYjNDM7XHRcdG1heCA9IG1pbihzaXplb2YoY2xvY2tzdHIpIC0gMSwgY291bnQgLSBpKTtcbiYjNDM7XHRcdGxlbiA9IHN0cm5fbGVuKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgpO1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIGxlbjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY29weV9mcm9tX3VzZXIoY2xvY2tzdHIsIFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBsZW4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCYjMzQ7bW9ub3RvbmljXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRjbGsgPSBDTE9DS19NT05PVE9OSUM7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjbXAoY2xvY2tzdHIsIFwmIzM0O3JlYWx0aW1lXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRjbGsgPSBDTE9DS19SRUFMVElNRTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCYjMzQ7dGFpXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRjbGsgPSBDTE9DS19UQUk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCYjMzQ7RVJST1I6IHVua25vd24gY2xvY2tpZCAmIzM5OyVzJiMzOTtcJiMzNDssXG4mIzQzO1x0XHRcdFx0Y2xvY2tzdHIpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCYjMzQ7T0s6IHR4dGltZV9jbG9ja2lkPSVzXCYjMzQ7LCBjbG9ja3N0cik7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQsIGNsayk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuIFx0aWYgKCFzdHJjbXAobmFtZSwgXCYjMzQ7cmF0ZVwmIzM0OykpIHtcbiBcdFx0bWF4ID0gbWluKDEwLCBjb3VudCAtIGkpO1xuIFx0XHRsZW4gPSBudW1fYXJnKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFx1MDAyNnZhbHVlKTtcbkBAIC0xMjM4LDYgJiM0MzsxMjk4LDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRpZiAodmFsdWUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IChwa3RfZGV2LVx1MDAzZW5faW1peF9lbnRyaWVzIFx1MDAzZSAwIHx8XG4gXHRcdFx0XHQgICEocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgRl9TSEFSRUQpKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGlmICh2YWx1ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdHBrdF9kZXYtXHUwMDNlY2xvbmVfc2tiID0gdmFsdWU7XG4gXG5AQCAtMjMyMSw2ICYjNDM7MjM4MywyMSBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fc2V0dXBfaW5qZWN0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIH1cbiBcbiBcbiYjNDM7c3RhdGljIGt0aW1lX3Qga3RpbWVfZ2V0X2Nsb2NrKGNsb2NraWRfdCBjbG9ja2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjbG9ja2lkKSB7XG4mIzQzO1x0Y2FzZSBDTE9DS19SRUFMVElNRTpcbiYjNDM7XHRcdHJldHVybiBrdGltZV9nZXRfcmVhbCgpO1xuJiM0MztcdGNhc2UgQ0xPQ0tfTU9OT1RPTklDOlxuJiM0MztcdFx0cmV0dXJuIGt0aW1lX2dldCgpO1xuJiM0MztcdGNhc2UgQ0xPQ0tfVEFJOlxuJiM0MztcdFx0cmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0XHRyZXR1cm4ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNwaW4oc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGt0aW1lX3Qgc3Bpbl91bnRpbClcbiB7XG4gXHRrdGltZV90IHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xuQEAgLTM1MTAsNyAmIzQzOzM1ODcsOCBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fd2FpdF9mb3Jfc2tiKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFxuIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIHtcbi1cdGJvb2wgc2tiX3NoYXJlZCA9ICEhKFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjYgRl9TSEFSRUQpO1xuJiM0MztcdHUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRib29sIHNrYl9zaGFyZWQgPSAhIShmbGFncyBcdTAwMjYgRl9TSEFSRUQpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBwa3RfZGV2LVx1MDAzZW9kZXY7XG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gXHR1bnNpZ25lZCBpbnQgYnVyc3QgPSAxO1xuQEAgLTM1NDUsNiAmIzQzOzM2MjMsOCBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiBcdC8qIElmIG5vIHNrYiBvciBjbG9uZSBjb3VudCBleGhhdXN0ZWQgdGhlbiBnZXQgbmV3IG9uZSAqL1xuIFx0aWYgKCFwa3RfZGV2LVx1MDAzZXNrYiB8fCAocGt0X2Rldi1cdTAwM2VsYXN0X29rIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICYjNDM7JiM0Mztwa3RfZGV2LVx1MDAzZWNsb25lX2NvdW50IFx1MDAzZT0gY2xvbmVfc2tiKSkge1xuJiM0MztcdFx0dTY0IHR4dGltZV9kZWxheTtcbiYjNDM7XG4gXHRcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xuIFx0XHRrZnJlZV9za2IocGt0X2Rldi1cdTAwM2Vza2IpO1xuIFxuQEAgLTM1NTcsNiAmIzQzOzM2MzcsMTYgQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdH1cbiBcdFx0cGt0X2Rldi1cdTAwM2VsYXN0X3BrdF9zaXplID0gcGt0X2Rldi1cdTAwM2Vza2ItXHUwMDNlbGVuO1xuIFx0XHRwa3RfZGV2LVx1MDAzZWNsb25lX2NvdW50ID0gMDtcdC8qIHJlc2V0IGNvdW50ZXIgKi9cbiYjNDM7XG4mIzQzO1x0XHR0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXkpO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBGX1RYVElNRSBcdTAwMjZcdTAwMjYgdHh0aW1lX2RlbGF5KSB7XG4mIzQzO1x0XHRcdGNsb2NraWRfdCBjbGsgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCk7XG4mIzQzO1x0XHRcdGt0aW1lX3QgdHh0aW1lID0ga3RpbWVfYWRkX25zKGt0aW1lX2dldF9jbG9jayhjbGspLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICB0eHRpbWVfZGVsYXkpO1xuJiM0MztcbiYjNDM7XHRcdFx0c2tiX3NldF9kZWxpdmVyeV90eXBlX2J5X2Nsb2NraWQocGt0X2Rldi1cdTAwM2Vza2IsIHR4dGltZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgY2xrKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdGlmIChwa3RfZGV2LVx1MDAzZWRlbGF5IFx1MDAyNlx1MDAyNiBwa3RfZGV2LVx1MDAzZWxhc3Rfb2spXG5AQCAtMzg2OSw2ICYjNDM7Mzk1OSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcbiBcdHBrdF9kZXYtXHUwMDNlYnVyc3QgPSAxO1xuIFx0cGt0X2Rldi1cdTAwM2Vub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0cGt0X2Rldi1cdTAwM2VmbGFncyA9IEZfU0hBUkVEO1x0LyogU0tCIHNoYXJlZCBieSBkZWZhdWx0ICovXG4mIzQzO1x0cGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCA9IENMT0NLX01PTk9UT05JQztcbiBcbiBcdGVyciA9IHBrdGdlbl9zZXR1cF9kZXYodC1cdTAwM2VuZXQsIHBrdF9kZXYsIGlmbmFtZSk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDMxYzY1YTU0NWExMDdjLi4yYzdhMjQ1YzVmZmMyZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTIxNTUsNyAmIzQzOzIxNTUsNyBAQCBzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICBubGFfcHV0X3UzMihza2IsIElGTEFfVFNPX01BWF9TRUdTLFxuIFx0XHRcdFJFQURfT05DRShkZXYtXHUwMDNldHNvX21heF9zZWdzKSkgfHxcbiBcdCAgICBubGFfcHV0X3VpbnQoc2tiLCBJRkxBX01BWF9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxuLVx0XHRcdCBSRUFEX09OQ0UoZGV2LVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkgfHxcbiYjNDM7XHRcdFx0ICh1NjQpUkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fFxuICNpZmRlZiBDT05GSUdfUlBTXG4gXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsXG4gXHRcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2VudW1fcnhfcXVldWVzKSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uYyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXG5pbmRleCAyM2RiNDA2MThmZWQxNC4uOWNhNjk4MGYyMjkxZTYgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvY29tbW9uLmNcbkBAIC05NTQsNiAmIzQzOzk1NCwxMCBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIERyaXZlciBnaXZlcyB1cyBjdXJyZW50IHN0YXRlLCB3ZSB3YW50IHRvIHJldHVybiBjdXJyZW50IGNvbmZpZyAqL1xuIFx0a3BhcmFtLVx1MDAzZXRjcF9kYXRhX3NwbGl0ID0gZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfY29uZmlnO1xuIFx0a3BhcmFtLVx1MDAzZWhkc190aHJlc2ggPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc190aHJlc2g7XG4mIzQzO1xuJiM0MztcdGtwYXJhbS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gUkVBRF9PTkNFKGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcbiYjNDM7XHRrcGFyYW0tXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPVxuJiM0MztcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGV0aHRvb2xfaW5pdF90c2luZm8oc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5pbmRleCAzZTk2OWEwNzBmOWZlNC4uYWU3YjY1MWM2NThmNzQgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ5NCw3ICYjNDM7NDk0LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ZlYXR1cmVzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0ZFQVRVUkVTX1dBTlRcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19IRUFERVIgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3ByaXZmbGFnc19zZXRfcG9saWN5W0VUSFRPT0xfQV9QUklWRkxBR1NfRkxBR1MgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hFQURFUiAmIzQzOyAxXTtcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVggJiM0MzsgMV07XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfSEVBREVSICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jaGFubmVsc19zZXRfcG9saWN5W0VUSFRPT0xfQV9DSEFOTkVMU19DT01CSU5FRF9DT1VOVCAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY29hbGVzY2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ09BTEVTQ0VfSEVBREVSICYjNDM7IDFdO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3JpbmdzLmMgYi9uZXQvZXRodG9vbC9yaW5ncy5jXG5pbmRleCA5MDU0Yzg5YzVkN2JiMi4uNWNjMjBkNTgxYzQ2ZWMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9yaW5ncy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9yaW5ncy5jXG5AQCAtNDIsNiAmIzQzOzQyLDEwIEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4gXG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbiYjNDM7XHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XG4mIzQzO1x0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pO1xuJiM0MztcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS5tYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XG4mIzQzO1x0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcbiBcbiBcdGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfcmluZ3BhcmFtKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VyaW5ncGFyYW0sXG4gXHRcdFx0XHRcdFx1MDAyNmRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbSwgaW5mby1cdTAwM2VleHRhY2spO1xuQEAgLTY5LDcgJiM0Mzs3Myw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTiAqL1xuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVggKi9cbiBcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXG4tXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBfUklOR1NfSERTX1RIUkVTSF9NQVggKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTiAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggKi9cbiB9XG4gXG4gc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTIxLDcgJiM0MzsxMjcsMTIgQEAgc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaCkgfHxcbiBcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuLVx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXG4mIzQzO1x0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkgfHxcbiYjNDM7XHQgICAgKChzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbiYjNDM7XHRcdFx0ICBrci1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB8fFxuJiM0MztcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxuJiM0MztcdFx0XHQgIGtyLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0LDYgJiM0MzsxNTUsNyBAQCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W10gPSB7XG4gXHRbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCAxKSxcbiBcdFtFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIH07XG4gXG4gc3RhdGljIGludFxuQEAgLTE3Nyw2ICYjNDM7MTg5LDE0IEBAIGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShvcHMtXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3NldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19DUUVfU0laRV0gXHUwMDI2XHUwMDI2XG4gXHQgICAgIShvcHMtXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX0NRRV9TSVpFKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuQEAgLTI0Niw2ICYjNDM7MjY2LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dLCBcdTAwMjZtb2QpO1xuIFx0ZXRobmxfdXBkYXRlX3UzMihcdTAwMjZrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2gsXG4gXHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgXHUwMDI2bW9kKTtcbiYjNDM7XHRldGhubF91cGRhdGVfdTMyKFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcbiYjNDM7XHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSwgXHUwMDI2bW9kKTtcbiBcdGlmICghbW9kKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yODEsNiAmIzQzOzMwMyw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19UWF07XG4gXHRlbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggXHUwMDNlIGtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaF9tYXgpXG4gXHRcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdO1xuJiM0MztcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiBcdTAwM2VcbiYjNDM7XHRcdCBrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKVxuJiM0MztcdFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07XG4gXHRlbHNlXG4gXHRcdGVycl9hdHRyID0gTlVMTDtcbiBcdGlmIChlcnJfYXR0cikge1xuQEAgLTMwMiw2ICYjNDM7MzI3LDEwIEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0cmV0ID0gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9yaW5ncGFyYW0oZGV2LCBcdTAwMjZyaW5ncGFyYW0sXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24sXG4mIzQzO1x0XHRcdCAgIGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4mIzQzO1xuIFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnEuYyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuaW5kZXggN2NhZTA4MmE5ODQ3MjEuLmNiZjAxNWRmNjhjY2Y4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC0zOTksNiAmIzQzOzM5OSwxMSBAQCBzdGF0aWMgc3RydWN0IGZxX2Zsb3cgKmZxX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19zdGF0dXMpICE9IFNLX1BBQ0lOR19GUSlcbiBcdFx0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzay1cdTAwM2Vza19wYWNpbmdfc3RhdHVzLFxuIFx0XHRcdFx0XHQgIFNLX1BBQ0lOR19GUSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGZxX3NrYl9jYihza2IpLVx1MDAzZXRpbWVfdG9fc2VuZCBcdTAwM2M9IG5vdylcbiYjNDM7XHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IDA7XG4mIzQzO1xuIFx0XHRyZXR1cm4gXHUwMDI2cS1cdTAwM2VpbnRlcm5hbDtcbiBcdH1cbiBcbkBAIC03MDcsNiAmIzQzOzcxMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdHN0cnVjdCBmcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIFx0c3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kO1xuIFx0c3RydWN0IGZxX2Zsb3dfaGVhZCAqaGVhZDtcbiYjNDM7XHR1NjQgdGltZV9uZXh0X3BhY2tldDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZnFfZmxvdyAqZjtcbiBcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbkBAIC03MjEsNyAmIzQzOzcyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdGlmIChza2IpIHtcbiBcdFx0cS1cdTAwM2VpbnRlcm5hbC5xbGVuLS07XG4gXHRcdGZxX2RlcXVldWVfc2tiKHNjaCwgXHUwMDI2cS1cdTAwM2VpbnRlcm5hbCwgc2tiKTtcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuIFx0fVxuIFxuIFx0bm93ID0ga3RpbWVfZ2V0X25zKCk7XG5AQCAtNzU4LDggJiM0Mzs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gXG4gXHRza2IgPSBmcV9wZWVrKGYpO1xuIFx0aWYgKHNrYikge1xuLVx0XHR1NjQgdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXHUwMDNldGltZV90b19zZW5kLFxuLVx0XHRcdFx0XHQgICAgIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4mIzQzO1x0XHR0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cdTAwM2V0aW1lX3RvX3NlbmQsXG4mIzQzO1x0XHRcdFx0XHQgZi1cdTAwM2V0aW1lX25leHRfcGFja2V0KTtcbiBcbiBcdFx0aWYgKG5vdyAmIzQzOyBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcdTAwM2MgdGltZV9uZXh0X3BhY2tldCkge1xuIFx0XHRcdGhlYWQtXHUwMDNlZmlyc3QgPSBmLVx1MDAzZW5leHQ7XG5AQCAtODI4LDExICYjNDM7ODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdFx0ICogZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IHdhcyBzZXQgd2hlbiBwcmlvciBwYWNrZXQgd2FzIHNlbnQsXG4gXHRcdCAqIGFuZCBjdXJyZW50IHRpbWUgKEBub3cpIGNhbiBiZSB0b28gbGF0ZSBieSB0ZW5zIG9mIHVzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGYtXHUwMDNldGltZV9uZXh0X3BhY2tldClcbiYjNDM7XHRcdGlmIChmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgXHUwMDI2XHUwMDI2IGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCBcdTAwM2Mgbm93KVxuIFx0XHRcdGxlbiAtPSBtaW4obGVuLzIsIG5vdyAtIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4gXHRcdGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCA9IG5vdyAmIzQzOyBsZW47XG4gXHR9XG4mIzQzO1xuIG91dDpcbiYjNDM7XHRpZiAocS1cdTAwM2VvZmZsb2FkX2hvcml6b24gXHUwMDI2XHUwMDI2IHRpbWVfbmV4dF9wYWNrZXQgXHUwMDNjPSBub3cpXG4mIzQzO1x0XHRza2ItXHUwMDNldHN0YW1wID0gMDtcbiYjNDM7XG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbkBAIC0xMTc5LDcgJiM0MzsxMTg5LDkgQEAgc3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbiBcdFx0dTY0IG9mZmxvYWRfaG9yaXpvbiA9ICh1NjQpTlNFQ19QRVJfVVNFQyAqXG4gXHRcdFx0XHQgICAgICBubGFfZ2V0X3UzMih0YltUQ0FfRlFfT0ZGTE9BRF9IT1JJWk9OXSk7XG4gXG4tXHRcdGlmIChvZmZsb2FkX2hvcml6b24gXHUwMDNjPSBxZGlzY19kZXYoc2NoKS1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikge1xuJiM0MztcdFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcdTAwM2M9XG4mIzQzO1x0XHQgICAgKHU2NClSRUFEX09OQ0UocWRpc2NfZGV2KHNjaCktXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKlxuJiM0MztcdFx0ICAgIE5TRUNfUEVSX1VTRUMpIHtcbiBcdFx0XHRXUklURV9PTkNFKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uLCBvZmZsb2FkX2hvcml6b24pO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2ludmFsaWQgb2ZmbG9hZF9ob3Jpem9uXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXG5pbmRleCA1NWEzODZmM2QxYjkwZi4uNmU2NGJhYTRjNjBkZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcbkBAIC00Miw4ICYjNDM7NDIsMTAgQEAgc3RhdGljIGJvb2xcdGNmZ19tYWNoaW5lX3Nsb3c7XG4gc3RhdGljIHVpbnQ2NF90XHRjZmdfc3RhcnRfdGltZV9ucztcbiBzdGF0aWMgaW50XHRjZmdfbWFyaztcbiBzdGF0aWMgYm9vbFx0Y2ZnX3J4O1xuJiM0MztzdGF0aWMgYm9vbFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkO1xuIFxuIHN0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydDtcbiYjNDM7c3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0X3JlYWw7XG4gc3RhdGljIHVpbnQ2NF90IHRkZWxpdmVyX21heDtcbiBcbiBzdGF0aWMgaW50IGVycm9ycztcbkBAIC0xNTgsMTggJiM0MzsxNjAsNzAgQEAgc3RhdGljIHZvaWQgZG9fcmVjdl92ZXJpZnlfZW1wdHkoaW50IGZkcilcbiBcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7cmVjdjogbm90IGVtcHR5IGFzIGV4cGVjdGVkICglZCwgJWQpXCYjMzQ7LCByZXQsIGVycm5vKTtcbiB9XG4gXG4tc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcbiYjNDM7c3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgcGF5bG9hZF9jaGFyKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcbiYjNDM7XHRpbnQ2NF90IHRzdGFtcCA9IDA7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZXJyLVx1MDAzZWVlX2Vycm5vKSB7XG4mIzQzO1x0Y2FzZSBFQ0FOQ0VMRUQ6XG4mIzQzO1x0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKVxuJiM0MztcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbiYjNDM7XHRcdHJlYXNvbiA9IFwmIzM0O21pc3NlZCB0eHRpbWVcJiMzNDs7XG4mIzQzO1x0YnJlYWs7XG4mIzQzO1x0Y2FzZSBFSU5WQUw6XG4mIzQzO1x0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcbiYjNDM7XHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBlcnItXHUwMDNlZWVfY29kZSk7XG4mIzQzO1x0XHRyZWFzb24gPSBcJiMzNDtpbnZhbGlkIHR4dGltZVwmIzM0OztcbiYjNDM7XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICBlcnItXHUwMDNlZWVfZXJybm8sIGVyci1cdTAwM2VlZV9jb2RlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRzdGFtcCA9ICgoaW50NjRfdCllcnItXHUwMDNlZWVfZGF0YSkgXHUwMDNjXHUwMDNjIDMyIHwgZXJyLVx1MDAzZWVlX2luZm87XG4mIzQzO1x0dHN0YW1wIC09IChpbnQ2NF90KWdsb2JfdHN0YXJ0O1xuJiM0MztcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7c2VuZDogcGt0ICVjIGF0ICVcJiMzNDsgUFJJZDY0IFwmIzM0O21zIGRyb3BwZWQ6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0cGF5bG9hZF9jaGFyLCB0c3RhbXAsIHJlYXNvbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkb19yZWN2X2VycnF1ZXVlX3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcylcbiYjNDM7e1xuJiM0MztcdGludDY0X3QgdHM7XG4mIzQzO1xuJiM0MztcdHRzID0gdHNzLVx1MDAzZXRzWzBdLnR2X3NlYztcbiYjNDM7XHR0cyAqPSAxMDAwVUxMICogMTAwMCAqIDEwMDA7XG4mIzQzO1x0dHMgJiM0Mzs9IHRzcy1cdTAwM2V0c1swXS50dl9uc2VjO1xuJiM0MztcdHRzIC09IGdsb2JfdHN0YXJ0X3JlYWw7XG4mIzQzO1x0dHMgLz0gMTAwMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRzIFx1MDAzZSBjZmdfdmFyaWFuY2VfdXMpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtzdyBkZWxheSAlXCYjMzQ7IFBSSWQ2NCBcJiMzNDt1cyBleGNlZWRzIGJvdW5kc1xcblwmIzM0OywgdHMpO1xuJiM0MztcdFx0aWYgKCFjZmdfbWFjaGluZV9zbG93KVxuJiM0MztcdFx0XHRlcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlKGludCBmZHQpXG4ge1xuIFx0Y2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VycikpICYjNDM7XG4mIzQzO1x0XHQgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY21fdGltZXN0YW1waW5nKSkgJiM0MztcbiBcdFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSldID0gezB9O1xuIFx0Y2hhciBkYXRhW3NpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7XG4gXHRcdCAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7IDFdO1xuJiM0MztcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3M7XG4gXHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycjtcbiBcdGludCByZXQsIG51bV90c3RhbXAgPSAwO1xuIFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7MH07XG4gXHRzdHJ1Y3QgaW92ZWMgaW92ID0gezB9O1xuIFx0c3RydWN0IGNtc2doZHIgKmNtO1xuLVx0aW50NjRfdCB0c3RhbXAgPSAwO1xuIFxuIFx0aW92Lmlvdl9iYXNlID0gZGF0YTtcbiBcdGlvdi5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpO1xuQEAgLTE4MSw4ICYjNDM7MjM1LDYgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcbiBcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTtcbiBcbiBcdHdoaWxlICgxKSB7XG4tXHRcdGNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7XG4tXG4gXHRcdHJldCA9IHJlY3Ztc2coZmR0LCBcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XG4gXHRcdGlmIChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVBR0FJTilcbiBcdFx0XHRicmVhaztcbkBAIC0xOTIsNDIgJiM0MzsyNDQsMzIgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcbiBcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogZmxhZ3MgMHgleFxcblwmIzM0OywgbXNnLm1zZ19mbGFncyk7XG4gXG4gXHRcdGNtID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuJiM0MztcdFx0dHNzID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCA9PSBTT0xfU09DS0VUIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGNtLVx1MDAzZWNtc2dfdHlwZSA9PSBTQ01fVElNRVNUQU1QSU5HKSB7XG4mIzQzO1x0XHRcdHRzcyA9ICh2b2lkICopQ01TR19EQVRBKGNtKTtcbiYjNDM7XHRcdFx0Y20gPSBDTVNHX05YVEhEUihcdTAwMjZtc2csIGNtKTtcbiYjNDM7XHRcdFx0aWYgKCFjbSlcbiYjNDM7XHRcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDt0aW1lc3RhbXAgbWlzc2luZyBpcCBlcnJcXG5cJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWYgKGNtLVx1MDAzZWNtc2dfbGV2ZWwgIT0gY2ZnX2VycnFfbGV2ZWwgfHxcbiBcdFx0ICAgIGNtLVx1MDAzZWNtc2dfdHlwZSAhPSBjZmdfZXJycV90eXBlKVxuIFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiB0eXBlIDB4JXguMHgleFxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICBjbS1cdTAwM2VjbXNnX2xldmVsLCBjbS1cdTAwM2VjbXNnX3R5cGUpO1xuIFxuIFx0XHRlcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcbi1cdFx0aWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1RYVElNRSlcbiYjNDM7XHRcdGlmIChlcnItXHUwMDNlZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9UWFRJTUUpXG4mIzQzO1x0XHRcdG51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChlcnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIGRhdGFbcmV0IC0gMV0pO1xuJiM0MztcdFx0ZWxzZSBpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HIFx1MDAyNlx1MDAyNiB0c3MpXG4mIzQzO1x0XHRcdGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKGVyciwgdHNzKTtcbiYjNDM7XHRcdGVsc2VcbiBcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogb3JpZ2luIDB4JXhcXG5cJiMzNDssIGVyci1cdTAwM2VlZV9vcmlnaW4pO1xuIFxuLVx0XHRzd2l0Y2ggKGVyci1cdTAwM2VlZV9lcnJubykge1xuLVx0XHRjYXNlIEVDQU5DRUxFRDpcbi1cdFx0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKVxuLVx0XHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IHVua25vd24gRUNBTkNFTEVEICV1XFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHRcdHJlYXNvbiA9IFwmIzM0O21pc3NlZCB0eHRpbWVcJiMzNDs7XG4tXHRcdGJyZWFrO1xuLVx0XHRjYXNlIEVJTlZBTDpcbi1cdFx0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcbi1cdFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0XHRyZWFzb24gPSBcJiMzNDtpbnZhbGlkIHR4dGltZVwmIzM0Oztcbi1cdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2Vycm5vLCBlcnItXHUwMDNlZWVfY29kZSk7XG4tXHRcdH1cbi1cbi1cdFx0dHN0YW1wID0gKChpbnQ2NF90KSBlcnItXHUwMDNlZWVfZGF0YSkgXHUwMDNjXHUwMDNjIDMyIHwgZXJyLVx1MDAzZWVlX2luZm87XG4tXHRcdHRzdGFtcCAtPSAoaW50NjRfdCkgZ2xvYl90c3RhcnQ7XG4tXHRcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3NlbmQ6IHBrdCAlYyBhdCAlXCYjMzQ7IFBSSWQ2NCBcJiMzNDttcyBkcm9wcGVkOiAlc1xcblwmIzM0Oyxcbi1cdFx0XHRkYXRhW3JldCAtIDFdLCB0c3RhbXAsIHJlYXNvbik7XG4tXG4gXHRcdG1zZy5tc2dfZmxhZ3MgPSAwO1xuIFx0XHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XG4tXHRcdG51bV90c3RhbXAmIzQzOyYjNDM7O1xuIFx0fVxuIFxuIFx0cmV0dXJuIG51bV90c3RhbXA7XG5AQCAtMjQ1LDEyICYjNDM7Mjg3LDEzIEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJycXVldWVfbXNncyhpbnQgZmR0KVxuIFx0XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtwb2xsXCYjMzQ7KTtcbiBcbiBcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgKHBmZC5yZXZlbnRzIFx1MDAyNiBQT0xMRVJSKSlcbi1cdFx0XHRudW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZmR0KTtcbiYjNDM7XHRcdFx0bnVtX3RzdGFtcCAmIzQzOz0gZG9fcmVjdl9lcnJxdWV1ZShmZHQpO1xuIFxuIFx0XHRpZiAobnVtX3RzdGFtcCA9PSBjZmdfbnVtX3BrdClcbiBcdFx0XHRicmVhaztcbiBcbi1cdH0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpIFx1MDAzYyB0ZGVsaXZlcl9tYXgpO1xuJiM0MztcdH0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpIFx1MDAzY1xuJiM0MztcdFx0IHRkZWxpdmVyX21heCAmIzQzOyAoY2ZnX3ZhcmlhbmNlX3VzICogMTAwMCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzdGFydF90aW1lX3dhaXQodm9pZClcbkBAIC0yOTUsNiAmIzQzOzMzOCwxOCBAQCBzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZShpbnQgZmQpXG4gXHRcdGVycm9yKDEsIDAsIFwmIzM0O2dldHNvY2tvcHQgdHh0aW1lOiBtaXNtYXRjaFwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGludCBmZClcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbiYjNDM7XHRcdCAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSB8XG4mIzQzO1x0XHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEIHxcbiYjNDM7XHRcdCAgU09GX1RJTUVTVEFNUElOR19PUFRfVFNPTkxZO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLFxuJiM0MztcdFx0ICAgICAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3NldHNvY2tvcHQgdGltZXN0YW1waW5nXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4ge1xuIFx0aW50IGZkO1xuQEAgLTMwOCw2ICYjNDM7MzYzLDkgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIFx0c2V0c29ja29wdF90eHRpbWUoZmQpO1xuIFxuJiM0MztcdGlmIChjZmdfdmVyaWZ5X2h3X29mZmxvYWQpXG4mIzQzO1x0XHRzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGZkKTtcbiYjNDM7XG4gXHRpZiAoY2ZnX21hcmsgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgXHUwMDI2Y2ZnX21hcmssIHNpemVvZihjZmdfbWFyaykpKVxuIFx0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c2V0c29ja29wdCBtYXJrXCYjMzQ7KTtcbkBAIC0zMTcsNyAmIzQzOzM3NSw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiBcbiBzdGF0aWMgaW50IHNldHVwX3J4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4ge1xuLVx0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gMTAwICogMTAwMCB9O1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDYwMCAqIDEwMDAgfTtcbiBcdGludCBmZDtcbiBcbiBcdGZkID0gc29ja2V0KGFkZHItXHUwMDNlc2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTtcbkBAIC0zNDgsNiAmIzQzOzQwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX3Rlc3RfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiBcbiBcdHN0YXJ0X3RpbWVfd2FpdCgpO1xuIFx0Z2xvYl90c3RhcnQgPSBnZXR0aW1lX25zKGNmZ19jbG9ja2lkKTtcbiYjNDM7XHRnbG9iX3RzdGFydF9yZWFsID0gZ2V0dGltZV9ucyhDTE9DS19SRUFMVElNRSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjZmdfbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4gXHRcdGRvX3NlbmRfb25lKGZkdCwgXHUwMDI2Y2ZnX2J1ZltpXSk7XG5AQCAtNDQwLDEwICYjNDM7NDk5LDExIEBAIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKVxuIFx0XHRcdFwmIzM0OyAgLTYgICAgICAgICAgICBvbmx5IElQdjZcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIC1jIFx1MDAzY2Nsb2NrXHUwMDNlICAgIG1vbm90b25pYyBvciB0YWkgKGRlZmF1bHQpXFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICAtRCBcdTAwM2NhZGRyXHUwMDNlICAgICBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzIChzZXJ2ZXIpXFxuXCYjMzQ7XG4tXHRcdFx0XCYjMzQ7ICAtUyBcdTAwM2NhZGRyXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcblwmIzM0O1xuJiM0MztcdFx0XHRcJiMzNDsgIC1oICAgICAgICAgICAgdmVyaWZ5IGhhcmR3YXJlIG9mZmxvYWQgKHR4KVxcblwmIzM0O1xuJiM0MztcdFx0XHRcJiMzNDsgIC1tIFx1MDAzY21hcmtcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICAtciAgICAgICAgICAgIHJ1biByeCBtb2RlXFxuXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0OyAgLVMgXHUwMDNjYWRkclx1MDAzZSAgICAgc291cmNlIElQIGFkZHJlc3MgKGNsaWVudClcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIC10IFx1MDAzY25zZWNcdTAwM2UgICAgIHN0YXJ0IHRpbWUgKFVUQyBuYW5vc2Vjb25kcylcXG5cJiMzNDtcbi1cdFx0XHRcJiMzNDsgIC1tIFx1MDAzY21hcmtcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7XFxuXCYjMzQ7LFxuIFx0XHRcdHByb2duYW1lKTtcbiBcdGV4aXQoMSk7XG5AQCAtNDU1LDcgJiM0Mzs1MTUsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGludCBkb21haW4gPSBQRl9VTlNQRUM7XG4gXHRpbnQgYztcbiBcbi1cdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDs0NmM6UzpEOnJ0Om06XCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7NDZjOkQ6aG06clM6dDpcJiMzNDspKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKGMpIHtcbiBcdFx0Y2FzZSAmIzM5OzQmIzM5OzpcbiBcdFx0XHRpZiAoZG9tYWluICE9IFBGX1VOU1BFQylcbkBAIC00ODIsMjEgJiM0Mzs1NDIsMjQgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7dW5rbm93biBjbG9jayBpZCAlc1wmIzM0Oywgb3B0YXJnKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O1MmIzM5Ozpcbi1cdFx0XHRzYWRkciA9IG9wdGFyZztcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O0QmIzM5OzpcbiBcdFx0XHRkYWRkciA9IG9wdGFyZztcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4mIzQzO1x0XHRcdGNmZ192ZXJpZnlfaHdfb2ZmbG9hZCA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O20mIzM5OzpcbiYjNDM7XHRcdFx0Y2ZnX21hcmsgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTtyJiMzOTs6XG4gXHRcdFx0Y2ZnX3J4ID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtTJiMzOTs6XG4mIzQzO1x0XHRcdHNhZGRyID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O3QmIzM5OzpcbiBcdFx0XHRjZmdfc3RhcnRfdGltZV9ucyA9IHN0cnRvbGwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O20mIzM5Ozpcbi1cdFx0XHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XG5pbmRleCBhZGY2Yzg0OGQ2ZDgwZi4uN2I3NWEzM2Y1YzQzZjggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxuQEAgLTEyLDEwICYjNDM7MTIsMTMgQEAgaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF92YXJpYW50c1xuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBLc2Z0U2tpcEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBia2csIGNtZCwgZGVmZXIsIHRjXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBFdGh0b29sRmFtaWx5LCBObEVycm9yXG4gXG4gXG4gZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7TWFpbiBmdW5jdGlvbi4gUnVuIHNvX3R4dGltZSBhcyBzZW5kZXIgYW5kIHJlY2VpdmVyLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG4mIzQzO1xuICAgICBzbG93X21hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgmIzM5O0tTRlRfTUFDSElORV9TTE9XJiMzOTspXG4gXG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXCYjMzQ7YmluX3JlbW90ZVwmIzM0Oyk6XG5AQCAtMzgsNiAmIzQzOzQxLDM0IEBAIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6XG4gICAgICAgICBjbWQoY21kX3R4KVxuIFxuIFxuJiM0MztkZWYgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7Q29uZmlndXJlIHBhY2luZy1vZmZsb2FkLWhvcml6b24uXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBldGhubCA9IEV0aHRvb2xGYW1pbHkoKVxuJiM0MztcbiYjNDM7ICAgIHRyeTpcbiYjNDM7ICAgICAgICByaW5ncyA9IGV0aG5sLnJpbmdzX2dldCh7JiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fX0pXG4mIzQzOyAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzOTtyaW5nLWdldCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSYjMzk7KSBmcm9tIGVcbiYjNDM7XG4mIzQzOyAgICBpZiAmIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5OyBub3QgaW4gcmluZ3Mgb3IgXFxcbiYjNDM7ICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgmIzM5OyBub3QgaW4gcmluZ3M6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3BhY2luZyBvZmZsb2FkIGhvcml6b24gbm90IHN1cHBvcnRlZCBieSBkZXZpY2UmIzM5OylcbiYjNDM7XG4mIzQzOyAgICBpZiByaW5nc1smIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JiMzOTtdIFx1MDAzYyA1MF8wMDA6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3BhY2luZyBvZmZsb2FkIG1heCBob3Jpem9uIHRvbyBzbWFsbCYjMzk7KVxuJiM0MztcbiYjNDM7ICAgIGN1cl9ob3Jpem9uID0gcmluZ3NbJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJiMzOTtdXG4mIzQzOyAgICBuZXdfaG9yaXpvbiA9IDUwXzAwMFxuJiM0MzsgICAgZXRobmwucmluZ3Nfc2V0KHtcbiYjNDM7ICAgICAgICAmIzM5O2hlYWRlciYjMzk7OiB7JiMzOTtkZXYtaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9LFxuJiM0MzsgICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7OiBuZXdfaG9yaXpvbixcbiYjNDM7ICAgIH0pXG4mIzQzOyAgICBkZWZlcihldGhubC5yaW5nc19zZXQsIHtcbiYjNDM7ICAgICAgICAmIzM5O2hlYWRlciYjMzk7OiB7JiMzOTtkZXYtaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9LFxuJiM0MzsgICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7OiBjdXJfaG9yaXpvblxuJiM0MzsgICAgfSlcbiYjNDM7XG4mIzQzO1xuIGRlZiBfcWRpc2Nfc2V0dXAoaWZuYW1lLCBxZGlzYywgb3B0YXJncz1cJiMzNDtcJiMzNDspOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXBsYWNlIHJvb3QgcWRpc2MuIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGFmdGVyIHRoZSB0ZXN0LlxuIFxuQEAgLTU2LDYgJiM0Mzs4Nyw3IEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxuICAgICAgICAgICAgIFtcJiMzNDtvbmVfcGt0XCYjMzQ7LCBcJiMzNDthLDEwXCYjMzQ7LCBcJiMzNDthLDEwXCYjMzQ7XSxcbiAgICAgICAgICAgICBbXCYjMzQ7aW5fb3JkZXJcJiMzNDssIFwmIzM0O2EsMTAsYiwyMFwmIzM0OywgXCYjMzQ7YSwxMCxiLDIwXCYjMzQ7XSxcbiAgICAgICAgICAgICBbXCYjMzQ7cmV2ZXJzZV9vcmRlclwmIzM0OywgXCYjMzQ7YSwyMCxiLDEwXCYjMzQ7LCBcJiMzNDtiLDEwLGEsMjBcJiMzNDtdLFxuJiM0MzsgICAgICAgICAgICBbXCYjMzQ7YmV5b25kX2h3X2hvcml6b25cJiMzNDssIFwmIzM0O2EsNzBcJiMzNDssIFwmIzM0O2EsNzBcJiMzNDtdLFxuICAgICAgICAgXTpcbiAgICAgICAgICAgICBuYW1lID0gZlwmIzM0O3Z7aXB2ZXJ9X3t0ZXN0Y2FzZVswXX1cJiMzNDtcbiAgICAgICAgICAgICB5aWVsZCBLc2Z0TmFtZWRWYXJpYW50KG5hbWUsIGlwdmVyLCB0ZXN0Y2FzZVsxXSwgdGVzdGNhc2VbMl0pXG5AQCAtNjQsMTUgJiM0Mzs5Niw0MiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZnEoKTpcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyAoZnEpIHRlc3RzLlwmIzM0O1wmIzM0O1wmIzM0O1xuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O2ZxXCYjMzQ7KVxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwmIzM0O21vbm9cJiMzNDssIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxuIFxuIFxuJiM0MztAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuJiM0MztkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIGZxIHRlc3RzLCB3aXRoIG9mZmxvYWQgaG9yaXpvbi5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxuJiM0MztcbiYjNDM7ICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxuJiM0MzsgICAgdHJ5OlxuJiM0MzsgICAgICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcJiMzNDtmcVwmIzM0OywgXCYjMzQ7b2ZmbG9hZF9ob3Jpem9uIDUwbXNcJiMzNDspXG4mIzQzOyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtuZXRkZXYgZG9lcyBub3Qgc3VwcG9ydCBvZmZsb2FkLiBza2lwcGluZ1wmIzM0OykgZnJvbSBlXG4mIzQzO1xuJiM0MzsgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHVzZSBvbmx5IGh3IHBhY2luZywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uLlxuJiM0MzsgICAgaHdfb25seSA9IFwmIzM0Oy1oXCYjMzQ7IGlmIGFyZ3NfdHggIT0gXCYjMzQ7YSw3MFwmIzM0OyBlbHNlIFwmIzM0O1wmIzM0O1xuJiM0MzsgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcJiMzNDttb25vXCYjMzQ7LCBpcHZlciwgZlwmIzM0O3tod19vbmx5fSB7YXJnc190eH1cJiMzNDssIGFyZ3NfcngsIFRydWUpXG4mIzQzO1xuJiM0MztcbiYjNDM7QGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbiYjNDM7ZGVmIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgdGVzdHMsIHdpdGhvdXQgZnEgcGFjaW5nIHN3IGJhY2t1cC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxuJiM0MztcbiYjNDM7ICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxuJiM0MzsgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O3BmaWZvX2Zhc3RcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHBhc3MsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbiB3aXRob3V0IHN3IGZhbGxiYWNrLlxuJiM0MzsgICAgZXhwZWN0X3Bhc3MgPSBub3QgYXJnc190eCA9PSBcJiMzNDthLDcwXCYjMzQ7XG4mIzQzOyAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwmIzM0O21vbm9cJiMzNDssIGlwdmVyLCBmXCYjMzQ7LWgge2FyZ3NfdHh9XCYjMzQ7LCBhcmdzX3J4LCBleHBlY3RfcGFzcylcbiYjNDM7XG4mIzQzO1xuIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaShjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBmcSB0ZXN0cywgYnV0IHBhc3MgQ0xPQ0tfVEFJIHRvIHRlc3QgY29udmVyc2lvbi5cJiMzNDtcJiMzNDtcJiMzNDtcbi0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG4gICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcJiMzNDtmcVwmIzM0OylcbiAgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcJiMzNDt0YWlcJiMzNDssIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxuIFxuQEAgLTk1LDcgJiM0MzsxNTQsNiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZXRmKCk6XG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZXRmKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2V0ZihjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3RfZmFpbCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgZXRmIHRlc3RzLlwmIzM0O1wmIzM0O1wmIzM0O1xuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgdHJ5OlxuICAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O2V0ZlwmIzM0OywgXCYjMzQ7Y2xvY2tpZCBDTE9DS19UQUkgZGVsdGEgNDAwMDAwXCYjMzQ7KVxuICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG5AQCAtMTA4LDcgJiM0MzsxNjYsMTMgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O0JvaWxlcnBsYXRlIGtzZnQgbWFpbi5cJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuICAgICAgICAga3NmdF9ydW4oXG4tICAgICAgICAgICAgW3Rlc3Rfc29fdHh0aW1lX2ZxX21vbm8sIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwgdGVzdF9zb190eHRpbWVfZXRmXSxcbiYjNDM7ICAgICAgICAgICAgW1xuJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ubyxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcsXG4mIzQzOyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2V0ZixcbiYjNDM7ICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSxcbiAgICAgICAgIClcbiAgICAga3NmdF9leGl0KClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICAgJiMzNDtORVRfUEtUR0VOJiMzNDssCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZxX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2ZxX2NsYXNzaWZ5JiMzNDssCiAgICAmIzM0O2V0aG5sX3NldF9yaW5ncyYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCBtb2RpZmllcyB0aGUgY29yZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKHNjaF9mcS5jKSwgdGhlIHBhY2tldCBnZW5lcmF0b3IgKHBrdGdlbi5jKSwgYW5kIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIChyaW5ncy5jKSB0byBzdXBwb3J0IGNvbmZpZ3VyaW5nIGFuZCB1c2luZyB0aGlzIGhvcml6b24uIFRoZXNlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgdG8gdGhlIGlkcGYgZHJpdmVyIGFyZSBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgbm90IGVtdWxhdGVkLCBidXQgdGhlIGNvcmUgY2hhbmdlcyBhcmUgc3VmZmljaWVudCB0byB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNmQzMmI3Mzk1ODQ1NTk1NThlOTY0YTJkNzAzYjc5ZjIyNDhiNGJhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMDc6Mjk6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAppbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uYzc4MDY4NGNhMWJjMGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbApAQCAtNDQ4LDYgJiM0Mzs0NDgsMTIgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAtCiAgICAgICAgIG5hbWU6IGhkcy10aHJlc2gtbWF4CiAgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHBhY2luZy1vZmZsb2FkLWhvcml6b24KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHBhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4CiYjNDM7ICAgICAgICB0eXBlOiB1MzIKIAogICAtCiAgICAgbmFtZTogbW0tc3RhdApAQCAtMjE2OCw2ICYjNDM7MjE3NCw4IEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIHR4LXB1c2gtYnVmLWxlbi1tYXgKICAgICAgICAgICAgIC0gaGRzLXRocmVzaAogICAgICAgICAgICAgLSBoZHMtdGhyZXNoLW1heAomIzQzOyAgICAgICAgICAgIC0gcGFjaW5nLW9mZmxvYWQtaG9yaXpvbgomIzQzOyAgICAgICAgICAgIC0gcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgKICAgICAgIGR1bXA6ICpyaW5nLWdldC1vcAogICAgIC0KICAgICAgIG5hbWU6IHJpbmdzLXNldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0CmluZGV4IDUxMmY2ZDZmYTNkOGY4Li4zYjljZTFjNmUxMDU3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdApAQCAtMTgzLDcgJiM0MzsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnQKIHN0cnVjdCBkcGxsX3BpbiogICAgICAgICAgICAgICAgICAgIGRwbGxfcGluCiBzdHJ1Y3QgaGxpc3RfaGVhZCAgICAgICAgICAgICAgICAgICBwYWdlX3Bvb2xzCiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXIKLXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uCiYjNDM7dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjaW5nX29mZmxvYWRfaG9yaXpvbgomIzQzO3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uCiBzdHJ1Y3RfbmFwaV9jb25maWcqICAgICAgICAgICAgICAgICBuYXBpX2NvbmZpZwogdW5zaWduZWRfbG9uZyAgICAgICAgICAgICAgICAgICAgICAgZ3JvX2ZsdXNoX3RpbWVvdXQKIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcGlfZGVmZXJfaGFyZF9pcnFzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYwppbmRleCBiYjk5ZDllN2M2NWQ1MS4uNWRkZjM0NzkyN2RjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYwpAQCAtMTgwMSw3ICYjNDM7MTgwMSw4IEBAIHN0YXRpYyB2b2lkIGlkcGZfZ2V0X3RzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7CiAJLnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHwKIAkJCQkgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLAotCS5zdXBwb3J0ZWRfcmluZ19wYXJhbXMJPSBFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElULAomIzQzOwkuc3VwcG9ydGVkX3JpbmdfcGFyYW1zCT0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCB8CiYjNDM7CQkJCSAgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLAogCS5nZXRfbXNnbGV2ZWwJCT0gaWRwZl9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBpZHBmX3NldF9tc2dsZXZlbCwKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwppbmRleCBjZjk2NmZlNmM3NTljZS4uZGU0MTcwYzJhYTNiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMKQEAgLTg4OCw2ICYjNDM7ODg4LDExIEBAIHN0YXRpYyBpbnQgaWRwZl9jZmdfbmV0ZGV2KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCkKIAluZXRkZXYtJmd0O21pbl9tdHUgPSBFVEhfTUlOX01UVTsKIAluZXRkZXYtJmd0O21heF9tdHUgPSB2cG9ydC0mZ3Q7bWF4X210dTsKIAomIzQzOwlpZiAoaWRwZl9pc19xdWV1ZV9tb2RlbF9zcGxpdCh2cG9ydC0mZ3Q7ZGZsdF9xdl9yc3JjLnR4cV9tb2RlbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlkcGZfaXNfY2FwX2VuYShhZGFwdGVyLCBJRFBGX09USEVSX0NBUFMsCiYjNDM7CQkJICAgIFZJUlRDSE5MMl9DQVBfU1BMSVRRX1FTQ0hFRCkpCiYjNDM7CQluZXRkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gMTI4MDAwOwomIzQzOwogCWRmbHRfZmVhdHVyZXMgPSBORVRJRl9GX1NHCXwKIAkJCU5FVElGX0ZfSElHSERNQTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjhmMTFkZTU3YzhiYzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKQEAgLTEsNiAmIzQzOzEsOCBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogLyogQ29weXJpZ2h0IChDKSAyMDIzIEludGVsIENvcnBvcmF0aW9uICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0cG9sbC5oJmd0OwomIzQzOwogI2luY2x1ZGUgJiMzNDtpZHBmLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpZHBmX3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aWRwZl92aXJ0Y2hubC5oJiMzNDsKQEAgLTI0MDgsOSAmIzQzOzI0MTAsMTMgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsCiAJCQkJICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcywKIAkJCQkgICAgdTE2IHRkX2NtZCwgdTE2IHNpemUpCiB7Ci0JKih1MzIgKikmYW1wO2Rlc2MtJmd0O2Zsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLSZndDtkdHlwZSB8IHRkX2NtZCk7CiYjNDM7CSooX19sZTMyICopJmFtcDtkZXNjLSZndDtmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy0mZ3Q7ZHR5cGUgfCB0ZF9jbWQpKTsKIAlkZXNjLSZndDtmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7CiAJZGVzYy0mZ3Q7Zmxvdy5xdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYocGFyYW1zLSZndDtjb21wbF90YWcpOwomIzQzOwomIzQzOwlkZXNjLSZndDtmbG93LnF3MS50c1swXSA9IHBhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzBdOwomIzQzOwlkZXNjLSZndDtmbG93LnF3MS50c1sxXSA9IHBhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzFdOwomIzQzOwlkZXNjLSZndDtmbG93LnF3MS50c1syXSA9IHBhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzJdOwogfQogCiAvKioKQEAgLTMwMTEsNiAmIzQzOzMwMTcsNjMgQEAgc3RhdGljIGJvb2wgaWRwZl90eF9zcGxpdHFfbmVlZF9yZShzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSkKIAlyZXR1cm4gZ2FwICZndDs9IElEUEZfVFhfU1BMSVRRX1JFX01JTl9HQVA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp0eF9xLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpCiYjNDM7ewomIzQzOwljb25zdCBpbnQgdHNfZ3Jhbl9wb3cyID0gOTsKJiM0MzsJdTY0IHRzLCBub3csIGhvcml6b247CiYjNDM7CiYjNDM7CWhvcml6b24gPSBSRUFEX09OQ0Uoc2tiLSZndDtkZXYtJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pOwomIzQzOwlpZiAoIWhvcml6b24pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIFNraXAgaWYgbmV0cG9sbDogbm90IG5lZWRlZCBhbmQgbm90IHNhZmUgdG8gY2FsbCBrdGltZSBoZWxwZXJzICovCiYjNDM7CWlmIChuZXRwb2xsX3R4X3J1bm5pbmcoc2tiLSZndDtkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNrYi0mZ3Q7dHN0YW1wX3R5cGUpIHsKJiM0MzsJY2FzZSBTS0JfQ0xPQ0tfUkVBTFRJTUU6CiYjNDM7CQl0cyA9IGt0aW1lX3RvX25zKGt0aW1lX2FkZChza2ItJmd0O3RzdGFtcCwKJiM0MzsJCQkJCSAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtCiYjNDM7CQkJCQkgICBrdGltZV9tb25vX3RvX2FueSgwLCBUS19PRkZTX1JFQUwpKSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTS0JfQ0xPQ0tfTU9OT1RPTklDOgomIzQzOwkJdHMgPSBrdGltZV90b19ucyhrdGltZV9tb25vX3RvX2FueShza2ItJmd0O3RzdGFtcCwgVEtfT0ZGU19UQUkpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNLQl9DTE9DS19UQUk6CiYjNDM7CQl0cyA9IGt0aW1lX3RvX25zKHNrYi0mZ3Q7dHN0YW1wKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJV0FSTl9PTl9PTkNFKDEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5vdyA9IGt0aW1lX2dldF9jbG9ja3RhaV9ucygpOwomIzQzOwlpZiAodHMgJmx0OyBub3cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIGJleW9uZCBvZmZsb2FkIGhvcml6b24/IHNldCBvdmVyZmxvdyBiaXQgb25seSAqLwomIzQzOwlpZiAodHMgJmd0OyBub3cgJiM0MzsgKGhvcml6b24gKiBOU0VDX1BFUl9VU0VDKSkgewomIzQzOwkJdHhfcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMl0gPSAxICZsdDsmbHQ7IDc7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHMgJmd0OyZndDs9IHRzX2dyYW5fcG93MjsKJiM0MzsKJiM0MzsJLyogMCBpcyB2YWxpZCAyNGIgdGltZXN0YW1wLCBidXQgYWxzbyBtZWFucyBmaWVsZCB1bnNldC4KJiM0MzsJICogQWRkIDUxMiBucyAodHNfZ3Jhbl9wb3cyKSB0byBhdm9pZCB0aGlzIGNhc2UKJiM0MzsJICovCiYjNDM7CWlmICgodHMgJmFtcDsgMHg3ZmZmZmYpID09IDApIHsKJiM0MzsJCXR4X3BhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzBdID0gMTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl0eF9wYXJhbXMtJmd0O29mZmxvYWQuZGVzY190c1swXSA9IHRzICZhbXA7IDB4ZmY7CiYjNDM7CXR4X3BhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzFdID0gKHRzICZndDsmZ3Q7IDgpICZhbXA7IDB4ZmY7CiYjNDM7CXR4X3BhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHg3Zik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpZHBmX3R4X3NwbGl0cV9mcmFtZSAtIFNlbmRzIGJ1ZmZlciBvbiBUeCByaW5nIHVzaW5nIGZsZXggZGVzY3JpcHRvcnMKICAqIEBza2I6IHNlbmQgYnVmZmVyCkBAIC0zMDk3LDYgJiM0MzszMTYwLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpZHBmX3R4X3NwbGl0cV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJCXR4X3BhcmFtcy5kdHlwZSA9IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRTsKIAkJdHhfcGFyYW1zLmVvcF9jbWQgPSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDsKJiM0MzsKJiM0MzsJCWlmIChza2ItJmd0O3RzdGFtcCkKJiM0MzsJCQlpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKHR4X3EsIHNrYiwgJmFtcDt0eF9wYXJhbXMpOwomIzQzOwogCQkvKiBTZXQgdGhlIFJFIGJpdCB0byBwZXJpb2RpY2FsbHkgJiMzNDtjbGVhbiYjMzQ7IHRoZSBkZXNjcmlwdG9yIHJpbmcuCiAJCSAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0CiAJCSAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oCmluZGV4IDRiZTViM2I2ZDNlZDJiLi44NjU0MDhiNTdiMGQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oCkBAIC0xNjEsNiAmIzQzOzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHsKICAqIEB0c29fc2VnczogTnVtYmVyIG9mIHNlZ21lbnRzIHRvIGJlIHNlbnQKICAqIEB0c29faGRyX2xlbjogTGVuZ3RoIG9mIGhlYWRlcnMgdG8gYmUgZHVwbGljYXRlZAogICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3IKJiM0MzsgKiBAZGVzY190czogRmxvdyBzY2hlZHVsaW5nIG9mZmxvYWQgdGltZXN0YW1wCiAgKi8KIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHsKIAl1MzIgdHhfZmxhZ3M7CkBAIC0xNzQsNiAmIzQzOzE3NSw3IEBAIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHsKIAl1MTYgdHNvX2hkcl9sZW47CiAKIAl1MTYgdGRfY21kOwomIzQzOwl1OCBkZXNjX3RzWzNdOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTg1LDYgJiM0Mzs4NSw4IEBAIGVudW0gewogICogQHR4X3B1c2hfYnVmX21heF9sZW46IE1heGltdW0gYWxsb3dlZCBzaXplIG9mIFRYIHB1c2ggYnVmZmVyCiAgKiBAaGRzX3RocmVzaDogUGFja2V0IHNpemUgdGhyZXNob2xkIGZvciBoZWFkZXIgZGF0YSBzcGxpdCAoSERTKQogICogQGhkc190aHJlc2hfbWF4OiBNYXhpbXVtIHN1cHBvcnRlZCBzZXR0aW5nIGZvciBAaGRzX3RocmVzaG9sZAomIzQzOyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWMKJiM0MzsgKiBAbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b246IG1heCBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWMKICAqCiAgKi8KIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gewpAQCAtOTcsNiAmIzQzOzk5LDggQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7CiAJdTMyCXR4X3B1c2hfYnVmX21heF9sZW47CiAJdTMyCWhkc190aHJlc2g7CiAJdTMyCWhkc190aHJlc2hfbWF4OwomIzQzOwl1MzIJcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKJiM0MzsJdTMyCW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOwogfTsKIAogLyoqCkBAIC0xMDgsNiAmIzQzOzExMiw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gewogICogQEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOOiBjYXB0dXJlIGZvciBzZXR0aW5nIHR4X3B1c2hfYnVmX2xlbgogICogQEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQ6IGNhcHR1cmUgZm9yIHNldHRpbmcgdGNwX2RhdGFfc3BsaXQKICAqIEBFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTOiBjYXB0dXJlIGZvciBzZXR0aW5nIGhlYWRlci1kYXRhLXNwbGl0LXRocmVzaAomIzQzOyAqIEBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT046IGNhcHR1cmUgZm9yIHNldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbgogICovCiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0gewogCUVUSFRPT0xfUklOR19VU0VfUlhfQlVGX0xFTgkJPSBCSVQoMCksCkBAIC0xMTcsNiAmIzQzOzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7CiAJRVRIVE9PTF9SSU5HX1VTRV9UWF9QVVNIX0JVRl9MRU4JPSBCSVQoNCksCiAJRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVAkJPSBCSVQoNSksCiAJRVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUwkJPSBCSVQoNiksCiYjNDM7CUVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTgk9IEJJVCg3KSwKIH07CiAKICNkZWZpbmUgX19FVEhfUlNTX0hBU0hfQklUKGJpdCkJKCh1MzIpMSAmbHQ7Jmx0OyAoYml0KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0yMTI5LDcgJiM0MzsyMTI5LDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHsKICAqCUBkcGxsX3BpbjogUG9pbnRlciB0byB0aGUgU3luY0Ugc291cmNlIHBpbiBvZiBhIERQTEwgc3Vic3lzdGVtLAogICoJCSAgIHdoZXJlIHRoZSBjbG9jayBpcyByZWNvdmVyZWQuCiAgKgotICoJQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggRURUIG9mZmxvYWQgaG9yaXpvbiBpbiBuc2VjLgomIzQzOyAqCUBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBhY3RpdmUgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLgomIzQzOyAqCUBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy4KICAqCUBuYXBpX2NvbmZpZzogQW4gYXJyYXkgb2YgbmFwaV9jb25maWcgc3RydWN0dXJlcyBjb250YWluaW5nIHBlci1OQVBJCiAgKgkJICAgICAgc2V0dGluZ3MuCiAgKglAbnVtX25hcGlfY29uZmlnczoJbnVtYmVyIG9mIGFsbG9jYXRlZCBOQVBJIGNvbmZpZyBzdHJ1Y3RzLApAQCAtMjU1Miw3ICYjNDM7MjU1Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHsKIAkvKiogQGlycV9tb2RlcjogZGltIHBhcmFtZXRlcnMgdXNlZCBpZiBJU19FTkFCTEVEKENPTkZJR19ESU1MSUIpLiAqLwogCXN0cnVjdCBkaW1faXJxX21vZGVyCSppcnFfbW9kZXI7CiAKLQl1NjQJCQltYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKJiM0MzsJdTMyCQkJcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKJiM0MzsJdTMyCQkJbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247CiAJc3RydWN0IG5hcGlfY29uZmlnCSpuYXBpX2NvbmZpZzsKIAl1MzIJCQludW1fbmFwaV9jb25maWdzOwogCXUzMgkJCW5hcGlfZGVmZXJfaGFyZF9pcnFzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKQEAgLTE5Myw2ICYjNDM7MTkzLDggQEAgZW51bSB7CiAJRVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVgsCiAJRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsCiAJRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLAomIzQzOwlFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTiwKJiM0MzsJRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLAogCiAJX19FVEhUT09MX0FfUklOR1NfQ05ULAogCUVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggNWI0ZGQwNGQ2MTI0NzYuLjc4OTdlNDIyMDUxMzAwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMjAxLDYgJiM0MzsyMDEsNyBAQAogCXBmKFNWSURfUk5EKQkJLyogUmFuZG9tIFNWTEFOIElEICovCQkJXAogCXBmKE5PREUpCQkvKiBOb2RlIG1lbW9yeSBhbGxvYyovCQkJXAogCXBmKFNIQVJFRCkJCS8qIFNoYXJlZCBTS0IgKi8JCQlcCiYjNDM7CXBmKFRYVElNRSkJCS8qIFNPX1RYVElNRSBzdXBwb3J0ICovCQkJXAogCiAjZGVmaW5lIHBmKGZsYWcpCQlmbGFnIyNfU0hJRlQsCiBlbnVtIHBrdF9mbGFncyB7CkBAIC0yOTEsNiAmIzQzOzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdTY0IGRlbGF5OwkJLyogbmFuby1zZWNvbmRzICovCiAKJiM0MzsJLyogVFhUSU1FIHN1cHBvcnQgKi8KJiM0MzsJdTY0IHR4dGltZV9kZWxheTsJLyogdHJhbnNtaXQgdGltZSBkZWxheSBpbiBucyAqLwomIzQzOwljbG9ja2lkX3QgdHh0aW1lX2Nsb2NraWQ7IC8qIGNsb2NraWQgZm9yIFNPX1RYVElNRSAqLwomIzQzOwogCV9fdTY0IGNvdW50OwkJLyogRGVmYXVsdCBObyBwYWNrZXRzIHRvIHNlbmQgKi8KIAlfX3U2NCBzb2ZhcjsJCS8qIEhvdyBtYW55IHBrdHMgd2UmIzM5O3ZlIHNlbnQgc28gZmFyICovCiAJX191NjQgdHhfYnl0ZXM7CQkvKiBIb3cgbWFueSBieXRlcyB3ZSYjMzk7dmUgdHJhbnNtaXR0ZWQgKi8KQEAgLTY2Niw2ICYjNDM7NjcxLDE3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiAJaWYgKHBrdF9kZXYtJmd0O25vZGUgJmd0Oz0gMCkKIAkJc2VxX3ByaW50ZihzZXEsICYjMzQ7ICAgICBub2RlOiAlZFxuJiMzNDssIHBrdF9kZXYtJmd0O25vZGUpOwogCiYjNDM7CWlmIChwa3RfZGV2LSZndDtmbGFncyAmYW1wOyBGX1RYVElNRSkgewomIzQzOwkJY2xvY2tpZF90IGNsb2NraWQgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2Nsb2NraWQpOwomIzQzOwomIzQzOwkJc2VxX3ByaW50ZihzZXEsICYjMzQ7ICAgICB0eHRpbWVfZGVsYXk6ICVsbHVcbiYjMzQ7LAomIzQzOwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGt0X2Rldi0mZ3Q7dHh0aW1lX2RlbGF5KTsKJiM0MzsJCXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgdHh0aW1lX2Nsb2NraWQ6ICVzXG4mIzM0OywKJiM0MzsJCQkgICBjbG9ja2lkID09IENMT0NLX01PTk9UT05JQyA/ICYjMzQ7bW9ub3RvbmljJiMzNDsgOgomIzQzOwkJCSAgIGNsb2NraWQgPT0gQ0xPQ0tfUkVBTFRJTUUgPyAmIzM0O3JlYWx0aW1lJiMzNDsgOgomIzQzOwkJCSAgIGNsb2NraWQgPT0gQ0xPQ0tfVEFJID8gJiMzNDt0YWkmIzM0OyA6ICYjMzQ7dW5rbm93biYjMzQ7KTsKJiM0MzsJfQomIzQzOwogCWlmIChwa3RfZGV2LSZndDt4bWl0X21vZGUgPT0gTV9ORVRJRl9SRUNFSVZFKQogCQlzZXFfcHV0cyhzZXEsICYjMzQ7ICAgICB4bWl0X21vZGU6IG5ldGlmX3JlY2VpdmVcbiYjMzQ7KTsKIAllbHNlIGlmIChwa3RfZGV2LSZndDt4bWl0X21vZGUgPT0gTV9RVUVVRV9YTUlUKQpAQCAtMTE0MSw2ICYjNDM7MTE1Nyw1MCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LSZndDtkZWxheSk7CiAJCXJldHVybiBjb3VudDsKIAl9CiYjNDM7CWlmICghc3RyY21wKG5hbWUsICYjMzQ7dHh0aW1lX2RlbGF5JiMzNDspKSB7CiYjNDM7CQltYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7CiYjNDM7CQlsZW4gPSBudW1fYXJnKCZhbXA7dXNlcl9idWZmZXJbaV0sIG1heCwgJmFtcDt2YWx1ZSk7CiYjNDM7CQlpZiAobGVuICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gbGVuOwomIzQzOwomIzQzOwkJLyogaW4gcXVldWVfeG1pdCBtb2RlIGZxIG1heSBjbGVhciB0c3RhbXAsIGRvIG5vdCByZXVzZSBza2IgKi8KJiM0MzsJCWlmICh2YWx1ZSAmZ3Q7IDAgJmFtcDsmYW1wOyBwa3RfZGV2LSZndDtjbG9uZV9za2IgJmd0OyAwKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJV1JJVEVfT05DRShwa3RfZGV2LSZndDt0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpOwomIzQzOwkJc3ByaW50ZihwZ19yZXN1bHQsICYjMzQ7T0s6IHR4dGltZV9kZWxheT0lbGx1JiMzNDssCiYjNDM7CQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSk7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KJiM0MzsJaWYgKCFzdHJjbXAobmFtZSwgJiMzNDt0eHRpbWVfY2xvY2tpZCYjMzQ7KSkgewomIzQzOwkJY2hhciBjbG9ja3N0clszMl07CiYjNDM7CQljbG9ja2lkX3QgY2xrOwomIzQzOwomIzQzOwkJbWVtc2V0KGNsb2Nrc3RyLCAwLCBzaXplb2YoY2xvY2tzdHIpKTsKJiM0MzsJCW1heCA9IG1pbihzaXplb2YoY2xvY2tzdHIpIC0gMSwgY291bnQgLSBpKTsKJiM0MzsJCWxlbiA9IHN0cm5fbGVuKCZhbXA7dXNlcl9idWZmZXJbaV0sIG1heCk7CiYjNDM7CQlpZiAobGVuICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gbGVuOwomIzQzOwomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKGNsb2Nrc3RyLCAmYW1wO3VzZXJfYnVmZmVyW2ldLCBsZW4pKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwkJaWYgKCFzdHJjbXAoY2xvY2tzdHIsICYjMzQ7bW9ub3RvbmljJiMzNDspKSB7CiYjNDM7CQkJY2xrID0gQ0xPQ0tfTU9OT1RPTklDOwomIzQzOwkJfSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCAmIzM0O3JlYWx0aW1lJiMzNDspKSB7CiYjNDM7CQkJY2xrID0gQ0xPQ0tfUkVBTFRJTUU7CiYjNDM7CQl9IGVsc2UgaWYgKCFzdHJjbXAoY2xvY2tzdHIsICYjMzQ7dGFpJiMzNDspKSB7CiYjNDM7CQkJY2xrID0gQ0xPQ0tfVEFJOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtFUlJPUjogdW5rbm93biBjbG9ja2lkICYjMzk7JXMmIzM5OyYjMzQ7LAomIzQzOwkJCQljbG9ja3N0cik7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogdHh0aW1lX2Nsb2NraWQ9JXMmIzM0OywgY2xvY2tzdHIpOwomIzQzOwkJV1JJVEVfT05DRShwa3RfZGV2LSZndDt0eHRpbWVfY2xvY2tpZCwgY2xrKTsKJiM0MzsJCXJldHVybiBjb3VudDsKJiM0MzsJfQogCWlmICghc3RyY21wKG5hbWUsICYjMzQ7cmF0ZSYjMzQ7KSkgewogCQltYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7CiAJCWxlbiA9IG51bV9hcmcoJmFtcDt1c2VyX2J1ZmZlcltpXSwgbWF4LCAmYW1wO3ZhbHVlKTsKQEAgLTEyMzgsNiAmIzQzOzEyOTgsOCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJCWlmICh2YWx1ZSAmZ3Q7IDAgJmFtcDsmYW1wOyAocGt0X2Rldi0mZ3Q7bl9pbWl4X2VudHJpZXMgJmd0OyAwIHx8CiAJCQkJICAhKHBrdF9kZXYtJmd0O2ZsYWdzICZhbXA7IEZfU0hBUkVEKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmICh2YWx1ZSAmZ3Q7IDAgJmFtcDsmYW1wOyBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2RlbGF5KSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlwa3RfZGV2LSZndDtjbG9uZV9za2IgPSB2YWx1ZTsKIApAQCAtMjMyMSw2ICYjNDM7MjM4MywyMSBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fc2V0dXBfaW5qZWN0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogfQogCiAKJiM0MztzdGF0aWMga3RpbWVfdCBrdGltZV9nZXRfY2xvY2soY2xvY2tpZF90IGNsb2NraWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNsb2NraWQpIHsKJiM0MzsJY2FzZSBDTE9DS19SRUFMVElNRToKJiM0MzsJCXJldHVybiBrdGltZV9nZXRfcmVhbCgpOwomIzQzOwljYXNlIENMT0NLX01PTk9UT05JQzoKJiM0MzsJCXJldHVybiBrdGltZV9nZXQoKTsKJiM0MzsJY2FzZSBDTE9DS19UQUk6CiYjNDM7CQlyZXR1cm4ga3RpbWVfZ2V0X2Nsb2NrdGFpKCk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQlyZXR1cm4ga3RpbWVfZ2V0KCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpCiB7CiAJa3RpbWVfdCBzdGFydF90aW1lLCBlbmRfdGltZTsKQEAgLTM1MTAsNyAmIzQzOzM1ODcsOCBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fd2FpdF9mb3Jfc2tiKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogCiBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKLQlib29sIHNrYl9zaGFyZWQgPSAhIShSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7ZmxhZ3MpICZhbXA7IEZfU0hBUkVEKTsKJiM0MzsJdTMyIGZsYWdzID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O2ZsYWdzKTsKJiM0MzsJYm9vbCBza2Jfc2hhcmVkID0gISEoZmxhZ3MgJmFtcDsgRl9TSEFSRUQpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpvZGV2ID0gcGt0X2Rldi0mZ3Q7b2RldjsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJdW5zaWduZWQgaW50IGJ1cnN0ID0gMTsKQEAgLTM1NDUsNiAmIzQzOzM2MjMsOCBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAkvKiBJZiBubyBza2Igb3IgY2xvbmUgY291bnQgZXhoYXVzdGVkIHRoZW4gZ2V0IG5ldyBvbmUgKi8KIAlpZiAoIXBrdF9kZXYtJmd0O3NrYiB8fCAocGt0X2Rldi0mZ3Q7bGFzdF9vayAmYW1wOyZhbXA7CiAJCQkgICAgICAmIzQzOyYjNDM7cGt0X2Rldi0mZ3Q7Y2xvbmVfY291bnQgJmd0Oz0gY2xvbmVfc2tiKSkgewomIzQzOwkJdTY0IHR4dGltZV9kZWxheTsKJiM0MzsKIAkJLyogYnVpbGQgYSBuZXcgcGt0ICovCiAJCWtmcmVlX3NrYihwa3RfZGV2LSZndDtza2IpOwogCkBAIC0zNTU3LDYgJiM0MzszNjM3LDE2IEBAIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogCQl9CiAJCXBrdF9kZXYtJmd0O2xhc3RfcGt0X3NpemUgPSBwa3RfZGV2LSZndDtza2ItJmd0O2xlbjsKIAkJcGt0X2Rldi0mZ3Q7Y2xvbmVfY291bnQgPSAwOwkvKiByZXNldCBjb3VudGVyICovCiYjNDM7CiYjNDM7CQl0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2RlbGF5KTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBGX1RYVElNRSAmYW1wOyZhbXA7IHR4dGltZV9kZWxheSkgewomIzQzOwkJCWNsb2NraWRfdCBjbGsgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2Nsb2NraWQpOwomIzQzOwkJCWt0aW1lX3QgdHh0aW1lID0ga3RpbWVfYWRkX25zKGt0aW1lX2dldF9jbG9jayhjbGspLAomIzQzOwkJCQkJCSAgICAgIHR4dGltZV9kZWxheSk7CiYjNDM7CiYjNDM7CQkJc2tiX3NldF9kZWxpdmVyeV90eXBlX2J5X2Nsb2NraWQocGt0X2Rldi0mZ3Q7c2tiLCB0eHRpbWUsCiYjNDM7CQkJCQkJCSBjbGspOwomIzQzOwkJfQogCX0KIAogCWlmIChwa3RfZGV2LSZndDtkZWxheSAmYW1wOyZhbXA7IHBrdF9kZXYtJmd0O2xhc3Rfb2spCkBAIC0zODY5LDYgJiM0MzszOTU5LDcgQEAgc3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKQogCXBrdF9kZXYtJmd0O2J1cnN0ID0gMTsKIAlwa3RfZGV2LSZndDtub2RlID0gTlVNQV9OT19OT0RFOwogCXBrdF9kZXYtJmd0O2ZsYWdzID0gRl9TSEFSRUQ7CS8qIFNLQiBzaGFyZWQgYnkgZGVmYXVsdCAqLwomIzQzOwlwa3RfZGV2LSZndDt0eHRpbWVfY2xvY2tpZCA9IENMT0NLX01PTk9UT05JQzsKIAogCWVyciA9IHBrdGdlbl9zZXR1cF9kZXYodC0mZ3Q7bmV0LCBwa3RfZGV2LCBpZm5hbWUpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDMxYzY1YTU0NWExMDdjLi4yYzdhMjQ1YzVmZmMyZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTIxNTUsNyAmIzQzOzIxNTUsNyBAQCBzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX1RTT19NQVhfU0VHUywKIAkJCVJFQURfT05DRShkZXYtJmd0O3Rzb19tYXhfc2VncykpIHx8CiAJICAgIG5sYV9wdXRfdWludChza2IsIElGTEFfTUFYX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sCi0JCQkgUkVBRF9PTkNFKGRldi0mZ3Q7bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fAomIzQzOwkJCSAodTY0KVJFQURfT05DRShkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSAqIE5TRUNfUEVSX1VTRUMpIHx8CiAjaWZkZWYgQ09ORklHX1JQUwogCSAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTlVNX1JYX1FVRVVFUywKIAkJCVJFQURfT05DRShkZXYtJmd0O251bV9yeF9xdWV1ZXMpKSB8fApkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmMgYi9uZXQvZXRodG9vbC9jb21tb24uYwppbmRleCAyM2RiNDA2MThmZWQxNC4uOWNhNjk4MGYyMjkxZTYgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2NvbW1vbi5jCkBAIC05NTQsNiAmIzQzOzk1NCwxMCBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkvKiBEcml2ZXIgZ2l2ZXMgdXMgY3VycmVudCBzdGF0ZSwgd2Ugd2FudCB0byByZXR1cm4gY3VycmVudCBjb25maWcgKi8KIAlrcGFyYW0tJmd0O3RjcF9kYXRhX3NwbGl0ID0gZGV2LSZndDtjZmctJmd0O2hkc19jb25maWc7CiAJa3BhcmFtLSZndDtoZHNfdGhyZXNoID0gZGV2LSZndDtjZmctJmd0O2hkc190aHJlc2g7CiYjNDM7CiYjNDM7CWtwYXJhbS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IFJFQURfT05DRShkZXYtJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pOwomIzQzOwlrcGFyYW0tJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0KJiM0MzsJCVJFQURfT05DRShkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTsKIH0KIAogc3RhdGljIHZvaWQgZXRodG9vbF9pbml0X3RzaW5mbyhzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbykKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaAppbmRleCAzZTk2OWEwNzBmOWZlNC4uYWU3YjY1MWM2NThmNzQgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKQEAgLTQ5NCw3ICYjNDM7NDk0LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ZlYXR1cmVzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0ZFQVRVUkVTX1dBTlQKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3NfZ2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0hFQURFUiAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0ZMQUdTICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hFQURFUiAmIzQzOyAxXTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCAmIzQzOyAxXTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0NPTUJJTkVEX0NPVU5UICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NvYWxlc2NlX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NPQUxFU0NFX0hFQURFUiAmIzQzOyAxXTsKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3JpbmdzLmMgYi9uZXQvZXRodG9vbC9yaW5ncy5jCmluZGV4IDkwNTRjODljNWQ3YmIyLi41Y2MyMGQ1ODFjNDZlYyAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvcmluZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9yaW5ncy5jCkBAIC00Miw2ICYjNDM7NDIsMTAgQEAgc3RhdGljIGludCByaW5nc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKIAogCWRhdGEtJmd0O2tlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtJmd0O2NmZy0mZ3Q7aGRzX2NvbmZpZzsKIAlkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggPSBkZXYtJmd0O2NmZy0mZ3Q7aGRzX3RocmVzaDsKJiM0MzsJZGF0YS0mZ3Q7a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0KJiM0MzsJCVJFQURfT05DRShkZXYtJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pOwomIzQzOwlkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0KJiM0MzsJCVJFQURfT05DRShkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTsKIAogCWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9yaW5ncGFyYW0oZGV2LCAmYW1wO2RhdGEtJmd0O3JpbmdwYXJhbSwKIAkJCQkJJmFtcDtkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLSZndDtleHRhY2spOwpAQCAtNjksNyAmIzQzOzczLDkgQEAgc3RhdGljIGludCByaW5nc19yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiAJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovCiAJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOX01BWCAqLwogCSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogX1JJTkdTX0hEU19USFJFU0ggKi8KLQkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBfUklOR1NfSERTX1RIUkVTSF9NQVgqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIF9SSU5HU19IRFNfVEhSRVNIX01BWCAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCAqLwogfQogCiBzdGF0aWMgaW50IHJpbmdzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEyMSw3ICYjNDM7MTI3LDEyIEBAIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsCiAJCQkgIGtyLSZndDtoZHNfdGhyZXNoKSB8fAogCSAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLAotCQkJICBrci0mZ3Q7aGRzX3RocmVzaF9tYXgpKSkpCiYjNDM7CQkJICBrci0mZ3Q7aGRzX3RocmVzaF9tYXgpKSkgfHwKJiM0MzsJICAgICgoc3VwcG9ydGVkX3JpbmdfcGFyYW1zICZhbXA7IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgJmFtcDsmYW1wOwomIzQzOwkgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLAomIzQzOwkJCSAga3ItJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8CiYjNDM7CSAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLAomIzQzOwkJCSAga3ItJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJcmV0dXJuIDA7CkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbXSA9IHsKIAlbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdCQk9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgMSksCiAJW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAogc3RhdGljIGludApAQCAtMTc3LDYgJiM0MzsxODksMTQgQEAgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKG9wcy0mZ3Q7c3VwcG9ydGVkX3JpbmdfcGFyYW1zICZhbXA7IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLAomIzQzOwkJCQkgICAgJiMzNDtzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaXMgbm90IHN1cHBvcnRlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmICh0YltFVEhUT09MX0FfUklOR1NfQ1FFX1NJWkVdICZhbXA7JmFtcDsKIAkgICAgIShvcHMtJmd0O3N1cHBvcnRlZF9yaW5nX3BhcmFtcyAmYW1wOyBFVEhUT09MX1JJTkdfVVNFX0NRRV9TSVpFKSkgewogCQlOTF9TRVRfRVJSX01TR19BVFRSKGluZm8tJmd0O2V4dGFjaywKQEAgLTI0Niw2ICYjNDM7MjY2LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCQkgdGJbRVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl0sICZhbXA7bW9kKTsKIAlldGhubF91cGRhdGVfdTMyKCZhbXA7a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLAogCQkJIHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgJmFtcDttb2QpOwomIzQzOwlldGhubF91cGRhdGVfdTMyKCZhbXA7a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLAomIzQzOwkJCSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sICZhbXA7bW9kKTsKIAlpZiAoIW1vZCkKIAkJcmV0dXJuIDA7CiAKQEAgLTI4MSw2ICYjNDM7MzAzLDkgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1RYXTsKIAllbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggJmd0OyBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KQogCQllcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTsKJiM0MzsJZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICZndDsKJiM0MzsJCSBrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKQomIzQzOwkJZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07CiAJZWxzZQogCQllcnJfYXR0ciA9IE5VTEw7CiAJaWYgKGVycl9hdHRyKSB7CkBAIC0zMDIsNiAmIzQzOzMyNywxMCBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCXJldCA9IGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O3NldF9yaW5ncGFyYW0oZGV2LCAmYW1wO3JpbmdwYXJhbSwKIAkJCQkJICAgICAgJmFtcDtrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLSZndDtleHRhY2spOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCVdSSVRFX09OQ0UoZGV2LSZndDtwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLAomIzQzOwkJCSAgIGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbik7CiYjNDM7CiAJcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxLmMgYi9uZXQvc2NoZWQvc2NoX2ZxLmMKaW5kZXggN2NhZTA4MmE5ODQ3MjEuLmNiZjAxNWRmNjhjY2Y4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2ZxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9mcS5jCkBAIC0zOTksNiAmIzQzOzM5OSwxMSBAQCBzdGF0aWMgc3RydWN0IGZxX2Zsb3cgKmZxX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgUkVBRF9PTkNFKHNrLSZndDtza19wYWNpbmdfc3RhdHVzKSAhPSBTS19QQUNJTkdfRlEpCiAJCQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NrLSZndDtza19wYWNpbmdfc3RhdHVzLAogCQkJCQkgIFNLX1BBQ0lOR19GUSk7CiYjNDM7CiYjNDM7CQlpZiAocS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uICZhbXA7JmFtcDsKJiM0MzsJCSAgICBmcV9za2JfY2Ioc2tiKS0mZ3Q7dGltZV90b19zZW5kICZsdDs9IG5vdykKJiM0MzsJCQlza2ItJmd0O3RzdGFtcCA9IDA7CiYjNDM7CiAJCXJldHVybiAmYW1wO3EtJmd0O2ludGVybmFsOwogCX0KIApAQCAtNzA3LDYgJiM0Mzs3MTIsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiAJc3RydWN0IGZxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJc3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kOwogCXN0cnVjdCBmcV9mbG93X2hlYWQgKmhlYWQ7CiYjNDM7CXU2NCB0aW1lX25leHRfcGFja2V0OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGZxX2Zsb3cgKmY7CiAJdW5zaWduZWQgbG9uZyByYXRlOwpAQCAtNzIxLDcgJiM0Mzs3MjcsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiAJaWYgKHNrYikgewogCQlxLSZndDtpbnRlcm5hbC5xbGVuLS07CiAJCWZxX2RlcXVldWVfc2tiKHNjaCwgJmFtcDtxLSZndDtpbnRlcm5hbCwgc2tiKTsKLQkJZ290byBvdXQ7CiYjNDM7CQlyZXR1cm4gc2tiOwogCX0KIAogCW5vdyA9IGt0aW1lX2dldF9ucygpOwpAQCAtNzU4LDggJiM0Mzs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiAKIAlza2IgPSBmcV9wZWVrKGYpOwogCWlmIChza2IpIHsKLQkJdTY0IHRpbWVfbmV4dF9wYWNrZXQgPSBtYXhfdCh1NjQsIGZxX3NrYl9jYihza2IpLSZndDt0aW1lX3RvX3NlbmQsCi0JCQkJCSAgICAgZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCk7CiYjNDM7CQl0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS0mZ3Q7dGltZV90b19zZW5kLAomIzQzOwkJCQkJIGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQpOwogCiAJCWlmIChub3cgJiM0MzsgcS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uICZsdDsgdGltZV9uZXh0X3BhY2tldCkgewogCQkJaGVhZC0mZ3Q7Zmlyc3QgPSBmLSZndDtuZXh0OwpAQCAtODI4LDExICYjNDM7ODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCkKIAkJICogZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCB3YXMgc2V0IHdoZW4gcHJpb3IgcGFja2V0IHdhcyBzZW50LAogCQkgKiBhbmQgY3VycmVudCB0aW1lIChAbm93KSBjYW4gYmUgdG9vIGxhdGUgYnkgdGVucyBvZiB1cy4KIAkJICovCi0JCWlmIChmLSZndDt0aW1lX25leHRfcGFja2V0KQomIzQzOwkJaWYgKGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQgJmFtcDsmYW1wOyBmLSZndDt0aW1lX25leHRfcGFja2V0ICZsdDsgbm93KQogCQkJbGVuIC09IG1pbihsZW4vMiwgbm93IC0gZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCk7CiAJCWYtJmd0O3RpbWVfbmV4dF9wYWNrZXQgPSBub3cgJiM0MzsgbGVuOwogCX0KJiM0MzsKIG91dDoKJiM0MzsJaWYgKHEtJmd0O29mZmxvYWRfaG9yaXpvbiAmYW1wOyZhbXA7IHRpbWVfbmV4dF9wYWNrZXQgJmx0Oz0gbm93KQomIzQzOwkJc2tiLSZndDt0c3RhbXAgPSAwOwomIzQzOwogCXJldHVybiBza2I7CiB9CiAKQEAgLTExNzksNyAmIzQzOzExODksOSBAQCBzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LAogCQl1NjQgb2ZmbG9hZF9ob3Jpem9uID0gKHU2NClOU0VDX1BFUl9VU0VDICoKIAkJCQkgICAgICBubGFfZ2V0X3UzMih0YltUQ0FfRlFfT0ZGTE9BRF9IT1JJWk9OXSk7CiAKLQkJaWYgKG9mZmxvYWRfaG9yaXpvbiAmbHQ7PSBxZGlzY19kZXYoc2NoKS0mZ3Q7bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHsKJiM0MzsJCWlmIChvZmZsb2FkX2hvcml6b24gJmx0Oz0KJiM0MzsJCSAgICAodTY0KVJFQURfT05DRShxZGlzY19kZXYoc2NoKS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKgomIzQzOwkJICAgIE5TRUNfUEVSX1VTRUMpIHsKIAkJCVdSSVRFX09OQ0UocS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uLCBvZmZsb2FkX2hvcml6b24pOwogCQl9IGVsc2UgewogCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtpbnZhbGlkIG9mZmxvYWRfaG9yaXpvbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmMKaW5kZXggNTVhMzg2ZjNkMWI5MGYuLjZlNjRiYWE0YzYwZGQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuYwpAQCAtNDIsOCAmIzQzOzQyLDEwIEBAIHN0YXRpYyBib29sCWNmZ19tYWNoaW5lX3Nsb3c7CiBzdGF0aWMgdWludDY0X3QJY2ZnX3N0YXJ0X3RpbWVfbnM7CiBzdGF0aWMgaW50CWNmZ19tYXJrOwogc3RhdGljIGJvb2wJY2ZnX3J4OwomIzQzO3N0YXRpYyBib29sCWNmZ192ZXJpZnlfaHdfb2ZmbG9hZDsKIAogc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0OwomIzQzO3N0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydF9yZWFsOwogc3RhdGljIHVpbnQ2NF90IHRkZWxpdmVyX21heDsKIAogc3RhdGljIGludCBlcnJvcnM7CkBAIC0xNTgsMTggJiM0MzsxNjAsNzAgQEAgc3RhdGljIHZvaWQgZG9fcmVjdl92ZXJpZnlfZW1wdHkoaW50IGZkcikKIAkJZXJyb3IoMSwgMCwgJiMzNDtyZWN2OiBub3QgZW1wdHkgYXMgZXhwZWN0ZWQgKCVkLCAlZCkmIzM0OywgcmV0LCBlcnJubyk7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpCiYjNDM7c3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsCiYjNDM7CQkJCSAgICBjb25zdCBjaGFyIHBheWxvYWRfY2hhcikKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7CiYjNDM7CWludDY0X3QgdHN0YW1wID0gMDsKJiM0MzsKJiM0MzsJc3dpdGNoIChlcnItJmd0O2VlX2Vycm5vKSB7CiYjNDM7CWNhc2UgRUNBTkNFTEVEOgomIzQzOwkJaWYgKGVyci0mZ3Q7ZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpCiYjNDM7CQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVyci0mZ3Q7ZWVfY29kZSk7CiYjNDM7CQlyZWFzb24gPSAmIzM0O21pc3NlZCB0eHRpbWUmIzM0OzsKJiM0MzsJYnJlYWs7CiYjNDM7CWNhc2UgRUlOVkFMOgomIzQzOwkJaWYgKGVyci0mZ3Q7ZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKQomIzQzOwkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnItJmd0O2VlX2NvZGUpOwomIzQzOwkJcmVhc29uID0gJiMzNDtpbnZhbGlkIHR4dGltZSYjMzQ7OwomIzQzOwlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcbiYjMzQ7LAomIzQzOwkJICAgICAgZXJyLSZndDtlZV9lcnJubywgZXJyLSZndDtlZV9jb2RlKTsKJiM0MzsJfQomIzQzOwomIzQzOwl0c3RhbXAgPSAoKGludDY0X3QpZXJyLSZndDtlZV9kYXRhKSAmbHQ7Jmx0OyAzMiB8IGVyci0mZ3Q7ZWVfaW5mbzsKJiM0MzsJdHN0YW1wIC09IChpbnQ2NF90KWdsb2JfdHN0YXJ0OwomIzQzOwl0c3RhbXAgLz0gMTAwMCAqIDEwMDA7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O3NlbmQ6IHBrdCAlYyBhdCAlJiMzNDsgUFJJZDY0ICYjMzQ7bXMgZHJvcHBlZDogJXNcbiYjMzQ7LAomIzQzOwkJcGF5bG9hZF9jaGFyLCB0c3RhbXAsIHJlYXNvbik7CiYjNDM7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkb19yZWN2X2VycnF1ZXVlX3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVyciwKJiM0MzsJCQkJCSAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcykKJiM0Mzt7CiYjNDM7CWludDY0X3QgdHM7CiYjNDM7CiYjNDM7CXRzID0gdHNzLSZndDt0c1swXS50dl9zZWM7CiYjNDM7CXRzICo9IDEwMDBVTEwgKiAxMDAwICogMTAwMDsKJiM0MzsJdHMgJiM0Mzs9IHRzcy0mZ3Q7dHNbMF0udHZfbnNlYzsKJiM0MzsJdHMgLT0gZ2xvYl90c3RhcnRfcmVhbDsKJiM0MzsJdHMgLz0gMTAwMDsKJiM0MzsKJiM0MzsJaWYgKHRzICZndDsgY2ZnX3ZhcmlhbmNlX3VzKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtzdyBkZWxheSAlJiMzNDsgUFJJZDY0ICYjMzQ7dXMgZXhjZWVkcyBib3VuZHNcbiYjMzQ7LCB0cyk7CiYjNDM7CQlpZiAoIWNmZ19tYWNoaW5lX3Nsb3cpCiYjNDM7CQkJZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWUoaW50IGZkdCkKIHsKIAljaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSkgJiM0MzsKJiM0MzsJCSAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjbV90aW1lc3RhbXBpbmcpKSAmIzQzOwogCQkgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKV0gPSB7MH07CiAJY2hhciBkYXRhW3NpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7CiAJCSAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7IDFdOwomIzQzOwlzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyAqdHNzOwogCXN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyOwogCWludCByZXQsIG51bV90c3RhbXAgPSAwOwogCXN0cnVjdCBtc2doZHIgbXNnID0gezB9OwogCXN0cnVjdCBpb3ZlYyBpb3YgPSB7MH07CiAJc3RydWN0IGNtc2doZHIgKmNtOwotCWludDY0X3QgdHN0YW1wID0gMDsKIAogCWlvdi5pb3ZfYmFzZSA9IGRhdGE7CiAJaW92Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7CkBAIC0xODEsOCAmIzQzOzIzNSw2IEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpCiAJbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpOwogCiAJd2hpbGUgKDEpIHsKLQkJY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKLQogCQlyZXQgPSByZWN2bXNnKGZkdCwgJmFtcDttc2csIE1TR19FUlJRVUVVRSk7CiAJCWlmIChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQUdBSU4pCiAJCQlicmVhazsKQEAgLTE5Miw0MiAmIzQzOzI0NCwzMiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KQogCQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogZmxhZ3MgMHgleFxuJiMzNDssIG1zZy5tc2dfZmxhZ3MpOwogCiAJCWNtID0gQ01TR19GSVJTVEhEUigmYW1wO21zZyk7CiYjNDM7CQl0c3MgPSBOVUxMOwomIzQzOwomIzQzOwkJaWYgKGNtLSZndDtjbXNnX2xldmVsID09IFNPTF9TT0NLRVQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGNtLSZndDtjbXNnX3R5cGUgPT0gU0NNX1RJTUVTVEFNUElORykgewomIzQzOwkJCXRzcyA9ICh2b2lkICopQ01TR19EQVRBKGNtKTsKJiM0MzsJCQljbSA9IENNU0dfTlhUSERSKCZhbXA7bXNnLCBjbSk7CiYjNDM7CQkJaWYgKCFjbSkKJiM0MzsJCQkJZXJyb3IoMSwgMCwgJiMzNDt0aW1lc3RhbXAgbWlzc2luZyBpcCBlcnJcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsKIAkJaWYgKGNtLSZndDtjbXNnX2xldmVsICE9IGNmZ19lcnJxX2xldmVsIHx8CiAJCSAgICBjbS0mZ3Q7Y21zZ190eXBlICE9IGNmZ19lcnJxX3R5cGUpCiAJCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiB0eXBlIDB4JXguMHgleFxuJiMzNDssCiAJCQkJICAgIGNtLSZndDtjbXNnX2xldmVsLCBjbS0mZ3Q7Y21zZ190eXBlKTsKIAogCQllcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTsKLQkJaWYgKGVyci0mZ3Q7ZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9UWFRJTUUpCiYjNDM7CQlpZiAoZXJyLSZndDtlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RYVElNRSkKJiM0MzsJCQludW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZXJyLAomIzQzOwkJCQkJCQkgICAgICAgZGF0YVtyZXQgLSAxXSk7CiYjNDM7CQllbHNlIGlmIChlcnItJmd0O2VlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HICZhbXA7JmFtcDsgdHNzKQomIzQzOwkJCWRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKGVyciwgdHNzKTsKJiM0MzsJCWVsc2UKIAkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IG9yaWdpbiAweCV4XG4mIzM0OywgZXJyLSZndDtlZV9vcmlnaW4pOwogCi0JCXN3aXRjaCAoZXJyLSZndDtlZV9lcnJubykgewotCQljYXNlIEVDQU5DRUxFRDoKLQkJCWlmIChlcnItJmd0O2VlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKQotCQkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IHVua25vd24gRUNBTkNFTEVEICV1XG4mIzM0OywKLQkJCQkgICAgICBlcnItJmd0O2VlX2NvZGUpOwotCQkJcmVhc29uID0gJiMzNDttaXNzZWQgdHh0aW1lJiMzNDs7Ci0JCWJyZWFrOwotCQljYXNlIEVJTlZBTDoKLQkJCWlmIChlcnItJmd0O2VlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSkKLQkJCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxuJiMzNDssCi0JCQkJICAgICAgZXJyLSZndDtlZV9jb2RlKTsKLQkJCXJlYXNvbiA9ICYjMzQ7aW52YWxpZCB0eHRpbWUmIzM0OzsKLQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiBlcnJubyAldSBjb2RlICV1XG4mIzM0OywKLQkJCSAgICAgIGVyci0mZ3Q7ZWVfZXJybm8sIGVyci0mZ3Q7ZWVfY29kZSk7Ci0JCX0KLQotCQl0c3RhbXAgPSAoKGludDY0X3QpIGVyci0mZ3Q7ZWVfZGF0YSkgJmx0OyZsdDsgMzIgfCBlcnItJmd0O2VlX2luZm87Ci0JCXRzdGFtcCAtPSAoaW50NjRfdCkgZ2xvYl90c3RhcnQ7Ci0JCXRzdGFtcCAvPSAxMDAwICogMTAwMDsKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7c2VuZDogcGt0ICVjIGF0ICUmIzM0OyBQUklkNjQgJiMzNDttcyBkcm9wcGVkOiAlc1xuJiMzNDssCi0JCQlkYXRhW3JldCAtIDFdLCB0c3RhbXAsIHJlYXNvbik7Ci0KIAkJbXNnLm1zZ19mbGFncyA9IDA7CiAJCW1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTsKLQkJbnVtX3RzdGFtcCYjNDM7JiM0Mzs7CiAJfQogCiAJcmV0dXJuIG51bV90c3RhbXA7CkBAIC0yNDUsMTIgJiM0MzsyODcsMTMgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJxdWV1ZV9tc2dzKGludCBmZHQpCiAJCQllcnJvcigxLCBlcnJubywgJiMzNDtwb2xsJiMzNDspOwogCiAJCWlmIChyZXQgJmFtcDsmYW1wOyAocGZkLnJldmVudHMgJmFtcDsgUE9MTEVSUikpCi0JCQludW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZmR0KTsKJiM0MzsJCQludW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlKGZkdCk7CiAKIAkJaWYgKG51bV90c3RhbXAgPT0gY2ZnX251bV9wa3QpCiAJCQlicmVhazsKIAotCX0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpICZsdDsgdGRlbGl2ZXJfbWF4KTsKJiM0MzsJfSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgJmx0OwomIzQzOwkJIHRkZWxpdmVyX21heCAmIzQzOyAoY2ZnX3ZhcmlhbmNlX3VzICogMTAwMCkpOwogfQogCiBzdGF0aWMgdm9pZCBzdGFydF90aW1lX3dhaXQodm9pZCkKQEAgLTI5NSw2ICYjNDM7MzM4LDE4IEBAIHN0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lKGludCBmZCkKIAkJZXJyb3IoMSwgMCwgJiMzNDtnZXRzb2Nrb3B0IHR4dGltZTogbWlzbWF0Y2gmIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGludCBmZCkKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHwKJiM0MzsJCSAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSB8CiYjNDM7CQkgIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEIHwKJiM0MzsJCSAgU09GX1RJTUVTVEFNUElOR19PUFRfVFNPTkxZOwomIzQzOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLAomIzQzOwkJICAgICAgICZhbXA7dmFsLCBzaXplb2YodmFsKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IHRpbWVzdGFtcGluZyYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pCiB7CiAJaW50IGZkOwpAQCAtMzA4LDYgJiM0MzszNjMsOSBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pCiAKIAlzZXRzb2Nrb3B0X3R4dGltZShmZCk7CiAKJiM0MzsJaWYgKGNmZ192ZXJpZnlfaHdfb2ZmbG9hZCkKJiM0MzsJCXNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoZmQpOwomIzQzOwogCWlmIChjZmdfbWFyayAmYW1wOyZhbXA7CiAJICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX01BUkssICZhbXA7Y2ZnX21hcmssIHNpemVvZihjZmdfbWFyaykpKQogCQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IG1hcmsmIzM0Oyk7CkBAIC0zMTcsNyAmIzQzOzM3NSw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbikKIAogc3RhdGljIGludCBzZXR1cF9yeChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKQogewotCXN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDEwMCAqIDEwMDAgfTsKJiM0MzsJc3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gNjAwICogMTAwMCB9OwogCWludCBmZDsKIAogCWZkID0gc29ja2V0KGFkZHItJmd0O3NhX2ZhbWlseSwgU09DS19ER1JBTSwgMCk7CkBAIC0zNDgsNiAmIzQzOzQwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX3Rlc3RfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbikKIAogCXN0YXJ0X3RpbWVfd2FpdCgpOwogCWdsb2JfdHN0YXJ0ID0gZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCk7CiYjNDM7CWdsb2JfdHN0YXJ0X3JlYWwgPSBnZXR0aW1lX25zKENMT0NLX1JFQUxUSU1FKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBjZmdfbnVtX3BrdDsgaSYjNDM7JiM0MzspCiAJCWRvX3NlbmRfb25lKGZkdCwgJmFtcDtjZmdfYnVmW2ldKTsKQEAgLTQ0MCwxMCAmIzQzOzQ5OSwxMSBAQCBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAkJCSYjMzQ7ICAtNiAgICAgICAgICAgIG9ubHkgSVB2NlxuJiMzNDsKIAkJCSYjMzQ7ICAtYyAmbHQ7Y2xvY2smZ3Q7ICAgIG1vbm90b25pYyBvciB0YWkgKGRlZmF1bHQpXG4mIzM0OwogCQkJJiMzNDsgIC1EICZsdDthZGRyJmd0OyAgICAgZGVzdGluYXRpb24gSVAgYWRkcmVzcyAoc2VydmVyKVxuJiMzNDsKLQkJCSYjMzQ7ICAtUyAmbHQ7YWRkciZndDsgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXG4mIzM0OwomIzQzOwkJCSYjMzQ7ICAtaCAgICAgICAgICAgIHZlcmlmeSBoYXJkd2FyZSBvZmZsb2FkICh0eClcbiYjMzQ7CiYjNDM7CQkJJiMzNDsgIC1tICZsdDttYXJrJmd0OyAgICAgc29ja2V0IG1hcmtcbiYjMzQ7CiAJCQkmIzM0OyAgLXIgICAgICAgICAgICBydW4gcnggbW9kZVxuJiMzNDsKJiM0MzsJCQkmIzM0OyAgLVMgJmx0O2FkZHImZ3Q7ICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxuJiMzNDsKIAkJCSYjMzQ7ICAtdCAmbHQ7bnNlYyZndDsgICAgIHN0YXJ0IHRpbWUgKFVUQyBuYW5vc2Vjb25kcylcbiYjMzQ7Ci0JCQkmIzM0OyAgLW0gJmx0O21hcmsmZ3Q7ICAgICBzb2NrZXQgbWFya1xuJiMzNDsKIAkJCSYjMzQ7XG4mIzM0OywKIAkJCXByb2duYW1lKTsKIAlleGl0KDEpOwpAQCAtNDU1LDcgJiM0Mzs1MTUsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpbnQgZG9tYWluID0gUEZfVU5TUEVDOwogCWludCBjOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7NDZjOlM6RDpydDptOiYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7NDZjOkQ6aG06clM6dDomIzM0OykpICE9IC0xKSB7CiAJCXN3aXRjaCAoYykgewogCQljYXNlICYjMzk7NCYjMzk7OgogCQkJaWYgKGRvbWFpbiAhPSBQRl9VTlNQRUMpCkBAIC00ODIsMjEgJiM0Mzs1NDIsMjQgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQllbHNlCiAJCQkJZXJyb3IoMSwgMCwgJiMzNDt1bmtub3duIGNsb2NrIGlkICVzJiMzNDssIG9wdGFyZyk7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O1MmIzM5OzoKLQkJCXNhZGRyID0gb3B0YXJnOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtEJiMzOTs6CiAJCQlkYWRkciA9IG9wdGFyZzsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2gmIzM5OzoKJiM0MzsJCQljZmdfdmVyaWZ5X2h3X29mZmxvYWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O20mIzM5OzoKJiM0MzsJCQljZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWJyZWFrOwogCQljYXNlICYjMzk7ciYjMzk7OgogCQkJY2ZnX3J4ID0gdHJ1ZTsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O1MmIzM5OzoKJiM0MzsJCQlzYWRkciA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKIAkJY2FzZSAmIzM5O3QmIzM5OzoKIAkJCWNmZ19zdGFydF90aW1lX25zID0gc3RydG9sbChvcHRhcmcsIE5VTEwsIDApOwogCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTttJiMzOTs6Ci0JCQljZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApOwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZShhcmd2WzBdKTsKIAkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5CmluZGV4IGFkZjZjODQ4ZDZkODBmLi43Yjc1YTMzZjVjNDNmOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weQpAQCAtMTIsMTAgJiM0MzsxMiwxMyBAQCBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfdmFyaWFudHMKIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBLc2Z0U2tpcEV4CiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIGJrZywgY21kLCBkZWZlciwgdGMKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgRXRodG9vbEZhbWlseSwgTmxFcnJvcgogCiAKIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7TWFpbiBmdW5jdGlvbi4gUnVuIHNvX3R4dGltZSBhcyBzZW5kZXIgYW5kIHJlY2VpdmVyLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcikKJiM0MzsKICAgICBzbG93X21hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgmIzM5O0tTRlRfTUFDSElORV9TTE9XJiMzOTspCiAKICAgICBpZiBub3QgaGFzYXR0cihjZmcsICYjMzQ7YmluX3JlbW90ZSYjMzQ7KToKQEAgLTM4LDYgJiM0Mzs0MSwzNCBAQCBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOgogICAgICAgICBjbWQoY21kX3R4KQogCiAKJiM0MztkZWYgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtDb25maWd1cmUgcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgZXRobmwgPSBFdGh0b29sRmFtaWx5KCkKJiM0MzsKJiM0MzsgICAgdHJ5OgomIzQzOyAgICAgICAgcmluZ3MgPSBldGhubC5yaW5nc19nZXQoeyYjMzk7aGVhZGVyJiMzOTs6IHsmIzM5O2Rldi1pbmRleCYjMzk7OiBjZmcuaWZpbmRleH19KQomIzQzOyAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3JpbmctZ2V0IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJiMzOTspIGZyb20gZQomIzQzOwomIzQzOyAgICBpZiAmIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5OyBub3QgaW4gcmluZ3Mgb3IgXAomIzQzOyAgICAgICAmIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JiMzOTsgbm90IGluIHJpbmdzOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3BhY2luZyBvZmZsb2FkIGhvcml6b24gbm90IHN1cHBvcnRlZCBieSBkZXZpY2UmIzM5OykKJiM0MzsKJiM0MzsgICAgaWYgcmluZ3NbJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heCYjMzk7XSAmbHQ7IDUwXzAwMDoKJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzOTtwYWNpbmcgb2ZmbG9hZCBtYXggaG9yaXpvbiB0b28gc21hbGwmIzM5OykKJiM0MzsKJiM0MzsgICAgY3VyX2hvcml6b24gPSByaW5nc1smIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5O10KJiM0MzsgICAgbmV3X2hvcml6b24gPSA1MF8wMDAKJiM0MzsgICAgZXRobmwucmluZ3Nfc2V0KHsKJiM0MzsgICAgICAgICYjMzk7aGVhZGVyJiMzOTs6IHsmIzM5O2Rldi1pbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sCiYjNDM7ICAgICAgICAmIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5OzogbmV3X2hvcml6b24sCiYjNDM7ICAgIH0pCiYjNDM7ICAgIGRlZmVyKGV0aG5sLnJpbmdzX3NldCwgewomIzQzOyAgICAgICAgJiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fSwKJiM0MzsgICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7OiBjdXJfaG9yaXpvbgomIzQzOyAgICB9KQomIzQzOwomIzQzOwogZGVmIF9xZGlzY19zZXR1cChpZm5hbWUsIHFkaXNjLCBvcHRhcmdzPSYjMzQ7JiMzNDspOgogICAgICYjMzQ7JiMzNDsmIzM0O1JlcGxhY2Ugcm9vdCBxZGlzYy4gUmVzdG9yZSB0aGUgb3JpZ2luYWwgYWZ0ZXIgdGhlIHRlc3QuCiAKQEAgLTU2LDYgJiM0Mzs4Nyw3IEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOgogICAgICAgICAgICAgWyYjMzQ7b25lX3BrdCYjMzQ7LCAmIzM0O2EsMTAmIzM0OywgJiMzNDthLDEwJiMzNDtdLAogICAgICAgICAgICAgWyYjMzQ7aW5fb3JkZXImIzM0OywgJiMzNDthLDEwLGIsMjAmIzM0OywgJiMzNDthLDEwLGIsMjAmIzM0O10sCiAgICAgICAgICAgICBbJiMzNDtyZXZlcnNlX29yZGVyJiMzNDssICYjMzQ7YSwyMCxiLDEwJiMzNDssICYjMzQ7YiwxMCxhLDIwJiMzNDtdLAomIzQzOyAgICAgICAgICAgIFsmIzM0O2JleW9uZF9od19ob3Jpem9uJiMzNDssICYjMzQ7YSw3MCYjMzQ7LCAmIzM0O2EsNzAmIzM0O10sCiAgICAgICAgIF06CiAgICAgICAgICAgICBuYW1lID0gZiYjMzQ7dntpcHZlcn1fe3Rlc3RjYXNlWzBdfSYjMzQ7CiAgICAgICAgICAgICB5aWVsZCBLc2Z0TmFtZWRWYXJpYW50KG5hbWUsIGlwdmVyLCB0ZXN0Y2FzZVsxXSwgdGVzdGNhc2VbMl0pCkBAIC02NCwxNSAmIzQzOzk2LDQyIEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOgogQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSkKIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOgogICAgICYjMzQ7JiMzNDsmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIChmcSkgdGVzdHMuJiMzNDsmIzM0OyYjMzQ7Ci0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpCiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsICYjMzQ7ZnEmIzM0OykKICAgICB0ZXN0X3NvX3R4dGltZShjZmcsICYjMzQ7bW9ubyYjMzQ7LCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSkKIAogCiYjNDM7QGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSkKJiM0MztkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgZnEgdGVzdHMsIHdpdGggb2ZmbG9hZCBob3Jpem9uLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBjZmcucmVxdWlyZV9uc2ltKG5zaW1fdGVzdD1GYWxzZSkKJiM0MzsKJiM0MzsgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpCiYjNDM7ICAgIHRyeToKJiM0MzsgICAgICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCAmIzM0O2ZxJiMzNDssICYjMzQ7b2ZmbG9hZF9ob3Jpem9uIDUwbXMmIzM0OykKJiM0MzsgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O25ldGRldiBkb2VzIG5vdCBzdXBwb3J0IG9mZmxvYWQuIHNraXBwaW5nJiMzNDspIGZyb20gZQomIzQzOwomIzQzOyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gdXNlIG9ubHkgaHcgcGFjaW5nLCBleGNlcHQgYmV5b25kX2h3X2hvcml6b24uCiYjNDM7ICAgIGh3X29ubHkgPSAmIzM0Oy1oJiMzNDsgaWYgYXJnc190eCAhPSAmIzM0O2EsNzAmIzM0OyBlbHNlICYjMzQ7JiMzNDsKJiM0MzsgICAgdGVzdF9zb190eHRpbWUoY2ZnLCAmIzM0O21vbm8mIzM0OywgaXB2ZXIsIGYmIzM0O3tod19vbmx5fSB7YXJnc190eH0mIzM0OywgYXJnc19yeCwgVHJ1ZSkKJiM0MzsKJiM0MzsKJiM0MztAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKQomIzQzO2RlZiB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgdGVzdHMsIHdpdGhvdXQgZnEgcGFjaW5nIHN3IGJhY2t1cC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpCiYjNDM7CiYjNDM7ICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKQomIzQzOyAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgJiMzNDtwZmlmb19mYXN0JiMzNDspCiYjNDM7CiYjNDM7ICAgICMgRXhwZWN0IGFsbCB0ZXN0cyB0byBwYXNzLCBleGNlcHQgYmV5b25kX2h3X2hvcml6b24gd2l0aG91dCBzdyBmYWxsYmFjay4KJiM0MzsgICAgZXhwZWN0X3Bhc3MgPSBub3QgYXJnc190eCA9PSAmIzM0O2EsNzAmIzM0OwomIzQzOyAgICB0ZXN0X3NvX3R4dGltZShjZmcsICYjMzQ7bW9ubyYjMzQ7LCBpcHZlciwgZiYjMzQ7LWgge2FyZ3NfdHh9JiMzNDssIGFyZ3NfcngsIGV4cGVjdF9wYXNzKQomIzQzOwomIzQzOwogQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSkKIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV90YWkoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBmcSB0ZXN0cywgYnV0IHBhc3MgQ0xPQ0tfVEFJIHRvIHRlc3QgY29udmVyc2lvbi4mIzM0OyYjMzQ7JiMzNDsKLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcikKICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgJiMzNDtmcSYjMzQ7KQogICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgJiMzNDt0YWkmIzM0OywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIFRydWUpCiAKQEAgLTk1LDcgJiM0MzsxNTQsNiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZXRmKCk6CiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19ldGYoKSkKIGRlZiB0ZXN0X3NvX3R4dGltZV9ldGYoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X2ZhaWwpOgogICAgICYjMzQ7JiMzNDsmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgZXRmIHRlc3RzLiYjMzQ7JiMzNDsmIzM0OwotICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKQogICAgIHRyeToKICAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsICYjMzQ7ZXRmJiMzNDssICYjMzQ7Y2xvY2tpZCBDTE9DS19UQUkgZGVsdGEgNDAwMDAwJiMzNDspCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgpAQCAtMTA4LDcgJiM0MzsxNjYsMTMgQEAgZGVmIG1haW4oKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0O0JvaWxlcnBsYXRlIGtzZnQgbWFpbi4mIzM0OyYjMzQ7JiMzNDsKICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6CiAgICAgICAgIGtzZnRfcnVuKAotICAgICAgICAgICAgW3Rlc3Rfc29fdHh0aW1lX2ZxX21vbm8sIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwgdGVzdF9zb190eHRpbWVfZXRmXSwKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8sCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcsCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3LAomIzQzOyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV90YWksCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2V0ZiwKJiM0MzsgICAgICAgICAgICBdLAogICAgICAgICAgICAgYXJncz0oY2ZnLCksCiAgICAgICAgICkKICAgICBrc2Z0X2V4aXQoKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhY2luZyBPZmZsb2FkIEhvcml6b24gUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyB0aGUgJiMzNDtwYWNpbmcgb2ZmbG9hZCBob3Jpem9uJiMzNDsgZmVhdHVyZS4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIHRoaXMgdGhpbmcgdG91Y2hlcyBhIHByZXR0eSB3aWRlIHJhbmdlIG9mIGZpbGVzLiBJdCYjMzk7cyBtb2RpZnlpbmcgZG9jdW1lbnRhdGlvbiwgc2V2ZXJhbCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgYW5kIGRyaXZlcnMgZm9yIHRoZSBJbnRlbCBgaWRwZmAgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHVwZGF0aW5nIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sYCwgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdGAsIHBhcnRzIG9mIHRoZSBgaWRwZmAgZHJpdmVyLCBhbmQga2V5IGZpbGVzIGluIGNvcmUgbmV0d29ya2luZzogYG5ldC9zY2hlZC9zY2hfZnEuY2AsIGBuZXQvY29yZS9wa3RnZW4uY2AsIGBuZXQvZXRodG9vbC9yaW5ncy5jYCwgYW5kIG1vcmUuCgpUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgaW50ZWdyYXRpbmcgZGlyZWN0bHkgd2l0aCBjb3JlIHNjaGVkdWxpbmcsIHBhY2tldCBnZW5lcmF0aW9uLCBhbmQgYGV0aHRvb2xgLCB3aGljaCBtZWFucyB0aGlzIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IgaW4gc29tZSBzaWduaWZpY2FudCB3YXlzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIGBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgdG8gYHN0cnVjdCBuZXRfZGV2aWNlYC4gTG9va2luZyBkZWVwZXIsIHRoZSBjaGFuZ2VzIGluIGBuZXQvc2NoZWQvc2NoX2ZxLmNgIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGZlYXR1cmUsIHVzaW5nIGBxLSZndDtvZmZsb2FkX2hvcml6b25gIHdoaWNoIGlzIGNvbmZpZ3VyZWQgdmlhIGBUQ0FfRlFfT0ZGTE9BRF9IT1JJWk9OYCBhbmQgY2hlY2tlZCBhZ2FpbnN0IGBxZGlzY19kZXYoc2NoKS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbmAuIEFsc28sIGBuZXQvY29yZS9wa3RnZW4uY2Agbm93IGhhcyBzdXBwb3J0IGZvciBgVFhUSU1FYCwgYW5kIGBuZXQvZXRodG9vbC9yaW5ncy5jYCBpcyBiZWluZyBtb2RpZmllZCB0byBhbGxvdyBzZXR0aW5nIHRoZSBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBgc2NoX2ZxLmNgIGlzIHRoZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIsIGFuZCB0aGF0JiMzOTtzICp3aWRlbHkqIHVzZWQuIEl0JiMzOTtzIGNlcnRhaW5seSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBJIGtub3cgbWF0dGVycyBhIGxvdCB0byBteSBjdXJyZW50IHdvcmsuIFNpbWlsYXJseSwgYHBrdGdlbi5jYCBpcyB0aGUgcGFja2V0IGdlbmVyYXRvciwgYWxzbyBhY2Nlc3NpYmxlLiBFdGh0b29sIGNvcmUgaXMsIG9mIGNvdXJzZSwgcmVhY2hhYmxlLiBUaGF0JiMzOTtzIGdvb2QuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGNoYW5nZXM6IExvb2tpbmcgYXQgYG5ldC9zY2hlZC9zY2hfZnEuY2AsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGBmcV9jbGFzc2lmeWAsIGBmcV9kZXF1ZXVlYCwgYW5kIGBmcV9jaGFuZ2VgLiBJbiBgbmV0L2NvcmUvcGt0Z2VuLmNgLCBpdCYjMzk7cyBgcGt0Z2VuX2lmX3Nob3dgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl9zZXR1cF9pbmplY3RgLCBga3RpbWVfZ2V0X2Nsb2NrYCwgYHBrdGdlbl94bWl0YCwgYW5kIGBwa3RnZW5fYWRkX2RldmljZWAuIEFuZCBmb3IgYG5ldC9ldGh0b29sL3JpbmdzLmNgIGl0JiMzOTtzIGByaW5nc19wcmVwYXJlX2RhdGFgLCBgcmluZ3NfcmVwbHlfc2l6ZWAsIGByaW5nc19maWxsX3JlcGx5YCwgYGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZWAsIGFuZCBgZXRobmxfc2V0X3JpbmdzYC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgICggYHJ0bmxfZmlsbF9pZmluZm9gKSBhbmQgYG5ldC9ldGh0b29sL2NvbW1vbi5jYCAoIGBldGh0b29sX3JpbmdwYXJhbV9nZXRfY2ZnYCkuCgpTbywgdGhlIGJpZ2dlc3QgaW1wYWN0IGlzIG9uIGBzY2hfZnEuY2AsIGBwa3RnZW4uY2AsIGFuZCBgZXRodG9vbGAsIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBkZXNlcnZlcyBzb21lIHNlcmlvdXMgZnV6emluZy4gRXNwZWNpYWxseSB0aGVzZSBzeW1ib2xzOiBgZnFfY2xhc3NpZnlgLCBgZnFfZGVxdWV1ZWAsIGBmcV9jaGFuZ2VgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl94bWl0YCwgYW5kIGBldGhubF9zZXRfcmluZ3NgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBjb25maWdzLiBGb3IgYHNjaF9mcS5jYCwgaXQmIzM5O3MgYENPTkZJR19ORVRfU0NIX0ZRYC4gRm9yIGBwa3RnZW4uY2AsIGl0JiMzOTtzIGBDT05GSUdfTkVUX1BLVEdFTmAuIEFuZCBmb3IgYGV0aHRvb2xgLCBpdCYjMzk7cyBhbHdheXMgZW5hYmxlZCB3aXRoIGBDT05GSUdfTkVUYC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBlbnN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lcy4gT2theSwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz0zMjI9Y29uZmlnIE5FVF9TQ0hfUElFXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzMzLVxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzM1LVx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTQ0Mz1jaG9pY2Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy00NTAtXHRjb25maWcgREVGQVVMVF9GUVxubmV0L3NjaGVkL0tjb25maWc6NDUxOlx0XHRib29sIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDsgaWYgTkVUX1NDSF9GUVxubmV0L3NjaGVkL0tjb25maWctNDUyLVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQ1Ni1cdGNvbmZpZyBERUZBVUxUX0ZRX0NPREVMXG5uZXQvc2NoZWQvS2NvbmZpZzo0NTc6XHRcdGJvb2wgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5XCYjMzQ7IGlmIE5FVF9TQ0hfRlFfQ09ERUxcbm5ldC9zY2hlZC9LY29uZmlnLTQ1OC1cbm5ldC9zY2hlZC9LY29uZmlnLTQ1OS1cdGNvbmZpZyBERUZBVUxUX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWc6NDYwOlx0XHRib29sIFwmIzM0O0Zsb3cgUXVldWUgUHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXIgRW5oYW5jZWRcJiMzNDsgaWYgTkVUX1NDSF9GUV9QSUVcbm5ldC9zY2hlZC9LY29uZmlnLTQ2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA2MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBORVRfU0NIX0ZRYCBpcyBkZWZpbml0ZWx5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRyaXZlcyB0aGUgZnVuY3Rpb25hbGl0eSBpbiBgc2NoX2ZxLmNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHBhY2tldCBnZW5lcmF0aW9uIGFzcGVjdC4gTm93LCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBsZXQmIzM5O3MgcGl2b3QgdG8gdGhlIHBhY2tldCBnZW5lcmF0b3ImIzM5O3MgY29uZmlndXJhdGlvbiDigJMgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBhdCBgcGt0Z2VuLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyBvcmNoZXN0cmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfUEtUR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNTQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZWJ1Z2dpbmcgUGFja2V0IEdlbmVyYXRpb24gTW9kdWxlIFBsYWNlbWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgbG9jYXRpb24gb2YgYHBrdGdlbmAuIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGJ1cmllZCBzb21ld2hlcmUgaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgYW5kIHRoZSBoaW50IGlzIHRoYXQgaXQmIzM5O3MgYHBrdGdlbi5jYCB3aGljaCBvZnRlbiBpbXBsaWVzIGl0IGlzIGNvcmUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbG9jYXRpb24gZm9yIGNvcmUgbmV0d29yayBjb21wb25lbnRzLiBUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZWl0aGVyIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byBgcGt0Z2VuYCwgb3IgSSYjMzk7bGwgbG9vayBpbnRvIGBuZXQvY29yZS9NYWtlZmlsZWAgZm9yIHRoZSBidWlsZCBkaXJlY3RpdmVzIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLiBIb3BlZnVsbHkgb25lIG9mIHRoZXNlIGZpbGVzIHdpbGwgZXhwbGljaXRseSBzdGF0ZSB3aGVyZSB0aGUgYHBrdGdlbmAgbW9kdWxlIGJlbG9uZ3MuIEZyb20gdGhlcmUsIEkgY2FuIGJ1aWxkIGFuIGltYWdlIHRvIGlzb2xhdGUgdGhlIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBuZXQtcHJvY2ZzLm9cbm5ldC9jb3JlL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfUEtUR0VOKSAmIzQzOz0gcGt0Z2VuLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRQT0xMKSAmIzQzOz0gbmV0cG9sbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1OTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRmluZGluZyB0aGUgRGVmaW5pdGlvbiBvZiBORVRfUEtUR0VOKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBORVRfUEtUR0VOYC4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhpcyBwdXp6bGUsIGFuZCB3aXRob3V0IGtub3dpbmcgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQsIEkmIzM5O20gZXNzZW50aWFsbHkgZmx5aW5nIGJsaW5kLiBJcyBpdCBhIG1hY3JvPyBBIGZ1bmN0aW9uPyBBIHN0cnVjdD8gUGFydCBvZiBhIGJyb2FkZXIgbGlicmFyeT8gVGhlIG5hbWUgZmVlbHMgbGlrZSBpdCBjb3VsZCBiZSByZWxhdGVkIHRvIG5ldHdvcmsgcGFja2V0IGdlbmVyYXRpb24sIHdoaWNoIGlzIGEgZmFpcmx5IGNvbW1vbiBhcmVhLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBzZWFyY2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgdXNlIHRvIGRldGVybWluZSB3aGVyZSB0aGlzIGlzIGRlZmluZWQgLSBpcyB0aGlzIGEgcHJvamVjdCBzcGVjaWZpYyBkZWZpbml0aW9uIG9yIGFuIGFscmVhZHkgaW50ZWdyYXRlZCBwaWVjZSBvZiBjb2RlPyBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGdvIGFib3V0IGZpbmRpbmcgaXQsIGFuZCBtYXkgY2hhbmdlIHRoZSBhcHByb2FjaC4gSSBjb3VsZCBqdXN0IGdyZXAgdGhyb3VnaCB0aGUgY29kZSBiYXNlIGFuZCBzZWUgaWYgaXQmIzM5O3MgdGhlcmUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2VhcmNoLCBtYXliZSBpbiB0aGUgaW5jbHVkZSBmaWxlcywgb3IgcG9zc2libHkgSSYjMzk7bGwgbmFycm93IG15IHNlYXJjaCB0byBhIHN1YmZvbGRlciB0aGF0IGlzIG1vcmUgcmVsZXZhbnQuIFRpbWUgdG8gZ2V0IHRvIHdvcmshCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfUEtUR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM4ND1tZW51IFwmIzM0O05ldHdvcmsgdGVzdGluZ1wmIzM0O1xubmV0L0tjb25maWctMzg1LVxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEdlbmVyYXRvciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBORVRfUEtUR0VOYCBsaXN0ZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGhvdyB0aGlzIGltcGFjdHMgdGhlIHN5c3RlbS4gTG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBuZXQvZXRodG9vbC9yaW5ncy5jYCBmaWxlLiBJIHJlY2FsbCB0aGF0IGBldGh0b29sYCBpbnRlcmFjdGlvbnMgYXJlIHNvbWV0aW1lcyBjb25kaXRpb25lZCBieSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb21waWxhdGlvbiBvZiB0aGF0IHNwZWNpZmljIGZpbGUgZGVwZW5kcyBvbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmbGFnLiBCaW5nbyEgSXQgbG9va3MgbGlrZSBgcmluZ3MuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2AgaXMgZW5hYmxlZC4gTm93IEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L2V0aHRvb2wvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyB3aG9sZSB0aGluZyBoYW5ncyB0b2dldGhlciwgcGFydGljdWxhcmx5IHdpdGggdGhhdCBORVRMSU5LIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYWNrZXQgZ2VuZXJhdGlvbiwgZXRodG9vbCwgYW5kIHRoaXMgbmV0bGluayBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaW5nc1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZT03PWV0aHRvb2xfbmwteVx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcbm5ldC9ldGh0b29sL01ha2VmaWxlOjg6XHRcdCAgIGxpbmtzdGF0ZS5vIGRlYnVnLm8gd29sLm8gZmVhdHVyZXMubyBwcml2ZmxhZ3MubyByaW5ncy5vIFxcXG5uZXQvZXRodG9vbC9NYWtlZmlsZS05LVx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgYGV0aHRvb2xfbmwteWAgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgc28gKmBldGh0b29sX25sLXlgKi4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgZmlsZSwgaXNuJiMzOTt0IGl0PyBUaGUgb25lIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBtb2R1bGVzIGdldCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSB3aG9sZSBxdWVzdGlvbiBib2lscyBkb3duIHRvICp3aGVuKiBleGFjdGx5IGRvZXMgdGhpcyBzcGVjaWZpYyBmaWxlIGdldCBjb21waWxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRpbWluZyBvZiB0aGF0IGNvbXBpbGF0aW9uLiBLbm93aW5nICp3aGVuKiB3aWxsIGlsbHVtaW5hdGUgdGhlIGRlcGVuZGVuY2llcywgYnVpbGQgb3JkZXIsIGFuZCBwb3RlbnRpYWxseSwgYW55IGltcGxpY2l0IGNvbmRpdGlvbmFsIGxvZ2ljIGluIHRoZSBtYWtlZmlsZXMgb3IgYnVpbGQgc3lzdGVtIHRoYXQgY29udHJvbHMgaXQuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2Ygd2hhdCBJIG5lZWQgdG8gZmlndXJlIG91dC4gSSBzdXNwZWN0IHRoZSBhbnN3ZXIgaXMgbGlua2VkIHRvIHRoZSBidWlsZCBzeXN0ZW0mIzM5O3MgZGVjaXNpb24gdHJlZSwgYnV0IEkgY2FuJiMzOTt0IHF1aXRlIHNlZSB0aGUgdHJpZ2dlciBmb3IgdGhhdCBjb21waWxhdGlvbiB5ZXQuIFNvLCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBXaGVuIGlzIGBldGh0b29sX25sLXlgIGNvbXBpbGVkPyBUaGF0JiMzOTtzIHRoZSBxdWVzdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9ubCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL01ha2VmaWxlPTM9b2JqLXlcdFx0XHRcdCYjNDM7PSBpb2N0bC5vIGNvbW1vbi5vXG5uZXQvZXRodG9vbC9NYWtlZmlsZS00LVxubmV0L2V0aHRvb2wvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfRVRIVE9PTF9ORVRMSU5LKVx0JiM0Mzs9IGV0aHRvb2xfbmwub1xubmV0L2V0aHRvb2wvTWFrZWZpbGUtNi1cbm5ldC9ldGh0b29sL01ha2VmaWxlOjc6ZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxubmV0L2V0aHRvb2wvTWFrZWZpbGUtOC1cdFx0ICAgbGlua3N0YXRlLm8gZGVidWcubyB3b2wubyBmZWF0dXJlcy5vIHByaXZmbGFncy5vIHJpbmdzLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NDUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQ2hlY2tpbmcgZm9yIEVUSFRPT0xfTkVUTElOSyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBFVEhUT09MX05FVExJTktgIGhlcmUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY29uZmlybSB3aGVyZSB0aGF0JiMzOTtzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBleHBsaWNpdGx5IGVuYWJsZWQgb3IgY29uZmlndXJhYmxlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBtb3N0IGxpa2VseSB0byBiZSBsdXJraW5nIGluIGVpdGhlciBgbmV0L2V0aHRvb2wvS2NvbmZpZ2Agb3IsIHBlcmhhcHMgbW9yZSBicm9hZGx5LCBgbmV0L0tjb25maWdgLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSXQmIzM5O3MgYSBxdWljayBzY2FuLCBsb29raW5nIGZvciB0aGF0IHNwZWNpZmljIHN5bWJvbCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFVEhUT09MX05FVExJTksmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NTA3PWNvbmZpZyBGQUlMT1ZFUlxuLS1cbm5ldC9LY29uZmlnLTUxOS1cbm5ldC9LY29uZmlnOjUyMDpjb25maWcgRVRIVE9PTF9ORVRMSU5LXG5uZXQvS2NvbmZpZy01MjEtXHRib29sIFwmIzM0O05ldGxpbmsgaW50ZXJmYWNlIGZvciBldGh0b29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290LiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBORVRfU0NIX0ZRYCwgYE5FVF9QS1RHRU5gLCBhbmQgYEVUSFRPT0xfTkVUTElOS2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGVzZSBjb25maWdzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYG5ldC9zY2hlZC9zY2hfZnEuY2AsIEkmIzM5O20gc2VlaW5nIGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGFuZCBgZnFfY2xhc3NpZnlgIGFzIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2UgYXJlIHRoZSB0cmFmZmljIHNoYXBpbmcgYml0cy4gSW4gYG5ldC9jb3JlL3BrdGdlbi5jYCwgSSBoYXZlIGBwa3RnZW5faWZfd3JpdGVgIGFuZCBgcGt0Z2VuX3htaXRgLCB3aGljaCBhcmUgaW52b2x2ZWQgaW4gcGFja2V0IGdlbmVyYXRpb24uIEFuZCBpbiBgbmV0L2V0aHRvb2wvcmluZ3MuY2AsIEkgc2VlIGBldGhubF9zZXRfcmluZ3NgIGFuZCBgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlYCwgd2hpY2ggZGVhbHMgd2l0aCBuZXR3b3JrIHJpbmcgY29uZmlndXJhdGlvbiB0aHJvdWdoIG5ldGxpbmsuCgpUaGVuIEkgc2VlIHNvbWUgZnVuY3Rpb25zIGluIGEgZHJpdmVyLiBIb2xkIG9uLi4uIGBpZHBmYCBpcyBhbiBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBsYW5lIEZ1bmN0aW9uIGRyaXZlci4gTm93LCBpcyB0aGF0IGV2ZW4gcmVsZXZhbnQ/IFByb2JhYmx5IG5vdCBkaXJlY3RseSwgYmVjYXVzZSBpdCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgc28gcHJvYmFibHkgbm90IHJlbGV2YW50IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQnV0IHRoZSB1bmRlcmx5aW5nIG5ldHdvcmtpbmcgY2hhbmdlcyBhcmUgdGhlIGltcG9ydGFudCBwYXJ0cy4KClNvIEkgdGhpbmsgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gTm93LCBqdXN0IHRvIGJlIHN1cmUsIGxldCYjMzk7cyB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGF0IGBmcV9jaGFuZ2VgIGZ1bmN0aW9uIGluIGBuZXQvc2NoZWQvc2NoX2ZxLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcS5jPTEwNTg9c3RhdGljIGludCBmcV9sb2FkX3ByaW9tYXAoc3RydWN0IGZxX3NjaGVkX2RhdGEgKnEsXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jLTEwNzktXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTA4MDpzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9mcS5jLTEwODEtXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYz0xMjMzPXN0YXRpYyBpbnQgZnFfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy0xMjcxLVx0aWYgKG9wdClcbm5ldC9zY2hlZC9zY2hfZnEuYzoxMjcyOlx0XHRlcnIgPSBmcV9jaGFuZ2Uoc2NoLCBvcHQsIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTI3My1cdGVsc2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmM9MTM4OT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTM5OC1cdC5kZXN0cm95XHQ9XHRmcV9kZXN0cm95LFxubmV0L3NjaGVkL3NjaF9mcS5jOjEzOTk6XHQuY2hhbmdlXHRcdD1cdGZxX2NoYW5nZSxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xNDAwLVx0LmR1bXBcdFx0PVx0ZnFfZHVtcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIEZRIExvZ2ljKioKClJpZ2h0LCBgZnFfY2hhbmdlYCBpcyB3aGVyZSBpdCBhbGwgYmVnaW5zLCB0aGUgaW5pdGlhbCBzZXR1cCBmb3IgdGhlIGZhaXIgcXVldWluZyBkaXNjaXBsaW5lLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCB0aGUgZW50cnkgdG8gYWxsIHRoZSBhY3Rpb24uIE5vdywgdGhlIHJlYWwgbWVhdCBvZiBpdCBpcyBnb2luZyB0byBiZSBpbiBob3cgaXQgYWN0dWFsbHkgKmZ1bmN0aW9ucyouIEkgbmVlZCB0byBnZXQgZG93biBpbnRvIHRoZSB3ZWVkcyBhbmQgc2VlIGhvdyB0aGUgcGFja2V0cyBhcmUgYmVpbmcgaGFuZGxlZCwgaG93IHRyYWZmaWMgaXMgYWN0dWFsbHkgbWFuYWdlZCBvbmNlIGl0JiMzOTtzIGluIHRoZSBxdWV1ZS4gTXkgZm9jdXMgbm93IGlzIGRlZmluaXRlbHkgb24gYGZxX2RlcXVldWVgIGFuZCBgZnFfY2xhc3NpZnlgIOKAkyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHJlYWxseSB3YW50IHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBzZWUgaG93IHRoZSBxdWV1ZWQgcGFja2V0cyBhcmUgc2VsZWN0ZWQgYW5kIHdoaWNoIG9uZXMgZ2V0IGEgcHJpb3JpdHkgYnVtcCBvciBhIHNodW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcV9kZXF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnEuYz02OT1zdHJ1Y3QgZnFfZmxvdyB7XG5uZXQvc2NoZWQvc2NoX2ZxLmM6NzA6LyogRmlyc3QgY2FjaGUgbGluZSA6IHVzZWQgaW4gZnFfZ2MoKSwgZnFfZW5xdWV1ZSgpLCBmcV9kZXF1ZXVlKCkgKi9cbm5ldC9zY2hlZC9zY2hfZnEuYy03MS1cdHN0cnVjdCByYl9yb290XHR0X3Jvb3Q7XG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jPTExMT1zdHJ1Y3QgZnFfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jLTEzMi1cbm5ldC9zY2hlZC9zY2hfZnEuYzoxMzM6XHR1bnNpZ25lZCBpbnQgYmFuZF9ucjsgLyogYmFuZCBiZWluZyBzZXJ2aWNlZCBpbiBmcV9kZXF1ZXVlKCkgKi9cbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzQtXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jPTQ4Nj1zdGF0aWMgdm9pZCBmcV9lcmFzZV9oZWFkKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZnFfZmxvdyAqZmxvdyxcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNTAyLSAqL1xubmV0L3NjaGVkL3NjaF9mcS5jOjUwMzpzdGF0aWMgdm9pZCBmcV9kZXF1ZXVlX3NrYihzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGZxX2Zsb3cgKmZsb3csXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNTA0LVx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jPTY5OT1zdGF0aWMgc3RydWN0IGZxX2Zsb3dfaGVhZCAqZnFfcGJhbmRfaGVhZF9zZWxlY3Qoc3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy03MDktXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NzEwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnEuYy03MTEte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy03MjgtXHRcdHEtXHUwMDNlaW50ZXJuYWwucWxlbi0tO1xubmV0L3NjaGVkL3NjaF9mcS5jOjcyOTpcdFx0ZnFfZGVxdWV1ZV9za2Ioc2NoLCBcdTAwMjZxLVx1MDAzZWludGVybmFsLCBza2IpO1xubmV0L3NjaGVkL3NjaF9mcS5jLTczMC1cdFx0cmV0dXJuIHNrYjtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNzc2LVx0XHRwcmVmZXRjaChcdTAwMjZza2ItXHUwMDNlZW5kKTtcbm5ldC9zY2hlZC9zY2hfZnEuYzo3Nzc6XHRcdGZxX2RlcXVldWVfc2tiKHNjaCwgZiwgc2tiKTtcbm5ldC9zY2hlZC9zY2hfZnEuYy03NzgtXHRcdGlmICh1bmxpa2VseSgoczY0KShub3cgLSB0aW1lX25leHRfcGFja2V0IC0gcS1cdTAwM2VjZV90aHJlc2hvbGQpIFx1MDAzZSAwKSkge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYz0xMzg5PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzkzLVx0LmVucXVldWVcdD1cdGZxX2VucXVldWUsXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTM5NDpcdC5kZXF1ZXVlXHQ9XHRmcV9kZXF1ZXVlLFxubmV0L3NjaGVkL3NjaF9mcS5jLTEzOTUtXHQucGVla1x0XHQ9XHRxZGlzY19wZWVrX2RlcXVldWVkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk1NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBOZXR3b3JrIEludGVyZmFjZSBSaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYGZxX2RlcXVldWVgIGlzIHByb3ZpbmcgdG8gYmUgYSBzb2xpZCBzb2x1dGlvbiBpbiB0aGlzIGNvbnRleHQuIE15IHByaW1hcnkgaW50ZXJlc3Qgbm93IGlzIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJpbmdzIGFyZSBhY3R1YWxseSBjb25maWd1cmVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBldGh0b29sIGZyYW1ld29yay4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG5ldC9ldGh0b29sL3JpbmdzLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBldGhubF9zZXRfcmluZ3NgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIHJpbmcgc2V0dGluZ3MsIGxpa2VseSByZWxhdGVkIHRvIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHF1ZXVlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzZXR0aW5ncywgYXJlIGJlaW5nIHRyYW5zbGF0ZWQgaW50byBsb3ctbGV2ZWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIC0gYXJlIHdlIGRpcmVjdGx5IG1hbmlwdWxhdGluZyByZWdpc3RlcnMsIHVzaW5nIHNwZWNpZmljIGRyaXZlci1kZWZpbmVkIGNhbGxzLCBvciBpbnRlcmFjdGluZyB3aXRoIGEgbW9yZSBnZW5lcmljIGludGVyZmFjZT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSByaW5nIHNpemUsIGludGVycnVwdCBtb2RlcmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBSU1MgcGFyYW1ldGVycy4gVGhpcyBzaG91bGQgaW5mb3JtIGFueSBwb3RlbnRpYWwgdHVuaW5nIGRlY2lzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRobmxfc2V0X3JpbmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvcmluZ3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9yaW5ncy5jPTE2MT1zdGF0aWMgaW50XG5uZXQvZXRodG9vbC9yaW5ncy5jOjE2MjpldGhubF9zZXRfcmluZ3NfdmFsaWRhdGUoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbm5ldC9ldGh0b29sL3JpbmdzLmMtMTYzLVx0XHRcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL3JpbmdzLmM9MjM1PXN0YXRpYyBpbnRcbm5ldC9ldGh0b29sL3JpbmdzLmM6MjM2OmV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2V0aHRvb2wvcmluZ3MuYy0yMzcte1xuLS1cbm5ldC9ldGh0b29sL3JpbmdzLmM9MzM3PWNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9yaW5nc19yZXF1ZXN0X29wcyA9IHtcbi0tXG5uZXQvZXRodG9vbC9yaW5ncy5jLTM0Ny1cbm5ldC9ldGh0b29sL3JpbmdzLmM6MzQ4Olx0LnNldF92YWxpZGF0ZVx0XHQ9IGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZSxcbm5ldC9ldGh0b29sL3JpbmdzLmM6MzQ5Olx0LnNldFx0XHRcdD0gZXRobmxfc2V0X3JpbmdzLFxubmV0L2V0aHRvb2wvcmluZ3MuYy0zNTAtXHQuc2V0X250Zl9jbWRcdFx0PSBFVEhUT09MX01TR19SSU5HU19OVEYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBhY2tldCBHZW5lcmF0aW9uIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBgZXRobmxfc2V0X3JpbmdzYCBzZWVtcyBsaWtlIGEgc29saWQgcGllY2Ugb2YgY29kZSwgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTm93LCBJIHdhbnQgdG8gZHJpbGwgZG93biBmdXJ0aGVyIGludG8gdGhlIHBhY2tldCBnZW5lcmF0aW9uIHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBwa3RnZW5faWZfd3JpdGVgIHdpdGhpbiBgbmV0L2NvcmUvcGt0Z2VuLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXItcHJvdmlkZWQgZGF0YSwgYW5kIGFueSBjb25maWd1cmF0aW9uLCBpcyBhY3R1YWxseSB0cmFuc2xhdGVkIGludG8gYSB3aXJlIGltYWdlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgZm9ybWF0dGluZywgY2hlY2tzdW0gY2FsY3VsYXRpb25zIChpZiBlbmFibGVkKSwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSB0cmFuc21pdCBxdWV1ZSBhcmUgaGFwcGVuaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBwa3RnZW5faWZfd3JpdGVgIGFuZCBsb3dlci1sZXZlbCBuZXR3b3JraW5nIGNvbXBvbmVudHMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyBwYWNrZXQgaW5qZWN0aW9uIHBlcmZvcm1hbmNlIGFuZCBlbnN1cmluZyBhY2N1cmF0ZSBwYXlsb2FkIHRyYW5zbWlzc2lvbi4gSSYjMzk7bGwgbmVlZCB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBkYXRhIGNvcGllcywgYW5kIGFueSBsb2NraW5nIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBwYXRoIGZvciBwYWNrZXQgZ2VuZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9OTcxPXN0YXRpYyBfX3UzMiBwa3RnZW5fcmVhZF9mbGFnKGNvbnN0IGNoYXIgKmYsIGJvb2wgKmRpc2FibGUpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtOTk5LVxubmV0L2NvcmUvcGt0Z2VuLmM6MTAwMDpzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xMDAxLVx0XHRcdCAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0xOTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX2lmX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTE5NDItXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG5uZXQvY29yZS9wa3RnZW4uYzoxOTQzOlx0LnByb2Nfd3JpdGVcdD0gcGt0Z2VuX2lmX3dyaXRlLFxubmV0L2NvcmUvcGt0Z2VuLmMtMTk0NC1cdC5wcm9jX3JlbGVhc2VcdD0gc2luZ2xlX3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFBhY2tldCBHZW5lcmF0aW9uIFdvcmtmbG93KioKCkFscmlnaHQsIHNvIGBwa3RnZW5faWZfd3JpdGVgIGlzIGxvb2tpbmcgc29saWQuIFRoYXQgc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIGluaXRpYWwgaW50ZXJmYWNlIHdyaXRlIGFzIGV4cGVjdGVkLiBOb3csIEkgd2FudCB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGl0c2VsZi4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHBrdGdlbl94bWl0YCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvcGt0Z2VuLmNgLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBwcmVjaXNlbHkgaG93IHRoZSBnZW5lcmF0ZWQgcGFja2V0cyBhcmUgYWN0dWFsbHkgc2VudCBvdXQgb24gdGhlIHdpcmUgZnJvbSB0aGUgY29yZSwgZ2l2ZW4gdGhhdCBpbml0aWFsIGNoZWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgdG8gZW5zdXJlIHRoZSBwYXRoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZGVzaXJlZCBvcGVyYXRpb24sIGFuZCBmdWxseSB1bmRlcnN0YW5kIHRoZSB0cmFuc21pc3Npb24gYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0xMDAwPXN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xNDA2LVx0XHRcdC8qIG1ha2Ugc3VyZSBuZXcgcGFja2V0IGlzIGFsbG9jYXRlZCBldmVyeSB0aW1lXG5uZXQvY29yZS9wa3RnZW4uYzoxNDA3Olx0XHRcdCAqIHBrdGdlbl94bWl0KCkgaXMgY2FsbGVkXG5uZXQvY29yZS9wa3RnZW4uYy0xNDA4LVx0XHRcdCAqL1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM1NzI9c3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zNTg3LVxubmV0L2NvcmUvcGt0Z2VuLmM6MzU4ODpzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTM1ODkte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM2MDEtXHQgKiBwcmV2ZW50IHNvbWUgY29uY3VycmVudCBjaGFuZ2VzIGZyb20gc2xpcHBpbmcgaW4uIEFuZCB0aGUgc3RhYmlsaXplZFxubmV0L2NvcmUvcGt0Z2VuLmM6MzYwMjpcdCAqIGNvbmZpZyB3aWxsIGJlIHJlYWQgaW4gZHVyaW5nIHRoZSBuZXh0IHJ1biBvZiBwa3RnZW5feG1pdC5cbm5ldC9jb3JlL3BrdGdlbi5jLTM2MDMtXHQgKi9cbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zNzkwPXN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF93b3JrZXIodm9pZCAqYXJnKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM4MTYtXHRcdGlmIChsaWtlbHkocGt0X2RldikpIHtcbm5ldC9jb3JlL3BrdGdlbi5jOjM4MTc6XHRcdFx0cGt0Z2VuX3htaXQocGt0X2Rldik7XG5uZXQvY29yZS9wa3RnZW4uYy0zODE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY2MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHJ1bmRvd24gb2YgdGhlc2UgZnVuY3Rpb25zLCByZWZsZWN0aW5nIG15IGluaXRpYWwgYXNzZXNzbWVudDoKCioqRnVuY3Rpb25hbGl0eSBPdmVydmlldyoqCgpBbHJpZ2h0LCBzbyBgcGt0Z2VuX3htaXRgLCB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgc2VlbXMgdG8gYmUgaW4gYSBnb29kIHN0YXRlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBlY29zeXN0ZW0sIHRoZSBmb2N1cyBmdW5jdGlvbnMgc2VlbSB0byBiZTogYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYGV0aG5sX3NldF9yaW5nc2AsIGBwa3RnZW5faWZfd3JpdGVgLCBhbmQgb2YgY291cnNlIGBwa3RnZW5feG1pdGAuIE5lZWQgdG8ga2VlcCB0aGVzZSBmdW5jdGlvbnMgaW4gbWluZCB0byBlc3RhYmxpc2ggdGhlIGJpZyBwaWN0dXJlLiBMb29rcyBsaWtlIGBmcV9jbGFzc2lmeWAgaGFzIGFsc28gc2VlbiBzb21lIG1vZGlmaWNhdGlvbnM7IGdvaW5nIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMgdG8gdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG9mIGl0cyBpbmZsdWVuY2UuIEl0JiMzOTtzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciwgcmVsYXRlZCBmdW5jdGlvbnMgaW4gcGxheSB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuIEdvdHRhIGJlIG1ldGljdWxvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZxX2NsYXNzaWZ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnEuYz0zMTQ9c3RhdGljIGJvb2wgZnFfZmFzdHBhdGhfY2hlY2soY29uc3Qgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jLTM1NS1cbm5ldC9zY2hlZC9zY2hfZnEuYzozNTY6c3RhdGljIHN0cnVjdCBmcV9mbG93ICpmcV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfZnEuYy0zNTctXHRcdFx0XHQgICB1NjQgbm93KVxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYz01OTk9c3RhdGljIGludCBmcV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy02MzItXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NjMzOlx0ZiA9IGZxX2NsYXNzaWZ5KHNjaCwgc2tiLCBub3cpO1xubmV0L3NjaGVkL3NjaF9mcS5jLTYzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTmV0d29yayBJbnRlcmZhY2UgSW5mb3JtYXRpb24gSGFuZGxpbmcqKgoKQWxyaWdodCwgYGZxX2NsYXNzaWZ5YCBpcyBkZWZpbml0ZWx5IGEgc29saWQgcGllY2Ugb2YgdGhlIHB1enpsZSwgc2VlbXMgd2VsbCBpbXBsZW1lbnRlZCBmcm9tIHdoYXQgSSByZW1lbWJlci4gQnV0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBkZWVwZXIsIGFuZCB0byBkbyB0aGF0IEkgbmVlZCB0byBsb29rIGF0IGhvdyBpbnRlcmZhY2UgaW5mb3JtYXRpb24gaXMgYWN0dWFsbHkgZmlsbGVkLCBhbmQgdGhhdCBtZWFucyBJIG5lZWQgdG8gZ28gc3BlbHVua2luZyBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uICpydG5sX2ZpbGxfaWZpbmZvKiBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB3aGVyZSB0aGF0IGluZm9ybWF0aW9uIGlzIGNvbnN0cnVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBuZXRsaW5rIGNvZGUgZGlyZWN0bHkgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSBpdHMgc3BlY2lmaWMgYmVoYXZpb3IuIEkgYmV0IEkgY2FuIGdhaW4gc29tZSBuZXcgaW5zaWdodHMgaW50byB0aGUgaW50ZXJmYWNlIG1ldGFkYXRhIHBvcHVsYXRpb24gd2l0aGluIHRoYXQgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2ZpbGxfaWZpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmM9MjA2OD1zdGF0aWMgaW50IHJ0bmxfZmlsbF9kcGxsX3BpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwODktXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDkwOnN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA5MS1cdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqc3JjX25ldCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNTI0PXN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU5OS1cdFx0XHRjb250aW51ZTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2MDA6XHRcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8oc2tiLCBkZXYsIG5ldCwgUlRNX05FV0xJTkssXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjAxLVx0XHRcdFx0ICAgICAgIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDI1Nj1zdGF0aWMgaW50IHJ0bmxfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzI4LVx0aWYgKG5za2IpXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MzI5Olx0XHRlcnIgPSBydG5sX2ZpbGxfaWZpbmZvKG5za2IsIGRldiwgbmV0LFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDMzMC1cdFx0XHRcdCAgICAgICBSVE1fTkVXTElOSywgTkVUTElOS19DQihza2IpLnBvcnRpZCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NTQ5PXN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1NjgtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTY5Olx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgZGV2X25ldChkZXYpLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU3MC1cdFx0XHQgICAgICAgdHlwZSwgcG9ydGlkLCBzZXEsIGNoYW5nZSwgMCwgMCwgZXZlbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTYwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqQXNzZXNzbWVudCBvZiBOZXRsaW5rIGFuZCBFdGh0b29sIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYHJ0bmxfZmlsbF9pZmluZm9gIGlzIGEgcHJldHR5IGJyb2FkIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgdXNlZCBxdWl0ZSBhIGJpdCBpbiBuZXRsaW5rIGR1bXBzLiBXaGlsZSBpdCB3b3JrcywgaXQmIzM5O3MgYSBiaXQgb2YgYSBob3Qgc3BvdCBpbiB0aGUgY29kZSwgd2hpY2ggY291bGQgbGVhZCB0byBzb21lIHNrZXdlZCByZXN1bHRzIGlmIEkmIzM5O20gZnV6emluZyB3aXRoIGl0LiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gc2tpcCBpdCBmb3Igbm93LiBJIHdhbnQgdG8gdHJ5IHRvIGtlZXAgdGhlIGZ1enppbmcgYmFsYW5jZWQgYWNyb3NzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmdgIGluc2lkZSBgbmV0L2V0aHRvb2wvY29tbW9uLmNgLiBJIG5lZWQgdG8gcmV2aWV3IHRoaXMgZm9yIHNvbWUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5jPTkyND1pbnQgZXRodG9vbF9jaGVja19vcHMoY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMpXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmMtOTQyLVxubmV0L2V0aHRvb2wvY29tbW9uLmM6OTQzOnZvaWQgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvY29tbW9uLmMtOTQ0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnBhcmFtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM2NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiB0aGUgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZ2AgaXMgYW5vdGhlciBnZXQgZnVuY3Rpb24sIGFuZCBmcmFua2x5LCBub3QgYXMgaW50cmlndWluZyBhcyB0aGUgc2V0IGZ1bmN0aW9ucyB3ZSYjMzk7cmUgbG9va2luZyBhdC4gV2UmIzM5O3JlIGdvaW5nIHRvIGtlZXAgb3VyIGF0dGVudGlvbiBmaXJtbHkgb24gdGhlc2U6IGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGBmcV9jbGFzc2lmeWAsIGBldGhubF9zZXRfcmluZ3NgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYW5kIGBwa3RnZW5feG1pdGAuIFRob3NlIHNlZW0gdG8gYmUgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZywgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmlwdWxhdGlvbiBvZiB0aGUgc3lzdGVtLgoKTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIHRoZW1zZWx2ZXMsIHdlIGhhdmUgYE5FVF9TQ0hfRlFgLCBgTkVUX1BLVEdFTmAsIGFuZCBgRVRIVE9PTF9ORVRMSU5LYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfRlFgIHRob3VnaC4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gb3Zlcmxvb2sgYW55IGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50cyB0aGVyZS4gRW5zdXJpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzIGluZGVwZW5kZW50bHkgdXNhYmxlIHdpbGwgYmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9GUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz0zMjI9Y29uZmlnIE5FVF9TQ0hfUElFXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzMzLVxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzM1LVx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlF1aWNrIE5ldHdvcmsgU2NoZWR1bGVyIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgTkVUX1NDSF9GUWAuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSB0aGF0IG9uZSYjMzk7cyBnb3QgYW55IHBhcnRpY3VsYXJseSBjb21wbGV4IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gd29ycnkgYWJvdXQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgd2hpY2ggaXMgYWx3YXlzIG5pY2UuIE5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgTkVUX1BLVEdFTmAuIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHNjaGVkdWxlcjsgdGhlcmUgY291bGQgYmUgc3VidGxlIGludGVyYWN0aW9ucyBJJiMzOTttIG1pc3NpbmcgYXQgZmlyc3QgZ2xhbmNlLCBlc3BlY2lhbGx5IGlmIGl0IHVzZXMgY3VzdG9tIHBhY2tldCBnZW5lcmF0aW9uIHRlY2huaXF1ZXMuIEJldHRlciB0byBiZSB0aG9yb3VnaCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9QS1RHRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zODQ9bWVudSBcJiMzNDtOZXR3b3JrIHRlc3RpbmdcJiMzNDtcbm5ldC9LY29uZmlnLTM4NS1cbm5ldC9LY29uZmlnOjM4Njpjb25maWcgTkVUX1BLVEdFTlxubmV0L0tjb25maWctMzg3LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBEZXBlbmRlbmNpZXMgaW4gTmV0d29yayBQYWNrZXQgR2VuZXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBgTkVUX1BLVEdFTmAgaXMgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIEdlbmVyYWxseSwgaXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIHRoYXQgYE5FVF9QS1RHRU5gIHJlbGllcyBvbiBgSU5FVGAsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTttIG5vdCB0b28gY29uY2VybmVkIGFib3V0IHRoYXQgcGFydGljdWxhciByZWxhdGlvbnNoaXAuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgZnVuY3Rpb24uCgpIb3dldmVyLCBJJiMzOTttIGZlZWxpbmcgYSBxdWljayBpdGNoIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgRVRIVE9PTF9ORVRMSU5LYCBpcyBzZXQgYXMgZXhwZWN0ZWQsIGdpdmVuIHRoZSBjb250ZXh0LiBKdXN0IHdhbnQgdG8gZWxpbWluYXRlIGFueSBwb3RlbnRpYWwgZ290Y2hhcy4gQSBxdWljayBzYW5pdHkgY2hlY2sgbmV2ZXIgaHVydHMsIGV2ZW4gd2hlbiB0aGluZ3MgKnNlZW0qIGZpbmUuIEEgbGl0dGxlIGR1ZSBkaWxpZ2VuY2UgaXMgYWx3YXlzIGEgZ29vZCB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVUSFRPT0xfTkVUTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTUwNz1jb25maWcgRkFJTE9WRVJcbi0tXG5uZXQvS2NvbmZpZy01MTktXG5uZXQvS2NvbmZpZzo1MjA6Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xubmV0L0tjb25maWctNTIxLVx0Ym9vbCBcJiMzNDtOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU0NwoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggcmVsaWVzIG9uIGBFVEhUT09MX05FVExJTktgLCB3aGljaCwgb2YgY291cnNlLCBkZXBlbmRzIG9uIGJvdGggYE5FVGAgYW5kIGBORVRMSU5LYC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nPyBMZXQgbWUgc2VlLgoKQWxyaWdodCwgdGhlIGNvZGUgY2hhbmdlcyBmb2N1cyBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY2AuIFNob3VsZCBJIGJlIGNvbmNlcm5lZCBhYm91dCBhbiBgSURQRmAgY29uZmlnIHJlcXVpcmVtZW50IGhlcmU/IEJhc2VkIG9uIHRoZSBwcm9tcHQsIGl0IHNvdW5kcyBsaWtlIHRoaXMgaW52b2x2ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIHdoaWNoIHVzdWFsbHkgZXhwZWN0IGFjdHVhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhpbmtpbmcgYWJvdXQgaXQsIGBpZHBmYCBpcyBJbnRlbCYjMzk7cyBJbmZyYXN0cnVjdHVyZSBEYXRhIFBsYW5lIEZ1bmN0aW9uLCBhIGhhcmR3YXJlIGRyaXZlci4gVGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gU28sIEkgY2FuIGRpc3JlZ2FyZCB0aGUgYGlkcGZgIGNoYW5nZXMgZm9yIGZ1enppbmcgcHVycG9zZXMgYmVjYXVzZSB0aGV5IGxpa2VseSB3b24mIzM5O3QgYmUgdHJpZ2dlcmVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4KCkhvd2V2ZXIsIHRoZSBrZXkgbmV0d29ya2luZyBjb21wb25lbnRzIHRoYXQgKmFyZSogY2hhbmdlZCAtIGxpa2UgYHNjaF9mcS5jYCwgYHBrdGdlbi5jYCwgYW5kIHRoZSBldGh0b29sIGludGVyZmFjZSAtIHRoZXNlIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgZXZlbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc3ludGhlc2l6ZSB0aGlzLiBXZSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6CgoqICAgYGZxX2NoYW5nZWAKKiAgIGBmcV9kZXF1ZXVlYAoqICAgYGZxX2NsYXNzaWZ5YAoqICAgYGV0aG5sX3NldF9yaW5nc2AKKiAgIGBwa3RnZW5faWZfd3JpdGVgCiogICBgcGt0Z2VuX3htaXRgCgpBbmQgd2UmIzM5O2xsIGVuYWJsZSB0aGVzZSBjb25maWd1cmF0aW9uczoKCiogICBgTkVUX1NDSF9GUWAKKiAgIGBORVRfUEtUR0VOYAoqICAgYEVUSFRPT0xfTkVUTElOS2AKClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCB0b3VjaGVzIHRoZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKGBzY2hfZnEuY2ApLCB0aGUgcGFja2V0IGdlbmVyYXRvciAoYHBrdGdlbi5jYCksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSB0byBlbmFibGUgdGhpcyBob3Jpem9uLiBHaXZlbiB0aGF0IHRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZnV6emluZyBpcyBhcHByb3ByaWF0ZSwgZXZlbiBpZiB0aGUgZHJpdmVyIGNoYW5nZXMgYXJlIGhhcmR3YXJlLXNwZWNpZmljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICAgJiMzNDtORVRfUEtUR0VOJiMzNDssCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZxX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2ZxX2NsYXNzaWZ5JiMzNDssCiAgICAmIzM0O2V0aG5sX3NldF9yaW5ncyYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCBtb2RpZmllcyB0aGUgY29yZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKHNjaF9mcS5jKSwgdGhlIHBhY2tldCBnZW5lcmF0b3IgKHBrdGdlbi5jKSwgYW5kIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIChyaW5ncy5jKSB0byBzdXBwb3J0IGNvbmZpZ3VyaW5nIGFuZCB1c2luZyB0aGlzIGhvcml6b24uIFRoZXNlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgdG8gdGhlIGlkcGYgZHJpdmVyIGFyZSBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgbm90IGVtdWxhdGVkLCBidXQgdGhlIGNvcmUgY2hhbmdlcyBhcmUgc3VmZmljaWVudCB0byB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7LAogICAgJiMzNDtFVEhUT09MX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmcV9jbGFzc2lmeSYjMzQ7LAogICAgJiMzNDtldGhubF9zZXRfcmluZ3MmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDssCiAgICAmIzM0O3BrdGdlbl94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbi4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgRmFpciBRdWV1ZSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfZnEuYyksIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIChwa3RnZW4uYyksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSAocmluZ3MuYykgdG8gc3VwcG9ydCBjb25maWd1cmluZyBhbmQgdXNpbmcgdGhpcyBob3Jpem9uLiBUaGVzZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIHRvIHRoZSBpZHBmIGRyaXZlciBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCBlbXVsYXRlZCwgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIHN1ZmZpY2llbnQgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6Mjk6MzEuMzY1NDE0MjE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MzU4MTUwNTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfRlFcIixcbiAgICBcIk5FVF9QS1RHRU5cIixcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwiZnFfZGVxdWV1ZVwiLFxuICAgIFwiZnFfY2xhc3NpZnlcIixcbiAgICBcImV0aG5sX3NldF9yaW5nc1wiLFxuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCIsXG4gICAgXCJwa3RnZW5feG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbi4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgRmFpciBRdWV1ZSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfZnEuYyksIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIChwa3RnZW4uYyksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSAocmluZ3MuYykgdG8gc3VwcG9ydCBjb25maWd1cmluZyBhbmQgdXNpbmcgdGhpcyBob3Jpem9uLiBUaGVzZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIHRvIHRoZSBpZHBmIGRyaXZlciBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCBlbXVsYXRlZCwgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIHN1ZmZpY2llbnQgdG8gd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzoyOTozMS4zNjU0MjE2NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzg3MzAyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNmQzMmI3Mzk1ODQ1NTk1NThlOTY0YTJkNzAzYjc5ZjIyNDhiNGJhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDA3OjI5OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuaW5kZXggNWRkNGQxYjVkOTRiYmIuLmM3ODA2ODRjYTFiYzBjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuQEAgLTQ0OCw2ICs0NDgsMTIgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBoZHMtdGhyZXNoLW1heFxcbiAgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcXG4rICAgICAgICB0eXBlOiB1MzJcXG4gXFxuICAgLVxcbiAgICAgbmFtZTogbW0tc3RhdFxcbkBAIC0yMTY4LDYgKzIxNzQsOCBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIHR4LXB1c2gtYnVmLWxlbi1tYXhcXG4gICAgICAgICAgICAgLSBoZHMtdGhyZXNoXFxuICAgICAgICAgICAgIC0gaGRzLXRocmVzaC1tYXhcXG4rICAgICAgICAgICAgLSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uXFxuKyAgICAgICAgICAgIC0gcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcXG4gICAgICAgZHVtcDogKnJpbmctZ2V0LW9wXFxuICAgICAtXFxuICAgICAgIG5hbWU6IHJpbmdzLXNldFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcXG5pbmRleCA1MTJmNmQ2ZmEzZDhmOC4uM2I5Y2UxYzZlMTA1NzggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XFxuQEAgLTE4Myw3ICsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcXG4gc3RydWN0IGRwbGxfcGluKiAgICAgICAgICAgICAgICAgICAgZHBsbF9waW5cXG4gc3RydWN0IGhsaXN0X2hlYWQgICAgICAgICAgICAgICAgICAgcGFnZV9wb29sc1xcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcXG4tdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b25cXG4rdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjaW5nX29mZmxvYWRfaG9yaXpvblxcbit1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxcbiBzdHJ1Y3RfbmFwaV9jb25maWcqICAgICAgICAgICAgICAgICBuYXBpX2NvbmZpZ1xcbiB1bnNpZ25lZF9sb25nICAgICAgICAgICAgICAgICAgICAgICBncm9fZmx1c2hfdGltZW91dFxcbiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2RlZmVyX2hhcmRfaXJxc1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xcbmluZGV4IGJiOTlkOWU3YzY1ZDUxLi41ZGRmMzQ3OTI3ZGMzZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xcbkBAIC0xODAxLDcgKzE4MDEsOCBAQCBzdGF0aWMgdm9pZCBpZHBmX2dldF90c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsXFxuLVxcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQsXFxuK1xcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQgfFxcbitcXHRcXHRcXHRcXHQgIEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcXG4gXFx0LmdldF9tc2dsZXZlbFxcdFxcdD0gaWRwZl9nZXRfbXNnbGV2ZWwsXFxuIFxcdC5zZXRfbXNnbGV2ZWxcXHRcXHQ9IGlkcGZfc2V0X21zZ2xldmVsLFxcbiBcXHQuZ2V0X2xpbmtcXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xcbmluZGV4IGNmOTY2ZmU2Yzc1OWNlLi5kZTQxNzBjMmFhM2JhMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcXG5AQCAtODg4LDYgKzg4OCwxMSBAQCBzdGF0aWMgaW50IGlkcGZfY2ZnX25ldGRldihzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIFxcdG5ldGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSB2cG9ydC1cXHUwMDNlbWF4X210dTtcXG4gXFxuK1xcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVxcdTAwM2VkZmx0X3F2X3JzcmMudHhxX21vZGVsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlkcGZfaXNfY2FwX2VuYShhZGFwdGVyLCBJRFBGX09USEVSX0NBUFMsXFxuK1xcdFxcdFxcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxcbitcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gMTI4MDAwO1xcbitcXG4gXFx0ZGZsdF9mZWF0dXJlcyA9IE5FVElGX0ZfU0dcXHR8XFxuIFxcdFxcdFxcdE5FVElGX0ZfSElHSERNQTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjhmMTFkZTU3YzhiYzc3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuQEAgLTEsNiArMSw4IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gLyogQ29weXJpZ2h0IChDKSAyMDIzIEludGVsIENvcnBvcmF0aW9uICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0cG9sbC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcImlkcGYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlkcGZfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpZHBmX3ZpcnRjaG5sLmhcXFwiXFxuQEAgLTI0MDgsOSArMjQxMCwxMyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcyxcXG4gXFx0XFx0XFx0XFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxcbiB7XFxuLVxcdCoodTMyICopXFx1MDAyNmRlc2MtXFx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLVxcdTAwM2VkdHlwZSB8IHRkX2NtZCk7XFxuK1xcdCooX19sZTMyICopXFx1MDAyNmRlc2MtXFx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9IGNwdV90b19sZTMyKCh1OCkocGFyYW1zLVxcdTAwM2VkdHlwZSB8IHRkX2NtZCkpO1xcbiBcXHRkZXNjLVxcdTAwM2VmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7XFxuIFxcdGRlc2MtXFx1MDAzZWZsb3cucXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KHBhcmFtcy1cXHUwMDNlY29tcGxfdGFnKTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzBdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF07XFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzFdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzJdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl07XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0zMDExLDYgKzMwMTcsNjMgQEAgc3RhdGljIGJvb2wgaWRwZl90eF9zcGxpdHFfbmVlZF9yZShzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSlcXG4gXFx0cmV0dXJuIGdhcCBcXHUwMDNlPSBJRFBGX1RYX1NQTElUUV9SRV9NSU5fR0FQO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp0eF9xLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXFxuK3tcXG4rXFx0Y29uc3QgaW50IHRzX2dyYW5fcG93MiA9IDk7XFxuK1xcdHU2NCB0cywgbm93LCBob3Jpem9uO1xcbitcXG4rXFx0aG9yaXpvbiA9IFJFQURfT05DRShza2ItXFx1MDAzZWRldi1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XFxuK1xcdGlmICghaG9yaXpvbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi9cXG4rXFx0aWYgKG5ldHBvbGxfdHhfcnVubmluZyhza2ItXFx1MDAzZWRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN3aXRjaCAoc2tiLVxcdTAwM2V0c3RhbXBfdHlwZSkge1xcbitcXHRjYXNlIFNLQl9DTE9DS19SRUFMVElNRTpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9hZGQoc2tiLVxcdTAwM2V0c3RhbXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0tCX0NMT0NLX01PTk9UT05JQzpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9tb25vX3RvX2FueShza2ItXFx1MDAzZXRzdGFtcCwgVEtfT0ZGU19UQUkpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0tCX0NMT0NLX1RBSTpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhza2ItXFx1MDAzZXRzdGFtcCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0bm93ID0ga3RpbWVfZ2V0X2Nsb2NrdGFpX25zKCk7XFxuK1xcdGlmICh0cyBcXHUwMDNjIG5vdylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogYmV5b25kIG9mZmxvYWQgaG9yaXpvbj8gc2V0IG92ZXJmbG93IGJpdCBvbmx5ICovXFxuK1xcdGlmICh0cyBcXHUwMDNlIG5vdyArIChob3Jpem9uICogTlNFQ19QRVJfVVNFQykpIHtcXG4rXFx0XFx0dHhfcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAxIFxcdTAwM2NcXHUwMDNjIDc7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0dHMgXFx1MDAzZVxcdTAwM2U9IHRzX2dyYW5fcG93MjtcXG4rXFxuK1xcdC8qIDAgaXMgdmFsaWQgMjRiIHRpbWVzdGFtcCwgYnV0IGFsc28gbWVhbnMgZmllbGQgdW5zZXQuXFxuK1xcdCAqIEFkZCA1MTIgbnMgKHRzX2dyYW5fcG93MikgdG8gYXZvaWQgdGhpcyBjYXNlXFxuK1xcdCAqL1xcbitcXHRpZiAoKHRzIFxcdTAwMjYgMHg3ZmZmZmYpID09IDApIHtcXG4rXFx0XFx0dHhfcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF0gPSAxO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHR4X3BhcmFtcy1cXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgXFx1MDAyNiAweGZmO1xcbitcXHR0eF9wYXJhbXMtXFx1MDAzZW9mZmxvYWQuZGVzY190c1sxXSA9ICh0cyBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdHR4X3BhcmFtcy1cXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDdmKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGlkcGZfdHhfc3BsaXRxX2ZyYW1lIC0gU2VuZHMgYnVmZmVyIG9uIFR4IHJpbmcgdXNpbmcgZmxleCBkZXNjcmlwdG9yc1xcbiAgKiBAc2tiOiBzZW5kIGJ1ZmZlclxcbkBAIC0zMDk3LDYgKzMxNjAsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRcXHR0eF9wYXJhbXMuZHR5cGUgPSBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEU7XFxuIFxcdFxcdHR4X3BhcmFtcy5lb3BfY21kID0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9FT1A7XFxuK1xcbitcXHRcXHRpZiAoc2tiLVxcdTAwM2V0c3RhbXApXFxuK1xcdFxcdFxcdGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUodHhfcSwgc2tiLCBcXHUwMDI2dHhfcGFyYW1zKTtcXG4rXFxuIFxcdFxcdC8qIFNldCB0aGUgUkUgYml0IHRvIHBlcmlvZGljYWxseSBcXFwiY2xlYW5cXFwiIHRoZSBkZXNjcmlwdG9yIHJpbmcuXFxuIFxcdFxcdCAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0XFxuIFxcdFxcdCAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5pbmRleCA0YmU1YjNiNmQzZWQyYi4uODY1NDA4YjU3YjBkNTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5AQCAtMTYxLDYgKzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHtcXG4gICogQHRzb19zZWdzOiBOdW1iZXIgb2Ygc2VnbWVudHMgdG8gYmUgc2VudFxcbiAgKiBAdHNvX2hkcl9sZW46IExlbmd0aCBvZiBoZWFkZXJzIHRvIGJlIGR1cGxpY2F0ZWRcXG4gICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3JcXG4rICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcFxcbiAgKi9cXG4gc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xcbiBcXHR1MzIgdHhfZmxhZ3M7XFxuQEAgLTE3NCw2ICsxNzUsNyBAQCBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7XFxuIFxcdHUxNiB0c29faGRyX2xlbjtcXG4gXFxuIFxcdHUxNiB0ZF9jbWQ7XFxuK1xcdHU4IGRlc2NfdHNbM107XFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXFxuQEAgLTg1LDYgKzg1LDggQEAgZW51bSB7XFxuICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlclxcbiAgKiBAaGRzX3RocmVzaDogUGFja2V0IHNpemUgdGhyZXNob2xkIGZvciBoZWFkZXIgZGF0YSBzcGxpdCAoSERTKVxcbiAgKiBAaGRzX3RocmVzaF9tYXg6IE1heGltdW0gc3VwcG9ydGVkIHNldHRpbmcgZm9yIEBoZHNfdGhyZXNob2xkXFxuKyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcXG4rICogQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjXFxuICAqXFxuICAqL1xcbiBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG5AQCAtOTcsNiArOTksOCBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG4gXFx0dTMyXFx0dHhfcHVzaF9idWZfbWF4X2xlbjtcXG4gXFx0dTMyXFx0aGRzX3RocmVzaDtcXG4gXFx0dTMyXFx0aGRzX3RocmVzaF9tYXg7XFxuK1xcdHUzMlxcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XFxuK1xcdHUzMlxcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTEwOCw2ICsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG4gICogQEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOOiBjYXB0dXJlIGZvciBzZXR0aW5nIHR4X3B1c2hfYnVmX2xlblxcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVDogY2FwdHVyZSBmb3Igc2V0dGluZyB0Y3BfZGF0YV9zcGxpdFxcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2hcXG4rICogQEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTjogY2FwdHVyZSBmb3Igc2V0dGluZyBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uXFxuICAqL1xcbiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xcbiBcXHRFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU5cXHRcXHQ9IEJJVCgwKSxcXG5AQCAtMTE3LDYgKzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XFxuIFxcdEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOXFx0PSBCSVQoNCksXFxuIFxcdEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVRcXHRcXHQ9IEJJVCg1KSxcXG4gXFx0RVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSU1xcdFxcdD0gQklUKDYpLFxcbitcXHRFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05cXHQ9IEJJVCg3KSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgX19FVEhfUlNTX0hBU0hfQklUKGJpdClcXHQoKHUzMikxIFxcdTAwM2NcXHUwMDNjIChiaXQpKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xcbiAgKlxcdEBkcGxsX3BpbjogUG9pbnRlciB0byB0aGUgU3luY0Ugc291cmNlIHBpbiBvZiBhIERQTEwgc3Vic3lzdGVtLFxcbiAgKlxcdFxcdCAgIHdoZXJlIHRoZSBjbG9jayBpcyByZWNvdmVyZWQuXFxuICAqXFxuLSAqXFx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggRURUIG9mZmxvYWQgaG9yaXpvbiBpbiBuc2VjLlxcbisgKlxcdEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBhY3RpdmUgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxcbisgKlxcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cXG4gICpcXHRAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSVxcbiAgKlxcdFxcdCAgICAgIHNldHRpbmdzLlxcbiAgKlxcdEBudW1fbmFwaV9jb25maWdzOlxcdG51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cyxcXG5AQCAtMjU1Miw3ICsyNTUzLDggQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiBcXHQvKiogQGlycV9tb2RlcjogZGltIHBhcmFtZXRlcnMgdXNlZCBpZiBJU19FTkFCTEVEKENPTkZJR19ESU1MSUIpLiAqL1xcbiBcXHRzdHJ1Y3QgZGltX2lycV9tb2RlclxcdCppcnFfbW9kZXI7XFxuIFxcbi1cXHR1NjRcXHRcXHRcXHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0dTMyXFx0XFx0XFx0cGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0dTMyXFx0XFx0XFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XFxuIFxcdHN0cnVjdCBuYXBpX2NvbmZpZ1xcdCpuYXBpX2NvbmZpZztcXG4gXFx0dTMyXFx0XFx0XFx0bnVtX25hcGlfY29uZmlncztcXG4gXFx0dTMyXFx0XFx0XFx0bmFwaV9kZWZlcl9oYXJkX2lycXM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuQEAgLTE5Myw2ICsxOTMsOCBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVgsXFxuIFxcdEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxcbiBcXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXFxuK1xcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxcbitcXHRFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVgsXFxuIFxcbiBcXHRfX0VUSFRPT0xfQV9SSU5HU19DTlQsXFxuIFxcdEVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSlcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xcbmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xcbisrKyBiL25ldC9jb3JlL3BrdGdlbi5jXFxuQEAgLTIwMSw2ICsyMDEsNyBAQFxcbiBcXHRwZihTVklEX1JORClcXHRcXHQvKiBSYW5kb20gU1ZMQU4gSUQgKi9cXHRcXHRcXHRcXFxcXFxuIFxcdHBmKE5PREUpXFx0XFx0LyogTm9kZSBtZW1vcnkgYWxsb2MqL1xcdFxcdFxcdFxcXFxcXG4gXFx0cGYoU0hBUkVEKVxcdFxcdC8qIFNoYXJlZCBTS0IgKi9cXHRcXHRcXHRcXFxcXFxuK1xcdHBmKFRYVElNRSlcXHRcXHQvKiBTT19UWFRJTUUgc3VwcG9ydCAqL1xcdFxcdFxcdFxcXFxcXG4gXFxuICNkZWZpbmUgcGYoZmxhZylcXHRcXHRmbGFnIyNfU0hJRlQsXFxuIGVudW0gcGt0X2ZsYWdzIHtcXG5AQCAtMjkxLDYgKzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1NjQgZGVsYXk7XFx0XFx0LyogbmFuby1zZWNvbmRzICovXFxuIFxcbitcXHQvKiBUWFRJTUUgc3VwcG9ydCAqL1xcbitcXHR1NjQgdHh0aW1lX2RlbGF5O1xcdC8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi9cXG4rXFx0Y2xvY2tpZF90IHR4dGltZV9jbG9ja2lkOyAvKiBjbG9ja2lkIGZvciBTT19UWFRJTUUgKi9cXG4rXFxuIFxcdF9fdTY0IGNvdW50O1xcdFxcdC8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovXFxuIFxcdF9fdTY0IHNvZmFyO1xcdFxcdC8qIEhvdyBtYW55IHBrdHMgd2UndmUgc2VudCBzbyBmYXIgKi9cXG4gXFx0X191NjQgdHhfYnl0ZXM7XFx0XFx0LyogSG93IG1hbnkgYnl0ZXMgd2UndmUgdHJhbnNtaXR0ZWQgKi9cXG5AQCAtNjY2LDYgKzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiBcXHRpZiAocGt0X2Rldi1cXHUwMDNlbm9kZSBcXHUwMDNlPSAwKVxcbiBcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiAgICAgbm9kZTogJWRcXFxcblxcXCIsIHBrdF9kZXYtXFx1MDAzZW5vZGUpO1xcbiBcXG4rXFx0aWYgKHBrdF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRl9UWFRJTUUpIHtcXG4rXFx0XFx0Y2xvY2tpZF90IGNsb2NraWQgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xcbitcXG4rXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIgICAgIHR4dGltZV9kZWxheTogJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXkpO1xcbitcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiAgICAgdHh0aW1lX2Nsb2NraWQ6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBjbG9ja2lkID09IENMT0NLX01PTk9UT05JQyA/IFxcXCJtb25vdG9uaWNcXFwiIDpcXG4rXFx0XFx0XFx0ICAgY2xvY2tpZCA9PSBDTE9DS19SRUFMVElNRSA/IFxcXCJyZWFsdGltZVxcXCIgOlxcbitcXHRcXHRcXHQgICBjbG9ja2lkID09IENMT0NLX1RBSSA/IFxcXCJ0YWlcXFwiIDogXFxcInVua25vd25cXFwiKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHBrdF9kZXYtXFx1MDAzZXhtaXRfbW9kZSA9PSBNX05FVElGX1JFQ0VJVkUpXFxuIFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIiAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXFxcXG5cXFwiKTtcXG4gXFx0ZWxzZSBpZiAocGt0X2Rldi1cXHUwMDNleG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVClcXG5AQCAtMTE0MSw2ICsxMTU3LDUwIEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi1cXHUwMDNlZGVsYXkpO1xcbiBcXHRcXHRyZXR1cm4gY291bnQ7XFxuIFxcdH1cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInR4dGltZV9kZWxheVxcXCIpKSB7XFxuK1xcdFxcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcXG4rXFx0XFx0bGVuID0gbnVtX2FyZyhcXHUwMDI2dXNlcl9idWZmZXJbaV0sIG1heCwgXFx1MDAyNnZhbHVlKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBsZW47XFxuK1xcbitcXHRcXHQvKiBpbiBxdWV1ZV94bWl0IG1vZGUgZnEgbWF5IGNsZWFyIHRzdGFtcCwgZG8gbm90IHJldXNlIHNrYiAqL1xcbitcXHRcXHRpZiAodmFsdWUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBrdF9kZXYtXFx1MDAzZWNsb25lX3NrYiBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpO1xcbitcXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIk9LOiB0eHRpbWVfZGVsYXk9JWxsdVxcXCIsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpdmFsdWUpO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdH1cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInR4dGltZV9jbG9ja2lkXFxcIikpIHtcXG4rXFx0XFx0Y2hhciBjbG9ja3N0clszMl07XFxuK1xcdFxcdGNsb2NraWRfdCBjbGs7XFxuK1xcbitcXHRcXHRtZW1zZXQoY2xvY2tzdHIsIDAsIHNpemVvZihjbG9ja3N0cikpO1xcbitcXHRcXHRtYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7XFxuK1xcdFxcdGxlbiA9IHN0cm5fbGVuKFxcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4KTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBsZW47XFxuK1xcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoY2xvY2tzdHIsIFxcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbGVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRcXHRpZiAoIXN0cmNtcChjbG9ja3N0ciwgXFxcIm1vbm90b25pY1xcXCIpKSB7XFxuK1xcdFxcdFxcdGNsayA9IENMT0NLX01PTk9UT05JQztcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcXFwicmVhbHRpbWVcXFwiKSkge1xcbitcXHRcXHRcXHRjbGsgPSBDTE9DS19SRUFMVElNRTtcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcXFwidGFpXFxcIikpIHtcXG4rXFx0XFx0XFx0Y2xrID0gQ0xPQ0tfVEFJO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIkVSUk9SOiB1bmtub3duIGNsb2NraWQgJyVzJ1xcXCIsXFxuK1xcdFxcdFxcdFxcdGNsb2Nrc3RyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHNwcmludGYocGdfcmVzdWx0LCBcXFwiT0s6IHR4dGltZV9jbG9ja2lkPSVzXFxcIiwgY2xvY2tzdHIpO1xcbitcXHRcXHRXUklURV9PTkNFKHBrdF9kZXYtXFx1MDAzZXR4dGltZV9jbG9ja2lkLCBjbGspO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdH1cXG4gXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInJhdGVcXFwiKSkge1xcbiBcXHRcXHRtYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7XFxuIFxcdFxcdGxlbiA9IG51bV9hcmcoXFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFxcdTAwMjZ2YWx1ZSk7XFxuQEAgLTEyMzgsNiArMTI5OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0aWYgKHZhbHVlIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAocGt0X2Rldi1cXHUwMDNlbl9pbWl4X2VudHJpZXMgXFx1MDAzZSAwIHx8XFxuIFxcdFxcdFxcdFxcdCAgIShwa3RfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEZfU0hBUkVEKSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRpZiAodmFsdWUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdHBrdF9kZXYtXFx1MDAzZWNsb25lX3NrYiA9IHZhbHVlO1xcbiBcXG5AQCAtMjMyMSw2ICsyMzgzLDIxIEBAIHN0YXRpYyB2b2lkIHBrdGdlbl9zZXR1cF9pbmplY3Qoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIH1cXG4gXFxuIFxcbitzdGF0aWMga3RpbWVfdCBrdGltZV9nZXRfY2xvY2soY2xvY2tpZF90IGNsb2NraWQpXFxuK3tcXG4rXFx0c3dpdGNoIChjbG9ja2lkKSB7XFxuK1xcdGNhc2UgQ0xPQ0tfUkVBTFRJTUU6XFxuK1xcdFxcdHJldHVybiBrdGltZV9nZXRfcmVhbCgpO1xcbitcXHRjYXNlIENMT0NLX01PTk9UT05JQzpcXG4rXFx0XFx0cmV0dXJuIGt0aW1lX2dldCgpO1xcbitcXHRjYXNlIENMT0NLX1RBSTpcXG4rXFx0XFx0cmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybiBrdGltZV9nZXQoKTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpXFxuIHtcXG4gXFx0a3RpbWVfdCBzdGFydF90aW1lLCBlbmRfdGltZTtcXG5AQCAtMzUxMCw3ICszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFxuIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiB7XFxuLVxcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNiBGX1NIQVJFRCk7XFxuK1xcdHUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKGZsYWdzIFxcdTAwMjYgRl9TSEFSRUQpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtXFx1MDAzZW9kZXY7XFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gXFx0dW5zaWduZWQgaW50IGJ1cnN0ID0gMTtcXG5AQCAtMzU0NSw2ICszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIFxcdC8qIElmIG5vIHNrYiBvciBjbG9uZSBjb3VudCBleGhhdXN0ZWQgdGhlbiBnZXQgbmV3IG9uZSAqL1xcbiBcXHRpZiAoIXBrdF9kZXYtXFx1MDAzZXNrYiB8fCAocGt0X2Rldi1cXHUwMDNlbGFzdF9vayBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICArK3BrdF9kZXYtXFx1MDAzZWNsb25lX2NvdW50IFxcdTAwM2U9IGNsb25lX3NrYikpIHtcXG4rXFx0XFx0dTY0IHR4dGltZV9kZWxheTtcXG4rXFxuIFxcdFxcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xcbiBcXHRcXHRrZnJlZV9za2IocGt0X2Rldi1cXHUwMDNlc2tiKTtcXG4gXFxuQEAgLTM1NTcsNiArMzYzNywxNiBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFx0XFx0fVxcbiBcXHRcXHRwa3RfZGV2LVxcdTAwM2VsYXN0X3BrdF9zaXplID0gcGt0X2Rldi1cXHUwMDNlc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdHBrdF9kZXYtXFx1MDAzZWNsb25lX2NvdW50ID0gMDtcXHQvKiByZXNldCBjb3VudGVyICovXFxuK1xcbitcXHRcXHR0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2RlbGF5KTtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRl9UWFRJTUUgXFx1MDAyNlxcdTAwMjYgdHh0aW1lX2RlbGF5KSB7XFxuK1xcdFxcdFxcdGNsb2NraWRfdCBjbGsgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xcbitcXHRcXHRcXHRrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdHh0aW1lX2RlbGF5KTtcXG4rXFxuK1xcdFxcdFxcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtXFx1MDAzZXNrYiwgdHh0aW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY2xrKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocGt0X2Rldi1cXHUwMDNlZGVsYXkgXFx1MDAyNlxcdTAwMjYgcGt0X2Rldi1cXHUwMDNlbGFzdF9vaylcXG5AQCAtMzg2OSw2ICszOTU5LDcgQEAgc3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxcbiBcXHRwa3RfZGV2LVxcdTAwM2VidXJzdCA9IDE7XFxuIFxcdHBrdF9kZXYtXFx1MDAzZW5vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdHBrdF9kZXYtXFx1MDAzZWZsYWdzID0gRl9TSEFSRUQ7XFx0LyogU0tCIHNoYXJlZCBieSBkZWZhdWx0ICovXFxuK1xcdHBrdF9kZXYtXFx1MDAzZXR4dGltZV9jbG9ja2lkID0gQ0xPQ0tfTU9OT1RPTklDO1xcbiBcXG4gXFx0ZXJyID0gcGt0Z2VuX3NldHVwX2Rldih0LVxcdTAwM2VuZXQsIHBrdF9kZXYsIGlmbmFtZSk7XFxuIFxcdGlmIChlcnIpXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG5pbmRleCAzMWM2NWE1NDVhMTA3Yy4uMmM3YTI0NWM1ZmZjMmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC0yMTU1LDcgKzIxNTUsNyBAQCBzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9UU09fTUFYX1NFR1MsXFxuIFxcdFxcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZXRzb19tYXhfc2VncykpIHx8XFxuIFxcdCAgICBubGFfcHV0X3VpbnQoc2tiLCBJRkxBX01BWF9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxcbi1cXHRcXHRcXHQgUkVBRF9PTkNFKGRldi1cXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fFxcbitcXHRcXHRcXHQgKHU2NClSRUFEX09OQ0UoZGV2LVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fFxcbiAjaWZkZWYgQ09ORklHX1JQU1xcbiBcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsXFxuIFxcdFxcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZW51bV9yeF9xdWV1ZXMpKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uYyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXFxuaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjljYTY5ODBmMjI5MWU2IDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5jXFxuKysrIGIvbmV0L2V0aHRvb2wvY29tbW9uLmNcXG5AQCAtOTU0LDYgKzk1NCwxMCBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0LyogRHJpdmVyIGdpdmVzIHVzIGN1cnJlbnQgc3RhdGUsIHdlIHdhbnQgdG8gcmV0dXJuIGN1cnJlbnQgY29uZmlnICovXFxuIFxcdGtwYXJhbS1cXHUwMDNldGNwX2RhdGFfc3BsaXQgPSBkZXYtXFx1MDAzZWNmZy1cXHUwMDNlaGRzX2NvbmZpZztcXG4gXFx0a3BhcmFtLVxcdTAwM2VoZHNfdGhyZXNoID0gZGV2LVxcdTAwM2VjZmctXFx1MDAzZWhkc190aHJlc2g7XFxuK1xcbitcXHRrcGFyYW0tXFx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24gPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4rXFx0a3BhcmFtLVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XFxuK1xcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZXRodG9vbF9pbml0X3RzaW5mbyhzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXFxuaW5kZXggM2U5NjlhMDcwZjlmZTQuLmFlN2I2NTFjNjU4Zjc0IDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbkBAIC00OTQsNyArNDk0LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ZlYXR1cmVzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0ZFQVRVUkVTX1dBTlRcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3ByaXZmbGFnc19nZXRfcG9saWN5W0VUSFRPT0xfQV9QUklWRkxBR1NfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0ZMQUdTICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19nZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRUFERVIgKyAxXTtcXG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYICsgMV07XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jaGFubmVsc19zZXRfcG9saWN5W0VUSFRPT0xfQV9DSEFOTkVMU19DT01CSU5FRF9DT1VOVCArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY29hbGVzY2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ09BTEVTQ0VfSEVBREVSICsgMV07XFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3JpbmdzLmMgYi9uZXQvZXRodG9vbC9yaW5ncy5jXFxuaW5kZXggOTA1NGM4OWM1ZDdiYjIuLjVjYzIwZDU4MWM0NmVjIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL3JpbmdzLmNcXG4rKysgYi9uZXQvZXRodG9vbC9yaW5ncy5jXFxuQEAgLTQyLDYgKzQyLDEwIEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuIFxcbiBcXHRkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnRjcF9kYXRhX3NwbGl0ID0gZGV2LVxcdTAwM2VjZmctXFx1MDAzZWhkc19jb25maWc7XFxuIFxcdGRhdGEtXFx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cXHUwMDNlY2ZnLVxcdTAwM2VoZHNfdGhyZXNoO1xcbitcXHRkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b24gPVxcbitcXHRcXHRSRUFEX09OQ0UoZGV2LVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4rXFx0ZGF0YS1cXHUwMDNla2VybmVsX3JpbmdwYXJhbS5tYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XFxuK1xcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4gXFxuIFxcdGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWdldF9yaW5ncGFyYW0oZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNlcmluZ3BhcmFtLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZGF0YS1cXHUwMDNla2VybmVsX3JpbmdwYXJhbSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5AQCAtNjksNyArNzMsOSBAQCBzdGF0aWMgaW50IHJpbmdzX3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4gXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXFx0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTiAqL1xcbiBcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOX01BWCAqL1xcbiBcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBfUklOR1NfSERTX1RIUkVTSCAqL1xcbi1cXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIF9SSU5HU19IRFNfVEhSRVNIX01BWCovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIF9SSU5HU19IRFNfVEhSRVNIX01BWCAqL1xcbitcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTiAqL1xcbitcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCAqL1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJpbmdzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTIxLDcgKzEyNywxMiBAQCBzdGF0aWMgaW50IHJpbmdzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSCxcXG4gXFx0XFx0XFx0ICBrci1cXHUwMDNlaGRzX3RocmVzaCkgfHxcXG4gXFx0ICAgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXFxuLVxcdFxcdFxcdCAga3ItXFx1MDAzZWhkc190aHJlc2hfbWF4KSkpKVxcbitcXHRcXHRcXHQgIGtyLVxcdTAwM2VoZHNfdGhyZXNoX21heCkpKSB8fFxcbitcXHQgICAgKChzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sXFxuK1xcdFxcdFxcdCAga3ItXFx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8XFxuK1xcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxcbitcXHRcXHRcXHQgIGtyLVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikpKSlcXG4gXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xNDQsNiArMTU1LDcgQEAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtdID0ge1xcbiBcXHRbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIDEpLFxcbiBcXHRbRVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIFxcdFtFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuK1xcdFtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50XFxuQEAgLTE3Nyw2ICsxODksMTQgQEAgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShvcHMtXFx1MDAzZXN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwic2V0dGluZyBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX0NRRV9TSVpFXSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIShvcHMtXFx1MDAzZXN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfQ1FFX1NJWkUpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLFxcbkBAIC0yNDYsNiArMjY2LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdFxcdCB0YltFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXSwgXFx1MDAyNm1vZCk7XFxuIFxcdGV0aG5sX3VwZGF0ZV91MzIoXFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCxcXG4gXFx0XFx0XFx0IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgXFx1MDAyNm1vZCk7XFxuK1xcdGV0aG5sX3VwZGF0ZV91MzIoXFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcXG4rXFx0XFx0XFx0IHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSwgXFx1MDAyNm1vZCk7XFxuIFxcdGlmICghbW9kKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTI4MSw2ICszMDMsOSBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfVFhdO1xcbiBcXHRlbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggXFx1MDAzZSBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KVxcbiBcXHRcXHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTtcXG4rXFx0ZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uIFxcdTAwM2VcXG4rXFx0XFx0IGtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pXFxuK1xcdFxcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGVycl9hdHRyID0gTlVMTDtcXG4gXFx0aWYgKGVycl9hdHRyKSB7XFxuQEAgLTMwMiw2ICszMjcsMTAgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcbiBcXHRyZXQgPSBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VzZXRfcmluZ3BhcmFtKGRldiwgXFx1MDAyNnJpbmdwYXJhbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbixcXG4rXFx0XFx0XFx0ICAga2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4rXFxuIFxcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXFxuaW5kZXggN2NhZTA4MmE5ODQ3MjEuLmNiZjAxNWRmNjhjY2Y4IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnEuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfZnEuY1xcbkBAIC0zOTksNiArMzk5LDExIEBAIHN0YXRpYyBzdHJ1Y3QgZnFfZmxvdyAqZnFfY2xhc3NpZnkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3BhY2luZ19zdGF0dXMpICE9IFNLX1BBQ0lOR19GUSlcXG4gXFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnNrLVxcdTAwM2Vza19wYWNpbmdfc3RhdHVzLFxcbiBcXHRcXHRcXHRcXHRcXHQgIFNLX1BBQ0lOR19GUSk7XFxuK1xcbitcXHRcXHRpZiAocS1cXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBmcV9za2JfY2Ioc2tiKS1cXHUwMDNldGltZV90b19zZW5kIFxcdTAwM2M9IG5vdylcXG4rXFx0XFx0XFx0c2tiLVxcdTAwM2V0c3RhbXAgPSAwO1xcbitcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZxLVxcdTAwM2VpbnRlcm5hbDtcXG4gXFx0fVxcbiBcXG5AQCAtNzA3LDYgKzcxMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gXFx0c3RydWN0IGZxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIFxcdHN0cnVjdCBmcV9wZXJiYW5kX2Zsb3dzICpwYmFuZDtcXG4gXFx0c3RydWN0IGZxX2Zsb3dfaGVhZCAqaGVhZDtcXG4rXFx0dTY0IHRpbWVfbmV4dF9wYWNrZXQ7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCBmcV9mbG93ICpmO1xcbiBcXHR1bnNpZ25lZCBsb25nIHJhdGU7XFxuQEAgLTcyMSw3ICs3MjcsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuIFxcdGlmIChza2IpIHtcXG4gXFx0XFx0cS1cXHUwMDNlaW50ZXJuYWwucWxlbi0tO1xcbiBcXHRcXHRmcV9kZXF1ZXVlX3NrYihzY2gsIFxcdTAwMjZxLVxcdTAwM2VpbnRlcm5hbCwgc2tiKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdHJldHVybiBza2I7XFxuIFxcdH1cXG4gXFxuIFxcdG5vdyA9IGt0aW1lX2dldF9ucygpO1xcbkBAIC03NTgsOCArNzY0LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiBcXG4gXFx0c2tiID0gZnFfcGVlayhmKTtcXG4gXFx0aWYgKHNrYikge1xcbi1cXHRcXHR1NjQgdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXFx1MDAzZXRpbWVfdG9fc2VuZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBmLVxcdTAwM2V0aW1lX25leHRfcGFja2V0KTtcXG4rXFx0XFx0dGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXFx1MDAzZXRpbWVfdG9fc2VuZCxcXG4rXFx0XFx0XFx0XFx0XFx0IGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xcbiBcXG4gXFx0XFx0aWYgKG5vdyArIHEtXFx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcXHUwMDNjIHRpbWVfbmV4dF9wYWNrZXQpIHtcXG4gXFx0XFx0XFx0aGVhZC1cXHUwMDNlZmlyc3QgPSBmLVxcdTAwM2VuZXh0O1xcbkBAIC04MjgsMTEgKzgzNCwxNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuIFxcdFxcdCAqIGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgd2FzIHNldCB3aGVuIHByaW9yIHBhY2tldCB3YXMgc2VudCxcXG4gXFx0XFx0ICogYW5kIGN1cnJlbnQgdGltZSAoQG5vdykgY2FuIGJlIHRvbyBsYXRlIGJ5IHRlbnMgb2YgdXMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldClcXG4rXFx0XFx0aWYgKGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgXFx1MDAyNlxcdTAwMjYgZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCBcXHUwMDNjIG5vdylcXG4gXFx0XFx0XFx0bGVuIC09IG1pbihsZW4vMiwgbm93IC0gZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XFxuIFxcdFxcdGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgPSBub3cgKyBsZW47XFxuIFxcdH1cXG4rXFxuIG91dDpcXG4rXFx0aWYgKHEtXFx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcXHUwMDI2XFx1MDAyNiB0aW1lX25leHRfcGFja2V0IFxcdTAwM2M9IG5vdylcXG4rXFx0XFx0c2tiLVxcdTAwM2V0c3RhbXAgPSAwO1xcbitcXG4gXFx0cmV0dXJuIHNrYjtcXG4gfVxcbiBcXG5AQCAtMTE3OSw3ICsxMTg5LDkgQEAgc3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4gXFx0XFx0dTY0IG9mZmxvYWRfaG9yaXpvbiA9ICh1NjQpTlNFQ19QRVJfVVNFQyAqXFxuIFxcdFxcdFxcdFxcdCAgICAgIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9PRkZMT0FEX0hPUklaT05dKTtcXG4gXFxuLVxcdFxcdGlmIChvZmZsb2FkX2hvcml6b24gXFx1MDAzYz0gcWRpc2NfZGV2KHNjaCktXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB7XFxuK1xcdFxcdGlmIChvZmZsb2FkX2hvcml6b24gXFx1MDAzYz1cXG4rXFx0XFx0ICAgICh1NjQpUkVBRF9PTkNFKHFkaXNjX2RldihzY2gpLVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSAqXFxuK1xcdFxcdCAgICBOU0VDX1BFUl9VU0VDKSB7XFxuIFxcdFxcdFxcdFdSSVRFX09OQ0UocS1cXHUwMDNlb2ZmbG9hZF9ob3Jpem9uLCBvZmZsb2FkX2hvcml6b24pO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiaW52YWxpZCBvZmZsb2FkX2hvcml6b25cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xcbmluZGV4IDU1YTM4NmYzZDFiOTBmLi42ZTY0YmFhNGM2MGRkOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXFxuQEAgLTQyLDggKzQyLDEwIEBAIHN0YXRpYyBib29sXFx0Y2ZnX21hY2hpbmVfc2xvdztcXG4gc3RhdGljIHVpbnQ2NF90XFx0Y2ZnX3N0YXJ0X3RpbWVfbnM7XFxuIHN0YXRpYyBpbnRcXHRjZmdfbWFyaztcXG4gc3RhdGljIGJvb2xcXHRjZmdfcng7XFxuK3N0YXRpYyBib29sXFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkO1xcbiBcXG4gc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0O1xcbitzdGF0aWMgdWludDY0X3QgZ2xvYl90c3RhcnRfcmVhbDtcXG4gc3RhdGljIHVpbnQ2NF90IHRkZWxpdmVyX21heDtcXG4gXFxuIHN0YXRpYyBpbnQgZXJyb3JzO1xcbkBAIC0xNTgsMTggKzE2MCw3MCBAQCBzdGF0aWMgdm9pZCBkb19yZWN2X3ZlcmlmeV9lbXB0eShpbnQgZmRyKVxcbiBcXHRcXHRlcnJvcigxLCAwLCBcXFwicmVjdjogbm90IGVtcHR5IGFzIGV4cGVjdGVkICglZCwgJWQpXFxcIiwgcmV0LCBlcnJubyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXFxuK3N0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciBwYXlsb2FkX2NoYXIpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcXG4rXFx0aW50NjRfdCB0c3RhbXAgPSAwO1xcbitcXG4rXFx0c3dpdGNoIChlcnItXFx1MDAzZWVlX2Vycm5vKSB7XFxuK1xcdGNhc2UgRUNBTkNFTEVEOlxcbitcXHRcXHRpZiAoZXJyLVxcdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX01JU1NFRClcXG4rXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4rXFx0XFx0cmVhc29uID0gXFxcIm1pc3NlZCB0eHRpbWVcXFwiO1xcbitcXHRicmVhaztcXG4rXFx0Y2FzZSBFSU5WQUw6XFxuK1xcdFxcdGlmIChlcnItXFx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcXG4rXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4rXFx0XFx0cmVhc29uID0gXFxcImludmFsaWQgdHh0aW1lXFxcIjtcXG4rXFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9lcnJubywgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4rXFx0fVxcbitcXG4rXFx0dHN0YW1wID0gKChpbnQ2NF90KWVyci1cXHUwMDNlZWVfZGF0YSkgXFx1MDAzY1xcdTAwM2MgMzIgfCBlcnItXFx1MDAzZWVlX2luZm87XFxuK1xcdHRzdGFtcCAtPSAoaW50NjRfdClnbG9iX3RzdGFydDtcXG4rXFx0dHN0YW1wIC89IDEwMDAgKiAxMDAwO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInNlbmQ6IHBrdCAlYyBhdCAlXFxcIiBQUklkNjQgXFxcIm1zIGRyb3BwZWQ6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRwYXlsb2FkX2NoYXIsIHRzdGFtcCwgcmVhc29uKTtcXG4rXFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkb19yZWN2X2VycnF1ZXVlX3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycixcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyAqdHNzKVxcbit7XFxuK1xcdGludDY0X3QgdHM7XFxuK1xcbitcXHR0cyA9IHRzcy1cXHUwMDNldHNbMF0udHZfc2VjO1xcbitcXHR0cyAqPSAxMDAwVUxMICogMTAwMCAqIDEwMDA7XFxuK1xcdHRzICs9IHRzcy1cXHUwMDNldHNbMF0udHZfbnNlYztcXG4rXFx0dHMgLT0gZ2xvYl90c3RhcnRfcmVhbDtcXG4rXFx0dHMgLz0gMTAwMDtcXG4rXFxuK1xcdGlmICh0cyBcXHUwMDNlIGNmZ192YXJpYW5jZV91cykge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInN3IGRlbGF5ICVcXFwiIFBSSWQ2NCBcXFwidXMgZXhjZWVkcyBib3VuZHNcXFxcblxcXCIsIHRzKTtcXG4rXFx0XFx0aWYgKCFjZmdfbWFjaGluZV9zbG93KVxcbitcXHRcXHRcXHRlcnJvcnMrKztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWUoaW50IGZkdClcXG4ge1xcbiBcXHRjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSkgK1xcbitcXHRcXHQgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY21fdGltZXN0YW1waW5nKSkgK1xcbiBcXHRcXHQgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKV0gPSB7MH07XFxuIFxcdGNoYXIgZGF0YVtzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICtcXG4gXFx0XFx0ICBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyAxXTtcXG4rXFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcztcXG4gXFx0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnI7XFxuIFxcdGludCByZXQsIG51bV90c3RhbXAgPSAwO1xcbiBcXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHswfTtcXG4gXFx0c3RydWN0IGlvdmVjIGlvdiA9IHswfTtcXG4gXFx0c3RydWN0IGNtc2doZHIgKmNtO1xcbi1cXHRpbnQ2NF90IHRzdGFtcCA9IDA7XFxuIFxcbiBcXHRpb3YuaW92X2Jhc2UgPSBkYXRhO1xcbiBcXHRpb3YuaW92X2xlbiA9IHNpemVvZihkYXRhKTtcXG5AQCAtMTgxLDggKzIzNSw2IEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXFxuIFxcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTtcXG4gXFxuIFxcdHdoaWxlICgxKSB7XFxuLVxcdFxcdGNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7XFxuLVxcbiBcXHRcXHRyZXQgPSByZWN2bXNnKGZkdCwgXFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcXG4gXFx0XFx0aWYgKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQUdBSU4pXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xOTIsNDIgKzI0NCwzMiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxcbiBcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IGZsYWdzIDB4JXhcXFxcblxcXCIsIG1zZy5tc2dfZmxhZ3MpO1xcbiBcXG4gXFx0XFx0Y20gPSBDTVNHX0ZJUlNUSERSKFxcdTAwMjZtc2cpO1xcbitcXHRcXHR0c3MgPSBOVUxMO1xcbitcXG4rXFx0XFx0aWYgKGNtLVxcdTAwM2VjbXNnX2xldmVsID09IFNPTF9TT0NLRVQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGNtLVxcdTAwM2VjbXNnX3R5cGUgPT0gU0NNX1RJTUVTVEFNUElORykge1xcbitcXHRcXHRcXHR0c3MgPSAodm9pZCAqKUNNU0dfREFUQShjbSk7XFxuK1xcdFxcdFxcdGNtID0gQ01TR19OWFRIRFIoXFx1MDAyNm1zZywgY20pO1xcbitcXHRcXHRcXHRpZiAoIWNtKVxcbitcXHRcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwidGltZXN0YW1wIG1pc3NpbmcgaXAgZXJyXFxcXG5cXFwiKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKGNtLVxcdTAwM2VjbXNnX2xldmVsICE9IGNmZ19lcnJxX2xldmVsIHx8XFxuIFxcdFxcdCAgICBjbS1cXHUwMDNlY21zZ190eXBlICE9IGNmZ19lcnJxX3R5cGUpXFxuIFxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogdHlwZSAweCV4LjB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICBjbS1cXHUwMDNlY21zZ19sZXZlbCwgY20tXFx1MDAzZWNtc2dfdHlwZSk7XFxuIFxcbiBcXHRcXHRlcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcXG4tXFx0XFx0aWYgKGVyci1cXHUwMDNlZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9UWFRJTUUpXFxuK1xcdFxcdGlmIChlcnItXFx1MDAzZWVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVFhUSU1FKVxcbitcXHRcXHRcXHRudW1fdHN0YW1wICs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChlcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBkYXRhW3JldCAtIDFdKTtcXG4rXFx0XFx0ZWxzZSBpZiAoZXJyLVxcdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyBcXHUwMDI2XFx1MDAyNiB0c3MpXFxuK1xcdFxcdFxcdGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKGVyciwgdHNzKTtcXG4rXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IG9yaWdpbiAweCV4XFxcXG5cXFwiLCBlcnItXFx1MDAzZWVlX29yaWdpbik7XFxuIFxcbi1cXHRcXHRzd2l0Y2ggKGVyci1cXHUwMDNlZWVfZXJybm8pIHtcXG4tXFx0XFx0Y2FzZSBFQ0FOQ0VMRUQ6XFxuLVxcdFxcdFxcdGlmIChlcnItXFx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKVxcbi1cXHRcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IHVua25vd24gRUNBTkNFTEVEICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlcnItXFx1MDAzZWVlX2NvZGUpO1xcbi1cXHRcXHRcXHRyZWFzb24gPSBcXFwibWlzc2VkIHR4dGltZVxcXCI7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEVJTlZBTDpcXG4tXFx0XFx0XFx0aWYgKGVyci1cXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKVxcbi1cXHRcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlcnItXFx1MDAzZWVlX2NvZGUpO1xcbi1cXHRcXHRcXHRyZWFzb24gPSBcXFwiaW52YWxpZCB0eHRpbWVcXFwiO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiBlcnJubyAldSBjb2RlICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICBlcnItXFx1MDAzZWVlX2Vycm5vLCBlcnItXFx1MDAzZWVlX2NvZGUpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHR0c3RhbXAgPSAoKGludDY0X3QpIGVyci1cXHUwMDNlZWVfZGF0YSkgXFx1MDAzY1xcdTAwM2MgMzIgfCBlcnItXFx1MDAzZWVlX2luZm87XFxuLVxcdFxcdHRzdGFtcCAtPSAoaW50NjRfdCkgZ2xvYl90c3RhcnQ7XFxuLVxcdFxcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcXG4tXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJzZW5kOiBwa3QgJWMgYXQgJVxcXCIgUFJJZDY0IFxcXCJtcyBkcm9wcGVkOiAlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0ZGF0YVtyZXQgLSAxXSwgdHN0YW1wLCByZWFzb24pO1xcbi1cXG4gXFx0XFx0bXNnLm1zZ19mbGFncyA9IDA7XFxuIFxcdFxcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTtcXG4tXFx0XFx0bnVtX3RzdGFtcCsrO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gbnVtX3RzdGFtcDtcXG5AQCAtMjQ1LDEyICsyODcsMTMgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJxdWV1ZV9tc2dzKGludCBmZHQpXFxuIFxcdFxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwicG9sbFxcXCIpO1xcbiBcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiAocGZkLnJldmVudHMgXFx1MDAyNiBQT0xMRVJSKSlcXG4tXFx0XFx0XFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZmR0KTtcXG4rXFx0XFx0XFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlKGZkdCk7XFxuIFxcbiBcXHRcXHRpZiAobnVtX3RzdGFtcCA9PSBjZmdfbnVtX3BrdClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHR9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSBcXHUwMDNjIHRkZWxpdmVyX21heCk7XFxuK1xcdH0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpIFxcdTAwM2NcXG4rXFx0XFx0IHRkZWxpdmVyX21heCArIChjZmdfdmFyaWFuY2VfdXMgKiAxMDAwKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHN0YXJ0X3RpbWVfd2FpdCh2b2lkKVxcbkBAIC0yOTUsNiArMzM4LDE4IEBAIHN0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lKGludCBmZClcXG4gXFx0XFx0ZXJyb3IoMSwgMCwgXFxcImdldHNvY2tvcHQgdHh0aW1lOiBtaXNtYXRjaFxcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGludCBmZClcXG4re1xcbitcXHRpbnQgdmFsID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XFxuK1xcdFxcdCAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSB8XFxuK1xcdFxcdCAgU09GX1RJTUVTVEFNUElOR19PUFRfSUQgfFxcbitcXHRcXHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX1RTT05MWTtcXG4rXFxuK1xcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsXFxuK1xcdFxcdCAgICAgICBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic2V0c29ja29wdCB0aW1lc3RhbXBpbmdcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxcbiB7XFxuIFxcdGludCBmZDtcXG5AQCAtMzA4LDYgKzM2Myw5IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4gXFxuIFxcdHNldHNvY2tvcHRfdHh0aW1lKGZkKTtcXG4gXFxuK1xcdGlmIChjZmdfdmVyaWZ5X2h3X29mZmxvYWQpXFxuK1xcdFxcdHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoZmQpO1xcbitcXG4gXFx0aWYgKGNmZ19tYXJrIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19NQVJLLCBcXHUwMDI2Y2ZnX21hcmssIHNpemVvZihjZmdfbWFyaykpKVxcbiBcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgbWFya1xcXCIpO1xcbkBAIC0zMTcsNyArMzc1LDcgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxcbiBcXG4gc3RhdGljIGludCBzZXR1cF9yeChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxcbiB7XFxuLVxcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDEwMCAqIDEwMDAgfTtcXG4rXFx0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gNjAwICogMTAwMCB9O1xcbiBcXHRpbnQgZmQ7XFxuIFxcbiBcXHRmZCA9IHNvY2tldChhZGRyLVxcdTAwM2VzYV9mYW1pbHksIFNPQ0tfREdSQU0sIDApO1xcbkBAIC0zNDgsNiArNDA2LDcgQEAgc3RhdGljIHZvaWQgZG9fdGVzdF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxcbiBcXG4gXFx0c3RhcnRfdGltZV93YWl0KCk7XFxuIFxcdGdsb2JfdHN0YXJ0ID0gZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCk7XFxuK1xcdGdsb2JfdHN0YXJ0X3JlYWwgPSBnZXR0aW1lX25zKENMT0NLX1JFQUxUSU1FKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjZmdfbnVtX3BrdDsgaSsrKVxcbiBcXHRcXHRkb19zZW5kX29uZShmZHQsIFxcdTAwMjZjZmdfYnVmW2ldKTtcXG5AQCAtNDQwLDEwICs0OTksMTEgQEAgc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpXFxuIFxcdFxcdFxcdFxcXCIgIC02ICAgICAgICAgICAgb25seSBJUHY2XFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgIC1jIFxcdTAwM2NjbG9ja1xcdTAwM2UgICAgbW9ub3RvbmljIG9yIHRhaSAoZGVmYXVsdClcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIiAgLUQgXFx1MDAzY2FkZHJcXHUwMDNlICAgICBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzIChzZXJ2ZXIpXFxcXG5cXFwiXFxuLVxcdFxcdFxcdFxcXCIgIC1TIFxcdTAwM2NhZGRyXFx1MDAzZSAgICAgc291cmNlIElQIGFkZHJlc3MgKGNsaWVudClcXFxcblxcXCJcXG4rXFx0XFx0XFx0XFxcIiAgLWggICAgICAgICAgICB2ZXJpZnkgaGFyZHdhcmUgb2ZmbG9hZCAodHgpXFxcXG5cXFwiXFxuK1xcdFxcdFxcdFxcXCIgIC1tIFxcdTAwM2NtYXJrXFx1MDAzZSAgICAgc29ja2V0IG1hcmtcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIiAgLXIgICAgICAgICAgICBydW4gcnggbW9kZVxcXFxuXFxcIlxcbitcXHRcXHRcXHRcXFwiICAtUyBcXHUwMDNjYWRkclxcdTAwM2UgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgIC10IFxcdTAwM2Nuc2VjXFx1MDAzZSAgICAgc3RhcnQgdGltZSAoVVRDIG5hbm9zZWNvbmRzKVxcXFxuXFxcIlxcbi1cXHRcXHRcXHRcXFwiICAtbSBcXHUwMDNjbWFya1xcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCJcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHByb2duYW1lKTtcXG4gXFx0ZXhpdCgxKTtcXG5AQCAtNDU1LDcgKzUxNSw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRpbnQgZG9tYWluID0gUEZfVU5TUEVDO1xcbiBcXHRpbnQgYztcXG4gXFxuLVxcdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiNDZjOlM6RDpydDptOlxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIjQ2YzpEOmhtOnJTOnQ6XFxcIikpICE9IC0xKSB7XFxuIFxcdFxcdHN3aXRjaCAoYykge1xcbiBcXHRcXHRjYXNlICc0JzpcXG4gXFx0XFx0XFx0aWYgKGRvbWFpbiAhPSBQRl9VTlNQRUMpXFxuQEAgLTQ4MiwyMSArNTQyLDI0IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJ1bmtub3duIGNsb2NrIGlkICVzXFxcIiwgb3B0YXJnKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ1MnOlxcbi1cXHRcXHRcXHRzYWRkciA9IG9wdGFyZztcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ0QnOlxcbiBcXHRcXHRcXHRkYWRkciA9IG9wdGFyZztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2gnOlxcbitcXHRcXHRcXHRjZmdfdmVyaWZ5X2h3X29mZmxvYWQgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnbSc6XFxuK1xcdFxcdFxcdGNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdyJzpcXG4gXFx0XFx0XFx0Y2ZnX3J4ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ1MnOlxcbitcXHRcXHRcXHRzYWRkciA9IG9wdGFyZztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3QnOlxcbiBcXHRcXHRcXHRjZmdfc3RhcnRfdGltZV9ucyA9IHN0cnRvbGwob3B0YXJnLCBOVUxMLCAwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ20nOlxcbi1cXHRcXHRcXHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dXNhZ2UoYXJndlswXSk7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XFxuaW5kZXggYWRmNmM4NDhkNmQ4MGYuLjdiNzVhMzNmNWM0M2Y4IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxcbkBAIC0xMiwxMCArMTIsMTMgQEAgaW1wb3J0IHRpbWVcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfdmFyaWFudHNcXG4gZnJvbSBsaWIucHkgaW1wb3J0IEtzZnROYW1lZFZhcmlhbnQsIEtzZnRTa2lwRXhcXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBia2csIGNtZCwgZGVmZXIsIHRjXFxuK2Zyb20gbGliLnB5IGltcG9ydCBFdGh0b29sRmFtaWx5LCBObEVycm9yXFxuIFxcbiBcXG4gZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKTpcXG4gICAgIFxcXCJcXFwiXFxcIk1haW4gZnVuY3Rpb24uIFJ1biBzb190eHRpbWUgYXMgc2VuZGVyIGFuZCByZWNlaXZlci5cXFwiXFxcIlxcXCJcXG4rICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxcbitcXG4gICAgIHNsb3dfbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCdLU0ZUX01BQ0hJTkVfU0xPVycpXFxuIFxcbiAgICAgaWYgbm90IGhhc2F0dHIoY2ZnLCBcXFwiYmluX3JlbW90ZVxcXCIpOlxcbkBAIC0zOCw2ICs0MSwzNCBAQCBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOlxcbiAgICAgICAgIGNtZChjbWRfdHgpXFxuIFxcbiBcXG4rZGVmIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKTpcXG4rICAgIFxcXCJcXFwiXFxcIkNvbmZpZ3VyZSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLlxcXCJcXFwiXFxcIlxcbisgICAgZXRobmwgPSBFdGh0b29sRmFtaWx5KClcXG4rXFxuKyAgICB0cnk6XFxuKyAgICAgICAgcmluZ3MgPSBldGhubC5yaW5nc19nZXQoeydoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fX0pXFxuKyAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ3JpbmctZ2V0IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJykgZnJvbSBlXFxuK1xcbisgICAgaWYgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nIG5vdCBpbiByaW5ncyBvciBcXFxcXFxuKyAgICAgICAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgnIG5vdCBpbiByaW5nczpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJylcXG4rXFxuKyAgICBpZiByaW5nc1sncGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgnXSBcXHUwMDNjIDUwXzAwMDpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdwYWNpbmcgb2ZmbG9hZCBtYXggaG9yaXpvbiB0b28gc21hbGwnKVxcbitcXG4rICAgIGN1cl9ob3Jpem9uID0gcmluZ3NbJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nXVxcbisgICAgbmV3X2hvcml6b24gPSA1MF8wMDBcXG4rICAgIGV0aG5sLnJpbmdzX3NldCh7XFxuKyAgICAgICAgJ2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9LFxcbisgICAgICAgICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJzogbmV3X2hvcml6b24sXFxuKyAgICB9KVxcbisgICAgZGVmZXIoZXRobmwucmluZ3Nfc2V0LCB7XFxuKyAgICAgICAgJ2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9LFxcbisgICAgICAgICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJzogY3VyX2hvcml6b25cXG4rICAgIH0pXFxuK1xcbitcXG4gZGVmIF9xZGlzY19zZXR1cChpZm5hbWUsIHFkaXNjLCBvcHRhcmdzPVxcXCJcXFwiKTpcXG4gICAgIFxcXCJcXFwiXFxcIlJlcGxhY2Ugcm9vdCBxZGlzYy4gUmVzdG9yZSB0aGUgb3JpZ2luYWwgYWZ0ZXIgdGhlIHRlc3QuXFxuIFxcbkBAIC01Niw2ICs4Nyw3IEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxcbiAgICAgICAgICAgICBbXFxcIm9uZV9wa3RcXFwiLCBcXFwiYSwxMFxcXCIsIFxcXCJhLDEwXFxcIl0sXFxuICAgICAgICAgICAgIFtcXFwiaW5fb3JkZXJcXFwiLCBcXFwiYSwxMCxiLDIwXFxcIiwgXFxcImEsMTAsYiwyMFxcXCJdLFxcbiAgICAgICAgICAgICBbXFxcInJldmVyc2Vfb3JkZXJcXFwiLCBcXFwiYSwyMCxiLDEwXFxcIiwgXFxcImIsMTAsYSwyMFxcXCJdLFxcbisgICAgICAgICAgICBbXFxcImJleW9uZF9od19ob3Jpem9uXFxcIiwgXFxcImEsNzBcXFwiLCBcXFwiYSw3MFxcXCJdLFxcbiAgICAgICAgIF06XFxuICAgICAgICAgICAgIG5hbWUgPSBmXFxcInZ7aXB2ZXJ9X3t0ZXN0Y2FzZVswXX1cXFwiXFxuICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQobmFtZSwgaXB2ZXIsIHRlc3RjYXNlWzFdLCB0ZXN0Y2FzZVsyXSlcXG5AQCAtNjQsMTUgKzk2LDQyIEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ubyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcXG4gICAgIFxcXCJcXFwiXFxcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIChmcSkgdGVzdHMuXFxcIlxcXCJcXFwiXFxuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcXG4gICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcXFwiZnFcXFwiKVxcbiAgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcXFwibW9ub1xcXCIsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxcbiBcXG4gXFxuK0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXFxuK2RlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxcbisgICAgXFxcIlxcXCJcXFwiUnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgZnEgdGVzdHMsIHdpdGggb2ZmbG9hZCBob3Jpem9uLlxcXCJcXFwiXFxcIlxcbisgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpXFxuK1xcbisgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpXFxuKyAgICB0cnk6XFxuKyAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFxcXCJmcVxcXCIsIFxcXCJvZmZsb2FkX2hvcml6b24gNTBtc1xcXCIpXFxuKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwibmV0ZGV2IGRvZXMgbm90IHN1cHBvcnQgb2ZmbG9hZC4gc2tpcHBpbmdcXFwiKSBmcm9tIGVcXG4rXFxuKyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gdXNlIG9ubHkgaHcgcGFjaW5nLCBleGNlcHQgYmV5b25kX2h3X2hvcml6b24uXFxuKyAgICBod19vbmx5ID0gXFxcIi1oXFxcIiBpZiBhcmdzX3R4ICE9IFxcXCJhLDcwXFxcIiBlbHNlIFxcXCJcXFwiXFxuKyAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFxcXCJtb25vXFxcIiwgaXB2ZXIsIGZcXFwie2h3X29ubHl9IHthcmdzX3R4fVxcXCIsIGFyZ3NfcngsIFRydWUpXFxuK1xcbitcXG4rQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcXG4rZGVmIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxcbisgICAgXFxcIlxcXCJcXFwiUnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgdGVzdHMsIHdpdGhvdXQgZnEgcGFjaW5nIHN3IGJhY2t1cC5cXFwiXFxcIlxcXCJcXG4rICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxcbitcXG4rICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxcbisgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFxcXCJwZmlmb19mYXN0XFxcIilcXG4rXFxuKyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gcGFzcywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uIHdpdGhvdXQgc3cgZmFsbGJhY2suXFxuKyAgICBleHBlY3RfcGFzcyA9IG5vdCBhcmdzX3R4ID09IFxcXCJhLDcwXFxcIlxcbisgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcXFwibW9ub1xcXCIsIGlwdmVyLCBmXFxcIi1oIHthcmdzX3R4fVxcXCIsIGFyZ3NfcngsIGV4cGVjdF9wYXNzKVxcbitcXG4rXFxuIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXFxuIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV90YWkoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gYWxsIHZhcmlhbnRzIG9mIGZxIHRlc3RzLCBidXQgcGFzcyBDTE9DS19UQUkgdG8gdGVzdCBjb252ZXJzaW9uLlxcXCJcXFwiXFxcIlxcbi0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXFxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXFxcImZxXFxcIilcXG4gICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXFxcInRhaVxcXCIsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxcbiBcXG5AQCAtOTUsNyArMTU0LDYgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2V0ZigpOlxcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19ldGYoKSlcXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2V0ZihjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3RfZmFpbCk6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gYWxsIHZhcmlhbnRzIG9mIGV0ZiB0ZXN0cy5cXFwiXFxcIlxcXCJcXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxcbiAgICAgdHJ5OlxcbiAgICAgICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcXFwiZXRmXFxcIiwgXFxcImNsb2NraWQgQ0xPQ0tfVEFJIGRlbHRhIDQwMDAwMFxcXCIpXFxuICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XFxuQEAgLTEwOCw3ICsxNjYsMTMgQEAgZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiQm9pbGVycGxhdGUga3NmdCBtYWluLlxcXCJcXFwiXFxcIlxcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxcbiAgICAgICAgIGtzZnRfcnVuKFxcbi0gICAgICAgICAgICBbdGVzdF9zb190eHRpbWVfZnFfbW9ubywgdGVzdF9zb190eHRpbWVfZnFfdGFpLCB0ZXN0X3NvX3R4dGltZV9ldGZdLFxcbisgICAgICAgICAgICBbXFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV9tb25vLFxcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyxcXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3LFxcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfdGFpLFxcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZXRmLFxcbisgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSxcXG4gICAgICAgICApXFxuICAgICBrc2Z0X2V4aXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzoyOTozMi41MDU3NTM0NjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTMyMTc3OTY2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9GUVwiLFxuICAgIFwiTkVUX1BLVEdFTlwiLFxuICAgIFwiRVRIVE9PTF9ORVRMSU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnFfY2hhbmdlXCIsXG4gICAgXCJmcV9kZXF1ZXVlXCIsXG4gICAgXCJmcV9jbGFzc2lmeVwiLFxuICAgIFwiZXRobmxfc2V0X3JpbmdzXCIsXG4gICAgXCJwa3RnZW5faWZfd3JpdGVcIixcbiAgICBcInBrdGdlbl94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCBtb2RpZmllcyB0aGUgY29yZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKHNjaF9mcS5jKSwgdGhlIHBhY2tldCBnZW5lcmF0b3IgKHBrdGdlbi5jKSwgYW5kIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIChyaW5ncy5jKSB0byBzdXBwb3J0IGNvbmZpZ3VyaW5nIGFuZCB1c2luZyB0aGlzIGhvcml6b24uIFRoZXNlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgdG8gdGhlIGlkcGYgZHJpdmVyIGFyZSBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgbm90IGVtdWxhdGVkLCBidXQgdGhlIGNvcmUgY2hhbmdlcyBhcmUgc3VmZmljaWVudCB0byB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE2ZDMyYjczOTU4NDU1OTU1OGU5NjRhMmQ3MDNiNzlmMjI0OGI0YmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNzoyOToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uYzc4MDY4NGNhMWJjMGMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5AQCAtNDQ4LDYgKzQ0OCwxMiBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBoZHMtdGhyZXNoLW1heFxuICAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcbisgICAgICAgIHR5cGU6IHUzMlxuIFxuICAgLVxuICAgICBuYW1lOiBtbS1zdGF0XG5AQCAtMjE2OCw2ICsyMTc0LDggQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIHR4LXB1c2gtYnVmLWxlbi1tYXhcbiAgICAgICAgICAgICAtIGhkcy10aHJlc2hcbiAgICAgICAgICAgICAtIGhkcy10aHJlc2gtbWF4XG4rICAgICAgICAgICAgLSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uXG4rICAgICAgICAgICAgLSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heFxuICAgICAgIGR1bXA6ICpyaW5nLWdldC1vcFxuICAgICAtXG4gICAgICAgbmFtZTogcmluZ3Mtc2V0XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XG5pbmRleCA1MTJmNmQ2ZmEzZDhmOC4uM2I5Y2UxYzZlMTA1NzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdFxuQEAgLTE4Myw3ICsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcbiBzdHJ1Y3QgZHBsbF9waW4qICAgICAgICAgICAgICAgICAgICBkcGxsX3BpblxuIHN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIHBhZ2VfcG9vbHNcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcbi11NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuK3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2luZ19vZmZsb2FkX2hvcml6b25cbit1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuIHN0cnVjdF9uYXBpX2NvbmZpZyogICAgICAgICAgICAgICAgIG5hcGlfY29uZmlnXG4gdW5zaWduZWRfbG9uZyAgICAgICAgICAgICAgICAgICAgICAgZ3JvX2ZsdXNoX3RpbWVvdXRcbiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2RlZmVyX2hhcmRfaXJxc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG5pbmRleCBiYjk5ZDllN2M2NWQ1MS4uNWRkZjM0NzkyN2RjM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG5AQCAtMTgwMSw3ICsxODAxLDggQEAgc3RhdGljIHZvaWQgaWRwZl9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbi1cdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCxcbitcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCB8XG4rXHRcdFx0XHQgIEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbiBcdC5nZXRfbXNnbGV2ZWxcdFx0PSBpZHBmX2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSBpZHBmX3NldF9tc2dsZXZlbCxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG5pbmRleCBjZjk2NmZlNmM3NTljZS4uZGU0MTcwYzJhYTNiYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuQEAgLTg4OCw2ICs4ODgsMTEgQEAgc3RhdGljIGludCBpZHBmX2NmZ19uZXRkZXYoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIFx0bmV0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbiBcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gdnBvcnQtXHUwMDNlbWF4X210dTtcbiBcbitcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVx1MDAzZWRmbHRfcXZfcnNyYy50eHFfbW9kZWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpZHBmX2lzX2NhcF9lbmEoYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuK1x0XHRcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxuK1x0XHRuZXRkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSAxMjgwMDA7XG4rXG4gXHRkZmx0X2ZlYXR1cmVzID0gTkVUSUZfRl9TR1x0fFxuIFx0XHRcdE5FVElGX0ZfSElHSERNQTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjhmMTFkZTU3YzhiYzc3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTEsNiArMSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qIENvcHlyaWdodCAoQykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbiAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldHBvbGwuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwiaWRwZi5oXCJcbiAjaW5jbHVkZSBcImlkcGZfcHRwLmhcIlxuICNpbmNsdWRlIFwiaWRwZl92aXJ0Y2hubC5oXCJcbkBAIC0yNDA4LDkgKzI0MTAsMTMgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsXG4gXHRcdFx0XHQgICAgc3RydWN0IGlkcGZfdHhfc3BsaXRxX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxuIHtcbi1cdCoodTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSAodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCk7XG4rXHQqKF9fbGUzMiAqKVx1MDAyNmRlc2MtXHUwMDNlZmxvdy5xdzEuY21kX2R0eXBlID0gY3B1X3RvX2xlMzIoKHU4KShwYXJhbXMtXHUwMDNlZHR5cGUgfCB0ZF9jbWQpKTtcbiBcdGRlc2MtXHUwMDNlZmxvdy5xdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNigodTE2KXNpemUpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtXHUwMDNlY29tcGxfdGFnKTtcbitcbitcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMF0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdO1xuK1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1sxXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XG4rXHRkZXNjLVx1MDAzZWZsb3cucXcxLnRzWzJdID0gcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXTtcbiB9XG4gXG4gLyoqXG5AQCAtMzAxMSw2ICszMDE3LDYzIEBAIHN0YXRpYyBib29sIGlkcGZfdHhfc3BsaXRxX25lZWRfcmUoc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EpXG4gXHRyZXR1cm4gZ2FwIFx1MDAzZT0gSURQRl9UWF9TUExJVFFfUkVfTUlOX0dBUDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZShjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXG4re1xuK1x0Y29uc3QgaW50IHRzX2dyYW5fcG93MiA9IDk7XG4rXHR1NjQgdHMsIG5vdywgaG9yaXpvbjtcbitcbitcdGhvcml6b24gPSBSRUFEX09OQ0Uoc2tiLVx1MDAzZWRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcbitcdGlmICghaG9yaXpvbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi9cbitcdGlmIChuZXRwb2xsX3R4X3J1bm5pbmcoc2tiLVx1MDAzZWRldikpXG4rXHRcdHJldHVybjtcbitcbitcdHN3aXRjaCAoc2tiLVx1MDAzZXRzdGFtcF90eXBlKSB7XG4rXHRjYXNlIFNLQl9DTE9DS19SRUFMVElNRTpcbitcdFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9hZGQoc2tiLVx1MDAzZXRzdGFtcCxcbitcdFx0XHRcdFx0ICAga3RpbWVfbW9ub190b19hbnkoMCwgVEtfT0ZGU19UQUkpIC1cbitcdFx0XHRcdFx0ICAga3RpbWVfbW9ub190b19hbnkoMCwgVEtfT0ZGU19SRUFMKSkpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU0tCX0NMT0NLX01PTk9UT05JQzpcbitcdFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9tb25vX3RvX2FueShza2ItXHUwMDNldHN0YW1wLCBUS19PRkZTX1RBSSkpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU0tCX0NMT0NLX1RBSTpcbitcdFx0dHMgPSBrdGltZV90b19ucyhza2ItXHUwMDNldHN0YW1wKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRXQVJOX09OX09OQ0UoMSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdG5vdyA9IGt0aW1lX2dldF9jbG9ja3RhaV9ucygpO1xuK1x0aWYgKHRzIFx1MDAzYyBub3cpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIGJleW9uZCBvZmZsb2FkIGhvcml6b24/IHNldCBvdmVyZmxvdyBiaXQgb25seSAqL1xuK1x0aWYgKHRzIFx1MDAzZSBub3cgKyAoaG9yaXpvbiAqIE5TRUNfUEVSX1VTRUMpKSB7XG4rXHRcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAxIFx1MDAzY1x1MDAzYyA3O1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR0cyBcdTAwM2VcdTAwM2U9IHRzX2dyYW5fcG93MjtcbitcbitcdC8qIDAgaXMgdmFsaWQgMjRiIHRpbWVzdGFtcCwgYnV0IGFsc28gbWVhbnMgZmllbGQgdW5zZXQuXG4rXHQgKiBBZGQgNTEyIG5zICh0c19ncmFuX3BvdzIpIHRvIGF2b2lkIHRoaXMgY2FzZVxuK1x0ICovXG4rXHRpZiAoKHRzIFx1MDAyNiAweDdmZmZmZikgPT0gMCkge1xuK1x0XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gMTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1swXSA9IHRzIFx1MDAyNiAweGZmO1xuK1x0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1sxXSA9ICh0cyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4rXHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmKTtcbit9XG4rXG4gLyoqXG4gICogaWRwZl90eF9zcGxpdHFfZnJhbWUgLSBTZW5kcyBidWZmZXIgb24gVHggcmluZyB1c2luZyBmbGV4IGRlc2NyaXB0b3JzXG4gICogQHNrYjogc2VuZCBidWZmZXJcbkBAIC0zMDk3LDYgKzMxNjAsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRcdHR4X3BhcmFtcy5kdHlwZSA9IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRTtcbiBcdFx0dHhfcGFyYW1zLmVvcF9jbWQgPSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbitcbitcdFx0aWYgKHNrYi1cdTAwM2V0c3RhbXApXG4rXHRcdFx0aWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZSh0eF9xLCBza2IsIFx1MDAyNnR4X3BhcmFtcyk7XG4rXG4gXHRcdC8qIFNldCB0aGUgUkUgYml0IHRvIHBlcmlvZGljYWxseSBcImNsZWFuXCIgdGhlIGRlc2NyaXB0b3IgcmluZy5cbiBcdFx0ICogTUlOX0dBUCBpcyBzZXQgdG8gTUlOX1JJTkcgc2l6ZSB0byBlbnN1cmUgaXQgd2lsbCBiZSBzZXQgYXRcbiBcdFx0ICogbGVhc3Qgb25jZSBlYWNoIHRpbWUgYXJvdW5kIHRoZSByaW5nLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5pbmRleCA0YmU1YjNiNmQzZWQyYi4uODY1NDA4YjU3YjBkNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5AQCAtMTYxLDYgKzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHtcbiAgKiBAdHNvX3NlZ3M6IE51bWJlciBvZiBzZWdtZW50cyB0byBiZSBzZW50XG4gICogQHRzb19oZHJfbGVuOiBMZW5ndGggb2YgaGVhZGVycyB0byBiZSBkdXBsaWNhdGVkXG4gICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3JcbisgKiBAZGVzY190czogRmxvdyBzY2hlZHVsaW5nIG9mZmxvYWQgdGltZXN0YW1wXG4gICovXG4gc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xuIFx0dTMyIHR4X2ZsYWdzO1xuQEAgLTE3NCw2ICsxNzUsNyBAQCBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7XG4gXHR1MTYgdHNvX2hkcl9sZW47XG4gXG4gXHR1MTYgdGRfY21kO1xuK1x0dTggZGVzY190c1szXTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTg1LDYgKzg1LDggQEAgZW51bSB7XG4gICogQHR4X3B1c2hfYnVmX21heF9sZW46IE1heGltdW0gYWxsb3dlZCBzaXplIG9mIFRYIHB1c2ggYnVmZmVyXG4gICogQGhkc190aHJlc2g6IFBhY2tldCBzaXplIHRocmVzaG9sZCBmb3IgaGVhZGVyIGRhdGEgc3BsaXQgKEhEUylcbiAgKiBAaGRzX3RocmVzaF9tYXg6IE1heGltdW0gc3VwcG9ydGVkIHNldHRpbmcgZm9yIEBoZHNfdGhyZXNob2xkXG4rICogQHBhY2luZ19vZmZsb2FkX2hvcml6b246IHBhY2luZyBvZmZsb2FkIGhvcml6b24gdmFsdWUgaW4gdXNlY1xuKyAqIEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gdmFsdWUgaW4gdXNlY1xuICAqXG4gICovXG4gc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7XG5AQCAtOTcsNiArOTksOCBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbiBcdHUzMlx0dHhfcHVzaF9idWZfbWF4X2xlbjtcbiBcdHUzMlx0aGRzX3RocmVzaDtcbiBcdHUzMlx0aGRzX3RocmVzaF9tYXg7XG4rXHR1MzJcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHR1MzJcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuIH07XG4gXG4gLyoqXG5AQCAtMTA4LDYgKzExMiw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0ge1xuICAqIEBFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTjogY2FwdHVyZSBmb3Igc2V0dGluZyB0eF9wdXNoX2J1Zl9sZW5cbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVDogY2FwdHVyZSBmb3Igc2V0dGluZyB0Y3BfZGF0YV9zcGxpdFxuICAqIEBFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTOiBjYXB0dXJlIGZvciBzZXR0aW5nIGhlYWRlci1kYXRhLXNwbGl0LXRocmVzaFxuKyAqIEBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT046IGNhcHR1cmUgZm9yIHNldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvblxuICAqL1xuIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XG4gXHRFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU5cdFx0PSBCSVQoMCksXG5AQCAtMTE3LDYgKzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XG4gXHRFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTlx0PSBCSVQoNCksXG4gXHRFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElUXHRcdD0gQklUKDUpLFxuIFx0RVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSU1x0XHQ9IEJJVCg2KSxcbitcdEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTlx0PSBCSVQoNyksXG4gfTtcbiBcbiAjZGVmaW5lIF9fRVRIX1JTU19IQVNIX0JJVChiaXQpXHQoKHUzMikxIFx1MDAzY1x1MDAzYyAoYml0KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOGRiMjViNzk1NzNlM2MuLjNjMmVkNDViNTVkY2FkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTIxMjksNyArMjEyOSw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XG4gICpcdEBkcGxsX3BpbjogUG9pbnRlciB0byB0aGUgU3luY0Ugc291cmNlIHBpbiBvZiBhIERQTEwgc3Vic3lzdGVtLFxuICAqXHRcdCAgIHdoZXJlIHRoZSBjbG9jayBpcyByZWNvdmVyZWQuXG4gICpcbi0gKlx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggRURUIG9mZmxvYWQgaG9yaXpvbiBpbiBuc2VjLlxuKyAqXHRAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogYWN0aXZlIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cbisgKlx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxuICAqXHRAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSVxuICAqXHRcdCAgICAgIHNldHRpbmdzLlxuICAqXHRAbnVtX25hcGlfY29uZmlnczpcdG51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cyxcbkBAIC0yNTUyLDcgKzI1NTMsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XG4gXHQvKiogQGlycV9tb2RlcjogZGltIHBhcmFtZXRlcnMgdXNlZCBpZiBJU19FTkFCTEVEKENPTkZJR19ESU1MSUIpLiAqL1xuIFx0c3RydWN0IGRpbV9pcnFfbW9kZXJcdCppcnFfbW9kZXI7XG4gXG4tXHR1NjRcdFx0XHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbitcdHUzMlx0XHRcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHR1MzJcdFx0XHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiBcdHN0cnVjdCBuYXBpX2NvbmZpZ1x0Km5hcGlfY29uZmlnO1xuIFx0dTMyXHRcdFx0bnVtX25hcGlfY29uZmlncztcbiBcdHUzMlx0XHRcdG5hcGlfZGVmZXJfaGFyZF9pcnFzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5pbmRleCA4MTM0YmFmNzg2MGYzYy4uNmYxYTJmYTM2MTU3ZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5AQCAtMTkzLDYgKzE5Myw4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVgsXG4gXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSCxcbiBcdEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCxcbitcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxuK1x0RVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxuIFxuIFx0X19FVEhUT09MX0FfUklOR1NfQ05ULFxuIFx0RVRIVE9PTF9BX1JJTkdTX01BWCA9IChfX0VUSFRPT0xfQV9SSU5HU19DTlQgLSAxKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3BrdGdlbi5jXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xuQEAgLTIwMSw2ICsyMDEsNyBAQFxuIFx0cGYoU1ZJRF9STkQpXHRcdC8qIFJhbmRvbSBTVkxBTiBJRCAqL1x0XHRcdFxcXG4gXHRwZihOT0RFKVx0XHQvKiBOb2RlIG1lbW9yeSBhbGxvYyovXHRcdFx0XFxcbiBcdHBmKFNIQVJFRClcdFx0LyogU2hhcmVkIFNLQiAqL1x0XHRcdFxcXG4rXHRwZihUWFRJTUUpXHRcdC8qIFNPX1RYVElNRSBzdXBwb3J0ICovXHRcdFx0XFxcbiBcbiAjZGVmaW5lIHBmKGZsYWcpXHRcdGZsYWcjI19TSElGVCxcbiBlbnVtIHBrdF9mbGFncyB7XG5AQCAtMjkxLDYgKzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHU2NCBkZWxheTtcdFx0LyogbmFuby1zZWNvbmRzICovXG4gXG4rXHQvKiBUWFRJTUUgc3VwcG9ydCAqL1xuK1x0dTY0IHR4dGltZV9kZWxheTtcdC8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi9cbitcdGNsb2NraWRfdCB0eHRpbWVfY2xvY2tpZDsgLyogY2xvY2tpZCBmb3IgU09fVFhUSU1FICovXG4rXG4gXHRfX3U2NCBjb3VudDtcdFx0LyogRGVmYXVsdCBObyBwYWNrZXRzIHRvIHNlbmQgKi9cbiBcdF9fdTY0IHNvZmFyO1x0XHQvKiBIb3cgbWFueSBwa3RzIHdlJ3ZlIHNlbnQgc28gZmFyICovXG4gXHRfX3U2NCB0eF9ieXRlcztcdFx0LyogSG93IG1hbnkgYnl0ZXMgd2UndmUgdHJhbnNtaXR0ZWQgKi9cbkBAIC02NjYsNiArNjcxLDE3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gXHRpZiAocGt0X2Rldi1cdTAwM2Vub2RlIFx1MDAzZT0gMClcbiBcdFx0c2VxX3ByaW50ZihzZXEsIFwiICAgICBub2RlOiAlZFxcblwiLCBwa3RfZGV2LVx1MDAzZW5vZGUpO1xuIFxuK1x0aWYgKHBrdF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZfVFhUSU1FKSB7XG4rXHRcdGNsb2NraWRfdCBjbG9ja2lkID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xuK1xuK1x0XHRzZXFfcHJpbnRmKHNlcSwgXCIgICAgIHR4dGltZV9kZWxheTogJWxsdVxcblwiLFxuK1x0XHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXkpO1xuK1x0XHRzZXFfcHJpbnRmKHNlcSwgXCIgICAgIHR4dGltZV9jbG9ja2lkOiAlc1xcblwiLFxuK1x0XHRcdCAgIGNsb2NraWQgPT0gQ0xPQ0tfTU9OT1RPTklDID8gXCJtb25vdG9uaWNcIiA6XG4rXHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19SRUFMVElNRSA/IFwicmVhbHRpbWVcIiA6XG4rXHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19UQUkgPyBcInRhaVwiIDogXCJ1bmtub3duXCIpO1xuK1x0fVxuK1xuIFx0aWYgKHBrdF9kZXYtXHUwMDNleG1pdF9tb2RlID09IE1fTkVUSUZfUkVDRUlWRSlcbiBcdFx0c2VxX3B1dHMoc2VxLCBcIiAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXFxuXCIpO1xuIFx0ZWxzZSBpZiAocGt0X2Rldi1cdTAwM2V4bWl0X21vZGUgPT0gTV9RVUVVRV9YTUlUKVxuQEAgLTExNDEsNiArMTE1Nyw1MCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi1cdTAwM2VkZWxheSk7XG4gXHRcdHJldHVybiBjb3VudDtcbiBcdH1cbitcdGlmICghc3RyY21wKG5hbWUsIFwidHh0aW1lX2RlbGF5XCIpKSB7XG4rXHRcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcbitcdFx0bGVuID0gbnVtX2FyZyhcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4LCBcdTAwMjZ2YWx1ZSk7XG4rXHRcdGlmIChsZW4gXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIGxlbjtcbitcbitcdFx0LyogaW4gcXVldWVfeG1pdCBtb2RlIGZxIG1heSBjbGVhciB0c3RhbXAsIGRvIG5vdCByZXVzZSBza2IgKi9cbitcdFx0aWYgKHZhbHVlIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiBcdTAwM2UgMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSwgKHU2NCl2YWx1ZSk7XG4rXHRcdHNwcmludGYocGdfcmVzdWx0LCBcIk9LOiB0eHRpbWVfZGVsYXk9JWxsdVwiLFxuK1x0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpdmFsdWUpO1xuK1x0XHRyZXR1cm4gY291bnQ7XG4rXHR9XG4rXHRpZiAoIXN0cmNtcChuYW1lLCBcInR4dGltZV9jbG9ja2lkXCIpKSB7XG4rXHRcdGNoYXIgY2xvY2tzdHJbMzJdO1xuK1x0XHRjbG9ja2lkX3QgY2xrO1xuK1xuK1x0XHRtZW1zZXQoY2xvY2tzdHIsIDAsIHNpemVvZihjbG9ja3N0cikpO1xuK1x0XHRtYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7XG4rXHRcdGxlbiA9IHN0cm5fbGVuKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgpO1xuK1x0XHRpZiAobGVuIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBsZW47XG4rXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihjbG9ja3N0ciwgXHUwMDI2dXNlcl9idWZmZXJbaV0sIGxlbikpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRcdGlmICghc3RyY21wKGNsb2Nrc3RyLCBcIm1vbm90b25pY1wiKSkge1xuK1x0XHRcdGNsayA9IENMT0NLX01PTk9UT05JQztcbitcdFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcInJlYWx0aW1lXCIpKSB7XG4rXHRcdFx0Y2xrID0gQ0xPQ0tfUkVBTFRJTUU7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCJ0YWlcIikpIHtcbitcdFx0XHRjbGsgPSBDTE9DS19UQUk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwiRVJST1I6IHVua25vd24gY2xvY2tpZCAnJXMnXCIsXG4rXHRcdFx0XHRjbG9ja3N0cik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwiT0s6IHR4dGltZV9jbG9ja2lkPSVzXCIsIGNsb2Nrc3RyKTtcbitcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkLCBjbGspO1xuK1x0XHRyZXR1cm4gY291bnQ7XG4rXHR9XG4gXHRpZiAoIXN0cmNtcChuYW1lLCBcInJhdGVcIikpIHtcbiBcdFx0bWF4ID0gbWluKDEwLCBjb3VudCAtIGkpO1xuIFx0XHRsZW4gPSBudW1fYXJnKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFx1MDAyNnZhbHVlKTtcbkBAIC0xMjM4LDYgKzEyOTgsOCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGlmICh2YWx1ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgKHBrdF9kZXYtXHUwMDNlbl9pbWl4X2VudHJpZXMgXHUwMDNlIDAgfHxcbiBcdFx0XHRcdCAgIShwa3RfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBGX1NIQVJFRCkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRpZiAodmFsdWUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdHBrdF9kZXYtXHUwMDNlY2xvbmVfc2tiID0gdmFsdWU7XG4gXG5AQCAtMjMyMSw2ICsyMzgzLDIxIEBAIHN0YXRpYyB2b2lkIHBrdGdlbl9zZXR1cF9pbmplY3Qoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gfVxuIFxuIFxuK3N0YXRpYyBrdGltZV90IGt0aW1lX2dldF9jbG9jayhjbG9ja2lkX3QgY2xvY2tpZClcbit7XG4rXHRzd2l0Y2ggKGNsb2NraWQpIHtcbitcdGNhc2UgQ0xPQ0tfUkVBTFRJTUU6XG4rXHRcdHJldHVybiBrdGltZV9nZXRfcmVhbCgpO1xuK1x0Y2FzZSBDTE9DS19NT05PVE9OSUM6XG4rXHRcdHJldHVybiBrdGltZV9nZXQoKTtcbitcdGNhc2UgQ0xPQ0tfVEFJOlxuK1x0XHRyZXR1cm4ga3RpbWVfZ2V0X2Nsb2NrdGFpKCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRXQVJOX09OX09OQ0UoMSk7XG4rXHRcdHJldHVybiBrdGltZV9nZXQoKTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgc3BpbihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldiwga3RpbWVfdCBzcGluX3VudGlsKVxuIHtcbiBcdGt0aW1lX3Qgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG5AQCAtMzUxMCw3ICszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiBcbiBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiB7XG4tXHRib29sIHNrYl9zaGFyZWQgPSAhIShSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VmbGFncykgXHUwMDI2IEZfU0hBUkVEKTtcbitcdHUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWZsYWdzKTtcbitcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKGZsYWdzIFx1MDAyNiBGX1NIQVJFRCk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtXHUwMDNlb2RldjtcbiBcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcdHVuc2lnbmVkIGludCBidXJzdCA9IDE7XG5AQCAtMzU0NSw2ICszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHQvKiBJZiBubyBza2Igb3IgY2xvbmUgY291bnQgZXhoYXVzdGVkIHRoZW4gZ2V0IG5ldyBvbmUgKi9cbiBcdGlmICghcGt0X2Rldi1cdTAwM2Vza2IgfHwgKHBrdF9kZXYtXHUwMDNlbGFzdF9vayBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICArK3BrdF9kZXYtXHUwMDNlY2xvbmVfY291bnQgXHUwMDNlPSBjbG9uZV9za2IpKSB7XG4rXHRcdHU2NCB0eHRpbWVfZGVsYXk7XG4rXG4gXHRcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xuIFx0XHRrZnJlZV9za2IocGt0X2Rldi1cdTAwM2Vza2IpO1xuIFxuQEAgLTM1NTcsNiArMzYzNywxNiBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiBcdFx0fVxuIFx0XHRwa3RfZGV2LVx1MDAzZWxhc3RfcGt0X3NpemUgPSBwa3RfZGV2LVx1MDAzZXNrYi1cdTAwM2VsZW47XG4gXHRcdHBrdF9kZXYtXHUwMDNlY2xvbmVfY291bnQgPSAwO1x0LyogcmVzZXQgY291bnRlciAqL1xuK1xuK1x0XHR0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXkpO1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEZfVFhUSU1FIFx1MDAyNlx1MDAyNiB0eHRpbWVfZGVsYXkpIHtcbitcdFx0XHRjbG9ja2lkX3QgY2xrID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xuK1x0XHRcdGt0aW1lX3QgdHh0aW1lID0ga3RpbWVfYWRkX25zKGt0aW1lX2dldF9jbG9jayhjbGspLFxuK1x0XHRcdFx0XHRcdCAgICAgIHR4dGltZV9kZWxheSk7XG4rXG4rXHRcdFx0c2tiX3NldF9kZWxpdmVyeV90eXBlX2J5X2Nsb2NraWQocGt0X2Rldi1cdTAwM2Vza2IsIHR4dGltZSxcbitcdFx0XHRcdFx0XHRcdCBjbGspO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAocGt0X2Rldi1cdTAwM2VkZWxheSBcdTAwMjZcdTAwMjYgcGt0X2Rldi1cdTAwM2VsYXN0X29rKVxuQEAgLTM4NjksNiArMzk1OSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcbiBcdHBrdF9kZXYtXHUwMDNlYnVyc3QgPSAxO1xuIFx0cGt0X2Rldi1cdTAwM2Vub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0cGt0X2Rldi1cdTAwM2VmbGFncyA9IEZfU0hBUkVEO1x0LyogU0tCIHNoYXJlZCBieSBkZWZhdWx0ICovXG4rXHRwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkID0gQ0xPQ0tfTU9OT1RPTklDO1xuIFxuIFx0ZXJyID0gcGt0Z2VuX3NldHVwX2Rldih0LVx1MDAzZW5ldCwgcGt0X2RldiwgaWZuYW1lKTtcbiBcdGlmIChlcnIpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggMzFjNjVhNTQ1YTEwN2MuLjJjN2EyNDVjNWZmYzJlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtMjE1NSw3ICsyMTU1LDcgQEAgc3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX1RTT19NQVhfU0VHUyxcbiBcdFx0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZXRzb19tYXhfc2VncykpIHx8XG4gXHQgICAgbmxhX3B1dF91aW50KHNrYiwgSUZMQV9NQVhfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbi1cdFx0XHQgUkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikpIHx8XG4rXHRcdFx0ICh1NjQpUkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fFxuICNpZmRlZiBDT05GSUdfUlBTXG4gXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsXG4gXHRcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2VudW1fcnhfcXVldWVzKSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uYyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXG5pbmRleCAyM2RiNDA2MThmZWQxNC4uOWNhNjk4MGYyMjkxZTYgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9jb21tb24uY1xuKysrIGIvbmV0L2V0aHRvb2wvY29tbW9uLmNcbkBAIC05NTQsNiArOTU0LDEwIEBAIHZvaWQgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0LyogRHJpdmVyIGdpdmVzIHVzIGN1cnJlbnQgc3RhdGUsIHdlIHdhbnQgdG8gcmV0dXJuIGN1cnJlbnQgY29uZmlnICovXG4gXHRrcGFyYW0tXHUwMDNldGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRrcGFyYW0tXHUwMDNlaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbitcbitcdGtwYXJhbS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gUkVBRF9PTkNFKGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcbitcdGtwYXJhbS1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XG4rXHRcdFJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuaW5kZXggM2U5NjlhMDcwZjlmZTQuLmFlN2I2NTFjNjU4Zjc0IDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5oXG4rKysgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbkBAIC00OTQsNyArNDk0LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ZlYXR1cmVzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0ZFQVRVUkVTX1dBTlRcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19IRUFERVIgKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19GTEFHUyArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19nZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRUFERVIgKyAxXTtcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVggKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0NPTUJJTkVEX0NPVU5UICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NvYWxlc2NlX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NPQUxFU0NFX0hFQURFUiArIDFdO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3JpbmdzLmMgYi9uZXQvZXRodG9vbC9yaW5ncy5jXG5pbmRleCA5MDU0Yzg5YzVkN2JiMi4uNWNjMjBkNTgxYzQ2ZWMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9yaW5ncy5jXG4rKysgYi9uZXQvZXRodG9vbC9yaW5ncy5jXG5AQCAtNDIsNiArNDIsMTAgQEAgc3RhdGljIGludCByaW5nc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbiBcbiBcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS50Y3BfZGF0YV9zcGxpdCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX2NvbmZpZztcbiBcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoID0gZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfdGhyZXNoO1xuK1x0ZGF0YS1cdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b24gPVxuK1x0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pO1xuK1x0ZGF0YS1cdTAwM2VrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID1cbitcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3JpbmdwYXJhbShkZXYsIFx1MDAyNmRhdGEtXHUwMDNlcmluZ3BhcmFtLFxuIFx0XHRcdFx0XHRcdTAwMjZkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXHUwMDNlZXh0YWNrKTtcbkBAIC02OSw3ICs3Myw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovXG4gXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYICovXG4gXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXG4tXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYICovXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEyMSw3ICsxMjcsMTIgQEAgc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaCkgfHxcbiBcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuLVx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXG4rXHRcdFx0ICBrci1cdTAwM2VoZHNfdGhyZXNoX21heCkpKSB8fFxuK1x0ICAgICgoc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbitcdFx0XHQgIGtyLVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8XG4rXHQgICAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCxcbitcdFx0XHQgIGtyLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0LDYgKzE1NSw3IEBAIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbXSA9IHtcbiBcdFtFVEhUT09MX0FfUklOR1NfUlhfUFVTSF1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIDEpLFxuIFx0W0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gXHRbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnRcbkBAIC0xNzcsNiArMTg5LDE0IEBAIGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4rXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEob3BzLVx1MDAzZXN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcdTAwMjYgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OKSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0ICAgIHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSxcbitcdFx0XHRcdCAgICBcInNldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX0NRRV9TSVpFXSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKG9wcy1cdTAwM2VzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfQ1FFX1NJWkUpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssXG5AQCAtMjQ2LDYgKzI2Niw4IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRcdCB0YltFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXSwgXHUwMDI2bW9kKTtcbiBcdGV0aG5sX3VwZGF0ZV91MzIoXHUwMDI2a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLFxuIFx0XHRcdCB0YltFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF0sIFx1MDAyNm1vZCk7XG4rXHRldGhubF91cGRhdGVfdTMyKFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcbitcdFx0XHQgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLCBcdTAwMjZtb2QpO1xuIFx0aWYgKCFtb2QpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTI4MSw2ICszMDMsOSBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfVFhdO1xuIFx0ZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoIFx1MDAzZSBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KVxuIFx0XHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTtcbitcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiBcdTAwM2VcbitcdFx0IGtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pXG4rXHRcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dO1xuIFx0ZWxzZVxuIFx0XHRlcnJfYXR0ciA9IE5VTEw7XG4gXHRpZiAoZXJyX2F0dHIpIHtcbkBAIC0zMDIsNiArMzI3LDEwIEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0cmV0ID0gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9yaW5ncGFyYW0oZGV2LCBcdTAwMjZyaW5ncGFyYW0sXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXHUwMDNlZXh0YWNrKTtcbitcdGlmICghcmV0KVxuK1x0XHRXUklURV9PTkNFKGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLFxuK1x0XHRcdCAgIGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4rXG4gXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXG5pbmRleCA3Y2FlMDgyYTk4NDcyMS4uY2JmMDE1ZGY2OGNjZjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuQEAgLTM5OSw2ICszOTksMTEgQEAgc3RhdGljIHN0cnVjdCBmcV9mbG93ICpmcV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgIFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfc3RhdHVzKSAhPSBTS19QQUNJTkdfRlEpXG4gXHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2stXHUwMDNlc2tfcGFjaW5nX3N0YXR1cyxcbiBcdFx0XHRcdFx0ICBTS19QQUNJTkdfRlEpO1xuK1xuK1x0XHRpZiAocS1cdTAwM2VvZmZsb2FkX2hvcml6b24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBmcV9za2JfY2Ioc2tiKS1cdTAwM2V0aW1lX3RvX3NlbmQgXHUwMDNjPSBub3cpXG4rXHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IDA7XG4rXG4gXHRcdHJldHVybiBcdTAwMjZxLVx1MDAzZWludGVybmFsO1xuIFx0fVxuIFxuQEAgLTcwNyw2ICs3MTIsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gXHRzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbiBcdHN0cnVjdCBmcV9wZXJiYW5kX2Zsb3dzICpwYmFuZDtcbiBcdHN0cnVjdCBmcV9mbG93X2hlYWQgKmhlYWQ7XG4rXHR1NjQgdGltZV9uZXh0X3BhY2tldDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZnFfZmxvdyAqZjtcbiBcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbkBAIC03MjEsNyArNzI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIFx0aWYgKHNrYikge1xuIFx0XHRxLVx1MDAzZWludGVybmFsLnFsZW4tLTtcbiBcdFx0ZnFfZGVxdWV1ZV9za2Ioc2NoLCBcdTAwMjZxLVx1MDAzZWludGVybmFsLCBza2IpO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0cmV0dXJuIHNrYjtcbiBcdH1cbiBcbiBcdG5vdyA9IGt0aW1lX2dldF9ucygpO1xuQEAgLTc1OCw4ICs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gXG4gXHRza2IgPSBmcV9wZWVrKGYpO1xuIFx0aWYgKHNrYikge1xuLVx0XHR1NjQgdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXHUwMDNldGltZV90b19zZW5kLFxuLVx0XHRcdFx0XHQgICAgIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4rXHRcdHRpbWVfbmV4dF9wYWNrZXQgPSBtYXhfdCh1NjQsIGZxX3NrYl9jYihza2IpLVx1MDAzZXRpbWVfdG9fc2VuZCxcbitcdFx0XHRcdFx0IGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4gXG4gXHRcdGlmIChub3cgKyBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcdTAwM2MgdGltZV9uZXh0X3BhY2tldCkge1xuIFx0XHRcdGhlYWQtXHUwMDNlZmlyc3QgPSBmLVx1MDAzZW5leHQ7XG5AQCAtODI4LDExICs4MzQsMTUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIFx0XHQgKiBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgd2FzIHNldCB3aGVuIHByaW9yIHBhY2tldCB3YXMgc2VudCxcbiBcdFx0ICogYW5kIGN1cnJlbnQgdGltZSAoQG5vdykgY2FuIGJlIHRvbyBsYXRlIGJ5IHRlbnMgb2YgdXMuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZi1cdTAwM2V0aW1lX25leHRfcGFja2V0KVxuK1x0XHRpZiAoZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IFx1MDAyNlx1MDAyNiBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgXHUwMDNjIG5vdylcbiBcdFx0XHRsZW4gLT0gbWluKGxlbi8yLCBub3cgLSBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xuIFx0XHRmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgPSBub3cgKyBsZW47XG4gXHR9XG4rXG4gb3V0OlxuK1x0aWYgKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFx1MDAyNlx1MDAyNiB0aW1lX25leHRfcGFja2V0IFx1MDAzYz0gbm93KVxuK1x0XHRza2ItXHUwMDNldHN0YW1wID0gMDtcbitcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuQEAgLTExNzksNyArMTE4OSw5IEBAIHN0YXRpYyBpbnQgZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHU2NCBvZmZsb2FkX2hvcml6b24gPSAodTY0KU5TRUNfUEVSX1VTRUMgKlxuIFx0XHRcdFx0ICAgICAgbmxhX2dldF91MzIodGJbVENBX0ZRX09GRkxPQURfSE9SSVpPTl0pO1xuIFxuLVx0XHRpZiAob2ZmbG9hZF9ob3Jpem9uIFx1MDAzYz0gcWRpc2NfZGV2KHNjaCktXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHtcbitcdFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcdTAwM2M9XG4rXHRcdCAgICAodTY0KVJFQURfT05DRShxZGlzY19kZXYoc2NoKS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSAqXG4rXHRcdCAgICBOU0VDX1BFUl9VU0VDKSB7XG4gXHRcdFx0V1JJVEVfT05DRShxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiwgb2ZmbG9hZF9ob3Jpem9uKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImludmFsaWQgb2ZmbG9hZF9ob3Jpem9uXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcbmluZGV4IDU1YTM4NmYzZDFiOTBmLi42ZTY0YmFhNGM2MGRkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xuQEAgLTQyLDggKzQyLDEwIEBAIHN0YXRpYyBib29sXHRjZmdfbWFjaGluZV9zbG93O1xuIHN0YXRpYyB1aW50NjRfdFx0Y2ZnX3N0YXJ0X3RpbWVfbnM7XG4gc3RhdGljIGludFx0Y2ZnX21hcms7XG4gc3RhdGljIGJvb2xcdGNmZ19yeDtcbitzdGF0aWMgYm9vbFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkO1xuIFxuIHN0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydDtcbitzdGF0aWMgdWludDY0X3QgZ2xvYl90c3RhcnRfcmVhbDtcbiBzdGF0aWMgdWludDY0X3QgdGRlbGl2ZXJfbWF4O1xuIFxuIHN0YXRpYyBpbnQgZXJyb3JzO1xuQEAgLTE1OCwxOCArMTYwLDcwIEBAIHN0YXRpYyB2b2lkIGRvX3JlY3ZfdmVyaWZ5X2VtcHR5KGludCBmZHIpXG4gXHRcdGVycm9yKDEsIDAsIFwicmVjdjogbm90IGVtcHR5IGFzIGV4cGVjdGVkICglZCwgJWQpXCIsIHJldCwgZXJybm8pO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuK3N0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLFxuK1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgcGF5bG9hZF9jaGFyKVxuK3tcbitcdGNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7XG4rXHRpbnQ2NF90IHRzdGFtcCA9IDA7XG4rXG4rXHRzd2l0Y2ggKGVyci1cdTAwM2VlZV9lcnJubykge1xuK1x0Y2FzZSBFQ0FOQ0VMRUQ6XG4rXHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXG4rXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXG5cIixcbitcdFx0XHQgICAgICBlcnItXHUwMDNlZWVfY29kZSk7XG4rXHRcdHJlYXNvbiA9IFwibWlzc2VkIHR4dGltZVwiO1xuK1x0YnJlYWs7XG4rXHRjYXNlIEVJTlZBTDpcbitcdFx0aWYgKGVyci1cdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX0lOVkFMSURfUEFSQU0pXG4rXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcXG5cIixcbitcdFx0XHQgICAgICBlcnItXHUwMDNlZWVfY29kZSk7XG4rXHRcdHJlYXNvbiA9IFwiaW52YWxpZCB0eHRpbWVcIjtcbitcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcblwiLFxuK1x0XHQgICAgICBlcnItXHUwMDNlZWVfZXJybm8sIGVyci1cdTAwM2VlZV9jb2RlKTtcbitcdH1cbitcbitcdHRzdGFtcCA9ICgoaW50NjRfdCllcnItXHUwMDNlZWVfZGF0YSkgXHUwMDNjXHUwMDNjIDMyIHwgZXJyLVx1MDAzZWVlX2luZm87XG4rXHR0c3RhbXAgLT0gKGludDY0X3QpZ2xvYl90c3RhcnQ7XG4rXHR0c3RhbXAgLz0gMTAwMCAqIDEwMDA7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJzZW5kOiBwa3QgJWMgYXQgJVwiIFBSSWQ2NCBcIm1zIGRyb3BwZWQ6ICVzXFxuXCIsXG4rXHRcdHBheWxvYWRfY2hhciwgdHN0YW1wLCByZWFzb24pO1xuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3MpXG4re1xuK1x0aW50NjRfdCB0cztcbitcbitcdHRzID0gdHNzLVx1MDAzZXRzWzBdLnR2X3NlYztcbitcdHRzICo9IDEwMDBVTEwgKiAxMDAwICogMTAwMDtcbitcdHRzICs9IHRzcy1cdTAwM2V0c1swXS50dl9uc2VjO1xuK1x0dHMgLT0gZ2xvYl90c3RhcnRfcmVhbDtcbitcdHRzIC89IDEwMDA7XG4rXG4rXHRpZiAodHMgXHUwMDNlIGNmZ192YXJpYW5jZV91cykge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJzdyBkZWxheSAlXCIgUFJJZDY0IFwidXMgZXhjZWVkcyBib3VuZHNcXG5cIiwgdHMpO1xuK1x0XHRpZiAoIWNmZ19tYWNoaW5lX3Nsb3cpXG4rXHRcdFx0ZXJyb3JzKys7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZShpbnQgZmR0KVxuIHtcbiBcdGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIpKSArXG4rXHRcdCAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjbV90aW1lc3RhbXBpbmcpKSArXG4gXHRcdCAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpXSA9IHswfTtcbiBcdGNoYXIgZGF0YVtzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICtcbiBcdFx0ICBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyAxXTtcbitcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3M7XG4gXHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycjtcbiBcdGludCByZXQsIG51bV90c3RhbXAgPSAwO1xuIFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7MH07XG4gXHRzdHJ1Y3QgaW92ZWMgaW92ID0gezB9O1xuIFx0c3RydWN0IGNtc2doZHIgKmNtO1xuLVx0aW50NjRfdCB0c3RhbXAgPSAwO1xuIFxuIFx0aW92Lmlvdl9iYXNlID0gZGF0YTtcbiBcdGlvdi5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpO1xuQEAgLTE4MSw4ICsyMzUsNiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuIFx0bXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpO1xuIFxuIFx0d2hpbGUgKDEpIHtcbi1cdFx0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcbi1cbiBcdFx0cmV0ID0gcmVjdm1zZyhmZHQsIFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcbiBcdFx0aWYgKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUFHQUlOKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTE5Miw0MiArMjQ0LDMyIEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXG4gXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogZmxhZ3MgMHgleFxcblwiLCBtc2cubXNnX2ZsYWdzKTtcbiBcbiBcdFx0Y20gPSBDTVNHX0ZJUlNUSERSKFx1MDAyNm1zZyk7XG4rXHRcdHRzcyA9IE5VTEw7XG4rXG4rXHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsID09IFNPTF9TT0NLRVQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjbS1cdTAwM2VjbXNnX3R5cGUgPT0gU0NNX1RJTUVTVEFNUElORykge1xuK1x0XHRcdHRzcyA9ICh2b2lkICopQ01TR19EQVRBKGNtKTtcbitcdFx0XHRjbSA9IENNU0dfTlhUSERSKFx1MDAyNm1zZywgY20pO1xuK1x0XHRcdGlmICghY20pXG4rXHRcdFx0XHRlcnJvcigxLCAwLCBcInRpbWVzdGFtcCBtaXNzaW5nIGlwIGVyclxcblwiKTtcbitcdFx0fVxuK1xuIFx0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBjZmdfZXJycV9sZXZlbCB8fFxuIFx0XHQgICAgY20tXHUwMDNlY21zZ190eXBlICE9IGNmZ19lcnJxX3R5cGUpXG4gXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdHlwZSAweCV4LjB4JXhcXG5cIixcbiBcdFx0XHRcdCAgICBjbS1cdTAwM2VjbXNnX2xldmVsLCBjbS1cdTAwM2VjbXNnX3R5cGUpO1xuIFxuIFx0XHRlcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcbi1cdFx0aWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1RYVElNRSlcbitcdFx0aWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RYVElNRSlcbitcdFx0XHRudW1fdHN0YW1wICs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChlcnIsXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgZGF0YVtyZXQgLSAxXSk7XG4rXHRcdGVsc2UgaWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyBcdTAwMjZcdTAwMjYgdHNzKVxuK1x0XHRcdGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKGVyciwgdHNzKTtcbitcdFx0ZWxzZVxuIFx0XHRcdGVycm9yKDEsIDAsIFwiZXJycXVldWU6IG9yaWdpbiAweCV4XFxuXCIsIGVyci1cdTAwM2VlZV9vcmlnaW4pO1xuIFxuLVx0XHRzd2l0Y2ggKGVyci1cdTAwM2VlZV9lcnJubykge1xuLVx0XHRjYXNlIEVDQU5DRUxFRDpcbi1cdFx0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKVxuLVx0XHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXG5cIixcbi1cdFx0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0XHRyZWFzb24gPSBcIm1pc3NlZCB0eHRpbWVcIjtcbi1cdFx0YnJlYWs7XG4tXHRcdGNhc2UgRUlOVkFMOlxuLVx0XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKVxuLVx0XHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcXG5cIixcbi1cdFx0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0XHRyZWFzb24gPSBcImludmFsaWQgdHh0aW1lXCI7XG4tXHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGVycm9yKDEsIDAsIFwiZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcXG5cIixcbi1cdFx0XHQgICAgICBlcnItXHUwMDNlZWVfZXJybm8sIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0fVxuLVxuLVx0XHR0c3RhbXAgPSAoKGludDY0X3QpIGVyci1cdTAwM2VlZV9kYXRhKSBcdTAwM2NcdTAwM2MgMzIgfCBlcnItXHUwMDNlZWVfaW5mbztcbi1cdFx0dHN0YW1wIC09IChpbnQ2NF90KSBnbG9iX3RzdGFydDtcbi1cdFx0dHN0YW1wIC89IDEwMDAgKiAxMDAwO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCJzZW5kOiBwa3QgJWMgYXQgJVwiIFBSSWQ2NCBcIm1zIGRyb3BwZWQ6ICVzXFxuXCIsXG4tXHRcdFx0ZGF0YVtyZXQgLSAxXSwgdHN0YW1wLCByZWFzb24pO1xuLVxuIFx0XHRtc2cubXNnX2ZsYWdzID0gMDtcbiBcdFx0bXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpO1xuLVx0XHRudW1fdHN0YW1wKys7XG4gXHR9XG4gXG4gXHRyZXR1cm4gbnVtX3RzdGFtcDtcbkBAIC0yNDUsMTIgKzI4NywxMyBAQCBzdGF0aWMgdm9pZCByZWN2X2VycnF1ZXVlX21zZ3MoaW50IGZkdClcbiBcdFx0XHRlcnJvcigxLCBlcnJubywgXCJwb2xsXCIpO1xuIFxuIFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAocGZkLnJldmVudHMgXHUwMDI2IFBPTExFUlIpKVxuLVx0XHRcdG51bV90c3RhbXAgKz0gZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGZkdCk7XG4rXHRcdFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlKGZkdCk7XG4gXG4gXHRcdGlmIChudW1fdHN0YW1wID09IGNmZ19udW1fcGt0KVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0fSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgXHUwMDNjIHRkZWxpdmVyX21heCk7XG4rXHR9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSBcdTAwM2NcbitcdFx0IHRkZWxpdmVyX21heCArIChjZmdfdmFyaWFuY2VfdXMgKiAxMDAwKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHN0YXJ0X3RpbWVfd2FpdCh2b2lkKVxuQEAgLTI5NSw2ICszMzgsMTggQEAgc3RhdGljIHZvaWQgc2V0c29ja29wdF90eHRpbWUoaW50IGZkKVxuIFx0XHRlcnJvcigxLCAwLCBcImdldHNvY2tvcHQgdHh0aW1lOiBtaXNtYXRjaFwiKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc2V0c29ja29wdF90eHRpbWVzdGFtcGluZyhpbnQgZmQpXG4re1xuK1x0aW50IHZhbCA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxuK1x0XHQgIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgfFxuK1x0XHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEIHxcbitcdFx0ICBTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk7XG4rXG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLFxuK1x0XHQgICAgICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcInNldHNvY2tvcHQgdGltZXN0YW1waW5nXCIpO1xuK31cbitcbiBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4ge1xuIFx0aW50IGZkO1xuQEAgLTMwOCw2ICszNjMsOSBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4gXG4gXHRzZXRzb2Nrb3B0X3R4dGltZShmZCk7XG4gXG4rXHRpZiAoY2ZnX3ZlcmlmeV9od19vZmZsb2FkKVxuK1x0XHRzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGZkKTtcbitcbiBcdGlmIChjZmdfbWFyayBcdTAwMjZcdTAwMjZcbiBcdCAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19NQVJLLCBcdTAwMjZjZmdfbWFyaywgc2l6ZW9mKGNmZ19tYXJrKSkpXG4gXHRcdGVycm9yKDEsIGVycm5vLCBcInNldHNvY2tvcHQgbWFya1wiKTtcbkBAIC0zMTcsNyArMzc1LDcgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIHN0YXRpYyBpbnQgc2V0dXBfcngoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiB7XG4tXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSAxMDAgKiAxMDAwIH07XG4rXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSA2MDAgKiAxMDAwIH07XG4gXHRpbnQgZmQ7XG4gXG4gXHRmZCA9IHNvY2tldChhZGRyLVx1MDAzZXNhX2ZhbWlseSwgU09DS19ER1JBTSwgMCk7XG5AQCAtMzQ4LDYgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX3Rlc3RfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiBcbiBcdHN0YXJ0X3RpbWVfd2FpdCgpO1xuIFx0Z2xvYl90c3RhcnQgPSBnZXR0aW1lX25zKGNmZ19jbG9ja2lkKTtcbitcdGdsb2JfdHN0YXJ0X3JlYWwgPSBnZXR0aW1lX25zKENMT0NLX1JFQUxUSU1FKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNmZ19udW1fcGt0OyBpKyspXG4gXHRcdGRvX3NlbmRfb25lKGZkdCwgXHUwMDI2Y2ZnX2J1ZltpXSk7XG5AQCAtNDQwLDEwICs0OTksMTEgQEAgc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpXG4gXHRcdFx0XCIgIC02ICAgICAgICAgICAgb25seSBJUHY2XFxuXCJcbiBcdFx0XHRcIiAgLWMgXHUwMDNjY2xvY2tcdTAwM2UgICAgbW9ub3RvbmljIG9yIHRhaSAoZGVmYXVsdClcXG5cIlxuIFx0XHRcdFwiICAtRCBcdTAwM2NhZGRyXHUwMDNlICAgICBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzIChzZXJ2ZXIpXFxuXCJcbi1cdFx0XHRcIiAgLVMgXHUwMDNjYWRkclx1MDAzZSAgICAgc291cmNlIElQIGFkZHJlc3MgKGNsaWVudClcXG5cIlxuK1x0XHRcdFwiICAtaCAgICAgICAgICAgIHZlcmlmeSBoYXJkd2FyZSBvZmZsb2FkICh0eClcXG5cIlxuK1x0XHRcdFwiICAtbSBcdTAwM2NtYXJrXHUwMDNlICAgICBzb2NrZXQgbWFya1xcblwiXG4gXHRcdFx0XCIgIC1yICAgICAgICAgICAgcnVuIHJ4IG1vZGVcXG5cIlxuK1x0XHRcdFwiICAtUyBcdTAwM2NhZGRyXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcblwiXG4gXHRcdFx0XCIgIC10IFx1MDAzY25zZWNcdTAwM2UgICAgIHN0YXJ0IHRpbWUgKFVUQyBuYW5vc2Vjb25kcylcXG5cIlxuLVx0XHRcdFwiICAtbSBcdTAwM2NtYXJrXHUwMDNlICAgICBzb2NrZXQgbWFya1xcblwiXG4gXHRcdFx0XCJcXG5cIixcbiBcdFx0XHRwcm9nbmFtZSk7XG4gXHRleGl0KDEpO1xuQEAgLTQ1NSw3ICs1MTUsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGludCBkb21haW4gPSBQRl9VTlNQRUM7XG4gXHRpbnQgYztcbiBcbi1cdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcIjQ2YzpTOkQ6cnQ6bTpcIikpICE9IC0xKSB7XG4rXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXCI0NmM6RDpobTpyUzp0OlwiKSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChjKSB7XG4gXHRcdGNhc2UgJzQnOlxuIFx0XHRcdGlmIChkb21haW4gIT0gUEZfVU5TUEVDKVxuQEAgLTQ4MiwyMSArNTQyLDI0IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGVycm9yKDEsIDAsIFwidW5rbm93biBjbG9jayBpZCAlc1wiLCBvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdTJzpcbi1cdFx0XHRzYWRkciA9IG9wdGFyZztcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAnRCc6XG4gXHRcdFx0ZGFkZHIgPSBvcHRhcmc7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ2gnOlxuK1x0XHRcdGNmZ192ZXJpZnlfaHdfb2ZmbG9hZCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ20nOlxuK1x0XHRcdGNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ3InOlxuIFx0XHRcdGNmZ19yeCA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ1MnOlxuK1x0XHRcdHNhZGRyID0gb3B0YXJnO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICd0JzpcbiBcdFx0XHRjZmdfc3RhcnRfdGltZV9ucyA9IHN0cnRvbGwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnbSc6XG4tXHRcdFx0Y2ZnX21hcmsgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZShhcmd2WzBdKTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxuaW5kZXggYWRmNmM4NDhkNmQ4MGYuLjdiNzVhMzNmNWM0M2Y4IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcbkBAIC0xMiwxMCArMTIsMTMgQEAgaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF92YXJpYW50c1xuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBLc2Z0U2tpcEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBia2csIGNtZCwgZGVmZXIsIHRjXG4rZnJvbSBsaWIucHkgaW1wb3J0IEV0aHRvb2xGYW1pbHksIE5sRXJyb3JcbiBcbiBcbiBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOlxuICAgICBcIlwiXCJNYWluIGZ1bmN0aW9uLiBSdW4gc29fdHh0aW1lIGFzIHNlbmRlciBhbmQgcmVjZWl2ZXIuXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuK1xuICAgICBzbG93X21hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgnS1NGVF9NQUNISU5FX1NMT1cnKVxuIFxuICAgICBpZiBub3QgaGFzYXR0cihjZmcsIFwiYmluX3JlbW90ZVwiKTpcbkBAIC0zOCw2ICs0MSwzNCBAQCBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOlxuICAgICAgICAgY21kKGNtZF90eClcbiBcbiBcbitkZWYgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpOlxuKyAgICBcIlwiXCJDb25maWd1cmUgcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi5cIlwiXCJcbisgICAgZXRobmwgPSBFdGh0b29sRmFtaWx5KClcbitcbisgICAgdHJ5OlxuKyAgICAgICAgcmluZ3MgPSBldGhubC5yaW5nc19nZXQoeydoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fX0pXG4rICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdyaW5nLWdldCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZScpIGZyb20gZVxuK1xuKyAgICBpZiAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbicgbm90IGluIHJpbmdzIG9yIFxcXG4rICAgICAgICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heCcgbm90IGluIHJpbmdzOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgncGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZScpXG4rXG4rICAgIGlmIHJpbmdzWydwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heCddIFx1MDAzYyA1MF8wMDA6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdwYWNpbmcgb2ZmbG9hZCBtYXggaG9yaXpvbiB0b28gc21hbGwnKVxuK1xuKyAgICBjdXJfaG9yaXpvbiA9IHJpbmdzWydwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJ11cbisgICAgbmV3X2hvcml6b24gPSA1MF8wMDBcbisgICAgZXRobmwucmluZ3Nfc2V0KHtcbisgICAgICAgICdoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fSxcbisgICAgICAgICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJzogbmV3X2hvcml6b24sXG4rICAgIH0pXG4rICAgIGRlZmVyKGV0aG5sLnJpbmdzX3NldCwge1xuKyAgICAgICAgJ2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9LFxuKyAgICAgICAgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nOiBjdXJfaG9yaXpvblxuKyAgICB9KVxuK1xuK1xuIGRlZiBfcWRpc2Nfc2V0dXAoaWZuYW1lLCBxZGlzYywgb3B0YXJncz1cIlwiKTpcbiAgICAgXCJcIlwiUmVwbGFjZSByb290IHFkaXNjLiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBhZnRlciB0aGUgdGVzdC5cbiBcbkBAIC01Niw2ICs4Nyw3IEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxuICAgICAgICAgICAgIFtcIm9uZV9wa3RcIiwgXCJhLDEwXCIsIFwiYSwxMFwiXSxcbiAgICAgICAgICAgICBbXCJpbl9vcmRlclwiLCBcImEsMTAsYiwyMFwiLCBcImEsMTAsYiwyMFwiXSxcbiAgICAgICAgICAgICBbXCJyZXZlcnNlX29yZGVyXCIsIFwiYSwyMCxiLDEwXCIsIFwiYiwxMCxhLDIwXCJdLFxuKyAgICAgICAgICAgIFtcImJleW9uZF9od19ob3Jpem9uXCIsIFwiYSw3MFwiLCBcImEsNzBcIl0sXG4gICAgICAgICBdOlxuICAgICAgICAgICAgIG5hbWUgPSBmXCJ2e2lwdmVyfV97dGVzdGNhc2VbMF19XCJcbiAgICAgICAgICAgICB5aWVsZCBLc2Z0TmFtZWRWYXJpYW50KG5hbWUsIGlwdmVyLCB0ZXN0Y2FzZVsxXSwgdGVzdGNhc2VbMl0pXG5AQCAtNjQsMTUgKzk2LDQyIEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxuIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8oY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4gICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIChmcSkgdGVzdHMuXCJcIlwiXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCJmcVwiKVxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwibW9ub1wiLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSlcbiBcbiBcbitAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuK2RlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuKyAgICBcIlwiXCJSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyBmcSB0ZXN0cywgd2l0aCBvZmZsb2FkIGhvcml6b24uXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxuK1xuKyAgICBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZylcbisgICAgdHJ5OlxuKyAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwiZnFcIiwgXCJvZmZsb2FkX2hvcml6b24gNTBtc1wiKVxuKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwibmV0ZGV2IGRvZXMgbm90IHN1cHBvcnQgb2ZmbG9hZC4gc2tpcHBpbmdcIikgZnJvbSBlXG4rXG4rICAgICMgRXhwZWN0IGFsbCB0ZXN0cyB0byB1c2Ugb25seSBodyBwYWNpbmcsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbi5cbisgICAgaHdfb25seSA9IFwiLWhcIiBpZiBhcmdzX3R4ICE9IFwiYSw3MFwiIGVsc2UgXCJcIlxuKyAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwibW9ub1wiLCBpcHZlciwgZlwie2h3X29ubHl9IHthcmdzX3R4fVwiLCBhcmdzX3J4LCBUcnVlKVxuK1xuK1xuK0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4rZGVmIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuKyAgICBcIlwiXCJSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyB0ZXN0cywgd2l0aG91dCBmcSBwYWNpbmcgc3cgYmFja3VwLlwiXCJcIlxuKyAgICBjZmcucmVxdWlyZV9uc2ltKG5zaW1fdGVzdD1GYWxzZSlcbitcbisgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpXG4rICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcInBmaWZvX2Zhc3RcIilcbitcbisgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHBhc3MsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbiB3aXRob3V0IHN3IGZhbGxiYWNrLlxuKyAgICBleHBlY3RfcGFzcyA9IG5vdCBhcmdzX3R4ID09IFwiYSw3MFwiXG4rICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCJtb25vXCIsIGlwdmVyLCBmXCItaCB7YXJnc190eH1cIiwgYXJnc19yeCwgZXhwZWN0X3Bhc3MpXG4rXG4rXG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfdGFpKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuICAgICBcIlwiXCJSdW4gYWxsIHZhcmlhbnRzIG9mIGZxIHRlc3RzLCBidXQgcGFzcyBDTE9DS19UQUkgdG8gdGVzdCBjb252ZXJzaW9uLlwiXCJcIlxuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwiZnFcIilcbiAgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcInRhaVwiLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSlcbiBcbkBAIC05NSw3ICsxNTQsNiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZXRmKCk6XG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZXRmKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2V0ZihjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3RfZmFpbCk6XG4gICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgZXRmIHRlc3RzLlwiXCJcIlxuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgdHJ5OlxuICAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwiZXRmXCIsIFwiY2xvY2tpZCBDTE9DS19UQUkgZGVsdGEgNDAwMDAwXCIpXG4gICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbkBAIC0xMDgsNyArMTY2LDEzIEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJCb2lsZXJwbGF0ZSBrc2Z0IG1haW4uXCJcIlwiXG4gICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcbiAgICAgICAgIGtzZnRfcnVuKFxuLSAgICAgICAgICAgIFt0ZXN0X3NvX3R4dGltZV9mcV9tb25vLCB0ZXN0X3NvX3R4dGltZV9mcV90YWksIHRlc3Rfc29fdHh0aW1lX2V0Zl0sXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV9tb25vLFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3LFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyxcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfdGFpLFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9ldGYsXG4rICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSxcbiAgICAgICAgIClcbiAgICAga3NmdF9leGl0KClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjI5OjMyLjUwNTc1NzM4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTE1OTIwNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFjaW5nIE9mZmxvYWQgSG9yaXpvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgdGhlIFwicGFjaW5nIG9mZmxvYWQgaG9yaXpvblwiIGZlYXR1cmUuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGlzIHRoaW5nIHRvdWNoZXMgYSBwcmV0dHkgd2lkZSByYW5nZSBvZiBmaWxlcy4gSXQncyBtb2RpZnlpbmcgZG9jdW1lbnRhdGlvbiwgc2V2ZXJhbCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgYW5kIGRyaXZlcnMgZm9yIHRoZSBJbnRlbCBgaWRwZmAgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0J3MgdXBkYXRpbmcgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxgLCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0YCwgcGFydHMgb2YgdGhlIGBpZHBmYCBkcml2ZXIsIGFuZCBrZXkgZmlsZXMgaW4gY29yZSBuZXR3b3JraW5nOiBgbmV0L3NjaGVkL3NjaF9mcS5jYCwgYG5ldC9jb3JlL3BrdGdlbi5jYCwgYG5ldC9ldGh0b29sL3JpbmdzLmNgLCBhbmQgbW9yZS5cblxuVGhpcyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgaW50ZWdyYXRpbmcgZGlyZWN0bHkgd2l0aCBjb3JlIHNjaGVkdWxpbmcsIHBhY2tldCBnZW5lcmF0aW9uLCBhbmQgYGV0aHRvb2xgLCB3aGljaCBtZWFucyB0aGlzIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IgaW4gc29tZSBzaWduaWZpY2FudCB3YXlzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIGBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgdG8gYHN0cnVjdCBuZXRfZGV2aWNlYC4gTG9va2luZyBkZWVwZXIsIHRoZSBjaGFuZ2VzIGluIGBuZXQvc2NoZWQvc2NoX2ZxLmNgIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGZlYXR1cmUsIHVzaW5nIGBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbmAgd2hpY2ggaXMgY29uZmlndXJlZCB2aWEgYFRDQV9GUV9PRkZMT0FEX0hPUklaT05gIGFuZCBjaGVja2VkIGFnYWluc3QgYHFkaXNjX2RldihzY2gpLVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b25gLiBBbHNvLCBgbmV0L2NvcmUvcGt0Z2VuLmNgIG5vdyBoYXMgc3VwcG9ydCBmb3IgYFRYVElNRWAsIGFuZCBgbmV0L2V0aHRvb2wvcmluZ3MuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWxsb3cgc2V0dGluZyB0aGUgYHBhY2luZ19vZmZsb2FkX2hvcml6b25gLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBgc2NoX2ZxLmNgIGlzIHRoZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIsIGFuZCB0aGF0J3MgKndpZGVseSogdXNlZC4gSXQncyBjZXJ0YWlubHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggSSBrbm93IG1hdHRlcnMgYSBsb3QgdG8gbXkgY3VycmVudCB3b3JrLiBTaW1pbGFybHksIGBwa3RnZW4uY2AgaXMgdGhlIHBhY2tldCBnZW5lcmF0b3IsIGFsc28gYWNjZXNzaWJsZS4gRXRodG9vbCBjb3JlIGlzLCBvZiBjb3Vyc2UsIHJlYWNoYWJsZS4gVGhhdCdzIGdvb2QuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgY29yZSBjaGFuZ2VzOiBMb29raW5nIGF0IGBuZXQvc2NoZWQvc2NoX2ZxLmNgLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBgZnFfY2xhc3NpZnlgLCBgZnFfZGVxdWV1ZWAsIGFuZCBgZnFfY2hhbmdlYC4gSW4gYG5ldC9jb3JlL3BrdGdlbi5jYCwgaXQncyBgcGt0Z2VuX2lmX3Nob3dgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl9zZXR1cF9pbmplY3RgLCBga3RpbWVfZ2V0X2Nsb2NrYCwgYHBrdGdlbl94bWl0YCwgYW5kIGBwa3RnZW5fYWRkX2RldmljZWAuIEFuZCBmb3IgYG5ldC9ldGh0b29sL3JpbmdzLmNgIGl0J3MgYHJpbmdzX3ByZXBhcmVfZGF0YWAsIGByaW5nc19yZXBseV9zaXplYCwgYHJpbmdzX2ZpbGxfcmVwbHlgLCBgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlYCwgYW5kIGBldGhubF9zZXRfcmluZ3NgLiBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgKCBgcnRubF9maWxsX2lmaW5mb2ApIGFuZCBgbmV0L2V0aHRvb2wvY29tbW9uLmNgICggYGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmdgKS5cblxuU28sIHRoZSBiaWdnZXN0IGltcGFjdCBpcyBvbiBgc2NoX2ZxLmNgLCBgcGt0Z2VuLmNgLCBhbmQgYGV0aHRvb2xgLCBzbyBJJ20gdGhpbmtpbmcgdGhpcyBkZXNlcnZlcyBzb21lIHNlcmlvdXMgZnV6emluZy4gRXNwZWNpYWxseSB0aGVzZSBzeW1ib2xzOiBgZnFfY2xhc3NpZnlgLCBgZnFfZGVxdWV1ZWAsIGBmcV9jaGFuZ2VgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl94bWl0YCwgYW5kIGBldGhubF9zZXRfcmluZ3NgLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgY29uZmlncy4gRm9yIGBzY2hfZnEuY2AsIGl0J3MgYENPTkZJR19ORVRfU0NIX0ZRYC4gRm9yIGBwa3RnZW4uY2AsIGl0J3MgYENPTkZJR19ORVRfUEtUR0VOYC4gQW5kIGZvciBgZXRodG9vbGAsIGl0J3MgYWx3YXlzIGVuYWJsZWQgd2l0aCBgQ09ORklHX05FVGAuIEknbGwgdXNlIGBncmVwcGVyYCB0byBlbnN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lcy4gT2theSwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6Mjk6NDQuNjIxNjgwODE2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODIwODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfU0NIX0ZRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjc2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxcbm5ldC9zY2hlZC9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0VcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTI5OC1cXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcXG5uZXQvc2NoZWQvS2NvbmZpZy0zMDAtXFx0dHJpc3RhdGUgXFxcIkZhaXIgUXVldWVcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz0zMjI9Y29uZmlnIE5FVF9TQ0hfUElFXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0zMzMtXFxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxcbm5ldC9zY2hlZC9LY29uZmlnLTMzNS1cXHRkZXBlbmRzIG9uIE5FVF9TQ0hfUElFXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz00NDM9Y2hvaWNlXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00NTAtXFx0Y29uZmlnIERFRkFVTFRfRlFcXG5uZXQvc2NoZWQvS2NvbmZpZzo0NTE6XFx0XFx0Ym9vbCBcXFwiRmFpciBRdWV1ZVxcXCIgaWYgTkVUX1NDSF9GUVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ1Mi1cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ1Ni1cXHRjb25maWcgREVGQVVMVF9GUV9DT0RFTFxcbm5ldC9zY2hlZC9LY29uZmlnOjQ1NzpcXHRcXHRib29sIFxcXCJGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXlcXFwiIGlmIE5FVF9TQ0hfRlFfQ09ERUxcXG5uZXQvc2NoZWQvS2NvbmZpZy00NTgtXFxubmV0L3NjaGVkL0tjb25maWctNDU5LVxcdGNvbmZpZyBERUZBVUxUX0ZRX1BJRVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ2MDpcXHRcXHRib29sIFxcXCJGbG93IFF1ZXVlIFByb3BvcnRpb25hbCBJbnRlZ3JhbCBjb250cm9sbGVyIEVuaGFuY2VkXFxcIiBpZiBORVRfU0NIX0ZRX1BJRVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6Mjk6NDQuOTE5ODk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMDU4NjI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgTkVUX1NDSF9GUWAgaXMgZGVmaW5pdGVseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBkcml2ZXMgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gYHNjaF9mcS5jYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHBhY2tldCBnZW5lcmF0aW9uIGFzcGVjdC4gTm93LCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBsZXQncyBwaXZvdCB0byB0aGUgcGFja2V0IGdlbmVyYXRvcidzIGNvbmZpZ3VyYXRpb24g4oCTIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayBhdCBgcGt0Z2VuLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyBvcmNoZXN0cmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDYxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6Mjk6NDcuNjUwNDg0NzcyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTQ1MTU3MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1BLVEdFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzoyOTo0Ny44MDE5NDU0MzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE1OTgxMDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgUGFja2V0IEdlbmVyYXRpb24gTW9kdWxlIFBsYWNlbWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBwcmVjaXNlIGxvY2F0aW9uIG9mIGBwa3RnZW5gLiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCBpdCdzIGJ1cmllZCBzb21ld2hlcmUgaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgYW5kIHRoZSBoaW50IGlzIHRoYXQgaXQncyBgcGt0Z2VuLmNgIHdoaWNoIG9mdGVuIGltcGxpZXMgaXQgaXMgY29yZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLiBUaGF0J3MgYSBjbGFzc2ljIGxvY2F0aW9uIGZvciBjb3JlIG5ldHdvcmsgY29tcG9uZW50cy4gVG8gZG8gdGhhdCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZWl0aGVyIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIGBwa3RnZW5gLCBvciBJJ2xsIGxvb2sgaW50byBgbmV0L2NvcmUvTWFrZWZpbGVgIGZvciB0aGUgYnVpbGQgZGlyZWN0aXZlcyBhbmQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4gSG9wZWZ1bGx5IG9uZSBvZiB0aGVzZSBmaWxlcyB3aWxsIGV4cGxpY2l0bHkgc3RhdGUgd2hlcmUgdGhlIGBwa3RnZW5gIG1vZHVsZSBiZWxvbmdzLiBGcm9tIHRoZXJlLCBJIGNhbiBidWlsZCBhbiBpbWFnZSB0byBpc29sYXRlIHRoZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI1NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjI5OjUxLjYxNzkyOTMxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMwOTE1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGt0Z2VuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBuZXQtcHJvY2ZzLm9cXG5uZXQvY29yZS9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVUX1BLVEdFTikgKz0gcGt0Z2VuLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjI5OjUxLjkwMTAyNjI3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzk2MjA5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipGaW5kaW5nIHRoZSBEZWZpbml0aW9uIG9mIE5FVF9QS1RHRU4qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgTkVUX1BLVEdFTmAuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhpcyBwdXp6bGUsIGFuZCB3aXRob3V0IGtub3dpbmcgd2hlcmUgaXQncyBkZWNsYXJlZCwgSSdtIGVzc2VudGlhbGx5IGZseWluZyBibGluZC4gSXMgaXQgYSBtYWNybz8gQSBmdW5jdGlvbj8gQSBzdHJ1Y3Q/IFBhcnQgb2YgYSBicm9hZGVyIGxpYnJhcnk/IFRoZSBuYW1lIGZlZWxzIGxpa2UgaXQgY291bGQgYmUgcmVsYXRlZCB0byBuZXR3b3JrIHBhY2tldCBnZW5lcmF0aW9uLCB3aGljaCBpcyBhIGZhaXJseSBjb21tb24gYXJlYSwgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBzZWFyY2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgdXNlIHRvIGRldGVybWluZSB3aGVyZSB0aGlzIGlzIGRlZmluZWQgLSBpcyB0aGlzIGEgcHJvamVjdCBzcGVjaWZpYyBkZWZpbml0aW9uIG9yIGFuIGFscmVhZHkgaW50ZWdyYXRlZCBwaWVjZSBvZiBjb2RlPyBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGdvIGFib3V0IGZpbmRpbmcgaXQsIGFuZCBtYXkgY2hhbmdlIHRoZSBhcHByb2FjaC4gSSBjb3VsZCBqdXN0IGdyZXAgdGhyb3VnaCB0aGUgY29kZSBiYXNlIGFuZCBzZWUgaWYgaXQncyB0aGVyZS4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2VhcmNoLCBtYXliZSBpbiB0aGUgaW5jbHVkZSBmaWxlcywgb3IgcG9zc2libHkgSSdsbCBuYXJyb3cgbXkgc2VhcmNoIHRvIGEgc3ViZm9sZGVyIHRoYXQgaXMgbW9yZSByZWxldmFudC4gVGltZSB0byBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA1OTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzoyOTo1NS4yNDA2NDk4MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mjk4MDU3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9QS1RHRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mzg0PW1lbnUgXFxcIk5ldHdvcmsgdGVzdGluZ1xcXCJcXG5uZXQvS2NvbmZpZy0zODUtXFxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXFxubmV0L0tjb25maWctMzg3LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6MDAuMDcwNDYzMTk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODE5MDg2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEdlbmVyYXRvciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYE5FVF9QS1RHRU5gIGxpc3RlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaG93IHRoaXMgaW1wYWN0cyB0aGUgc3lzdGVtLiBMb29rcyBsaWtlIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYG5ldC9ldGh0b29sL3JpbmdzLmNgIGZpbGUuIEkgcmVjYWxsIHRoYXQgYGV0aHRvb2xgIGludGVyYWN0aW9ucyBhcmUgc29tZXRpbWVzIGNvbmRpdGlvbmVkIGJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZSBpZiB0aGUgY29tcGlsYXRpb24gb2YgdGhhdCBzcGVjaWZpYyBmaWxlIGRlcGVuZHMgb24gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gZmxhZy4gQmluZ28hIEl0IGxvb2tzIGxpa2UgYHJpbmdzLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19FVEhUT09MX05FVExJTktgIGlzIGVuYWJsZWQuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgYG5ldC9ldGh0b29sL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgd2hvbGUgdGhpbmcgaGFuZ3MgdG9nZXRoZXIsIHBhcnRpY3VsYXJseSB3aXRoIHRoYXQgTkVUTElOSyBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFja2V0IGdlbmVyYXRpb24sIGV0aHRvb2wsIGFuZCB0aGlzIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDowMy44NTIzNzY0NDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU5MjQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaW5nc1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZT03PWV0aHRvb2xfbmwteVxcdDo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFxcXFxcXG5uZXQvZXRodG9vbC9NYWtlZmlsZTo4OlxcdFxcdCAgIGxpbmtzdGF0ZS5vIGRlYnVnLm8gd29sLm8gZmVhdHVyZXMubyBwcml2ZmxhZ3MubyByaW5ncy5vIFxcXFxcXG5uZXQvZXRodG9vbC9NYWtlZmlsZS05LVxcdFxcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6MDMuOTY1OTc0NDM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjMzOTI1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgYGV0aHRvb2xfbmwteWAgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyAqYGV0aHRvb2xfbmwteWAqLi4uIHRoYXQncyB0aGUga2V5IGZpbGUsIGlzbid0IGl0PyBUaGUgb25lIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBtb2R1bGVzIGdldCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSB3aG9sZSBxdWVzdGlvbiBib2lscyBkb3duIHRvICp3aGVuKiBleGFjdGx5IGRvZXMgdGhpcyBzcGVjaWZpYyBmaWxlIGdldCBjb21waWxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRpbWluZyBvZiB0aGF0IGNvbXBpbGF0aW9uLiBLbm93aW5nICp3aGVuKiB3aWxsIGlsbHVtaW5hdGUgdGhlIGRlcGVuZGVuY2llcywgYnVpbGQgb3JkZXIsIGFuZCBwb3RlbnRpYWxseSwgYW55IGltcGxpY2l0IGNvbmRpdGlvbmFsIGxvZ2ljIGluIHRoZSBtYWtlZmlsZXMgb3IgYnVpbGQgc3lzdGVtIHRoYXQgY29udHJvbHMgaXQuIFRoYXQncyB0aGUgY29yZSBvZiB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0LiBJIHN1c3BlY3QgdGhlIGFuc3dlciBpcyBsaW5rZWQgdG8gdGhlIGJ1aWxkIHN5c3RlbSdzIGRlY2lzaW9uIHRyZWUsIGJ1dCBJIGNhbid0IHF1aXRlIHNlZSB0aGUgdHJpZ2dlciBmb3IgdGhhdCBjb21waWxhdGlvbiB5ZXQuIFNvLCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBXaGVuIGlzIGBldGh0b29sX25sLXlgIGNvbXBpbGVkPyBUaGF0J3MgdGhlIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMzMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjA3LjMyOTM3MTI3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY5NjQyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfbmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvTWFrZWZpbGU9Mz1vYmoteVxcdFxcdFxcdFxcdCs9IGlvY3RsLm8gY29tbW9uLm9cXG5uZXQvZXRodG9vbC9NYWtlZmlsZS00LVxcbm5ldC9ldGh0b29sL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0VUSFRPT0xfTkVUTElOSylcXHQrPSBldGh0b29sX25sLm9cXG5uZXQvZXRodG9vbC9NYWtlZmlsZS02LVxcbm5ldC9ldGh0b29sL01ha2VmaWxlOjc6ZXRodG9vbF9ubC15XFx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcXFxcbm5ldC9ldGh0b29sL01ha2VmaWxlLTgtXFx0XFx0ICAgbGlua3N0YXRlLm8gZGVidWcubyB3b2wubyBmZWF0dXJlcy5vIHByaXZmbGFncy5vIHJpbmdzLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDowNy42OTkwMjMwNDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNDUzMzgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkNoZWNraW5nIGZvciBFVEhUT09MX05FVExJTksgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYEVUSFRPT0xfTkVUTElOS2AgaGVyZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHdoZXJlIHRoYXQncyBkZWZpbmVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBleHBsaWNpdGx5IGVuYWJsZWQgb3IgY29uZmlndXJhYmxlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBpdCdzIG1vc3QgbGlrZWx5IHRvIGJlIGx1cmtpbmcgaW4gZWl0aGVyIGBuZXQvZXRodG9vbC9LY29uZmlnYCBvciwgcGVyaGFwcyBtb3JlIGJyb2FkbHksIGBuZXQvS2NvbmZpZ2AuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgZmlsZXMgZGlyZWN0bHkuIEl0J3MgYSBxdWljayBzY2FuLCBsb29raW5nIGZvciB0aGF0IHNwZWNpZmljIHN5bWJvbCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzQ1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6MTEuNzIzNTYwODk0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY3MjkxMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFVEhUT09MX05FVExJTktcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NTA3PWNvbmZpZyBGQUlMT1ZFUlxcbi0tXFxubmV0L0tjb25maWctNTE5LVxcbm5ldC9LY29uZmlnOjUyMDpjb25maWcgRVRIVE9PTF9ORVRMSU5LXFxubmV0L0tjb25maWctNTIxLVxcdGJvb2wgXFxcIk5ldGxpbmsgaW50ZXJmYWNlIGZvciBldGh0b29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDoxNi44OTA4NjI5NTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2MDU1ODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUX1NDSF9GUWAsIGBORVRfUEtUR0VOYCwgYW5kIGBFVEhUT09MX05FVExJTktgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgY29yZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhlc2UgY29uZmlncy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYG5ldC9zY2hlZC9zY2hfZnEuY2AsIEknbSBzZWVpbmcgYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYW5kIGBmcV9jbGFzc2lmeWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBUaG9zZSBhcmUgdGhlIHRyYWZmaWMgc2hhcGluZyBiaXRzLiBJbiBgbmV0L2NvcmUvcGt0Z2VuLmNgLCBJIGhhdmUgYHBrdGdlbl9pZl93cml0ZWAgYW5kIGBwa3RnZW5feG1pdGAsIHdoaWNoIGFyZSBpbnZvbHZlZCBpbiBwYWNrZXQgZ2VuZXJhdGlvbi4gQW5kIGluIGBuZXQvZXRodG9vbC9yaW5ncy5jYCwgSSBzZWUgYGV0aG5sX3NldF9yaW5nc2AgYW5kIGBldGhubF9zZXRfcmluZ3NfdmFsaWRhdGVgLCB3aGljaCBkZWFscyB3aXRoIG5ldHdvcmsgcmluZyBjb25maWd1cmF0aW9uIHRocm91Z2ggbmV0bGluay5cblxuVGhlbiBJIHNlZSBzb21lIGZ1bmN0aW9ucyBpbiBhIGRyaXZlci4gSG9sZCBvbi4uLiBgaWRwZmAgaXMgYW4gSW50ZWwgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQbGFuZSBGdW5jdGlvbiBkcml2ZXIuIE5vdywgaXMgdGhhdCBldmVuIHJlbGV2YW50PyBQcm9iYWJseSBub3QgZGlyZWN0bHksIGJlY2F1c2UgaXQgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIHNvIHByb2JhYmx5IG5vdCByZWxldmFudCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEJ1dCB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIGNoYW5nZXMgYXJlIHRoZSBpbXBvcnRhbnQgcGFydHMuXG5cblNvIEkgdGhpbmsgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gTm93LCBqdXN0IHRvIGJlIHN1cmUsIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoYXQgYGZxX2NoYW5nZWAgZnVuY3Rpb24gaW4gYG5ldC9zY2hlZC9zY2hfZnEuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjIyLjA1MTQyMzc2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzkxMzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZxX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2ZxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9mcS5jPTEwNTg9c3RhdGljIGludCBmcV9sb2FkX3ByaW9tYXAoc3RydWN0IGZxX3NjaGVkX2RhdGEgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3OS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTA4MDpzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMDgxLVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jPTEyMzM9c3RhdGljIGludCBmcV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTI3MS1cXHRpZiAob3B0KVxcbm5ldC9zY2hlZC9zY2hfZnEuYzoxMjcyOlxcdFxcdGVyciA9IGZxX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTI3My1cXHRlbHNlXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM9MTM4OT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzk4LVxcdC5kZXN0cm95XFx0PVxcdGZxX2Rlc3Ryb3ksXFxubmV0L3NjaGVkL3NjaF9mcS5jOjEzOTk6XFx0LmNoYW5nZVxcdFxcdD1cXHRmcV9jaGFuZ2UsXFxubmV0L3NjaGVkL3NjaF9mcS5jLTE0MDAtXFx0LmR1bXBcXHRcXHQ9XFx0ZnFfZHVtcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6MjIuMjA5ODIzMjc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTM4MTg1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGUSBMb2dpYyoqXG5cblJpZ2h0LCBgZnFfY2hhbmdlYCBpcyB3aGVyZSBpdCBhbGwgYmVnaW5zLCB0aGUgaW5pdGlhbCBzZXR1cCBmb3IgdGhlIGZhaXIgcXVldWluZyBkaXNjaXBsaW5lLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSB0byBhbGwgdGhlIGFjdGlvbi4gTm93LCB0aGUgcmVhbCBtZWF0IG9mIGl0IGlzIGdvaW5nIHRvIGJlIGluIGhvdyBpdCBhY3R1YWxseSAqZnVuY3Rpb25zKi4gSSBuZWVkIHRvIGdldCBkb3duIGludG8gdGhlIHdlZWRzIGFuZCBzZWUgaG93IHRoZSBwYWNrZXRzIGFyZSBiZWluZyBoYW5kbGVkLCBob3cgdHJhZmZpYyBpcyBhY3R1YWxseSBtYW5hZ2VkIG9uY2UgaXQncyBpbiB0aGUgcXVldWUuIE15IGZvY3VzIG5vdyBpcyBkZWZpbml0ZWx5IG9uIGBmcV9kZXF1ZXVlYCBhbmQgYGZxX2NsYXNzaWZ5YCDigJMgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSByZWFsbHkgd2FudCB0byB1bmRlcnN0YW5kLiBMZXQncyBzZWUgaG93IHRoZSBxdWV1ZWQgcGFja2V0cyBhcmUgc2VsZWN0ZWQgYW5kIHdoaWNoIG9uZXMgZ2V0IGEgcHJpb3JpdHkgYnVtcCBvciBhIHNodW50aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAxMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjI1LjYwMzY0NjU3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTg0NjgzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnFfZGVxdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2ZxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9mcS5jPTY5PXN0cnVjdCBmcV9mbG93IHtcXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NzA6LyogRmlyc3QgY2FjaGUgbGluZSA6IHVzZWQgaW4gZnFfZ2MoKSwgZnFfZW5xdWV1ZSgpLCBmcV9kZXF1ZXVlKCkgKi9cXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNzEtXFx0c3RydWN0IHJiX3Jvb3RcXHR0X3Jvb3Q7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM9MTExPXN0cnVjdCBmcV9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzItXFxubmV0L3NjaGVkL3NjaF9mcS5jOjEzMzpcXHR1bnNpZ25lZCBpbnQgYmFuZF9ucjsgLyogYmFuZCBiZWluZyBzZXJ2aWNlZCBpbiBmcV9kZXF1ZXVlKCkgKi9cXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTM0LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jPTQ4Nj1zdGF0aWMgdm9pZCBmcV9lcmFzZV9oZWFkKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZnFfZmxvdyAqZmxvdyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy01MDItICovXFxubmV0L3NjaGVkL3NjaF9mcS5jOjUwMzpzdGF0aWMgdm9pZCBmcV9kZXF1ZXVlX3NrYihzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGZxX2Zsb3cgKmZsb3csXFxubmV0L3NjaGVkL3NjaF9mcS5jLTUwNC1cXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jPTY5OT1zdGF0aWMgc3RydWN0IGZxX2Zsb3dfaGVhZCAqZnFfcGJhbmRfaGVhZF9zZWxlY3Qoc3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTcwOS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NzEwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNzExLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy03MjgtXFx0XFx0cS1cXHUwMDNlaW50ZXJuYWwucWxlbi0tO1xcbm5ldC9zY2hlZC9zY2hfZnEuYzo3Mjk6XFx0XFx0ZnFfZGVxdWV1ZV9za2Ioc2NoLCBcXHUwMDI2cS1cXHUwMDNlaW50ZXJuYWwsIHNrYik7XFxubmV0L3NjaGVkL3NjaF9mcS5jLTczMC1cXHRcXHRyZXR1cm4gc2tiO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTc3Ni1cXHRcXHRwcmVmZXRjaChcXHUwMDI2c2tiLVxcdTAwM2VlbmQpO1xcbm5ldC9zY2hlZC9zY2hfZnEuYzo3Nzc6XFx0XFx0ZnFfZGVxdWV1ZV9za2Ioc2NoLCBmLCBza2IpO1xcbm5ldC9zY2hlZC9zY2hfZnEuYy03NzgtXFx0XFx0aWYgKHVubGlrZWx5KChzNjQpKG5vdyAtIHRpbWVfbmV4dF9wYWNrZXQgLSBxLVxcdTAwM2VjZV90aHJlc2hvbGQpIFxcdTAwM2UgMCkpIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYz0xMzg5PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTEzOTMtXFx0LmVucXVldWVcXHQ9XFx0ZnFfZW5xdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTM5NDpcXHQuZGVxdWV1ZVxcdD1cXHRmcV9kZXF1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzk1LVxcdC5wZWVrXFx0XFx0PVxcdHFkaXNjX3BlZWtfZGVxdWV1ZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjI1LjkyMjEyMTE1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODEwOTcwNzE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgSW50ZXJmYWNlIFJpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGBmcV9kZXF1ZXVlYCBpcyBwcm92aW5nIHRvIGJlIGEgc29saWQgc29sdXRpb24gaW4gdGhpcyBjb250ZXh0LiBNeSBwcmltYXJ5IGludGVyZXN0IG5vdyBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSByaW5ncyBhcmUgYWN0dWFsbHkgY29uZmlndXJlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZXRodG9vbCBmcmFtZXdvcmsuIExldCdzIGRlbHZlIGludG8gYG5ldC9ldGh0b29sL3JpbmdzLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBldGhubF9zZXRfcmluZ3NgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIHJpbmcgc2V0dGluZ3MsIGxpa2VseSByZWxhdGVkIHRvIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHF1ZXVlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzZXR0aW5ncywgYXJlIGJlaW5nIHRyYW5zbGF0ZWQgaW50byBsb3ctbGV2ZWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QgLSBhcmUgd2UgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIHJlZ2lzdGVycywgdXNpbmcgc3BlY2lmaWMgZHJpdmVyLWRlZmluZWQgY2FsbHMsIG9yIGludGVyYWN0aW5nIHdpdGggYSBtb3JlIGdlbmVyaWMgaW50ZXJmYWNlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgd2UncmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcmluZyBzaXplLCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gUlNTIHBhcmFtZXRlcnMuIFRoaXMgc2hvdWxkIGluZm9ybSBhbnkgcG90ZW50aWFsIHR1bmluZyBkZWNpc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTU1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6NDQuMDMxODMxNjM5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTcwMjU5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRobmxfc2V0X3JpbmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL3JpbmdzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvcmluZ3MuYz0xNjE9c3RhdGljIGludFxcbm5ldC9ldGh0b29sL3JpbmdzLmM6MTYyOmV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbm5ldC9ldGh0b29sL3JpbmdzLmMtMTYzLVxcdFxcdFxcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvcmluZ3MuYz0yMzU9c3RhdGljIGludFxcbm5ldC9ldGh0b29sL3JpbmdzLmM6MjM2OmV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9ldGh0b29sL3JpbmdzLmMtMjM3LXtcXG4tLVxcbm5ldC9ldGh0b29sL3JpbmdzLmM9MzM3PWNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9yaW5nc19yZXF1ZXN0X29wcyA9IHtcXG4tLVxcbm5ldC9ldGh0b29sL3JpbmdzLmMtMzQ3LVxcbm5ldC9ldGh0b29sL3JpbmdzLmM6MzQ4OlxcdC5zZXRfdmFsaWRhdGVcXHRcXHQ9IGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZSxcXG5uZXQvZXRodG9vbC9yaW5ncy5jOjM0OTpcXHQuc2V0XFx0XFx0XFx0PSBldGhubF9zZXRfcmluZ3MsXFxubmV0L2V0aHRvb2wvcmluZ3MuYy0zNTAtXFx0LnNldF9udGZfY21kXFx0XFx0PSBFVEhUT09MX01TR19SSU5HU19OVEYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjQ0LjI4ODg2MzY4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ2NjAwMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUGFja2V0IEdlbmVyYXRpb24gRnVuY3Rpb25zKipcblxuQWxyaWdodCwgYGV0aG5sX3NldF9yaW5nc2Agc2VlbXMgbGlrZSBhIHNvbGlkIHBpZWNlIG9mIGNvZGUsIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIE5vdywgSSB3YW50IHRvIGRyaWxsIGRvd24gZnVydGhlciBpbnRvIHRoZSBwYWNrZXQgZ2VuZXJhdGlvbiBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgcGt0Z2VuX2lmX3dyaXRlYCB3aXRoaW4gYG5ldC9jb3JlL3BrdGdlbi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyLXByb3ZpZGVkIGRhdGEsIGFuZCBhbnkgY29uZmlndXJhdGlvbiwgaXMgYWN0dWFsbHkgdHJhbnNsYXRlZCBpbnRvIGEgd2lyZSBpbWFnZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIGZpbmFsIGZvcm1hdHRpbmcsIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyAoaWYgZW5hYmxlZCksIGFuZCBpbnNlcnRpb24gaW50byB0aGUgdHJhbnNtaXQgcXVldWUgYXJlIGhhcHBlbmluZy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgcGt0Z2VuX2lmX3dyaXRlYCBhbmQgbG93ZXItbGV2ZWwgbmV0d29ya2luZyBjb21wb25lbnRzIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgcGFja2V0IGluamVjdGlvbiBwZXJmb3JtYW5jZSBhbmQgZW5zdXJpbmcgYWNjdXJhdGUgcGF5bG9hZCB0cmFuc21pc3Npb24uIEknbGwgbmVlZCB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBkYXRhIGNvcGllcywgYW5kIGFueSBsb2NraW5nIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBwYXRoIGZvciBwYWNrZXQgZ2VuZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDo0Ny43MzU0NjkzMDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTUwODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5faWZfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9OTcxPXN0YXRpYyBfX3UzMiBwa3RnZW5fcmVhZF9mbGFnKGNvbnN0IGNoYXIgKmYsIGJvb2wgKmRpc2FibGUpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy05OTktXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTAwMDpzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTAwMS1cXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLCBzaXplX3QgY291bnQsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0xOTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX2lmX3Byb2Nfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTk0Mi1cXHQucHJvY19sc2Vla1xcdD0gc2VxX2xzZWVrLFxcbm5ldC9jb3JlL3BrdGdlbi5jOjE5NDM6XFx0LnByb2Nfd3JpdGVcXHQ9IHBrdGdlbl9pZl93cml0ZSxcXG5uZXQvY29yZS9wa3RnZW4uYy0xOTQ0LVxcdC5wcm9jX3JlbGVhc2VcXHQ9IHNpbmdsZV9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDo0Ny45NjA5ODc3NjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NTQyNjg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFBhY2tldCBHZW5lcmF0aW9uIFdvcmtmbG93KipcblxuQWxyaWdodCwgc28gYHBrdGdlbl9pZl93cml0ZWAgaXMgbG9va2luZyBzb2xpZC4gVGhhdCBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGUgaW5pdGlhbCBpbnRlcmZhY2Ugd3JpdGUgYXMgZXhwZWN0ZWQuIE5vdywgSSB3YW50IHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgaXRzZWxmLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgcGt0Z2VuX3htaXRgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9wa3RnZW4uY2AuIEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgcHJlY2lzZWx5IGhvdyB0aGUgZ2VuZXJhdGVkIHBhY2tldHMgYXJlIGFjdHVhbGx5IHNlbnQgb3V0IG9uIHRoZSB3aXJlIGZyb20gdGhlIGNvcmUsIGdpdmVuIHRoYXQgaW5pdGlhbCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwb3J0aW9uIG9mIHRoZSBjb2RlIHRvIGVuc3VyZSB0aGUgcGF0aCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGRlc2lyZWQgb3BlcmF0aW9uLCBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgdHJhbnNtaXNzaW9uIGFzcGVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6NTEuMTQ2NDE4NzMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3OTkyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGt0Z2VuX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MTAwMD1zdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0xNDA2LVxcdFxcdFxcdC8qIG1ha2Ugc3VyZSBuZXcgcGFja2V0IGlzIGFsbG9jYXRlZCBldmVyeSB0aW1lXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTQwNzpcXHRcXHRcXHQgKiBwa3RnZW5feG1pdCgpIGlzIGNhbGxlZFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE0MDgtXFx0XFx0XFx0ICovXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zNTcyPXN0YXRpYyB2b2lkIHBrdGdlbl93YWl0X2Zvcl9za2Ioc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNTg3LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM1ODg6c3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzU4OS17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNjAxLVxcdCAqIHByZXZlbnQgc29tZSBjb25jdXJyZW50IGNoYW5nZXMgZnJvbSBzbGlwcGluZyBpbi4gQW5kIHRoZSBzdGFiaWxpemVkXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzYwMjpcXHQgKiBjb25maWcgd2lsbCBiZSByZWFkIGluIGR1cmluZyB0aGUgbmV4dCBydW4gb2YgcGt0Z2VuX3htaXQuXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzYwMy1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTM3OTA9c3RhdGljIGludCBwa3RnZW5fdGhyZWFkX3dvcmtlcih2b2lkICphcmcpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zODE2LVxcdFxcdGlmIChsaWtlbHkocGt0X2RldikpIHtcXG5uZXQvY29yZS9wa3RnZW4uYzozODE3OlxcdFxcdFxcdHBrdGdlbl94bWl0KHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTM4MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjUxLjM1MTIyNTI0MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ0MTg5NDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgcXVpY2sgcnVuZG93biBvZiB0aGVzZSBmdW5jdGlvbnMsIHJlZmxlY3RpbmcgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OlxuXG4qKkZ1bmN0aW9uYWxpdHkgT3ZlcnZpZXcqKlxuXG5BbHJpZ2h0LCBzbyBgcGt0Z2VuX3htaXRgLCB0aGF0J3MgYSBrZXkgZnVuY3Rpb24sIGFuZCBzZWVtcyB0byBiZSBpbiBhIGdvb2Qgc3RhdGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgZWNvc3lzdGVtLCB0aGUgZm9jdXMgZnVuY3Rpb25zIHNlZW0gdG8gYmU6IGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGBldGhubF9zZXRfcmluZ3NgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYW5kIG9mIGNvdXJzZSBgcGt0Z2VuX3htaXRgLiBOZWVkIHRvIGtlZXAgdGhlc2UgZnVuY3Rpb25zIGluIG1pbmQgdG8gZXN0YWJsaXNoIHRoZSBiaWcgcGljdHVyZS4gTG9va3MgbGlrZSBgZnFfY2xhc3NpZnlgIGhhcyBhbHNvIHNlZW4gc29tZSBtb2RpZmljYXRpb25zOyBnb2luZyB0byBtYWtlIGEgbm90ZSBvZiB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiBpdHMgaW5mbHVlbmNlLiBJdCdzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC4gTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCByZWxhdGVkIGZ1bmN0aW9ucyBpbiBwbGF5IHRoYXQgSSBtaWdodCBoYXZlIG1pc3NlZC4gR290dGEgYmUgbWV0aWN1bG91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDo1Ni4wOTU0MTgyNTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTU4ODA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmcV9jbGFzc2lmeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2ZxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9mcS5jPTMxND1zdGF0aWMgYm9vbCBmcV9mYXN0cGF0aF9jaGVjayhjb25zdCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0zNTUtXFxubmV0L3NjaGVkL3NjaF9mcS5jOjM1NjpzdGF0aWMgc3RydWN0IGZxX2Zsb3cgKmZxX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9zY2hfZnEuYy0zNTctXFx0XFx0XFx0XFx0ICAgdTY0IG5vdylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYz01OTk9c3RhdGljIGludCBmcV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTYzMi1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NjMzOlxcdGYgPSBmcV9jbGFzc2lmeShzY2gsIHNrYiwgbm93KTtcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNjM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDo1Ni4zNTcwMTE5NDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5OTM3ODY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgSW50ZXJmYWNlIEluZm9ybWF0aW9uIEhhbmRsaW5nKipcblxuQWxyaWdodCwgYGZxX2NsYXNzaWZ5YCBpcyBkZWZpbml0ZWx5IGEgc29saWQgcGllY2Ugb2YgdGhlIHB1enpsZSwgc2VlbXMgd2VsbCBpbXBsZW1lbnRlZCBmcm9tIHdoYXQgSSByZW1lbWJlci4gQnV0LCBsZXQncyBkcmlsbCBkb3duIGRlZXBlciwgYW5kIHRvIGRvIHRoYXQgSSBuZWVkIHRvIGxvb2sgYXQgaG93IGludGVyZmFjZSBpbmZvcm1hdGlvbiBpcyBhY3R1YWxseSBmaWxsZWQsIGFuZCB0aGF0IG1lYW5zIEkgbmVlZCB0byBnbyBzcGVsdW5raW5nIGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLiAqcnRubF9maWxsX2lmaW5mbyogc2VlbXMgbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igd2hlcmUgdGhhdCBpbmZvcm1hdGlvbiBpcyBjb25zdHJ1Y3RlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBuZXRsaW5rIGNvZGUgZGlyZWN0bHkgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSBpdHMgc3BlY2lmaWMgYmVoYXZpb3IuIEkgYmV0IEkgY2FuIGdhaW4gc29tZSBuZXcgaW5zaWdodHMgaW50byB0aGUgaW50ZXJmYWNlIG1ldGFkYXRhIHBvcHVsYXRpb24gd2l0aGluIHRoYXQgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMxOjAwLjM1NjM5MzgwMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NTgyOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmM9MjA2OD1zdGF0aWMgaW50IHJ0bmxfZmlsbF9kcGxsX3BpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA4OS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDkwOnN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwOTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKnNyY19uZXQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNTI0PXN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTk5LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2MDA6XFx0XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgbmV0LCBSVE1fTkVXTElOSyxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjAxLVxcdFxcdFxcdFxcdCAgICAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQyNTY9c3RhdGljIGludCBydG5sX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzI4LVxcdGlmIChuc2tiKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzMjk6XFx0XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhuc2tiLCBkZXYsIG5ldCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzMwLVxcdFxcdFxcdFxcdCAgICAgICBSVE1fTkVXTElOSywgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1NDk9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTY4LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1Njk6XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgZGV2X25ldChkZXYpLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1NzAtXFx0XFx0XFx0ICAgICAgIHR5cGUsIHBvcnRpZCwgc2VxLCBjaGFuZ2UsIDAsIDAsIGV2ZW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMTowMC42MzI5ODM2OTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0Njk3OTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqQXNzZXNzbWVudCBvZiBOZXRsaW5rIGFuZCBFdGh0b29sIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgcnRubF9maWxsX2lmaW5mb2AgaXMgYSBwcmV0dHkgYnJvYWQgZnVuY3Rpb24sIGFuZCBpdCdzIHVzZWQgcXVpdGUgYSBiaXQgaW4gbmV0bGluayBkdW1wcy4gV2hpbGUgaXQgd29ya3MsIGl0J3MgYSBiaXQgb2YgYSBob3Qgc3BvdCBpbiB0aGUgY29kZSwgd2hpY2ggY291bGQgbGVhZCB0byBzb21lIHNrZXdlZCByZXN1bHRzIGlmIEknbSBmdXp6aW5nIHdpdGggaXQuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNraXAgaXQgZm9yIG5vdy4gSSB3YW50IHRvIHRyeSB0byBrZWVwIHRoZSBmdXp6aW5nIGJhbGFuY2VkIGFjcm9zcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZ2AgaW5zaWRlIGBuZXQvZXRodG9vbC9jb21tb24uY2AuIEkgbmVlZCB0byByZXZpZXcgdGhpcyBmb3Igc29tZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk2MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMxOjA0LjQ3OTk2NjE2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODE5MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvY29tbW9uLmM9OTI0PWludCBldGh0b29sX2NoZWNrX29wcyhjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcylcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk0Mi1cXG5uZXQvZXRodG9vbC9jb21tb24uYzo5NDM6dm9pZCBldGh0b29sX3JpbmdwYXJhbV9nZXRfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtOTQ0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnBhcmFtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMTowNC42MTQ3OTIzNTFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDU5MDQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBldGh0b29sX3JpbmdwYXJhbV9nZXRfY2ZnYCBpcyBhbm90aGVyIGdldCBmdW5jdGlvbiwgYW5kIGZyYW5rbHksIG5vdCBhcyBpbnRyaWd1aW5nIGFzIHRoZSBzZXQgZnVuY3Rpb25zIHdlJ3JlIGxvb2tpbmcgYXQuIFdlJ3JlIGdvaW5nIHRvIGtlZXAgb3VyIGF0dGVudGlvbiBmaXJtbHkgb24gdGhlc2U6IGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGBmcV9jbGFzc2lmeWAsIGBldGhubF9zZXRfcmluZ3NgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYW5kIGBwa3RnZW5feG1pdGAuIFRob3NlIHNlZW0gdG8gYmUgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZywgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmlwdWxhdGlvbiBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIGZvciB0aGUgY29uZmlndXJhdGlvbnMgdGhlbXNlbHZlcywgd2UgaGF2ZSBgTkVUX1NDSF9GUWAsIGBORVRfUEtUR0VOYCwgYW5kIGBFVEhUT09MX05FVExJTktgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgZGVwZW5kZW5jaWVzIGZvciBgTkVUX1NDSF9GUWAgdGhvdWdoLiBXZSBkb24ndCB3YW50IHRvIG92ZXJsb29rIGFueSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudHMgdGhlcmUuIEVuc3VyaW5nIHRoaXMgY29uZmlndXJhdGlvbiBpcyBpbmRlcGVuZGVudGx5IHVzYWJsZSB3aWxsIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6MDguODE5Mzg2MzIyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5OTU3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRlFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzYtXFxubmV0L3NjaGVkL0tjb25maWc6Mjc3OmNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz0yODg9Y29uZmlnIE5FVF9TQ0hfQ0FLRVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjk4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI5OTpjb25maWcgTkVUX1NDSF9GUVxcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTMyMj1jb25maWcgTkVUX1NDSF9QSUVcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTMzMy1cXG5uZXQvc2NoZWQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVF9TQ0hfRlFfUElFXFxubmV0L3NjaGVkL0tjb25maWctMzM1LVxcdGRlcGVuZHMgb24gTkVUX1NDSF9QSUVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6MDkuMDM2MzkzMjAxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Njg5MTAxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlF1aWNrIE5ldHdvcmsgU2NoZWR1bGVyIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYE5FVF9TQ0hfRlFgLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGF0IG9uZSdzIGdvdCBhbnkgcGFydGljdWxhcmx5IGNvbXBsZXggZGVwZW5kZW5jaWVzIEkgbmVlZCB0byB3b3JyeSBhYm91dC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB3aGljaCBpcyBhbHdheXMgbmljZS4gTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYE5FVF9QS1RHRU5gLiBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzY2hlZHVsZXI7IHRoZXJlIGNvdWxkIGJlIHN1YnRsZSBpbnRlcmFjdGlvbnMgSSdtIG1pc3NpbmcgYXQgZmlyc3QgZ2xhbmNlLCBlc3BlY2lhbGx5IGlmIGl0IHVzZXMgY3VzdG9tIHBhY2tldCBnZW5lcmF0aW9uIHRlY2huaXF1ZXMuIEJldHRlciB0byBiZSB0aG9yb3VnaCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMToxMi41MDUzMDY2NDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjUxMjQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1BLVEdFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zODQ9bWVudSBcXFwiTmV0d29yayB0ZXN0aW5nXFxcIlxcbm5ldC9LY29uZmlnLTM4NS1cXG5uZXQvS2NvbmZpZzozODY6Y29uZmlnIE5FVF9QS1RHRU5cXG5uZXQvS2NvbmZpZy0zODctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMToxMi44MTc4MzI2MjVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NjYwNDUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgRGVwZW5kZW5jaWVzIGluIE5ldHdvcmsgUGFja2V0IEdlbmVyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgTkVUX1BLVEdFTmAgaXMgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gR2VuZXJhbGx5LCBpdCdzIHByZXR0eSBzdGFuZGFyZCB0aGF0IGBORVRfUEtUR0VOYCByZWxpZXMgb24gYElORVRgLCBhbmQgdGhhdCdzIHVzdWFsbHkgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBJJ20gbm90IHRvbyBjb25jZXJuZWQgYWJvdXQgdGhhdCBwYXJ0aWN1bGFyIHJlbGF0aW9uc2hpcC4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBmdW5jdGlvbi5cblxuSG93ZXZlciwgSSdtIGZlZWxpbmcgYSBxdWljayBpdGNoIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBMZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBFVEhUT09MX05FVExJTktgIGlzIHNldCBhcyBleHBlY3RlZCwgZ2l2ZW4gdGhlIGNvbnRleHQuIEp1c3Qgd2FudCB0byBlbGltaW5hdGUgYW55IHBvdGVudGlhbCBnb3RjaGFzLiBBIHF1aWNrIHNhbml0eSBjaGVjayBuZXZlciBodXJ0cywgZXZlbiB3aGVuIHRoaW5ncyAqc2VlbSogZmluZS4gQSBsaXR0bGUgZHVlIGRpbGlnZW5jZSBpcyBhbHdheXMgYSBnb29kIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODIzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMxOjE2LjAxNDQ0MTkzMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxNTg5OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFVEhUT09MX05FVExJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NTA3PWNvbmZpZyBGQUlMT1ZFUlxcbi0tXFxubmV0L0tjb25maWctNTE5LVxcbm5ldC9LY29uZmlnOjUyMDpjb25maWcgRVRIVE9PTF9ORVRMSU5LXFxubmV0L0tjb25maWctNTIxLVxcdGJvb2wgXFxcIk5ldGxpbmsgaW50ZXJmYWNlIGZvciBldGh0b29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMToxNi4zMDYwMzkwMTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE0NTk3MTIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBwYXRjaCByZWxpZXMgb24gYEVUSFRPT0xfTkVUTElOS2AsIHdoaWNoLCBvZiBjb3Vyc2UsIGRlcGVuZHMgb24gYm90aCBgTkVUYCBhbmQgYE5FVExJTktgLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmc/IExldCBtZSBzZWUuXG5cbkFscmlnaHQsIHRoZSBjb2RlIGNoYW5nZXMgZm9jdXMgb24gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNgLiBTaG91bGQgSSBiZSBjb25jZXJuZWQgYWJvdXQgYW4gYElEUEZgIGNvbmZpZyByZXF1aXJlbWVudCBoZXJlPyBCYXNlZCBvbiB0aGUgcHJvbXB0LCBpdCBzb3VuZHMgbGlrZSB0aGlzIGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLCB3aGljaCB1c3VhbGx5IGV4cGVjdCBhY3R1YWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoaW5raW5nIGFib3V0IGl0LCBgaWRwZmAgaXMgSW50ZWwncyBJbmZyYXN0cnVjdHVyZSBEYXRhIFBsYW5lIEZ1bmN0aW9uLCBhIGhhcmR3YXJlIGRyaXZlci4gVGhhdCBtYWtlcyBzZW5zZS4gSXQncyBhbG1vc3QgY2VydGFpbmx5IG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBTbywgSSBjYW4gZGlzcmVnYXJkIHRoZSBgaWRwZmAgY2hhbmdlcyBmb3IgZnV6emluZyBwdXJwb3NlcyBiZWNhdXNlIHRoZXkgbGlrZWx5IHdvbid0IGJlIHRyaWdnZXJlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuXG5cbkhvd2V2ZXIsIHRoZSBrZXkgbmV0d29ya2luZyBjb21wb25lbnRzIHRoYXQgKmFyZSogY2hhbmdlZCAtIGxpa2UgYHNjaF9mcS5jYCwgYHBrdGdlbi5jYCwgYW5kIHRoZSBldGh0b29sIGludGVyZmFjZSAtIHRoZXNlIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgZXZlbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLlxuXG5Ob3csIGxldCdzIHN5bnRoZXNpemUgdGhpcy4gV2UgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOlxuXG4qICAgYGZxX2NoYW5nZWBcbiogICBgZnFfZGVxdWV1ZWBcbiogICBgZnFfY2xhc3NpZnlgXG4qICAgYGV0aG5sX3NldF9yaW5nc2BcbiogICBgcGt0Z2VuX2lmX3dyaXRlYFxuKiAgIGBwa3RnZW5feG1pdGBcblxuQW5kIHdlJ2xsIGVuYWJsZSB0aGVzZSBjb25maWd1cmF0aW9uczpcblxuKiAgIGBORVRfU0NIX0ZRYFxuKiAgIGBORVRfUEtUR0VOYFxuKiAgIGBFVEhUT09MX05FVExJTktgXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCB0b3VjaGVzIHRoZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKGBzY2hfZnEuY2ApLCB0aGUgcGFja2V0IGdlbmVyYXRvciAoYHBrdGdlbi5jYCksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSB0byBlbmFibGUgdGhpcyBob3Jpem9uLiBHaXZlbiB0aGF0IHRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZnV6emluZyBpcyBhcHByb3ByaWF0ZSwgZXZlbiBpZiB0aGUgZHJpdmVyIGNoYW5nZXMgYXJlIGhhcmR3YXJlLXNwZWNpZmljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU0NywiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6MjUuNDUyMDE1MTk5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxNTI5MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfUEtUR0VOXCIsXG4gICAgXCJFVEhUT09MX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmcV9jaGFuZ2VcIixcbiAgICBcImZxX2RlcXVldWVcIixcbiAgICBcImZxX2NsYXNzaWZ5XCIsXG4gICAgXCJldGhubF9zZXRfcmluZ3NcIixcbiAgICBcInBrdGdlbl9pZl93cml0ZVwiLFxuICAgIFwicGt0Z2VuX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgZm9yIHBhY2luZyBvZmZsb2FkIGhvcml6b24uIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEZhaXIgUXVldWUgcGFja2V0IHNjaGVkdWxlciAoc2NoX2ZxLmMpLCB0aGUgcGFja2V0IGdlbmVyYXRvciAocGt0Z2VuLmMpLCBhbmQgdGhlIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2UgKHJpbmdzLmMpIHRvIHN1cHBvcnQgY29uZmlndXJpbmcgYW5kIHVzaW5nIHRoaXMgaG9yaXpvbi4gVGhlc2UgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlcyB0byB0aGUgaWRwZiBkcml2ZXIgYXJlIGhhcmR3YXJlLXNwZWNpZmljIGFuZCBub3QgZW11bGF0ZWQsIGJ1dCB0aGUgY29yZSBjaGFuZ2VzIGFyZSBzdWZmaWNpZW50IHRvIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfUEtUR0VOXCIsXG4gICAgXCJFVEhUT09MX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmcV9jaGFuZ2VcIixcbiAgICBcImZxX2RlcXVldWVcIixcbiAgICBcImZxX2NsYXNzaWZ5XCIsXG4gICAgXCJldGhubF9zZXRfcmluZ3NcIixcbiAgICBcInBrdGdlbl9pZl93cml0ZVwiLFxuICAgIFwicGt0Z2VuX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgZm9yIHBhY2luZyBvZmZsb2FkIGhvcml6b24uIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEZhaXIgUXVldWUgcGFja2V0IHNjaGVkdWxlciAoc2NoX2ZxLmMpLCB0aGUgcGFja2V0IGdlbmVyYXRvciAocGt0Z2VuLmMpLCBhbmQgdGhlIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2UgKHJpbmdzLmMpIHRvIHN1cHBvcnQgY29uZmlndXJpbmcgYW5kIHVzaW5nIHRoaXMgaG9yaXpvbi4gVGhlc2UgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlcyB0byB0aGUgaWRwZiBkcml2ZXIgYXJlIGhhcmR3YXJlLXNwZWNpZmljIGFuZCBub3QgZW11bGF0ZWQsIGJ1dCB0aGUgY29yZSBjaGFuZ2VzIGFyZSBzdWZmaWNpZW50IHRvIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmmffg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 07:01:47 +0000 UTC FinishedAt: 2026-07-27 07:31:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_FQ", "NET_PKTGEN", "ETHTOOL_NETLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_FQ", "NET_PKTGEN", "ETHTOOL_NETLINK" ], "series_id": "a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fq_change", "fq_dequeue", "fq_classify", "ethnl_set_rings", "pktgen_if_write", "pktgen_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7LAogICAgJiMzNDtFVEhUT09MX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmcV9jbGFzc2lmeSYjMzQ7LAogICAgJiMzNDtldGhubF9zZXRfcmluZ3MmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDssCiAgICAmIzM0O3BrdGdlbl94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbi4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgRmFpciBRdWV1ZSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfZnEuYyksIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIChwa3RnZW4uYyksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSAocmluZ3MuYykgdG8gc3VwcG9ydCBjb25maWd1cmluZyBhbmQgdXNpbmcgdGhpcyBob3Jpem9uLiBUaGVzZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIHRvIHRoZSBpZHBmIGRyaXZlciBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCBlbXVsYXRlZCwgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIHN1ZmZpY2llbnQgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTZkMzJiNzM5NTg0NTU5NTU4ZTk2NGEyZDcwM2I3OWYyMjQ4YjRiYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDA3OjI5OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uYzc4MDY4NGNhMWJjMGMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5AQCAtNDQ4LDYgJiM0Mzs0NDgsMTIgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogaGRzLXRocmVzaC1tYXhcbiAgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiBcbiAgIC1cbiAgICAgbmFtZTogbW0tc3RhdFxuQEAgLTIxNjgsNiAmIzQzOzIxNzQsOCBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gdHgtcHVzaC1idWYtbGVuLW1heFxuICAgICAgICAgICAgIC0gaGRzLXRocmVzaFxuICAgICAgICAgICAgIC0gaGRzLXRocmVzaC1tYXhcbiYjNDM7ICAgICAgICAgICAgLSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uXG4mIzQzOyAgICAgICAgICAgIC0gcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcbiAgICAgICBkdW1wOiAqcmluZy1nZXQtb3BcbiAgICAgLVxuICAgICAgIG5hbWU6IHJpbmdzLXNldFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdFxuaW5kZXggNTEyZjZkNmZhM2Q4ZjguLjNiOWNlMWM2ZTEwNTc4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcbkBAIC0xODMsNyAmIzQzOzE4Myw4IEBAIHN0cnVjdCBkZXZsaW5rX3BvcnQqICAgICAgICAgICAgICAgIGRldmxpbmtfcG9ydFxuIHN0cnVjdCBkcGxsX3BpbiogICAgICAgICAgICAgICAgICAgIGRwbGxfcGluXG4gc3RydWN0IGhsaXN0X2hlYWQgICAgICAgICAgICAgICAgICAgcGFnZV9wb29sc1xuIHN0cnVjdCBkaW1faXJxX21vZGVyKiAgICAgICAgICAgICAgIGlycV9tb2RlclxuLXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uXG4mIzQzO3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2luZ19vZmZsb2FkX2hvcml6b25cbiYjNDM7dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b25cbiBzdHJ1Y3RfbmFwaV9jb25maWcqICAgICAgICAgICAgICAgICBuYXBpX2NvbmZpZ1xuIHVuc2lnbmVkX2xvbmcgICAgICAgICAgICAgICAgICAgICAgIGdyb19mbHVzaF90aW1lb3V0XG4gdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFwaV9kZWZlcl9oYXJkX2lycXNcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xuaW5kZXggYmI5OWQ5ZTdjNjVkNTEuLjVkZGYzNDc5MjdkYzNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xuQEAgLTE4MDEsNyAmIzQzOzE4MDEsOCBAQCBzdGF0aWMgdm9pZCBpZHBmX2dldF90c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWRwZl9ldGh0b29sX29wcyA9IHtcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLFxuLVx0LnN1cHBvcnRlZF9yaW5nX3BhcmFtc1x0PSBFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElULFxuJiM0MztcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCB8XG4mIzQzO1x0XHRcdFx0ICBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sXG4gXHQuZ2V0X21zZ2xldmVsXHRcdD0gaWRwZl9nZXRfbXNnbGV2ZWwsXG4gXHQuc2V0X21zZ2xldmVsXHRcdD0gaWRwZl9zZXRfbXNnbGV2ZWwsXG4gXHQuZ2V0X2xpbmtcdFx0PSBldGh0b29sX29wX2dldF9saW5rLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuaW5kZXggY2Y5NjZmZTZjNzU5Y2UuLmRlNDE3MGMyYWEzYmEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbkBAIC04ODgsNiAmIzQzOzg4OCwxMSBAQCBzdGF0aWMgaW50IGlkcGZfY2ZnX25ldGRldihzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRuZXRkZXYtXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xuIFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSB2cG9ydC1cdTAwM2VtYXhfbXR1O1xuIFxuJiM0MztcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVx1MDAzZWRmbHRfcXZfcnNyYy50eHFfbW9kZWwpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaWRwZl9pc19jYXBfZW5hKGFkYXB0ZXIsIElEUEZfT1RIRVJfQ0FQUyxcbiYjNDM7XHRcdFx0ICAgIFZJUlRDSE5MMl9DQVBfU1BMSVRRX1FTQ0hFRCkpXG4mIzQzO1x0XHRuZXRkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSAxMjgwMDA7XG4mIzQzO1xuIFx0ZGZsdF9mZWF0dXJlcyA9IE5FVElGX0ZfU0dcdHxcbiBcdFx0XHRORVRJRl9GX0hJR0hETUE7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbmluZGV4IDU2NmIwOGNhM2E2Y2IxLi44ZjExZGU1N2M4YmM3NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbkBAIC0xLDYgJiM0MzsxLDggQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gLyogQ29weXJpZ2h0IChDKSAyMDIzIEludGVsIENvcnBvcmF0aW9uICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldHBvbGwuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtpZHBmLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpZHBmX3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWRwZl92aXJ0Y2hubC5oXCYjMzQ7XG5AQCAtMjQwOCw5ICYjNDM7MjQxMCwxMyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICpwYXJhbXMsXG4gXHRcdFx0XHQgICAgdTE2IHRkX2NtZCwgdTE2IHNpemUpXG4ge1xuLVx0Kih1MzIgKilcdTAwMjZkZXNjLVx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLVx1MDAzZWR0eXBlIHwgdGRfY21kKTtcbiYjNDM7XHQqKF9fbGUzMiAqKVx1MDAyNmRlc2MtXHUwMDNlZmxvdy5xdzEuY21kX2R0eXBlID0gY3B1X3RvX2xlMzIoKHU4KShwYXJhbXMtXHUwMDNlZHR5cGUgfCB0ZF9jbWQpKTtcbiBcdGRlc2MtXHUwMDNlZmxvdy5xdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNigodTE2KXNpemUpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtXHUwMDNlY29tcGxfdGFnKTtcbiYjNDM7XG4mIzQzO1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1swXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF07XG4mIzQzO1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1sxXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XG4mIzQzO1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1syXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl07XG4gfVxuIFxuIC8qKlxuQEAgLTMwMTEsNiAmIzQzOzMwMTcsNjMgQEAgc3RhdGljIGJvb2wgaWRwZl90eF9zcGxpdHFfbmVlZF9yZShzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSlcbiBcdHJldHVybiBnYXAgXHUwMDNlPSBJRFBGX1RYX1NQTElUUV9SRV9NSU5fR0FQO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZShjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnR4X3BhcmFtcylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGludCB0c19ncmFuX3BvdzIgPSA5O1xuJiM0MztcdHU2NCB0cywgbm93LCBob3Jpem9uO1xuJiM0MztcbiYjNDM7XHRob3Jpem9uID0gUkVBRF9PTkNFKHNrYi1cdTAwM2VkZXYtXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4mIzQzO1x0aWYgKCFob3Jpem9uKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBTa2lwIGlmIG5ldHBvbGw6IG5vdCBuZWVkZWQgYW5kIG5vdCBzYWZlIHRvIGNhbGwga3RpbWUgaGVscGVycyAqL1xuJiM0MztcdGlmIChuZXRwb2xsX3R4X3J1bm5pbmcoc2tiLVx1MDAzZWRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2tiLVx1MDAzZXRzdGFtcF90eXBlKSB7XG4mIzQzO1x0Y2FzZSBTS0JfQ0xPQ0tfUkVBTFRJTUU6XG4mIzQzO1x0XHR0cyA9IGt0aW1lX3RvX25zKGt0aW1lX2FkZChza2ItXHUwMDNldHN0YW1wLFxuJiM0MztcdFx0XHRcdFx0ICAga3RpbWVfbW9ub190b19hbnkoMCwgVEtfT0ZGU19UQUkpIC1cbiYjNDM7XHRcdFx0XHRcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU0tCX0NMT0NLX01PTk9UT05JQzpcbiYjNDM7XHRcdHRzID0ga3RpbWVfdG9fbnMoa3RpbWVfbW9ub190b19hbnkoc2tiLVx1MDAzZXRzdGFtcCwgVEtfT0ZGU19UQUkpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU0tCX0NMT0NLX1RBSTpcbiYjNDM7XHRcdHRzID0ga3RpbWVfdG9fbnMoc2tiLVx1MDAzZXRzdGFtcCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bm93ID0ga3RpbWVfZ2V0X2Nsb2NrdGFpX25zKCk7XG4mIzQzO1x0aWYgKHRzIFx1MDAzYyBub3cpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIGJleW9uZCBvZmZsb2FkIGhvcml6b24/IHNldCBvdmVyZmxvdyBiaXQgb25seSAqL1xuJiM0MztcdGlmICh0cyBcdTAwM2Ugbm93ICYjNDM7IChob3Jpem9uICogTlNFQ19QRVJfVVNFQykpIHtcbiYjNDM7XHRcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAxIFx1MDAzY1x1MDAzYyA3O1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHMgXHUwMDNlXHUwMDNlPSB0c19ncmFuX3BvdzI7XG4mIzQzO1xuJiM0MztcdC8qIDAgaXMgdmFsaWQgMjRiIHRpbWVzdGFtcCwgYnV0IGFsc28gbWVhbnMgZmllbGQgdW5zZXQuXG4mIzQzO1x0ICogQWRkIDUxMiBucyAodHNfZ3Jhbl9wb3cyKSB0byBhdm9pZCB0aGlzIGNhc2VcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKHRzIFx1MDAyNiAweDdmZmZmZikgPT0gMCkge1xuJiM0MztcdFx0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1swXSA9IDE7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1sxXSA9ICh0cyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4mIzQzO1x0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXSA9ICgodHMgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHg3Zik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWRwZl90eF9zcGxpdHFfZnJhbWUgLSBTZW5kcyBidWZmZXIgb24gVHggcmluZyB1c2luZyBmbGV4IGRlc2NyaXB0b3JzXG4gICogQHNrYjogc2VuZCBidWZmZXJcbkBAIC0zMDk3LDYgJiM0MzszMTYwLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpZHBmX3R4X3NwbGl0cV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0XHR0eF9wYXJhbXMuZHR5cGUgPSBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEU7XG4gXHRcdHR4X3BhcmFtcy5lb3BfY21kID0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9FT1A7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2V0c3RhbXApXG4mIzQzO1x0XHRcdGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUodHhfcSwgc2tiLCBcdTAwMjZ0eF9wYXJhbXMpO1xuJiM0MztcbiBcdFx0LyogU2V0IHRoZSBSRSBiaXQgdG8gcGVyaW9kaWNhbGx5IFwmIzM0O2NsZWFuXCYjMzQ7IHRoZSBkZXNjcmlwdG9yIHJpbmcuXG4gXHRcdCAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0XG4gXHRcdCAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuaW5kZXggNGJlNWIzYjZkM2VkMmIuLjg2NTQwOGI1N2IwZDU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuQEAgLTE2MSw2ICYjNDM7MTYxLDcgQEAgdW5pb24gaWRwZl90eF9mbGV4X2Rlc2Mge1xuICAqIEB0c29fc2VnczogTnVtYmVyIG9mIHNlZ21lbnRzIHRvIGJlIHNlbnRcbiAgKiBAdHNvX2hkcl9sZW46IExlbmd0aCBvZiBoZWFkZXJzIHRvIGJlIGR1cGxpY2F0ZWRcbiAgKiBAdGRfY21kOiBDb21tYW5kIGZpZWxkIHRvIGJlIGluc2VydGVkIGludG8gZGVzY3JpcHRvclxuJiM0MzsgKiBAZGVzY190czogRmxvdyBzY2hlZHVsaW5nIG9mZmxvYWQgdGltZXN0YW1wXG4gICovXG4gc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xuIFx0dTMyIHR4X2ZsYWdzO1xuQEAgLTE3NCw2ICYjNDM7MTc1LDcgQEAgc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xuIFx0dTE2IHRzb19oZHJfbGVuO1xuIFxuIFx0dTE2IHRkX2NtZDtcbiYjNDM7XHR1OCBkZXNjX3RzWzNdO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuaW5kZXggNWQ0OTFhOTgyNjVlZjkuLmFkZWViYmY1M2RhZGVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5AQCAtODUsNiAmIzQzOzg1LDggQEAgZW51bSB7XG4gICogQHR4X3B1c2hfYnVmX21heF9sZW46IE1heGltdW0gYWxsb3dlZCBzaXplIG9mIFRYIHB1c2ggYnVmZmVyXG4gICogQGhkc190aHJlc2g6IFBhY2tldCBzaXplIHRocmVzaG9sZCBmb3IgaGVhZGVyIGRhdGEgc3BsaXQgKEhEUylcbiAgKiBAaGRzX3RocmVzaF9tYXg6IE1heGltdW0gc3VwcG9ydGVkIHNldHRpbmcgZm9yIEBoZHNfdGhyZXNob2xkXG4mIzQzOyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcbiYjNDM7ICogQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjXG4gICpcbiAgKi9cbiBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbkBAIC05Nyw2ICYjNDM7OTksOCBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbiBcdHUzMlx0dHhfcHVzaF9idWZfbWF4X2xlbjtcbiBcdHUzMlx0aGRzX3RocmVzaDtcbiBcdHUzMlx0aGRzX3RocmVzaF9tYXg7XG4mIzQzO1x0dTMyXHRwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuJiM0MztcdHUzMlx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gfTtcbiBcbiAvKipcbkBAIC0xMDgsNiAmIzQzOzExMiw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0ge1xuICAqIEBFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTjogY2FwdHVyZSBmb3Igc2V0dGluZyB0eF9wdXNoX2J1Zl9sZW5cbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVDogY2FwdHVyZSBmb3Igc2V0dGluZyB0Y3BfZGF0YV9zcGxpdFxuICAqIEBFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTOiBjYXB0dXJlIGZvciBzZXR0aW5nIGhlYWRlci1kYXRhLXNwbGl0LXRocmVzaFxuJiM0MzsgKiBARVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OOiBjYXB0dXJlIGZvciBzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b25cbiAgKi9cbiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xuIFx0RVRIVE9PTF9SSU5HX1VTRV9SWF9CVUZfTEVOXHRcdD0gQklUKDApLFxuQEAgLTExNyw2ICYjNDM7MTIyLDcgQEAgZW51bSBldGh0b29sX3N1cHBvcnRlZF9yaW5nX3BhcmFtIHtcbiBcdEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOXHQ9IEJJVCg0KSxcbiBcdEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVRcdFx0PSBCSVQoNSksXG4gXHRFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTXHRcdD0gQklUKDYpLFxuJiM0MztcdEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTlx0PSBCSVQoNyksXG4gfTtcbiBcbiAjZGVmaW5lIF9fRVRIX1JTU19IQVNIX0JJVChiaXQpXHQoKHUzMikxIFx1MDAzY1x1MDAzYyAoYml0KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOGRiMjViNzk1NzNlM2MuLjNjMmVkNDViNTVkY2FkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTIxMjksNyAmIzQzOzIxMjksOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRAZHBsbF9waW46IFBvaW50ZXIgdG8gdGhlIFN5bmNFIHNvdXJjZSBwaW4gb2YgYSBEUExMIHN1YnN5c3RlbSxcbiAgKlx0XHQgICB3aGVyZSB0aGUgY2xvY2sgaXMgcmVjb3ZlcmVkLlxuICAqXG4tICpcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IEVEVCBvZmZsb2FkIGhvcml6b24gaW4gbnNlYy5cbiYjNDM7ICpcdEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBhY3RpdmUgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxuJiM0MzsgKlx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxuICAqXHRAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSVxuICAqXHRcdCAgICAgIHNldHRpbmdzLlxuICAqXHRAbnVtX25hcGlfY29uZmlnczpcdG51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cyxcbkBAIC0yNTUyLDcgJiM0MzsyNTUzLDggQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xuIFx0LyoqIEBpcnFfbW9kZXI6IGRpbSBwYXJhbWV0ZXJzIHVzZWQgaWYgSVNfRU5BQkxFRChDT05GSUdfRElNTElCKS4gKi9cbiBcdHN0cnVjdCBkaW1faXJxX21vZGVyXHQqaXJxX21vZGVyO1xuIFxuLVx0dTY0XHRcdFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4mIzQzO1x0dTMyXHRcdFx0cGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiYjNDM7XHR1MzJcdFx0XHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiBcdHN0cnVjdCBuYXBpX2NvbmZpZ1x0Km5hcGlfY29uZmlnO1xuIFx0dTMyXHRcdFx0bnVtX25hcGlfY29uZmlncztcbiBcdHUzMlx0XHRcdG5hcGlfZGVmZXJfaGFyZF9pcnFzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5pbmRleCA4MTM0YmFmNzg2MGYzYy4uNmYxYTJmYTM2MTU3ZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5AQCAtMTkzLDYgJiM0MzsxOTMsOCBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYLFxuIFx0RVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsXG4gXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXG4mIzQzO1x0RVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sXG4mIzQzO1x0RVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxuIFxuIFx0X19FVEhUT09MX0FfUklOR1NfQ05ULFxuIFx0RVRIVE9PTF9BX1JJTkdTX01BWCA9IChfX0VUSFRPT0xfQV9SSU5HU19DTlQgLSAxKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3BrdGdlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9wa3RnZW4uY1xuQEAgLTIwMSw2ICYjNDM7MjAxLDcgQEBcbiBcdHBmKFNWSURfUk5EKVx0XHQvKiBSYW5kb20gU1ZMQU4gSUQgKi9cdFx0XHRcXFxuIFx0cGYoTk9ERSlcdFx0LyogTm9kZSBtZW1vcnkgYWxsb2MqL1x0XHRcdFxcXG4gXHRwZihTSEFSRUQpXHRcdC8qIFNoYXJlZCBTS0IgKi9cdFx0XHRcXFxuJiM0MztcdHBmKFRYVElNRSlcdFx0LyogU09fVFhUSU1FIHN1cHBvcnQgKi9cdFx0XHRcXFxuIFxuICNkZWZpbmUgcGYoZmxhZylcdFx0ZmxhZyMjX1NISUZULFxuIGVudW0gcGt0X2ZsYWdzIHtcbkBAIC0yOTEsNiAmIzQzOzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHU2NCBkZWxheTtcdFx0LyogbmFuby1zZWNvbmRzICovXG4gXG4mIzQzO1x0LyogVFhUSU1FIHN1cHBvcnQgKi9cbiYjNDM7XHR1NjQgdHh0aW1lX2RlbGF5O1x0LyogdHJhbnNtaXQgdGltZSBkZWxheSBpbiBucyAqL1xuJiM0MztcdGNsb2NraWRfdCB0eHRpbWVfY2xvY2tpZDsgLyogY2xvY2tpZCBmb3IgU09fVFhUSU1FICovXG4mIzQzO1xuIFx0X191NjQgY291bnQ7XHRcdC8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovXG4gXHRfX3U2NCBzb2ZhcjtcdFx0LyogSG93IG1hbnkgcGt0cyB3ZSYjMzk7dmUgc2VudCBzbyBmYXIgKi9cbiBcdF9fdTY0IHR4X2J5dGVzO1x0XHQvKiBIb3cgbWFueSBieXRlcyB3ZSYjMzk7dmUgdHJhbnNtaXR0ZWQgKi9cbkBAIC02NjYsNiAmIzQzOzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFx0aWYgKHBrdF9kZXYtXHUwMDNlbm9kZSBcdTAwM2U9IDApXG4gXHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDsgICAgIG5vZGU6ICVkXFxuXCYjMzQ7LCBwa3RfZGV2LVx1MDAzZW5vZGUpO1xuIFxuJiM0MztcdGlmIChwa3RfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBGX1RYVElNRSkge1xuJiM0MztcdFx0Y2xvY2tpZF90IGNsb2NraWQgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCk7XG4mIzQzO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyAgICAgdHh0aW1lX2RlbGF5OiAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KTtcbiYjNDM7XHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDsgICAgIHR4dGltZV9jbG9ja2lkOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19NT05PVE9OSUMgPyBcJiMzNDttb25vdG9uaWNcJiMzNDsgOlxuJiM0MztcdFx0XHQgICBjbG9ja2lkID09IENMT0NLX1JFQUxUSU1FID8gXCYjMzQ7cmVhbHRpbWVcJiMzNDsgOlxuJiM0MztcdFx0XHQgICBjbG9ja2lkID09IENMT0NLX1RBSSA/IFwmIzM0O3RhaVwmIzM0OyA6IFwmIzM0O3Vua25vd25cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocGt0X2Rldi1cdTAwM2V4bWl0X21vZGUgPT0gTV9ORVRJRl9SRUNFSVZFKVxuIFx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0OyAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXFxuXCYjMzQ7KTtcbiBcdGVsc2UgaWYgKHBrdF9kZXYtXHUwMDNleG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVClcbkBAIC0xMTQxLDYgJiM0MzsxMTU3LDUwIEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LVx1MDAzZWRlbGF5KTtcbiBcdFx0cmV0dXJuIGNvdW50O1xuIFx0fVxuJiM0MztcdGlmICghc3RyY21wKG5hbWUsIFwmIzM0O3R4dGltZV9kZWxheVwmIzM0OykpIHtcbiYjNDM7XHRcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcbiYjNDM7XHRcdGxlbiA9IG51bV9hcmcoXHUwMDI2dXNlcl9idWZmZXJbaV0sIG1heCwgXHUwMDI2dmFsdWUpO1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIGxlbjtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpbiBxdWV1ZV94bWl0IG1vZGUgZnEgbWF5IGNsZWFyIHRzdGFtcCwgZG8gbm90IHJldXNlIHNrYiAqL1xuJiM0MztcdFx0aWYgKHZhbHVlIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiBcdTAwM2UgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSwgKHU2NCl2YWx1ZSk7XG4mIzQzO1x0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCYjMzQ7T0s6IHR4dGltZV9kZWxheT0lbGx1XCYjMzQ7LFxuJiM0MztcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlKTtcbiYjNDM7XHRcdHJldHVybiBjb3VudDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFzdHJjbXAobmFtZSwgXCYjMzQ7dHh0aW1lX2Nsb2NraWRcJiMzNDspKSB7XG4mIzQzO1x0XHRjaGFyIGNsb2Nrc3RyWzMyXTtcbiYjNDM7XHRcdGNsb2NraWRfdCBjbGs7XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KGNsb2Nrc3RyLCAwLCBzaXplb2YoY2xvY2tzdHIpKTtcbiYjNDM7XHRcdG1heCA9IG1pbihzaXplb2YoY2xvY2tzdHIpIC0gMSwgY291bnQgLSBpKTtcbiYjNDM7XHRcdGxlbiA9IHN0cm5fbGVuKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgpO1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIGxlbjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY29weV9mcm9tX3VzZXIoY2xvY2tzdHIsIFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBsZW4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCYjMzQ7bW9ub3RvbmljXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRjbGsgPSBDTE9DS19NT05PVE9OSUM7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjbXAoY2xvY2tzdHIsIFwmIzM0O3JlYWx0aW1lXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRjbGsgPSBDTE9DS19SRUFMVElNRTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCYjMzQ7dGFpXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRjbGsgPSBDTE9DS19UQUk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCYjMzQ7RVJST1I6IHVua25vd24gY2xvY2tpZCAmIzM5OyVzJiMzOTtcJiMzNDssXG4mIzQzO1x0XHRcdFx0Y2xvY2tzdHIpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCYjMzQ7T0s6IHR4dGltZV9jbG9ja2lkPSVzXCYjMzQ7LCBjbG9ja3N0cik7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQsIGNsayk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuIFx0aWYgKCFzdHJjbXAobmFtZSwgXCYjMzQ7cmF0ZVwmIzM0OykpIHtcbiBcdFx0bWF4ID0gbWluKDEwLCBjb3VudCAtIGkpO1xuIFx0XHRsZW4gPSBudW1fYXJnKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFx1MDAyNnZhbHVlKTtcbkBAIC0xMjM4LDYgJiM0MzsxMjk4LDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRpZiAodmFsdWUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IChwa3RfZGV2LVx1MDAzZW5faW1peF9lbnRyaWVzIFx1MDAzZSAwIHx8XG4gXHRcdFx0XHQgICEocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgRl9TSEFSRUQpKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGlmICh2YWx1ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdHBrdF9kZXYtXHUwMDNlY2xvbmVfc2tiID0gdmFsdWU7XG4gXG5AQCAtMjMyMSw2ICYjNDM7MjM4MywyMSBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fc2V0dXBfaW5qZWN0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIH1cbiBcbiBcbiYjNDM7c3RhdGljIGt0aW1lX3Qga3RpbWVfZ2V0X2Nsb2NrKGNsb2NraWRfdCBjbG9ja2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjbG9ja2lkKSB7XG4mIzQzO1x0Y2FzZSBDTE9DS19SRUFMVElNRTpcbiYjNDM7XHRcdHJldHVybiBrdGltZV9nZXRfcmVhbCgpO1xuJiM0MztcdGNhc2UgQ0xPQ0tfTU9OT1RPTklDOlxuJiM0MztcdFx0cmV0dXJuIGt0aW1lX2dldCgpO1xuJiM0MztcdGNhc2UgQ0xPQ0tfVEFJOlxuJiM0MztcdFx0cmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0XHRyZXR1cm4ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNwaW4oc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGt0aW1lX3Qgc3Bpbl91bnRpbClcbiB7XG4gXHRrdGltZV90IHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xuQEAgLTM1MTAsNyAmIzQzOzM1ODcsOCBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fd2FpdF9mb3Jfc2tiKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFxuIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIHtcbi1cdGJvb2wgc2tiX3NoYXJlZCA9ICEhKFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjYgRl9TSEFSRUQpO1xuJiM0MztcdHUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRib29sIHNrYl9zaGFyZWQgPSAhIShmbGFncyBcdTAwMjYgRl9TSEFSRUQpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBwa3RfZGV2LVx1MDAzZW9kZXY7XG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gXHR1bnNpZ25lZCBpbnQgYnVyc3QgPSAxO1xuQEAgLTM1NDUsNiAmIzQzOzM2MjMsOCBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiBcdC8qIElmIG5vIHNrYiBvciBjbG9uZSBjb3VudCBleGhhdXN0ZWQgdGhlbiBnZXQgbmV3IG9uZSAqL1xuIFx0aWYgKCFwa3RfZGV2LVx1MDAzZXNrYiB8fCAocGt0X2Rldi1cdTAwM2VsYXN0X29rIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICYjNDM7JiM0Mztwa3RfZGV2LVx1MDAzZWNsb25lX2NvdW50IFx1MDAzZT0gY2xvbmVfc2tiKSkge1xuJiM0MztcdFx0dTY0IHR4dGltZV9kZWxheTtcbiYjNDM7XG4gXHRcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xuIFx0XHRrZnJlZV9za2IocGt0X2Rldi1cdTAwM2Vza2IpO1xuIFxuQEAgLTM1NTcsNiAmIzQzOzM2MzcsMTYgQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdH1cbiBcdFx0cGt0X2Rldi1cdTAwM2VsYXN0X3BrdF9zaXplID0gcGt0X2Rldi1cdTAwM2Vza2ItXHUwMDNlbGVuO1xuIFx0XHRwa3RfZGV2LVx1MDAzZWNsb25lX2NvdW50ID0gMDtcdC8qIHJlc2V0IGNvdW50ZXIgKi9cbiYjNDM7XG4mIzQzO1x0XHR0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXkpO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBGX1RYVElNRSBcdTAwMjZcdTAwMjYgdHh0aW1lX2RlbGF5KSB7XG4mIzQzO1x0XHRcdGNsb2NraWRfdCBjbGsgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCk7XG4mIzQzO1x0XHRcdGt0aW1lX3QgdHh0aW1lID0ga3RpbWVfYWRkX25zKGt0aW1lX2dldF9jbG9jayhjbGspLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICB0eHRpbWVfZGVsYXkpO1xuJiM0MztcbiYjNDM7XHRcdFx0c2tiX3NldF9kZWxpdmVyeV90eXBlX2J5X2Nsb2NraWQocGt0X2Rldi1cdTAwM2Vza2IsIHR4dGltZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgY2xrKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdGlmIChwa3RfZGV2LVx1MDAzZWRlbGF5IFx1MDAyNlx1MDAyNiBwa3RfZGV2LVx1MDAzZWxhc3Rfb2spXG5AQCAtMzg2OSw2ICYjNDM7Mzk1OSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcbiBcdHBrdF9kZXYtXHUwMDNlYnVyc3QgPSAxO1xuIFx0cGt0X2Rldi1cdTAwM2Vub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0cGt0X2Rldi1cdTAwM2VmbGFncyA9IEZfU0hBUkVEO1x0LyogU0tCIHNoYXJlZCBieSBkZWZhdWx0ICovXG4mIzQzO1x0cGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCA9IENMT0NLX01PTk9UT05JQztcbiBcbiBcdGVyciA9IHBrdGdlbl9zZXR1cF9kZXYodC1cdTAwM2VuZXQsIHBrdF9kZXYsIGlmbmFtZSk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDMxYzY1YTU0NWExMDdjLi4yYzdhMjQ1YzVmZmMyZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTIxNTUsNyAmIzQzOzIxNTUsNyBAQCBzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICBubGFfcHV0X3UzMihza2IsIElGTEFfVFNPX01BWF9TRUdTLFxuIFx0XHRcdFJFQURfT05DRShkZXYtXHUwMDNldHNvX21heF9zZWdzKSkgfHxcbiBcdCAgICBubGFfcHV0X3VpbnQoc2tiLCBJRkxBX01BWF9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxuLVx0XHRcdCBSRUFEX09OQ0UoZGV2LVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkgfHxcbiYjNDM7XHRcdFx0ICh1NjQpUkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fFxuICNpZmRlZiBDT05GSUdfUlBTXG4gXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsXG4gXHRcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2VudW1fcnhfcXVldWVzKSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uYyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXG5pbmRleCAyM2RiNDA2MThmZWQxNC4uOWNhNjk4MGYyMjkxZTYgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvY29tbW9uLmNcbkBAIC05NTQsNiAmIzQzOzk1NCwxMCBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIERyaXZlciBnaXZlcyB1cyBjdXJyZW50IHN0YXRlLCB3ZSB3YW50IHRvIHJldHVybiBjdXJyZW50IGNvbmZpZyAqL1xuIFx0a3BhcmFtLVx1MDAzZXRjcF9kYXRhX3NwbGl0ID0gZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfY29uZmlnO1xuIFx0a3BhcmFtLVx1MDAzZWhkc190aHJlc2ggPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc190aHJlc2g7XG4mIzQzO1xuJiM0MztcdGtwYXJhbS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gUkVBRF9PTkNFKGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcbiYjNDM7XHRrcGFyYW0tXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPVxuJiM0MztcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGV0aHRvb2xfaW5pdF90c2luZm8oc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5pbmRleCAzZTk2OWEwNzBmOWZlNC4uYWU3YjY1MWM2NThmNzQgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ5NCw3ICYjNDM7NDk0LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ZlYXR1cmVzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0ZFQVRVUkVTX1dBTlRcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19IRUFERVIgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3ByaXZmbGFnc19zZXRfcG9saWN5W0VUSFRPT0xfQV9QUklWRkxBR1NfRkxBR1MgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hFQURFUiAmIzQzOyAxXTtcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVggJiM0MzsgMV07XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfSEVBREVSICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jaGFubmVsc19zZXRfcG9saWN5W0VUSFRPT0xfQV9DSEFOTkVMU19DT01CSU5FRF9DT1VOVCAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY29hbGVzY2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ09BTEVTQ0VfSEVBREVSICYjNDM7IDFdO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3JpbmdzLmMgYi9uZXQvZXRodG9vbC9yaW5ncy5jXG5pbmRleCA5MDU0Yzg5YzVkN2JiMi4uNWNjMjBkNTgxYzQ2ZWMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9yaW5ncy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9yaW5ncy5jXG5AQCAtNDIsNiAmIzQzOzQyLDEwIEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4gXG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbiYjNDM7XHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XG4mIzQzO1x0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pO1xuJiM0MztcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS5tYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XG4mIzQzO1x0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcbiBcbiBcdGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfcmluZ3BhcmFtKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VyaW5ncGFyYW0sXG4gXHRcdFx0XHRcdFx1MDAyNmRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbSwgaW5mby1cdTAwM2VleHRhY2spO1xuQEAgLTY5LDcgJiM0Mzs3Myw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTiAqL1xuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVggKi9cbiBcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXG4tXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBfUklOR1NfSERTX1RIUkVTSF9NQVggKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTiAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggKi9cbiB9XG4gXG4gc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTIxLDcgJiM0MzsxMjcsMTIgQEAgc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaCkgfHxcbiBcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuLVx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXG4mIzQzO1x0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkgfHxcbiYjNDM7XHQgICAgKChzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbiYjNDM7XHRcdFx0ICBrci1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB8fFxuJiM0MztcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxuJiM0MztcdFx0XHQgIGtyLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0LDYgJiM0MzsxNTUsNyBAQCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W10gPSB7XG4gXHRbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCAxKSxcbiBcdFtFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIH07XG4gXG4gc3RhdGljIGludFxuQEAgLTE3Nyw2ICYjNDM7MTg5LDE0IEBAIGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShvcHMtXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3NldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19DUUVfU0laRV0gXHUwMDI2XHUwMDI2XG4gXHQgICAgIShvcHMtXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX0NRRV9TSVpFKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuQEAgLTI0Niw2ICYjNDM7MjY2LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dLCBcdTAwMjZtb2QpO1xuIFx0ZXRobmxfdXBkYXRlX3UzMihcdTAwMjZrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2gsXG4gXHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgXHUwMDI2bW9kKTtcbiYjNDM7XHRldGhubF91cGRhdGVfdTMyKFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcbiYjNDM7XHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSwgXHUwMDI2bW9kKTtcbiBcdGlmICghbW9kKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yODEsNiAmIzQzOzMwMyw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19UWF07XG4gXHRlbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggXHUwMDNlIGtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaF9tYXgpXG4gXHRcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdO1xuJiM0MztcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiBcdTAwM2VcbiYjNDM7XHRcdCBrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKVxuJiM0MztcdFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07XG4gXHRlbHNlXG4gXHRcdGVycl9hdHRyID0gTlVMTDtcbiBcdGlmIChlcnJfYXR0cikge1xuQEAgLTMwMiw2ICYjNDM7MzI3LDEwIEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0cmV0ID0gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9yaW5ncGFyYW0oZGV2LCBcdTAwMjZyaW5ncGFyYW0sXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24sXG4mIzQzO1x0XHRcdCAgIGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4mIzQzO1xuIFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnEuYyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuaW5kZXggN2NhZTA4MmE5ODQ3MjEuLmNiZjAxNWRmNjhjY2Y4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC0zOTksNiAmIzQzOzM5OSwxMSBAQCBzdGF0aWMgc3RydWN0IGZxX2Zsb3cgKmZxX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19zdGF0dXMpICE9IFNLX1BBQ0lOR19GUSlcbiBcdFx0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzay1cdTAwM2Vza19wYWNpbmdfc3RhdHVzLFxuIFx0XHRcdFx0XHQgIFNLX1BBQ0lOR19GUSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGZxX3NrYl9jYihza2IpLVx1MDAzZXRpbWVfdG9fc2VuZCBcdTAwM2M9IG5vdylcbiYjNDM7XHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IDA7XG4mIzQzO1xuIFx0XHRyZXR1cm4gXHUwMDI2cS1cdTAwM2VpbnRlcm5hbDtcbiBcdH1cbiBcbkBAIC03MDcsNiAmIzQzOzcxMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdHN0cnVjdCBmcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIFx0c3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kO1xuIFx0c3RydWN0IGZxX2Zsb3dfaGVhZCAqaGVhZDtcbiYjNDM7XHR1NjQgdGltZV9uZXh0X3BhY2tldDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZnFfZmxvdyAqZjtcbiBcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbkBAIC03MjEsNyAmIzQzOzcyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdGlmIChza2IpIHtcbiBcdFx0cS1cdTAwM2VpbnRlcm5hbC5xbGVuLS07XG4gXHRcdGZxX2RlcXVldWVfc2tiKHNjaCwgXHUwMDI2cS1cdTAwM2VpbnRlcm5hbCwgc2tiKTtcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuIFx0fVxuIFxuIFx0bm93ID0ga3RpbWVfZ2V0X25zKCk7XG5AQCAtNzU4LDggJiM0Mzs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gXG4gXHRza2IgPSBmcV9wZWVrKGYpO1xuIFx0aWYgKHNrYikge1xuLVx0XHR1NjQgdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXHUwMDNldGltZV90b19zZW5kLFxuLVx0XHRcdFx0XHQgICAgIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4mIzQzO1x0XHR0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cdTAwM2V0aW1lX3RvX3NlbmQsXG4mIzQzO1x0XHRcdFx0XHQgZi1cdTAwM2V0aW1lX25leHRfcGFja2V0KTtcbiBcbiBcdFx0aWYgKG5vdyAmIzQzOyBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcdTAwM2MgdGltZV9uZXh0X3BhY2tldCkge1xuIFx0XHRcdGhlYWQtXHUwMDNlZmlyc3QgPSBmLVx1MDAzZW5leHQ7XG5AQCAtODI4LDExICYjNDM7ODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdFx0ICogZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IHdhcyBzZXQgd2hlbiBwcmlvciBwYWNrZXQgd2FzIHNlbnQsXG4gXHRcdCAqIGFuZCBjdXJyZW50IHRpbWUgKEBub3cpIGNhbiBiZSB0b28gbGF0ZSBieSB0ZW5zIG9mIHVzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGYtXHUwMDNldGltZV9uZXh0X3BhY2tldClcbiYjNDM7XHRcdGlmIChmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgXHUwMDI2XHUwMDI2IGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCBcdTAwM2Mgbm93KVxuIFx0XHRcdGxlbiAtPSBtaW4obGVuLzIsIG5vdyAtIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4gXHRcdGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCA9IG5vdyAmIzQzOyBsZW47XG4gXHR9XG4mIzQzO1xuIG91dDpcbiYjNDM7XHRpZiAocS1cdTAwM2VvZmZsb2FkX2hvcml6b24gXHUwMDI2XHUwMDI2IHRpbWVfbmV4dF9wYWNrZXQgXHUwMDNjPSBub3cpXG4mIzQzO1x0XHRza2ItXHUwMDNldHN0YW1wID0gMDtcbiYjNDM7XG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbkBAIC0xMTc5LDcgJiM0MzsxMTg5LDkgQEAgc3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbiBcdFx0dTY0IG9mZmxvYWRfaG9yaXpvbiA9ICh1NjQpTlNFQ19QRVJfVVNFQyAqXG4gXHRcdFx0XHQgICAgICBubGFfZ2V0X3UzMih0YltUQ0FfRlFfT0ZGTE9BRF9IT1JJWk9OXSk7XG4gXG4tXHRcdGlmIChvZmZsb2FkX2hvcml6b24gXHUwMDNjPSBxZGlzY19kZXYoc2NoKS1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikge1xuJiM0MztcdFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcdTAwM2M9XG4mIzQzO1x0XHQgICAgKHU2NClSRUFEX09OQ0UocWRpc2NfZGV2KHNjaCktXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKlxuJiM0MztcdFx0ICAgIE5TRUNfUEVSX1VTRUMpIHtcbiBcdFx0XHRXUklURV9PTkNFKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uLCBvZmZsb2FkX2hvcml6b24pO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2ludmFsaWQgb2ZmbG9hZF9ob3Jpem9uXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXG5pbmRleCA1NWEzODZmM2QxYjkwZi4uNmU2NGJhYTRjNjBkZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcbkBAIC00Miw4ICYjNDM7NDIsMTAgQEAgc3RhdGljIGJvb2xcdGNmZ19tYWNoaW5lX3Nsb3c7XG4gc3RhdGljIHVpbnQ2NF90XHRjZmdfc3RhcnRfdGltZV9ucztcbiBzdGF0aWMgaW50XHRjZmdfbWFyaztcbiBzdGF0aWMgYm9vbFx0Y2ZnX3J4O1xuJiM0MztzdGF0aWMgYm9vbFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkO1xuIFxuIHN0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydDtcbiYjNDM7c3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0X3JlYWw7XG4gc3RhdGljIHVpbnQ2NF90IHRkZWxpdmVyX21heDtcbiBcbiBzdGF0aWMgaW50IGVycm9ycztcbkBAIC0xNTgsMTggJiM0MzsxNjAsNzAgQEAgc3RhdGljIHZvaWQgZG9fcmVjdl92ZXJpZnlfZW1wdHkoaW50IGZkcilcbiBcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7cmVjdjogbm90IGVtcHR5IGFzIGV4cGVjdGVkICglZCwgJWQpXCYjMzQ7LCByZXQsIGVycm5vKTtcbiB9XG4gXG4tc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcbiYjNDM7c3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgcGF5bG9hZF9jaGFyKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcbiYjNDM7XHRpbnQ2NF90IHRzdGFtcCA9IDA7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZXJyLVx1MDAzZWVlX2Vycm5vKSB7XG4mIzQzO1x0Y2FzZSBFQ0FOQ0VMRUQ6XG4mIzQzO1x0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKVxuJiM0MztcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbiYjNDM7XHRcdHJlYXNvbiA9IFwmIzM0O21pc3NlZCB0eHRpbWVcJiMzNDs7XG4mIzQzO1x0YnJlYWs7XG4mIzQzO1x0Y2FzZSBFSU5WQUw6XG4mIzQzO1x0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcbiYjNDM7XHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBlcnItXHUwMDNlZWVfY29kZSk7XG4mIzQzO1x0XHRyZWFzb24gPSBcJiMzNDtpbnZhbGlkIHR4dGltZVwmIzM0OztcbiYjNDM7XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICBlcnItXHUwMDNlZWVfZXJybm8sIGVyci1cdTAwM2VlZV9jb2RlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRzdGFtcCA9ICgoaW50NjRfdCllcnItXHUwMDNlZWVfZGF0YSkgXHUwMDNjXHUwMDNjIDMyIHwgZXJyLVx1MDAzZWVlX2luZm87XG4mIzQzO1x0dHN0YW1wIC09IChpbnQ2NF90KWdsb2JfdHN0YXJ0O1xuJiM0MztcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7c2VuZDogcGt0ICVjIGF0ICVcJiMzNDsgUFJJZDY0IFwmIzM0O21zIGRyb3BwZWQ6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0cGF5bG9hZF9jaGFyLCB0c3RhbXAsIHJlYXNvbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkb19yZWN2X2VycnF1ZXVlX3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcylcbiYjNDM7e1xuJiM0MztcdGludDY0X3QgdHM7XG4mIzQzO1xuJiM0MztcdHRzID0gdHNzLVx1MDAzZXRzWzBdLnR2X3NlYztcbiYjNDM7XHR0cyAqPSAxMDAwVUxMICogMTAwMCAqIDEwMDA7XG4mIzQzO1x0dHMgJiM0Mzs9IHRzcy1cdTAwM2V0c1swXS50dl9uc2VjO1xuJiM0MztcdHRzIC09IGdsb2JfdHN0YXJ0X3JlYWw7XG4mIzQzO1x0dHMgLz0gMTAwMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRzIFx1MDAzZSBjZmdfdmFyaWFuY2VfdXMpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtzdyBkZWxheSAlXCYjMzQ7IFBSSWQ2NCBcJiMzNDt1cyBleGNlZWRzIGJvdW5kc1xcblwmIzM0OywgdHMpO1xuJiM0MztcdFx0aWYgKCFjZmdfbWFjaGluZV9zbG93KVxuJiM0MztcdFx0XHRlcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlKGludCBmZHQpXG4ge1xuIFx0Y2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VycikpICYjNDM7XG4mIzQzO1x0XHQgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY21fdGltZXN0YW1waW5nKSkgJiM0MztcbiBcdFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSldID0gezB9O1xuIFx0Y2hhciBkYXRhW3NpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7XG4gXHRcdCAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7IDFdO1xuJiM0MztcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3M7XG4gXHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycjtcbiBcdGludCByZXQsIG51bV90c3RhbXAgPSAwO1xuIFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7MH07XG4gXHRzdHJ1Y3QgaW92ZWMgaW92ID0gezB9O1xuIFx0c3RydWN0IGNtc2doZHIgKmNtO1xuLVx0aW50NjRfdCB0c3RhbXAgPSAwO1xuIFxuIFx0aW92Lmlvdl9iYXNlID0gZGF0YTtcbiBcdGlvdi5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpO1xuQEAgLTE4MSw4ICYjNDM7MjM1LDYgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcbiBcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTtcbiBcbiBcdHdoaWxlICgxKSB7XG4tXHRcdGNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7XG4tXG4gXHRcdHJldCA9IHJlY3Ztc2coZmR0LCBcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XG4gXHRcdGlmIChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVBR0FJTilcbiBcdFx0XHRicmVhaztcbkBAIC0xOTIsNDIgJiM0MzsyNDQsMzIgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcbiBcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogZmxhZ3MgMHgleFxcblwmIzM0OywgbXNnLm1zZ19mbGFncyk7XG4gXG4gXHRcdGNtID0gQ01TR19GSVJTVEhEUihcdTAwMjZtc2cpO1xuJiM0MztcdFx0dHNzID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCA9PSBTT0xfU09DS0VUIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGNtLVx1MDAzZWNtc2dfdHlwZSA9PSBTQ01fVElNRVNUQU1QSU5HKSB7XG4mIzQzO1x0XHRcdHRzcyA9ICh2b2lkICopQ01TR19EQVRBKGNtKTtcbiYjNDM7XHRcdFx0Y20gPSBDTVNHX05YVEhEUihcdTAwMjZtc2csIGNtKTtcbiYjNDM7XHRcdFx0aWYgKCFjbSlcbiYjNDM7XHRcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDt0aW1lc3RhbXAgbWlzc2luZyBpcCBlcnJcXG5cJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWYgKGNtLVx1MDAzZWNtc2dfbGV2ZWwgIT0gY2ZnX2VycnFfbGV2ZWwgfHxcbiBcdFx0ICAgIGNtLVx1MDAzZWNtc2dfdHlwZSAhPSBjZmdfZXJycV90eXBlKVxuIFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiB0eXBlIDB4JXguMHgleFxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICBjbS1cdTAwM2VjbXNnX2xldmVsLCBjbS1cdTAwM2VjbXNnX3R5cGUpO1xuIFxuIFx0XHRlcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcbi1cdFx0aWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1RYVElNRSlcbiYjNDM7XHRcdGlmIChlcnItXHUwMDNlZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9UWFRJTUUpXG4mIzQzO1x0XHRcdG51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChlcnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIGRhdGFbcmV0IC0gMV0pO1xuJiM0MztcdFx0ZWxzZSBpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HIFx1MDAyNlx1MDAyNiB0c3MpXG4mIzQzO1x0XHRcdGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKGVyciwgdHNzKTtcbiYjNDM7XHRcdGVsc2VcbiBcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogb3JpZ2luIDB4JXhcXG5cJiMzNDssIGVyci1cdTAwM2VlZV9vcmlnaW4pO1xuIFxuLVx0XHRzd2l0Y2ggKGVyci1cdTAwM2VlZV9lcnJubykge1xuLVx0XHRjYXNlIEVDQU5DRUxFRDpcbi1cdFx0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKVxuLVx0XHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IHVua25vd24gRUNBTkNFTEVEICV1XFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHRcdHJlYXNvbiA9IFwmIzM0O21pc3NlZCB0eHRpbWVcJiMzNDs7XG4tXHRcdGJyZWFrO1xuLVx0XHRjYXNlIEVJTlZBTDpcbi1cdFx0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcbi1cdFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0XHRyZWFzb24gPSBcJiMzNDtpbnZhbGlkIHR4dGltZVwmIzM0Oztcbi1cdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2Vycm5vLCBlcnItXHUwMDNlZWVfY29kZSk7XG4tXHRcdH1cbi1cbi1cdFx0dHN0YW1wID0gKChpbnQ2NF90KSBlcnItXHUwMDNlZWVfZGF0YSkgXHUwMDNjXHUwMDNjIDMyIHwgZXJyLVx1MDAzZWVlX2luZm87XG4tXHRcdHRzdGFtcCAtPSAoaW50NjRfdCkgZ2xvYl90c3RhcnQ7XG4tXHRcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3NlbmQ6IHBrdCAlYyBhdCAlXCYjMzQ7IFBSSWQ2NCBcJiMzNDttcyBkcm9wcGVkOiAlc1xcblwmIzM0Oyxcbi1cdFx0XHRkYXRhW3JldCAtIDFdLCB0c3RhbXAsIHJlYXNvbik7XG4tXG4gXHRcdG1zZy5tc2dfZmxhZ3MgPSAwO1xuIFx0XHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XG4tXHRcdG51bV90c3RhbXAmIzQzOyYjNDM7O1xuIFx0fVxuIFxuIFx0cmV0dXJuIG51bV90c3RhbXA7XG5AQCAtMjQ1LDEyICYjNDM7Mjg3LDEzIEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJycXVldWVfbXNncyhpbnQgZmR0KVxuIFx0XHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtwb2xsXCYjMzQ7KTtcbiBcbiBcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgKHBmZC5yZXZlbnRzIFx1MDAyNiBQT0xMRVJSKSlcbi1cdFx0XHRudW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZmR0KTtcbiYjNDM7XHRcdFx0bnVtX3RzdGFtcCAmIzQzOz0gZG9fcmVjdl9lcnJxdWV1ZShmZHQpO1xuIFxuIFx0XHRpZiAobnVtX3RzdGFtcCA9PSBjZmdfbnVtX3BrdClcbiBcdFx0XHRicmVhaztcbiBcbi1cdH0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpIFx1MDAzYyB0ZGVsaXZlcl9tYXgpO1xuJiM0MztcdH0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpIFx1MDAzY1xuJiM0MztcdFx0IHRkZWxpdmVyX21heCAmIzQzOyAoY2ZnX3ZhcmlhbmNlX3VzICogMTAwMCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzdGFydF90aW1lX3dhaXQodm9pZClcbkBAIC0yOTUsNiAmIzQzOzMzOCwxOCBAQCBzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZShpbnQgZmQpXG4gXHRcdGVycm9yKDEsIDAsIFwmIzM0O2dldHNvY2tvcHQgdHh0aW1lOiBtaXNtYXRjaFwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGludCBmZClcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbiYjNDM7XHRcdCAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSB8XG4mIzQzO1x0XHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEIHxcbiYjNDM7XHRcdCAgU09GX1RJTUVTVEFNUElOR19PUFRfVFNPTkxZO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLFxuJiM0MztcdFx0ICAgICAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxuJiM0MztcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3NldHNvY2tvcHQgdGltZXN0YW1waW5nXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4ge1xuIFx0aW50IGZkO1xuQEAgLTMwOCw2ICYjNDM7MzYzLDkgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIFx0c2V0c29ja29wdF90eHRpbWUoZmQpO1xuIFxuJiM0MztcdGlmIChjZmdfdmVyaWZ5X2h3X29mZmxvYWQpXG4mIzQzO1x0XHRzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGZkKTtcbiYjNDM7XG4gXHRpZiAoY2ZnX21hcmsgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgXHUwMDI2Y2ZnX21hcmssIHNpemVvZihjZmdfbWFyaykpKVxuIFx0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c2V0c29ja29wdCBtYXJrXCYjMzQ7KTtcbkBAIC0zMTcsNyAmIzQzOzM3NSw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiBcbiBzdGF0aWMgaW50IHNldHVwX3J4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4ge1xuLVx0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gMTAwICogMTAwMCB9O1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDYwMCAqIDEwMDAgfTtcbiBcdGludCBmZDtcbiBcbiBcdGZkID0gc29ja2V0KGFkZHItXHUwMDNlc2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTtcbkBAIC0zNDgsNiAmIzQzOzQwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX3Rlc3RfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiBcbiBcdHN0YXJ0X3RpbWVfd2FpdCgpO1xuIFx0Z2xvYl90c3RhcnQgPSBnZXR0aW1lX25zKGNmZ19jbG9ja2lkKTtcbiYjNDM7XHRnbG9iX3RzdGFydF9yZWFsID0gZ2V0dGltZV9ucyhDTE9DS19SRUFMVElNRSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjZmdfbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4gXHRcdGRvX3NlbmRfb25lKGZkdCwgXHUwMDI2Y2ZnX2J1ZltpXSk7XG5AQCAtNDQwLDEwICYjNDM7NDk5LDExIEBAIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKVxuIFx0XHRcdFwmIzM0OyAgLTYgICAgICAgICAgICBvbmx5IElQdjZcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIC1jIFx1MDAzY2Nsb2NrXHUwMDNlICAgIG1vbm90b25pYyBvciB0YWkgKGRlZmF1bHQpXFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICAtRCBcdTAwM2NhZGRyXHUwMDNlICAgICBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzIChzZXJ2ZXIpXFxuXCYjMzQ7XG4tXHRcdFx0XCYjMzQ7ICAtUyBcdTAwM2NhZGRyXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcblwmIzM0O1xuJiM0MztcdFx0XHRcJiMzNDsgIC1oICAgICAgICAgICAgdmVyaWZ5IGhhcmR3YXJlIG9mZmxvYWQgKHR4KVxcblwmIzM0O1xuJiM0MztcdFx0XHRcJiMzNDsgIC1tIFx1MDAzY21hcmtcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ICAtciAgICAgICAgICAgIHJ1biByeCBtb2RlXFxuXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0OyAgLVMgXHUwMDNjYWRkclx1MDAzZSAgICAgc291cmNlIElQIGFkZHJlc3MgKGNsaWVudClcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIC10IFx1MDAzY25zZWNcdTAwM2UgICAgIHN0YXJ0IHRpbWUgKFVUQyBuYW5vc2Vjb25kcylcXG5cJiMzNDtcbi1cdFx0XHRcJiMzNDsgIC1tIFx1MDAzY21hcmtcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7XFxuXCYjMzQ7LFxuIFx0XHRcdHByb2duYW1lKTtcbiBcdGV4aXQoMSk7XG5AQCAtNDU1LDcgJiM0Mzs1MTUsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGludCBkb21haW4gPSBQRl9VTlNQRUM7XG4gXHRpbnQgYztcbiBcbi1cdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDs0NmM6UzpEOnJ0Om06XCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7NDZjOkQ6aG06clM6dDpcJiMzNDspKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKGMpIHtcbiBcdFx0Y2FzZSAmIzM5OzQmIzM5OzpcbiBcdFx0XHRpZiAoZG9tYWluICE9IFBGX1VOU1BFQylcbkBAIC00ODIsMjEgJiM0Mzs1NDIsMjQgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7dW5rbm93biBjbG9jayBpZCAlc1wmIzM0Oywgb3B0YXJnKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O1MmIzM5Ozpcbi1cdFx0XHRzYWRkciA9IG9wdGFyZztcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O0QmIzM5OzpcbiBcdFx0XHRkYWRkciA9IG9wdGFyZztcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4mIzQzO1x0XHRcdGNmZ192ZXJpZnlfaHdfb2ZmbG9hZCA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O20mIzM5OzpcbiYjNDM7XHRcdFx0Y2ZnX21hcmsgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTtyJiMzOTs6XG4gXHRcdFx0Y2ZnX3J4ID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtTJiMzOTs6XG4mIzQzO1x0XHRcdHNhZGRyID0gb3B0YXJnO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O3QmIzM5OzpcbiBcdFx0XHRjZmdfc3RhcnRfdGltZV9ucyA9IHN0cnRvbGwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O20mIzM5Ozpcbi1cdFx0XHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XG5pbmRleCBhZGY2Yzg0OGQ2ZDgwZi4uN2I3NWEzM2Y1YzQzZjggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxuQEAgLTEyLDEwICYjNDM7MTIsMTMgQEAgaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF92YXJpYW50c1xuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBLc2Z0U2tpcEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBia2csIGNtZCwgZGVmZXIsIHRjXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBFdGh0b29sRmFtaWx5LCBObEVycm9yXG4gXG4gXG4gZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7TWFpbiBmdW5jdGlvbi4gUnVuIHNvX3R4dGltZSBhcyBzZW5kZXIgYW5kIHJlY2VpdmVyLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG4mIzQzO1xuICAgICBzbG93X21hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgmIzM5O0tTRlRfTUFDSElORV9TTE9XJiMzOTspXG4gXG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXCYjMzQ7YmluX3JlbW90ZVwmIzM0Oyk6XG5AQCAtMzgsNiAmIzQzOzQxLDM0IEBAIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6XG4gICAgICAgICBjbWQoY21kX3R4KVxuIFxuIFxuJiM0MztkZWYgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7Q29uZmlndXJlIHBhY2luZy1vZmZsb2FkLWhvcml6b24uXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBldGhubCA9IEV0aHRvb2xGYW1pbHkoKVxuJiM0MztcbiYjNDM7ICAgIHRyeTpcbiYjNDM7ICAgICAgICByaW5ncyA9IGV0aG5sLnJpbmdzX2dldCh7JiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fX0pXG4mIzQzOyAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzOTtyaW5nLWdldCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSYjMzk7KSBmcm9tIGVcbiYjNDM7XG4mIzQzOyAgICBpZiAmIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5OyBub3QgaW4gcmluZ3Mgb3IgXFxcbiYjNDM7ICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgmIzM5OyBub3QgaW4gcmluZ3M6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3BhY2luZyBvZmZsb2FkIGhvcml6b24gbm90IHN1cHBvcnRlZCBieSBkZXZpY2UmIzM5OylcbiYjNDM7XG4mIzQzOyAgICBpZiByaW5nc1smIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JiMzOTtdIFx1MDAzYyA1MF8wMDA6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3BhY2luZyBvZmZsb2FkIG1heCBob3Jpem9uIHRvbyBzbWFsbCYjMzk7KVxuJiM0MztcbiYjNDM7ICAgIGN1cl9ob3Jpem9uID0gcmluZ3NbJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJiMzOTtdXG4mIzQzOyAgICBuZXdfaG9yaXpvbiA9IDUwXzAwMFxuJiM0MzsgICAgZXRobmwucmluZ3Nfc2V0KHtcbiYjNDM7ICAgICAgICAmIzM5O2hlYWRlciYjMzk7OiB7JiMzOTtkZXYtaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9LFxuJiM0MzsgICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7OiBuZXdfaG9yaXpvbixcbiYjNDM7ICAgIH0pXG4mIzQzOyAgICBkZWZlcihldGhubC5yaW5nc19zZXQsIHtcbiYjNDM7ICAgICAgICAmIzM5O2hlYWRlciYjMzk7OiB7JiMzOTtkZXYtaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9LFxuJiM0MzsgICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7OiBjdXJfaG9yaXpvblxuJiM0MzsgICAgfSlcbiYjNDM7XG4mIzQzO1xuIGRlZiBfcWRpc2Nfc2V0dXAoaWZuYW1lLCBxZGlzYywgb3B0YXJncz1cJiMzNDtcJiMzNDspOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXBsYWNlIHJvb3QgcWRpc2MuIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGFmdGVyIHRoZSB0ZXN0LlxuIFxuQEAgLTU2LDYgJiM0Mzs4Nyw3IEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxuICAgICAgICAgICAgIFtcJiMzNDtvbmVfcGt0XCYjMzQ7LCBcJiMzNDthLDEwXCYjMzQ7LCBcJiMzNDthLDEwXCYjMzQ7XSxcbiAgICAgICAgICAgICBbXCYjMzQ7aW5fb3JkZXJcJiMzNDssIFwmIzM0O2EsMTAsYiwyMFwmIzM0OywgXCYjMzQ7YSwxMCxiLDIwXCYjMzQ7XSxcbiAgICAgICAgICAgICBbXCYjMzQ7cmV2ZXJzZV9vcmRlclwmIzM0OywgXCYjMzQ7YSwyMCxiLDEwXCYjMzQ7LCBcJiMzNDtiLDEwLGEsMjBcJiMzNDtdLFxuJiM0MzsgICAgICAgICAgICBbXCYjMzQ7YmV5b25kX2h3X2hvcml6b25cJiMzNDssIFwmIzM0O2EsNzBcJiMzNDssIFwmIzM0O2EsNzBcJiMzNDtdLFxuICAgICAgICAgXTpcbiAgICAgICAgICAgICBuYW1lID0gZlwmIzM0O3Z7aXB2ZXJ9X3t0ZXN0Y2FzZVswXX1cJiMzNDtcbiAgICAgICAgICAgICB5aWVsZCBLc2Z0TmFtZWRWYXJpYW50KG5hbWUsIGlwdmVyLCB0ZXN0Y2FzZVsxXSwgdGVzdGNhc2VbMl0pXG5AQCAtNjQsMTUgJiM0Mzs5Niw0MiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZnEoKTpcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyAoZnEpIHRlc3RzLlwmIzM0O1wmIzM0O1wmIzM0O1xuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O2ZxXCYjMzQ7KVxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwmIzM0O21vbm9cJiMzNDssIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxuIFxuIFxuJiM0MztAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuJiM0MztkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIGZxIHRlc3RzLCB3aXRoIG9mZmxvYWQgaG9yaXpvbi5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxuJiM0MztcbiYjNDM7ICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxuJiM0MzsgICAgdHJ5OlxuJiM0MzsgICAgICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcJiMzNDtmcVwmIzM0OywgXCYjMzQ7b2ZmbG9hZF9ob3Jpem9uIDUwbXNcJiMzNDspXG4mIzQzOyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtuZXRkZXYgZG9lcyBub3Qgc3VwcG9ydCBvZmZsb2FkLiBza2lwcGluZ1wmIzM0OykgZnJvbSBlXG4mIzQzO1xuJiM0MzsgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHVzZSBvbmx5IGh3IHBhY2luZywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uLlxuJiM0MzsgICAgaHdfb25seSA9IFwmIzM0Oy1oXCYjMzQ7IGlmIGFyZ3NfdHggIT0gXCYjMzQ7YSw3MFwmIzM0OyBlbHNlIFwmIzM0O1wmIzM0O1xuJiM0MzsgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcJiMzNDttb25vXCYjMzQ7LCBpcHZlciwgZlwmIzM0O3tod19vbmx5fSB7YXJnc190eH1cJiMzNDssIGFyZ3NfcngsIFRydWUpXG4mIzQzO1xuJiM0MztcbiYjNDM7QGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbiYjNDM7ZGVmIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgdGVzdHMsIHdpdGhvdXQgZnEgcGFjaW5nIHN3IGJhY2t1cC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxuJiM0MztcbiYjNDM7ICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxuJiM0MzsgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O3BmaWZvX2Zhc3RcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHBhc3MsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbiB3aXRob3V0IHN3IGZhbGxiYWNrLlxuJiM0MzsgICAgZXhwZWN0X3Bhc3MgPSBub3QgYXJnc190eCA9PSBcJiMzNDthLDcwXCYjMzQ7XG4mIzQzOyAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwmIzM0O21vbm9cJiMzNDssIGlwdmVyLCBmXCYjMzQ7LWgge2FyZ3NfdHh9XCYjMzQ7LCBhcmdzX3J4LCBleHBlY3RfcGFzcylcbiYjNDM7XG4mIzQzO1xuIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaShjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBmcSB0ZXN0cywgYnV0IHBhc3MgQ0xPQ0tfVEFJIHRvIHRlc3QgY29udmVyc2lvbi5cJiMzNDtcJiMzNDtcJiMzNDtcbi0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG4gICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcJiMzNDtmcVwmIzM0OylcbiAgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcJiMzNDt0YWlcJiMzNDssIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxuIFxuQEAgLTk1LDcgJiM0MzsxNTQsNiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZXRmKCk6XG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZXRmKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2V0ZihjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3RfZmFpbCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgZXRmIHRlc3RzLlwmIzM0O1wmIzM0O1wmIzM0O1xuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgdHJ5OlxuICAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O2V0ZlwmIzM0OywgXCYjMzQ7Y2xvY2tpZCBDTE9DS19UQUkgZGVsdGEgNDAwMDAwXCYjMzQ7KVxuICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG5AQCAtMTA4LDcgJiM0MzsxNjYsMTMgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O0JvaWxlcnBsYXRlIGtzZnQgbWFpbi5cJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuICAgICAgICAga3NmdF9ydW4oXG4tICAgICAgICAgICAgW3Rlc3Rfc29fdHh0aW1lX2ZxX21vbm8sIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwgdGVzdF9zb190eHRpbWVfZXRmXSxcbiYjNDM7ICAgICAgICAgICAgW1xuJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ubyxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcsXG4mIzQzOyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2V0ZixcbiYjNDM7ICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSxcbiAgICAgICAgIClcbiAgICAga3NmdF9leGl0KClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICAgJiMzNDtORVRfUEtUR0VOJiMzNDssCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZxX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2ZxX2NsYXNzaWZ5JiMzNDssCiAgICAmIzM0O2V0aG5sX3NldF9yaW5ncyYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCBtb2RpZmllcyB0aGUgY29yZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKHNjaF9mcS5jKSwgdGhlIHBhY2tldCBnZW5lcmF0b3IgKHBrdGdlbi5jKSwgYW5kIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIChyaW5ncy5jKSB0byBzdXBwb3J0IGNvbmZpZ3VyaW5nIGFuZCB1c2luZyB0aGlzIGhvcml6b24uIFRoZXNlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgdG8gdGhlIGlkcGYgZHJpdmVyIGFyZSBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgbm90IGVtdWxhdGVkLCBidXQgdGhlIGNvcmUgY2hhbmdlcyBhcmUgc3VmZmljaWVudCB0byB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNmQzMmI3Mzk1ODQ1NTk1NThlOTY0YTJkNzAzYjc5ZjIyNDhiNGJhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMDc6Mjk6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAppbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uYzc4MDY4NGNhMWJjMGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbApAQCAtNDQ4LDYgJiM0Mzs0NDgsMTIgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAtCiAgICAgICAgIG5hbWU6IGhkcy10aHJlc2gtbWF4CiAgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHBhY2luZy1vZmZsb2FkLWhvcml6b24KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHBhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4CiYjNDM7ICAgICAgICB0eXBlOiB1MzIKIAogICAtCiAgICAgbmFtZTogbW0tc3RhdApAQCAtMjE2OCw2ICYjNDM7MjE3NCw4IEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIHR4LXB1c2gtYnVmLWxlbi1tYXgKICAgICAgICAgICAgIC0gaGRzLXRocmVzaAogICAgICAgICAgICAgLSBoZHMtdGhyZXNoLW1heAomIzQzOyAgICAgICAgICAgIC0gcGFjaW5nLW9mZmxvYWQtaG9yaXpvbgomIzQzOyAgICAgICAgICAgIC0gcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgKICAgICAgIGR1bXA6ICpyaW5nLWdldC1vcAogICAgIC0KICAgICAgIG5hbWU6IHJpbmdzLXNldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0CmluZGV4IDUxMmY2ZDZmYTNkOGY4Li4zYjljZTFjNmUxMDU3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdApAQCAtMTgzLDcgJiM0MzsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnQKIHN0cnVjdCBkcGxsX3BpbiogICAgICAgICAgICAgICAgICAgIGRwbGxfcGluCiBzdHJ1Y3QgaGxpc3RfaGVhZCAgICAgICAgICAgICAgICAgICBwYWdlX3Bvb2xzCiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXIKLXU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uCiYjNDM7dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjaW5nX29mZmxvYWRfaG9yaXpvbgomIzQzO3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uCiBzdHJ1Y3RfbmFwaV9jb25maWcqICAgICAgICAgICAgICAgICBuYXBpX2NvbmZpZwogdW5zaWduZWRfbG9uZyAgICAgICAgICAgICAgICAgICAgICAgZ3JvX2ZsdXNoX3RpbWVvdXQKIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcGlfZGVmZXJfaGFyZF9pcnFzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYwppbmRleCBiYjk5ZDllN2M2NWQ1MS4uNWRkZjM0NzkyN2RjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYwpAQCAtMTgwMSw3ICYjNDM7MTgwMSw4IEBAIHN0YXRpYyB2b2lkIGlkcGZfZ2V0X3RzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7CiAJLnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHwKIAkJCQkgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLAotCS5zdXBwb3J0ZWRfcmluZ19wYXJhbXMJPSBFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElULAomIzQzOwkuc3VwcG9ydGVkX3JpbmdfcGFyYW1zCT0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCB8CiYjNDM7CQkJCSAgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLAogCS5nZXRfbXNnbGV2ZWwJCT0gaWRwZl9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBpZHBmX3NldF9tc2dsZXZlbCwKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwppbmRleCBjZjk2NmZlNmM3NTljZS4uZGU0MTcwYzJhYTNiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMKQEAgLTg4OCw2ICYjNDM7ODg4LDExIEBAIHN0YXRpYyBpbnQgaWRwZl9jZmdfbmV0ZGV2KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCkKIAluZXRkZXYtJmd0O21pbl9tdHUgPSBFVEhfTUlOX01UVTsKIAluZXRkZXYtJmd0O21heF9tdHUgPSB2cG9ydC0mZ3Q7bWF4X210dTsKIAomIzQzOwlpZiAoaWRwZl9pc19xdWV1ZV9tb2RlbF9zcGxpdCh2cG9ydC0mZ3Q7ZGZsdF9xdl9yc3JjLnR4cV9tb2RlbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlkcGZfaXNfY2FwX2VuYShhZGFwdGVyLCBJRFBGX09USEVSX0NBUFMsCiYjNDM7CQkJICAgIFZJUlRDSE5MMl9DQVBfU1BMSVRRX1FTQ0hFRCkpCiYjNDM7CQluZXRkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gMTI4MDAwOwomIzQzOwogCWRmbHRfZmVhdHVyZXMgPSBORVRJRl9GX1NHCXwKIAkJCU5FVElGX0ZfSElHSERNQTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjhmMTFkZTU3YzhiYzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKQEAgLTEsNiAmIzQzOzEsOCBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogLyogQ29weXJpZ2h0IChDKSAyMDIzIEludGVsIENvcnBvcmF0aW9uICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0cG9sbC5oJmd0OwomIzQzOwogI2luY2x1ZGUgJiMzNDtpZHBmLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpZHBmX3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aWRwZl92aXJ0Y2hubC5oJiMzNDsKQEAgLTI0MDgsOSAmIzQzOzI0MTAsMTMgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsCiAJCQkJICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcywKIAkJCQkgICAgdTE2IHRkX2NtZCwgdTE2IHNpemUpCiB7Ci0JKih1MzIgKikmYW1wO2Rlc2MtJmd0O2Zsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLSZndDtkdHlwZSB8IHRkX2NtZCk7CiYjNDM7CSooX19sZTMyICopJmFtcDtkZXNjLSZndDtmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy0mZ3Q7ZHR5cGUgfCB0ZF9jbWQpKTsKIAlkZXNjLSZndDtmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7CiAJZGVzYy0mZ3Q7Zmxvdy5xdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYocGFyYW1zLSZndDtjb21wbF90YWcpOwomIzQzOwomIzQzOwlkZXNjLSZndDtmbG93LnF3MS50c1swXSA9IHBhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzBdOwomIzQzOwlkZXNjLSZndDtmbG93LnF3MS50c1sxXSA9IHBhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzFdOwomIzQzOwlkZXNjLSZndDtmbG93LnF3MS50c1syXSA9IHBhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzJdOwogfQogCiAvKioKQEAgLTMwMTEsNiAmIzQzOzMwMTcsNjMgQEAgc3RhdGljIGJvb2wgaWRwZl90eF9zcGxpdHFfbmVlZF9yZShzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSkKIAlyZXR1cm4gZ2FwICZndDs9IElEUEZfVFhfU1BMSVRRX1JFX01JTl9HQVA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp0eF9xLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpCiYjNDM7ewomIzQzOwljb25zdCBpbnQgdHNfZ3Jhbl9wb3cyID0gOTsKJiM0MzsJdTY0IHRzLCBub3csIGhvcml6b247CiYjNDM7CiYjNDM7CWhvcml6b24gPSBSRUFEX09OQ0Uoc2tiLSZndDtkZXYtJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pOwomIzQzOwlpZiAoIWhvcml6b24pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIFNraXAgaWYgbmV0cG9sbDogbm90IG5lZWRlZCBhbmQgbm90IHNhZmUgdG8gY2FsbCBrdGltZSBoZWxwZXJzICovCiYjNDM7CWlmIChuZXRwb2xsX3R4X3J1bm5pbmcoc2tiLSZndDtkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNrYi0mZ3Q7dHN0YW1wX3R5cGUpIHsKJiM0MzsJY2FzZSBTS0JfQ0xPQ0tfUkVBTFRJTUU6CiYjNDM7CQl0cyA9IGt0aW1lX3RvX25zKGt0aW1lX2FkZChza2ItJmd0O3RzdGFtcCwKJiM0MzsJCQkJCSAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtCiYjNDM7CQkJCQkgICBrdGltZV9tb25vX3RvX2FueSgwLCBUS19PRkZTX1JFQUwpKSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTS0JfQ0xPQ0tfTU9OT1RPTklDOgomIzQzOwkJdHMgPSBrdGltZV90b19ucyhrdGltZV9tb25vX3RvX2FueShza2ItJmd0O3RzdGFtcCwgVEtfT0ZGU19UQUkpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNLQl9DTE9DS19UQUk6CiYjNDM7CQl0cyA9IGt0aW1lX3RvX25zKHNrYi0mZ3Q7dHN0YW1wKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJV0FSTl9PTl9PTkNFKDEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CW5vdyA9IGt0aW1lX2dldF9jbG9ja3RhaV9ucygpOwomIzQzOwlpZiAodHMgJmx0OyBub3cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIGJleW9uZCBvZmZsb2FkIGhvcml6b24/IHNldCBvdmVyZmxvdyBiaXQgb25seSAqLwomIzQzOwlpZiAodHMgJmd0OyBub3cgJiM0MzsgKGhvcml6b24gKiBOU0VDX1BFUl9VU0VDKSkgewomIzQzOwkJdHhfcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMl0gPSAxICZsdDsmbHQ7IDc7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHMgJmd0OyZndDs9IHRzX2dyYW5fcG93MjsKJiM0MzsKJiM0MzsJLyogMCBpcyB2YWxpZCAyNGIgdGltZXN0YW1wLCBidXQgYWxzbyBtZWFucyBmaWVsZCB1bnNldC4KJiM0MzsJICogQWRkIDUxMiBucyAodHNfZ3Jhbl9wb3cyKSB0byBhdm9pZCB0aGlzIGNhc2UKJiM0MzsJICovCiYjNDM7CWlmICgodHMgJmFtcDsgMHg3ZmZmZmYpID09IDApIHsKJiM0MzsJCXR4X3BhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzBdID0gMTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl0eF9wYXJhbXMtJmd0O29mZmxvYWQuZGVzY190c1swXSA9IHRzICZhbXA7IDB4ZmY7CiYjNDM7CXR4X3BhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzFdID0gKHRzICZndDsmZ3Q7IDgpICZhbXA7IDB4ZmY7CiYjNDM7CXR4X3BhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHg3Zik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpZHBmX3R4X3NwbGl0cV9mcmFtZSAtIFNlbmRzIGJ1ZmZlciBvbiBUeCByaW5nIHVzaW5nIGZsZXggZGVzY3JpcHRvcnMKICAqIEBza2I6IHNlbmQgYnVmZmVyCkBAIC0zMDk3LDYgJiM0MzszMTYwLDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpZHBmX3R4X3NwbGl0cV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJCXR4X3BhcmFtcy5kdHlwZSA9IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRTsKIAkJdHhfcGFyYW1zLmVvcF9jbWQgPSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDsKJiM0MzsKJiM0MzsJCWlmIChza2ItJmd0O3RzdGFtcCkKJiM0MzsJCQlpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKHR4X3EsIHNrYiwgJmFtcDt0eF9wYXJhbXMpOwomIzQzOwogCQkvKiBTZXQgdGhlIFJFIGJpdCB0byBwZXJpb2RpY2FsbHkgJiMzNDtjbGVhbiYjMzQ7IHRoZSBkZXNjcmlwdG9yIHJpbmcuCiAJCSAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0CiAJCSAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oCmluZGV4IDRiZTViM2I2ZDNlZDJiLi44NjU0MDhiNTdiMGQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oCkBAIC0xNjEsNiAmIzQzOzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHsKICAqIEB0c29fc2VnczogTnVtYmVyIG9mIHNlZ21lbnRzIHRvIGJlIHNlbnQKICAqIEB0c29faGRyX2xlbjogTGVuZ3RoIG9mIGhlYWRlcnMgdG8gYmUgZHVwbGljYXRlZAogICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3IKJiM0MzsgKiBAZGVzY190czogRmxvdyBzY2hlZHVsaW5nIG9mZmxvYWQgdGltZXN0YW1wCiAgKi8KIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHsKIAl1MzIgdHhfZmxhZ3M7CkBAIC0xNzQsNiAmIzQzOzE3NSw3IEBAIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHsKIAl1MTYgdHNvX2hkcl9sZW47CiAKIAl1MTYgdGRfY21kOwomIzQzOwl1OCBkZXNjX3RzWzNdOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTg1LDYgJiM0Mzs4NSw4IEBAIGVudW0gewogICogQHR4X3B1c2hfYnVmX21heF9sZW46IE1heGltdW0gYWxsb3dlZCBzaXplIG9mIFRYIHB1c2ggYnVmZmVyCiAgKiBAaGRzX3RocmVzaDogUGFja2V0IHNpemUgdGhyZXNob2xkIGZvciBoZWFkZXIgZGF0YSBzcGxpdCAoSERTKQogICogQGhkc190aHJlc2hfbWF4OiBNYXhpbXVtIHN1cHBvcnRlZCBzZXR0aW5nIGZvciBAaGRzX3RocmVzaG9sZAomIzQzOyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWMKJiM0MzsgKiBAbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b246IG1heCBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWMKICAqCiAgKi8KIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gewpAQCAtOTcsNiAmIzQzOzk5LDggQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7CiAJdTMyCXR4X3B1c2hfYnVmX21heF9sZW47CiAJdTMyCWhkc190aHJlc2g7CiAJdTMyCWhkc190aHJlc2hfbWF4OwomIzQzOwl1MzIJcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKJiM0MzsJdTMyCW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOwogfTsKIAogLyoqCkBAIC0xMDgsNiAmIzQzOzExMiw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gewogICogQEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOOiBjYXB0dXJlIGZvciBzZXR0aW5nIHR4X3B1c2hfYnVmX2xlbgogICogQEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQ6IGNhcHR1cmUgZm9yIHNldHRpbmcgdGNwX2RhdGFfc3BsaXQKICAqIEBFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTOiBjYXB0dXJlIGZvciBzZXR0aW5nIGhlYWRlci1kYXRhLXNwbGl0LXRocmVzaAomIzQzOyAqIEBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT046IGNhcHR1cmUgZm9yIHNldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbgogICovCiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0gewogCUVUSFRPT0xfUklOR19VU0VfUlhfQlVGX0xFTgkJPSBCSVQoMCksCkBAIC0xMTcsNiAmIzQzOzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7CiAJRVRIVE9PTF9SSU5HX1VTRV9UWF9QVVNIX0JVRl9MRU4JPSBCSVQoNCksCiAJRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVAkJPSBCSVQoNSksCiAJRVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUwkJPSBCSVQoNiksCiYjNDM7CUVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTgk9IEJJVCg3KSwKIH07CiAKICNkZWZpbmUgX19FVEhfUlNTX0hBU0hfQklUKGJpdCkJKCh1MzIpMSAmbHQ7Jmx0OyAoYml0KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0yMTI5LDcgJiM0MzsyMTI5LDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHsKICAqCUBkcGxsX3BpbjogUG9pbnRlciB0byB0aGUgU3luY0Ugc291cmNlIHBpbiBvZiBhIERQTEwgc3Vic3lzdGVtLAogICoJCSAgIHdoZXJlIHRoZSBjbG9jayBpcyByZWNvdmVyZWQuCiAgKgotICoJQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggRURUIG9mZmxvYWQgaG9yaXpvbiBpbiBuc2VjLgomIzQzOyAqCUBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBhY3RpdmUgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLgomIzQzOyAqCUBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy4KICAqCUBuYXBpX2NvbmZpZzogQW4gYXJyYXkgb2YgbmFwaV9jb25maWcgc3RydWN0dXJlcyBjb250YWluaW5nIHBlci1OQVBJCiAgKgkJICAgICAgc2V0dGluZ3MuCiAgKglAbnVtX25hcGlfY29uZmlnczoJbnVtYmVyIG9mIGFsbG9jYXRlZCBOQVBJIGNvbmZpZyBzdHJ1Y3RzLApAQCAtMjU1Miw3ICYjNDM7MjU1Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHsKIAkvKiogQGlycV9tb2RlcjogZGltIHBhcmFtZXRlcnMgdXNlZCBpZiBJU19FTkFCTEVEKENPTkZJR19ESU1MSUIpLiAqLwogCXN0cnVjdCBkaW1faXJxX21vZGVyCSppcnFfbW9kZXI7CiAKLQl1NjQJCQltYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKJiM0MzsJdTMyCQkJcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKJiM0MzsJdTMyCQkJbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247CiAJc3RydWN0IG5hcGlfY29uZmlnCSpuYXBpX2NvbmZpZzsKIAl1MzIJCQludW1fbmFwaV9jb25maWdzOwogCXUzMgkJCW5hcGlfZGVmZXJfaGFyZF9pcnFzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKQEAgLTE5Myw2ICYjNDM7MTkzLDggQEAgZW51bSB7CiAJRVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVgsCiAJRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsCiAJRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLAomIzQzOwlFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTiwKJiM0MzsJRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLAogCiAJX19FVEhUT09MX0FfUklOR1NfQ05ULAogCUVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggNWI0ZGQwNGQ2MTI0NzYuLjc4OTdlNDIyMDUxMzAwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMjAxLDYgJiM0MzsyMDEsNyBAQAogCXBmKFNWSURfUk5EKQkJLyogUmFuZG9tIFNWTEFOIElEICovCQkJXAogCXBmKE5PREUpCQkvKiBOb2RlIG1lbW9yeSBhbGxvYyovCQkJXAogCXBmKFNIQVJFRCkJCS8qIFNoYXJlZCBTS0IgKi8JCQlcCiYjNDM7CXBmKFRYVElNRSkJCS8qIFNPX1RYVElNRSBzdXBwb3J0ICovCQkJXAogCiAjZGVmaW5lIHBmKGZsYWcpCQlmbGFnIyNfU0hJRlQsCiBlbnVtIHBrdF9mbGFncyB7CkBAIC0yOTEsNiAmIzQzOzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdTY0IGRlbGF5OwkJLyogbmFuby1zZWNvbmRzICovCiAKJiM0MzsJLyogVFhUSU1FIHN1cHBvcnQgKi8KJiM0MzsJdTY0IHR4dGltZV9kZWxheTsJLyogdHJhbnNtaXQgdGltZSBkZWxheSBpbiBucyAqLwomIzQzOwljbG9ja2lkX3QgdHh0aW1lX2Nsb2NraWQ7IC8qIGNsb2NraWQgZm9yIFNPX1RYVElNRSAqLwomIzQzOwogCV9fdTY0IGNvdW50OwkJLyogRGVmYXVsdCBObyBwYWNrZXRzIHRvIHNlbmQgKi8KIAlfX3U2NCBzb2ZhcjsJCS8qIEhvdyBtYW55IHBrdHMgd2UmIzM5O3ZlIHNlbnQgc28gZmFyICovCiAJX191NjQgdHhfYnl0ZXM7CQkvKiBIb3cgbWFueSBieXRlcyB3ZSYjMzk7dmUgdHJhbnNtaXR0ZWQgKi8KQEAgLTY2Niw2ICYjNDM7NjcxLDE3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiAJaWYgKHBrdF9kZXYtJmd0O25vZGUgJmd0Oz0gMCkKIAkJc2VxX3ByaW50ZihzZXEsICYjMzQ7ICAgICBub2RlOiAlZFxuJiMzNDssIHBrdF9kZXYtJmd0O25vZGUpOwogCiYjNDM7CWlmIChwa3RfZGV2LSZndDtmbGFncyAmYW1wOyBGX1RYVElNRSkgewomIzQzOwkJY2xvY2tpZF90IGNsb2NraWQgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2Nsb2NraWQpOwomIzQzOwomIzQzOwkJc2VxX3ByaW50ZihzZXEsICYjMzQ7ICAgICB0eHRpbWVfZGVsYXk6ICVsbHVcbiYjMzQ7LAomIzQzOwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGt0X2Rldi0mZ3Q7dHh0aW1lX2RlbGF5KTsKJiM0MzsJCXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgdHh0aW1lX2Nsb2NraWQ6ICVzXG4mIzM0OywKJiM0MzsJCQkgICBjbG9ja2lkID09IENMT0NLX01PTk9UT05JQyA/ICYjMzQ7bW9ub3RvbmljJiMzNDsgOgomIzQzOwkJCSAgIGNsb2NraWQgPT0gQ0xPQ0tfUkVBTFRJTUUgPyAmIzM0O3JlYWx0aW1lJiMzNDsgOgomIzQzOwkJCSAgIGNsb2NraWQgPT0gQ0xPQ0tfVEFJID8gJiMzNDt0YWkmIzM0OyA6ICYjMzQ7dW5rbm93biYjMzQ7KTsKJiM0MzsJfQomIzQzOwogCWlmIChwa3RfZGV2LSZndDt4bWl0X21vZGUgPT0gTV9ORVRJRl9SRUNFSVZFKQogCQlzZXFfcHV0cyhzZXEsICYjMzQ7ICAgICB4bWl0X21vZGU6IG5ldGlmX3JlY2VpdmVcbiYjMzQ7KTsKIAllbHNlIGlmIChwa3RfZGV2LSZndDt4bWl0X21vZGUgPT0gTV9RVUVVRV9YTUlUKQpAQCAtMTE0MSw2ICYjNDM7MTE1Nyw1MCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LSZndDtkZWxheSk7CiAJCXJldHVybiBjb3VudDsKIAl9CiYjNDM7CWlmICghc3RyY21wKG5hbWUsICYjMzQ7dHh0aW1lX2RlbGF5JiMzNDspKSB7CiYjNDM7CQltYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7CiYjNDM7CQlsZW4gPSBudW1fYXJnKCZhbXA7dXNlcl9idWZmZXJbaV0sIG1heCwgJmFtcDt2YWx1ZSk7CiYjNDM7CQlpZiAobGVuICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gbGVuOwomIzQzOwomIzQzOwkJLyogaW4gcXVldWVfeG1pdCBtb2RlIGZxIG1heSBjbGVhciB0c3RhbXAsIGRvIG5vdCByZXVzZSBza2IgKi8KJiM0MzsJCWlmICh2YWx1ZSAmZ3Q7IDAgJmFtcDsmYW1wOyBwa3RfZGV2LSZndDtjbG9uZV9za2IgJmd0OyAwKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJV1JJVEVfT05DRShwa3RfZGV2LSZndDt0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpOwomIzQzOwkJc3ByaW50ZihwZ19yZXN1bHQsICYjMzQ7T0s6IHR4dGltZV9kZWxheT0lbGx1JiMzNDssCiYjNDM7CQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSk7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KJiM0MzsJaWYgKCFzdHJjbXAobmFtZSwgJiMzNDt0eHRpbWVfY2xvY2tpZCYjMzQ7KSkgewomIzQzOwkJY2hhciBjbG9ja3N0clszMl07CiYjNDM7CQljbG9ja2lkX3QgY2xrOwomIzQzOwomIzQzOwkJbWVtc2V0KGNsb2Nrc3RyLCAwLCBzaXplb2YoY2xvY2tzdHIpKTsKJiM0MzsJCW1heCA9IG1pbihzaXplb2YoY2xvY2tzdHIpIC0gMSwgY291bnQgLSBpKTsKJiM0MzsJCWxlbiA9IHN0cm5fbGVuKCZhbXA7dXNlcl9idWZmZXJbaV0sIG1heCk7CiYjNDM7CQlpZiAobGVuICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gbGVuOwomIzQzOwomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKGNsb2Nrc3RyLCAmYW1wO3VzZXJfYnVmZmVyW2ldLCBsZW4pKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwkJaWYgKCFzdHJjbXAoY2xvY2tzdHIsICYjMzQ7bW9ub3RvbmljJiMzNDspKSB7CiYjNDM7CQkJY2xrID0gQ0xPQ0tfTU9OT1RPTklDOwomIzQzOwkJfSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCAmIzM0O3JlYWx0aW1lJiMzNDspKSB7CiYjNDM7CQkJY2xrID0gQ0xPQ0tfUkVBTFRJTUU7CiYjNDM7CQl9IGVsc2UgaWYgKCFzdHJjbXAoY2xvY2tzdHIsICYjMzQ7dGFpJiMzNDspKSB7CiYjNDM7CQkJY2xrID0gQ0xPQ0tfVEFJOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtFUlJPUjogdW5rbm93biBjbG9ja2lkICYjMzk7JXMmIzM5OyYjMzQ7LAomIzQzOwkJCQljbG9ja3N0cik7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlzcHJpbnRmKHBnX3Jlc3VsdCwgJiMzNDtPSzogdHh0aW1lX2Nsb2NraWQ9JXMmIzM0OywgY2xvY2tzdHIpOwomIzQzOwkJV1JJVEVfT05DRShwa3RfZGV2LSZndDt0eHRpbWVfY2xvY2tpZCwgY2xrKTsKJiM0MzsJCXJldHVybiBjb3VudDsKJiM0MzsJfQogCWlmICghc3RyY21wKG5hbWUsICYjMzQ7cmF0ZSYjMzQ7KSkgewogCQltYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7CiAJCWxlbiA9IG51bV9hcmcoJmFtcDt1c2VyX2J1ZmZlcltpXSwgbWF4LCAmYW1wO3ZhbHVlKTsKQEAgLTEyMzgsNiAmIzQzOzEyOTgsOCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJCWlmICh2YWx1ZSAmZ3Q7IDAgJmFtcDsmYW1wOyAocGt0X2Rldi0mZ3Q7bl9pbWl4X2VudHJpZXMgJmd0OyAwIHx8CiAJCQkJICAhKHBrdF9kZXYtJmd0O2ZsYWdzICZhbXA7IEZfU0hBUkVEKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmICh2YWx1ZSAmZ3Q7IDAgJmFtcDsmYW1wOyBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2RlbGF5KSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlwa3RfZGV2LSZndDtjbG9uZV9za2IgPSB2YWx1ZTsKIApAQCAtMjMyMSw2ICYjNDM7MjM4MywyMSBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fc2V0dXBfaW5qZWN0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogfQogCiAKJiM0MztzdGF0aWMga3RpbWVfdCBrdGltZV9nZXRfY2xvY2soY2xvY2tpZF90IGNsb2NraWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNsb2NraWQpIHsKJiM0MzsJY2FzZSBDTE9DS19SRUFMVElNRToKJiM0MzsJCXJldHVybiBrdGltZV9nZXRfcmVhbCgpOwomIzQzOwljYXNlIENMT0NLX01PTk9UT05JQzoKJiM0MzsJCXJldHVybiBrdGltZV9nZXQoKTsKJiM0MzsJY2FzZSBDTE9DS19UQUk6CiYjNDM7CQlyZXR1cm4ga3RpbWVfZ2V0X2Nsb2NrdGFpKCk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQlyZXR1cm4ga3RpbWVfZ2V0KCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpCiB7CiAJa3RpbWVfdCBzdGFydF90aW1lLCBlbmRfdGltZTsKQEAgLTM1MTAsNyAmIzQzOzM1ODcsOCBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fd2FpdF9mb3Jfc2tiKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogCiBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKLQlib29sIHNrYl9zaGFyZWQgPSAhIShSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7ZmxhZ3MpICZhbXA7IEZfU0hBUkVEKTsKJiM0MzsJdTMyIGZsYWdzID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O2ZsYWdzKTsKJiM0MzsJYm9vbCBza2Jfc2hhcmVkID0gISEoZmxhZ3MgJmFtcDsgRl9TSEFSRUQpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpvZGV2ID0gcGt0X2Rldi0mZ3Q7b2RldjsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJdW5zaWduZWQgaW50IGJ1cnN0ID0gMTsKQEAgLTM1NDUsNiAmIzQzOzM2MjMsOCBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAkvKiBJZiBubyBza2Igb3IgY2xvbmUgY291bnQgZXhoYXVzdGVkIHRoZW4gZ2V0IG5ldyBvbmUgKi8KIAlpZiAoIXBrdF9kZXYtJmd0O3NrYiB8fCAocGt0X2Rldi0mZ3Q7bGFzdF9vayAmYW1wOyZhbXA7CiAJCQkgICAgICAmIzQzOyYjNDM7cGt0X2Rldi0mZ3Q7Y2xvbmVfY291bnQgJmd0Oz0gY2xvbmVfc2tiKSkgewomIzQzOwkJdTY0IHR4dGltZV9kZWxheTsKJiM0MzsKIAkJLyogYnVpbGQgYSBuZXcgcGt0ICovCiAJCWtmcmVlX3NrYihwa3RfZGV2LSZndDtza2IpOwogCkBAIC0zNTU3LDYgJiM0MzszNjM3LDE2IEBAIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogCQl9CiAJCXBrdF9kZXYtJmd0O2xhc3RfcGt0X3NpemUgPSBwa3RfZGV2LSZndDtza2ItJmd0O2xlbjsKIAkJcGt0X2Rldi0mZ3Q7Y2xvbmVfY291bnQgPSAwOwkvKiByZXNldCBjb3VudGVyICovCiYjNDM7CiYjNDM7CQl0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2RlbGF5KTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBGX1RYVElNRSAmYW1wOyZhbXA7IHR4dGltZV9kZWxheSkgewomIzQzOwkJCWNsb2NraWRfdCBjbGsgPSBSRUFEX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2Nsb2NraWQpOwomIzQzOwkJCWt0aW1lX3QgdHh0aW1lID0ga3RpbWVfYWRkX25zKGt0aW1lX2dldF9jbG9jayhjbGspLAomIzQzOwkJCQkJCSAgICAgIHR4dGltZV9kZWxheSk7CiYjNDM7CiYjNDM7CQkJc2tiX3NldF9kZWxpdmVyeV90eXBlX2J5X2Nsb2NraWQocGt0X2Rldi0mZ3Q7c2tiLCB0eHRpbWUsCiYjNDM7CQkJCQkJCSBjbGspOwomIzQzOwkJfQogCX0KIAogCWlmIChwa3RfZGV2LSZndDtkZWxheSAmYW1wOyZhbXA7IHBrdF9kZXYtJmd0O2xhc3Rfb2spCkBAIC0zODY5LDYgJiM0MzszOTU5LDcgQEAgc3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKQogCXBrdF9kZXYtJmd0O2J1cnN0ID0gMTsKIAlwa3RfZGV2LSZndDtub2RlID0gTlVNQV9OT19OT0RFOwogCXBrdF9kZXYtJmd0O2ZsYWdzID0gRl9TSEFSRUQ7CS8qIFNLQiBzaGFyZWQgYnkgZGVmYXVsdCAqLwomIzQzOwlwa3RfZGV2LSZndDt0eHRpbWVfY2xvY2tpZCA9IENMT0NLX01PTk9UT05JQzsKIAogCWVyciA9IHBrdGdlbl9zZXR1cF9kZXYodC0mZ3Q7bmV0LCBwa3RfZGV2LCBpZm5hbWUpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDMxYzY1YTU0NWExMDdjLi4yYzdhMjQ1YzVmZmMyZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTIxNTUsNyAmIzQzOzIxNTUsNyBAQCBzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX1RTT19NQVhfU0VHUywKIAkJCVJFQURfT05DRShkZXYtJmd0O3Rzb19tYXhfc2VncykpIHx8CiAJICAgIG5sYV9wdXRfdWludChza2IsIElGTEFfTUFYX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sCi0JCQkgUkVBRF9PTkNFKGRldi0mZ3Q7bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fAomIzQzOwkJCSAodTY0KVJFQURfT05DRShkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSAqIE5TRUNfUEVSX1VTRUMpIHx8CiAjaWZkZWYgQ09ORklHX1JQUwogCSAgICBubGFfcHV0X3UzMihza2IsIElGTEFfTlVNX1JYX1FVRVVFUywKIAkJCVJFQURfT05DRShkZXYtJmd0O251bV9yeF9xdWV1ZXMpKSB8fApkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmMgYi9uZXQvZXRodG9vbC9jb21tb24uYwppbmRleCAyM2RiNDA2MThmZWQxNC4uOWNhNjk4MGYyMjkxZTYgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2NvbW1vbi5jCkBAIC05NTQsNiAmIzQzOzk1NCwxMCBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkvKiBEcml2ZXIgZ2l2ZXMgdXMgY3VycmVudCBzdGF0ZSwgd2Ugd2FudCB0byByZXR1cm4gY3VycmVudCBjb25maWcgKi8KIAlrcGFyYW0tJmd0O3RjcF9kYXRhX3NwbGl0ID0gZGV2LSZndDtjZmctJmd0O2hkc19jb25maWc7CiAJa3BhcmFtLSZndDtoZHNfdGhyZXNoID0gZGV2LSZndDtjZmctJmd0O2hkc190aHJlc2g7CiYjNDM7CiYjNDM7CWtwYXJhbS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IFJFQURfT05DRShkZXYtJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pOwomIzQzOwlrcGFyYW0tJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0KJiM0MzsJCVJFQURfT05DRShkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTsKIH0KIAogc3RhdGljIHZvaWQgZXRodG9vbF9pbml0X3RzaW5mbyhzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbykKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaAppbmRleCAzZTk2OWEwNzBmOWZlNC4uYWU3YjY1MWM2NThmNzQgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKQEAgLTQ5NCw3ICYjNDM7NDk0LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ZlYXR1cmVzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0ZFQVRVUkVTX1dBTlQKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3NfZ2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0hFQURFUiAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0ZMQUdTICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hFQURFUiAmIzQzOyAxXTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCAmIzQzOyAxXTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0NPTUJJTkVEX0NPVU5UICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NvYWxlc2NlX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NPQUxFU0NFX0hFQURFUiAmIzQzOyAxXTsKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3JpbmdzLmMgYi9uZXQvZXRodG9vbC9yaW5ncy5jCmluZGV4IDkwNTRjODljNWQ3YmIyLi41Y2MyMGQ1ODFjNDZlYyAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvcmluZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9yaW5ncy5jCkBAIC00Miw2ICYjNDM7NDIsMTAgQEAgc3RhdGljIGludCByaW5nc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKIAogCWRhdGEtJmd0O2tlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtJmd0O2NmZy0mZ3Q7aGRzX2NvbmZpZzsKIAlkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggPSBkZXYtJmd0O2NmZy0mZ3Q7aGRzX3RocmVzaDsKJiM0MzsJZGF0YS0mZ3Q7a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0KJiM0MzsJCVJFQURfT05DRShkZXYtJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pOwomIzQzOwlkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0KJiM0MzsJCVJFQURfT05DRShkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTsKIAogCWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9yaW5ncGFyYW0oZGV2LCAmYW1wO2RhdGEtJmd0O3JpbmdwYXJhbSwKIAkJCQkJJmFtcDtkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLSZndDtleHRhY2spOwpAQCAtNjksNyAmIzQzOzczLDkgQEAgc3RhdGljIGludCByaW5nc19yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiAJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovCiAJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOX01BWCAqLwogCSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogX1JJTkdTX0hEU19USFJFU0ggKi8KLQkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBfUklOR1NfSERTX1RIUkVTSF9NQVgqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIF9SSU5HU19IRFNfVEhSRVNIX01BWCAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCAqLwogfQogCiBzdGF0aWMgaW50IHJpbmdzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEyMSw3ICYjNDM7MTI3LDEyIEBAIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsCiAJCQkgIGtyLSZndDtoZHNfdGhyZXNoKSB8fAogCSAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLAotCQkJICBrci0mZ3Q7aGRzX3RocmVzaF9tYXgpKSkpCiYjNDM7CQkJICBrci0mZ3Q7aGRzX3RocmVzaF9tYXgpKSkgfHwKJiM0MzsJICAgICgoc3VwcG9ydGVkX3JpbmdfcGFyYW1zICZhbXA7IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgJmFtcDsmYW1wOwomIzQzOwkgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLAomIzQzOwkJCSAga3ItJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8CiYjNDM7CSAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLAomIzQzOwkJCSAga3ItJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJcmV0dXJuIDA7CkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbXSA9IHsKIAlbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdCQk9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgMSksCiAJW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAogc3RhdGljIGludApAQCAtMTc3LDYgJiM0MzsxODksMTQgQEAgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKG9wcy0mZ3Q7c3VwcG9ydGVkX3JpbmdfcGFyYW1zICZhbXA7IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLAomIzQzOwkJCQkgICAgJiMzNDtzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaXMgbm90IHN1cHBvcnRlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmICh0YltFVEhUT09MX0FfUklOR1NfQ1FFX1NJWkVdICZhbXA7JmFtcDsKIAkgICAgIShvcHMtJmd0O3N1cHBvcnRlZF9yaW5nX3BhcmFtcyAmYW1wOyBFVEhUT09MX1JJTkdfVVNFX0NRRV9TSVpFKSkgewogCQlOTF9TRVRfRVJSX01TR19BVFRSKGluZm8tJmd0O2V4dGFjaywKQEAgLTI0Niw2ICYjNDM7MjY2LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCQkgdGJbRVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl0sICZhbXA7bW9kKTsKIAlldGhubF91cGRhdGVfdTMyKCZhbXA7a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLAogCQkJIHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgJmFtcDttb2QpOwomIzQzOwlldGhubF91cGRhdGVfdTMyKCZhbXA7a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLAomIzQzOwkJCSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sICZhbXA7bW9kKTsKIAlpZiAoIW1vZCkKIAkJcmV0dXJuIDA7CiAKQEAgLTI4MSw2ICYjNDM7MzAzLDkgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1RYXTsKIAllbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggJmd0OyBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KQogCQllcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTsKJiM0MzsJZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICZndDsKJiM0MzsJCSBrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKQomIzQzOwkJZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07CiAJZWxzZQogCQllcnJfYXR0ciA9IE5VTEw7CiAJaWYgKGVycl9hdHRyKSB7CkBAIC0zMDIsNiAmIzQzOzMyNywxMCBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCXJldCA9IGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O3NldF9yaW5ncGFyYW0oZGV2LCAmYW1wO3JpbmdwYXJhbSwKIAkJCQkJICAgICAgJmFtcDtrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLSZndDtleHRhY2spOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCVdSSVRFX09OQ0UoZGV2LSZndDtwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLAomIzQzOwkJCSAgIGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbik7CiYjNDM7CiAJcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxLmMgYi9uZXQvc2NoZWQvc2NoX2ZxLmMKaW5kZXggN2NhZTA4MmE5ODQ3MjEuLmNiZjAxNWRmNjhjY2Y4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2ZxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9mcS5jCkBAIC0zOTksNiAmIzQzOzM5OSwxMSBAQCBzdGF0aWMgc3RydWN0IGZxX2Zsb3cgKmZxX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgUkVBRF9PTkNFKHNrLSZndDtza19wYWNpbmdfc3RhdHVzKSAhPSBTS19QQUNJTkdfRlEpCiAJCQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3NrLSZndDtza19wYWNpbmdfc3RhdHVzLAogCQkJCQkgIFNLX1BBQ0lOR19GUSk7CiYjNDM7CiYjNDM7CQlpZiAocS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uICZhbXA7JmFtcDsKJiM0MzsJCSAgICBmcV9za2JfY2Ioc2tiKS0mZ3Q7dGltZV90b19zZW5kICZsdDs9IG5vdykKJiM0MzsJCQlza2ItJmd0O3RzdGFtcCA9IDA7CiYjNDM7CiAJCXJldHVybiAmYW1wO3EtJmd0O2ludGVybmFsOwogCX0KIApAQCAtNzA3LDYgJiM0Mzs3MTIsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiAJc3RydWN0IGZxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJc3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kOwogCXN0cnVjdCBmcV9mbG93X2hlYWQgKmhlYWQ7CiYjNDM7CXU2NCB0aW1lX25leHRfcGFja2V0OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGZxX2Zsb3cgKmY7CiAJdW5zaWduZWQgbG9uZyByYXRlOwpAQCAtNzIxLDcgJiM0Mzs3MjcsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiAJaWYgKHNrYikgewogCQlxLSZndDtpbnRlcm5hbC5xbGVuLS07CiAJCWZxX2RlcXVldWVfc2tiKHNjaCwgJmFtcDtxLSZndDtpbnRlcm5hbCwgc2tiKTsKLQkJZ290byBvdXQ7CiYjNDM7CQlyZXR1cm4gc2tiOwogCX0KIAogCW5vdyA9IGt0aW1lX2dldF9ucygpOwpAQCAtNzU4LDggJiM0Mzs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiAKIAlza2IgPSBmcV9wZWVrKGYpOwogCWlmIChza2IpIHsKLQkJdTY0IHRpbWVfbmV4dF9wYWNrZXQgPSBtYXhfdCh1NjQsIGZxX3NrYl9jYihza2IpLSZndDt0aW1lX3RvX3NlbmQsCi0JCQkJCSAgICAgZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCk7CiYjNDM7CQl0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS0mZ3Q7dGltZV90b19zZW5kLAomIzQzOwkJCQkJIGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQpOwogCiAJCWlmIChub3cgJiM0MzsgcS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uICZsdDsgdGltZV9uZXh0X3BhY2tldCkgewogCQkJaGVhZC0mZ3Q7Zmlyc3QgPSBmLSZndDtuZXh0OwpAQCAtODI4LDExICYjNDM7ODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCkKIAkJICogZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCB3YXMgc2V0IHdoZW4gcHJpb3IgcGFja2V0IHdhcyBzZW50LAogCQkgKiBhbmQgY3VycmVudCB0aW1lIChAbm93KSBjYW4gYmUgdG9vIGxhdGUgYnkgdGVucyBvZiB1cy4KIAkJICovCi0JCWlmIChmLSZndDt0aW1lX25leHRfcGFja2V0KQomIzQzOwkJaWYgKGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQgJmFtcDsmYW1wOyBmLSZndDt0aW1lX25leHRfcGFja2V0ICZsdDsgbm93KQogCQkJbGVuIC09IG1pbihsZW4vMiwgbm93IC0gZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCk7CiAJCWYtJmd0O3RpbWVfbmV4dF9wYWNrZXQgPSBub3cgJiM0MzsgbGVuOwogCX0KJiM0MzsKIG91dDoKJiM0MzsJaWYgKHEtJmd0O29mZmxvYWRfaG9yaXpvbiAmYW1wOyZhbXA7IHRpbWVfbmV4dF9wYWNrZXQgJmx0Oz0gbm93KQomIzQzOwkJc2tiLSZndDt0c3RhbXAgPSAwOwomIzQzOwogCXJldHVybiBza2I7CiB9CiAKQEAgLTExNzksNyAmIzQzOzExODksOSBAQCBzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LAogCQl1NjQgb2ZmbG9hZF9ob3Jpem9uID0gKHU2NClOU0VDX1BFUl9VU0VDICoKIAkJCQkgICAgICBubGFfZ2V0X3UzMih0YltUQ0FfRlFfT0ZGTE9BRF9IT1JJWk9OXSk7CiAKLQkJaWYgKG9mZmxvYWRfaG9yaXpvbiAmbHQ7PSBxZGlzY19kZXYoc2NoKS0mZ3Q7bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHsKJiM0MzsJCWlmIChvZmZsb2FkX2hvcml6b24gJmx0Oz0KJiM0MzsJCSAgICAodTY0KVJFQURfT05DRShxZGlzY19kZXYoc2NoKS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKgomIzQzOwkJICAgIE5TRUNfUEVSX1VTRUMpIHsKIAkJCVdSSVRFX09OQ0UocS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uLCBvZmZsb2FkX2hvcml6b24pOwogCQl9IGVsc2UgewogCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtpbnZhbGlkIG9mZmxvYWRfaG9yaXpvbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmMKaW5kZXggNTVhMzg2ZjNkMWI5MGYuLjZlNjRiYWE0YzYwZGQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuYwpAQCAtNDIsOCAmIzQzOzQyLDEwIEBAIHN0YXRpYyBib29sCWNmZ19tYWNoaW5lX3Nsb3c7CiBzdGF0aWMgdWludDY0X3QJY2ZnX3N0YXJ0X3RpbWVfbnM7CiBzdGF0aWMgaW50CWNmZ19tYXJrOwogc3RhdGljIGJvb2wJY2ZnX3J4OwomIzQzO3N0YXRpYyBib29sCWNmZ192ZXJpZnlfaHdfb2ZmbG9hZDsKIAogc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0OwomIzQzO3N0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydF9yZWFsOwogc3RhdGljIHVpbnQ2NF90IHRkZWxpdmVyX21heDsKIAogc3RhdGljIGludCBlcnJvcnM7CkBAIC0xNTgsMTggJiM0MzsxNjAsNzAgQEAgc3RhdGljIHZvaWQgZG9fcmVjdl92ZXJpZnlfZW1wdHkoaW50IGZkcikKIAkJZXJyb3IoMSwgMCwgJiMzNDtyZWN2OiBub3QgZW1wdHkgYXMgZXhwZWN0ZWQgKCVkLCAlZCkmIzM0OywgcmV0LCBlcnJubyk7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpCiYjNDM7c3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsCiYjNDM7CQkJCSAgICBjb25zdCBjaGFyIHBheWxvYWRfY2hhcikKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7CiYjNDM7CWludDY0X3QgdHN0YW1wID0gMDsKJiM0MzsKJiM0MzsJc3dpdGNoIChlcnItJmd0O2VlX2Vycm5vKSB7CiYjNDM7CWNhc2UgRUNBTkNFTEVEOgomIzQzOwkJaWYgKGVyci0mZ3Q7ZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpCiYjNDM7CQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVyci0mZ3Q7ZWVfY29kZSk7CiYjNDM7CQlyZWFzb24gPSAmIzM0O21pc3NlZCB0eHRpbWUmIzM0OzsKJiM0MzsJYnJlYWs7CiYjNDM7CWNhc2UgRUlOVkFMOgomIzQzOwkJaWYgKGVyci0mZ3Q7ZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKQomIzQzOwkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnItJmd0O2VlX2NvZGUpOwomIzQzOwkJcmVhc29uID0gJiMzNDtpbnZhbGlkIHR4dGltZSYjMzQ7OwomIzQzOwlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcbiYjMzQ7LAomIzQzOwkJICAgICAgZXJyLSZndDtlZV9lcnJubywgZXJyLSZndDtlZV9jb2RlKTsKJiM0MzsJfQomIzQzOwomIzQzOwl0c3RhbXAgPSAoKGludDY0X3QpZXJyLSZndDtlZV9kYXRhKSAmbHQ7Jmx0OyAzMiB8IGVyci0mZ3Q7ZWVfaW5mbzsKJiM0MzsJdHN0YW1wIC09IChpbnQ2NF90KWdsb2JfdHN0YXJ0OwomIzQzOwl0c3RhbXAgLz0gMTAwMCAqIDEwMDA7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O3NlbmQ6IHBrdCAlYyBhdCAlJiMzNDsgUFJJZDY0ICYjMzQ7bXMgZHJvcHBlZDogJXNcbiYjMzQ7LAomIzQzOwkJcGF5bG9hZF9jaGFyLCB0c3RhbXAsIHJlYXNvbik7CiYjNDM7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkb19yZWN2X2VycnF1ZXVlX3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVyciwKJiM0MzsJCQkJCSAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcykKJiM0Mzt7CiYjNDM7CWludDY0X3QgdHM7CiYjNDM7CiYjNDM7CXRzID0gdHNzLSZndDt0c1swXS50dl9zZWM7CiYjNDM7CXRzICo9IDEwMDBVTEwgKiAxMDAwICogMTAwMDsKJiM0MzsJdHMgJiM0Mzs9IHRzcy0mZ3Q7dHNbMF0udHZfbnNlYzsKJiM0MzsJdHMgLT0gZ2xvYl90c3RhcnRfcmVhbDsKJiM0MzsJdHMgLz0gMTAwMDsKJiM0MzsKJiM0MzsJaWYgKHRzICZndDsgY2ZnX3ZhcmlhbmNlX3VzKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtzdyBkZWxheSAlJiMzNDsgUFJJZDY0ICYjMzQ7dXMgZXhjZWVkcyBib3VuZHNcbiYjMzQ7LCB0cyk7CiYjNDM7CQlpZiAoIWNmZ19tYWNoaW5lX3Nsb3cpCiYjNDM7CQkJZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWUoaW50IGZkdCkKIHsKIAljaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSkgJiM0MzsKJiM0MzsJCSAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjbV90aW1lc3RhbXBpbmcpKSAmIzQzOwogCQkgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKV0gPSB7MH07CiAJY2hhciBkYXRhW3NpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7CiAJCSAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7IDFdOwomIzQzOwlzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyAqdHNzOwogCXN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyOwogCWludCByZXQsIG51bV90c3RhbXAgPSAwOwogCXN0cnVjdCBtc2doZHIgbXNnID0gezB9OwogCXN0cnVjdCBpb3ZlYyBpb3YgPSB7MH07CiAJc3RydWN0IGNtc2doZHIgKmNtOwotCWludDY0X3QgdHN0YW1wID0gMDsKIAogCWlvdi5pb3ZfYmFzZSA9IGRhdGE7CiAJaW92Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7CkBAIC0xODEsOCAmIzQzOzIzNSw2IEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpCiAJbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpOwogCiAJd2hpbGUgKDEpIHsKLQkJY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKLQogCQlyZXQgPSByZWN2bXNnKGZkdCwgJmFtcDttc2csIE1TR19FUlJRVUVVRSk7CiAJCWlmIChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFQUdBSU4pCiAJCQlicmVhazsKQEAgLTE5Miw0MiAmIzQzOzI0NCwzMiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KQogCQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogZmxhZ3MgMHgleFxuJiMzNDssIG1zZy5tc2dfZmxhZ3MpOwogCiAJCWNtID0gQ01TR19GSVJTVEhEUigmYW1wO21zZyk7CiYjNDM7CQl0c3MgPSBOVUxMOwomIzQzOwomIzQzOwkJaWYgKGNtLSZndDtjbXNnX2xldmVsID09IFNPTF9TT0NLRVQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGNtLSZndDtjbXNnX3R5cGUgPT0gU0NNX1RJTUVTVEFNUElORykgewomIzQzOwkJCXRzcyA9ICh2b2lkICopQ01TR19EQVRBKGNtKTsKJiM0MzsJCQljbSA9IENNU0dfTlhUSERSKCZhbXA7bXNnLCBjbSk7CiYjNDM7CQkJaWYgKCFjbSkKJiM0MzsJCQkJZXJyb3IoMSwgMCwgJiMzNDt0aW1lc3RhbXAgbWlzc2luZyBpcCBlcnJcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsKIAkJaWYgKGNtLSZndDtjbXNnX2xldmVsICE9IGNmZ19lcnJxX2xldmVsIHx8CiAJCSAgICBjbS0mZ3Q7Y21zZ190eXBlICE9IGNmZ19lcnJxX3R5cGUpCiAJCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiB0eXBlIDB4JXguMHgleFxuJiMzNDssCiAJCQkJICAgIGNtLSZndDtjbXNnX2xldmVsLCBjbS0mZ3Q7Y21zZ190eXBlKTsKIAogCQllcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTsKLQkJaWYgKGVyci0mZ3Q7ZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9UWFRJTUUpCiYjNDM7CQlpZiAoZXJyLSZndDtlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RYVElNRSkKJiM0MzsJCQludW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZXJyLAomIzQzOwkJCQkJCQkgICAgICAgZGF0YVtyZXQgLSAxXSk7CiYjNDM7CQllbHNlIGlmIChlcnItJmd0O2VlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HICZhbXA7JmFtcDsgdHNzKQomIzQzOwkJCWRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKGVyciwgdHNzKTsKJiM0MzsJCWVsc2UKIAkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IG9yaWdpbiAweCV4XG4mIzM0OywgZXJyLSZndDtlZV9vcmlnaW4pOwogCi0JCXN3aXRjaCAoZXJyLSZndDtlZV9lcnJubykgewotCQljYXNlIEVDQU5DRUxFRDoKLQkJCWlmIChlcnItJmd0O2VlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKQotCQkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IHVua25vd24gRUNBTkNFTEVEICV1XG4mIzM0OywKLQkJCQkgICAgICBlcnItJmd0O2VlX2NvZGUpOwotCQkJcmVhc29uID0gJiMzNDttaXNzZWQgdHh0aW1lJiMzNDs7Ci0JCWJyZWFrOwotCQljYXNlIEVJTlZBTDoKLQkJCWlmIChlcnItJmd0O2VlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSkKLQkJCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxuJiMzNDssCi0JCQkJICAgICAgZXJyLSZndDtlZV9jb2RlKTsKLQkJCXJlYXNvbiA9ICYjMzQ7aW52YWxpZCB0eHRpbWUmIzM0OzsKLQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiBlcnJubyAldSBjb2RlICV1XG4mIzM0OywKLQkJCSAgICAgIGVyci0mZ3Q7ZWVfZXJybm8sIGVyci0mZ3Q7ZWVfY29kZSk7Ci0JCX0KLQotCQl0c3RhbXAgPSAoKGludDY0X3QpIGVyci0mZ3Q7ZWVfZGF0YSkgJmx0OyZsdDsgMzIgfCBlcnItJmd0O2VlX2luZm87Ci0JCXRzdGFtcCAtPSAoaW50NjRfdCkgZ2xvYl90c3RhcnQ7Ci0JCXRzdGFtcCAvPSAxMDAwICogMTAwMDsKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7c2VuZDogcGt0ICVjIGF0ICUmIzM0OyBQUklkNjQgJiMzNDttcyBkcm9wcGVkOiAlc1xuJiMzNDssCi0JCQlkYXRhW3JldCAtIDFdLCB0c3RhbXAsIHJlYXNvbik7Ci0KIAkJbXNnLm1zZ19mbGFncyA9IDA7CiAJCW1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTsKLQkJbnVtX3RzdGFtcCYjNDM7JiM0Mzs7CiAJfQogCiAJcmV0dXJuIG51bV90c3RhbXA7CkBAIC0yNDUsMTIgJiM0MzsyODcsMTMgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJxdWV1ZV9tc2dzKGludCBmZHQpCiAJCQllcnJvcigxLCBlcnJubywgJiMzNDtwb2xsJiMzNDspOwogCiAJCWlmIChyZXQgJmFtcDsmYW1wOyAocGZkLnJldmVudHMgJmFtcDsgUE9MTEVSUikpCi0JCQludW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZmR0KTsKJiM0MzsJCQludW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlKGZkdCk7CiAKIAkJaWYgKG51bV90c3RhbXAgPT0gY2ZnX251bV9wa3QpCiAJCQlicmVhazsKIAotCX0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpICZsdDsgdGRlbGl2ZXJfbWF4KTsKJiM0MzsJfSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgJmx0OwomIzQzOwkJIHRkZWxpdmVyX21heCAmIzQzOyAoY2ZnX3ZhcmlhbmNlX3VzICogMTAwMCkpOwogfQogCiBzdGF0aWMgdm9pZCBzdGFydF90aW1lX3dhaXQodm9pZCkKQEAgLTI5NSw2ICYjNDM7MzM4LDE4IEBAIHN0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lKGludCBmZCkKIAkJZXJyb3IoMSwgMCwgJiMzNDtnZXRzb2Nrb3B0IHR4dGltZTogbWlzbWF0Y2gmIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGludCBmZCkKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHwKJiM0MzsJCSAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSB8CiYjNDM7CQkgIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEIHwKJiM0MzsJCSAgU09GX1RJTUVTVEFNUElOR19PUFRfVFNPTkxZOwomIzQzOwomIzQzOwlpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLAomIzQzOwkJICAgICAgICZhbXA7dmFsLCBzaXplb2YodmFsKSkpCiYjNDM7CQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IHRpbWVzdGFtcGluZyYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pCiB7CiAJaW50IGZkOwpAQCAtMzA4LDYgJiM0MzszNjMsOSBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pCiAKIAlzZXRzb2Nrb3B0X3R4dGltZShmZCk7CiAKJiM0MzsJaWYgKGNmZ192ZXJpZnlfaHdfb2ZmbG9hZCkKJiM0MzsJCXNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoZmQpOwomIzQzOwogCWlmIChjZmdfbWFyayAmYW1wOyZhbXA7CiAJICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX01BUkssICZhbXA7Y2ZnX21hcmssIHNpemVvZihjZmdfbWFyaykpKQogCQllcnJvcigxLCBlcnJubywgJiMzNDtzZXRzb2Nrb3B0IG1hcmsmIzM0Oyk7CkBAIC0zMTcsNyAmIzQzOzM3NSw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbikKIAogc3RhdGljIGludCBzZXR1cF9yeChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKQogewotCXN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDEwMCAqIDEwMDAgfTsKJiM0MzsJc3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gNjAwICogMTAwMCB9OwogCWludCBmZDsKIAogCWZkID0gc29ja2V0KGFkZHItJmd0O3NhX2ZhbWlseSwgU09DS19ER1JBTSwgMCk7CkBAIC0zNDgsNiAmIzQzOzQwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX3Rlc3RfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbikKIAogCXN0YXJ0X3RpbWVfd2FpdCgpOwogCWdsb2JfdHN0YXJ0ID0gZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCk7CiYjNDM7CWdsb2JfdHN0YXJ0X3JlYWwgPSBnZXR0aW1lX25zKENMT0NLX1JFQUxUSU1FKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBjZmdfbnVtX3BrdDsgaSYjNDM7JiM0MzspCiAJCWRvX3NlbmRfb25lKGZkdCwgJmFtcDtjZmdfYnVmW2ldKTsKQEAgLTQ0MCwxMCAmIzQzOzQ5OSwxMSBAQCBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAkJCSYjMzQ7ICAtNiAgICAgICAgICAgIG9ubHkgSVB2NlxuJiMzNDsKIAkJCSYjMzQ7ICAtYyAmbHQ7Y2xvY2smZ3Q7ICAgIG1vbm90b25pYyBvciB0YWkgKGRlZmF1bHQpXG4mIzM0OwogCQkJJiMzNDsgIC1EICZsdDthZGRyJmd0OyAgICAgZGVzdGluYXRpb24gSVAgYWRkcmVzcyAoc2VydmVyKVxuJiMzNDsKLQkJCSYjMzQ7ICAtUyAmbHQ7YWRkciZndDsgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXG4mIzM0OwomIzQzOwkJCSYjMzQ7ICAtaCAgICAgICAgICAgIHZlcmlmeSBoYXJkd2FyZSBvZmZsb2FkICh0eClcbiYjMzQ7CiYjNDM7CQkJJiMzNDsgIC1tICZsdDttYXJrJmd0OyAgICAgc29ja2V0IG1hcmtcbiYjMzQ7CiAJCQkmIzM0OyAgLXIgICAgICAgICAgICBydW4gcnggbW9kZVxuJiMzNDsKJiM0MzsJCQkmIzM0OyAgLVMgJmx0O2FkZHImZ3Q7ICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxuJiMzNDsKIAkJCSYjMzQ7ICAtdCAmbHQ7bnNlYyZndDsgICAgIHN0YXJ0IHRpbWUgKFVUQyBuYW5vc2Vjb25kcylcbiYjMzQ7Ci0JCQkmIzM0OyAgLW0gJmx0O21hcmsmZ3Q7ICAgICBzb2NrZXQgbWFya1xuJiMzNDsKIAkJCSYjMzQ7XG4mIzM0OywKIAkJCXByb2duYW1lKTsKIAlleGl0KDEpOwpAQCAtNDU1LDcgJiM0Mzs1MTUsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpbnQgZG9tYWluID0gUEZfVU5TUEVDOwogCWludCBjOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7NDZjOlM6RDpydDptOiYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICYjMzQ7NDZjOkQ6aG06clM6dDomIzM0OykpICE9IC0xKSB7CiAJCXN3aXRjaCAoYykgewogCQljYXNlICYjMzk7NCYjMzk7OgogCQkJaWYgKGRvbWFpbiAhPSBQRl9VTlNQRUMpCkBAIC00ODIsMjEgJiM0Mzs1NDIsMjQgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQllbHNlCiAJCQkJZXJyb3IoMSwgMCwgJiMzNDt1bmtub3duIGNsb2NrIGlkICVzJiMzNDssIG9wdGFyZyk7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O1MmIzM5OzoKLQkJCXNhZGRyID0gb3B0YXJnOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtEJiMzOTs6CiAJCQlkYWRkciA9IG9wdGFyZzsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O2gmIzM5OzoKJiM0MzsJCQljZmdfdmVyaWZ5X2h3X29mZmxvYWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O20mIzM5OzoKJiM0MzsJCQljZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApOwomIzQzOwkJCWJyZWFrOwogCQljYXNlICYjMzk7ciYjMzk7OgogCQkJY2ZnX3J4ID0gdHJ1ZTsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O1MmIzM5OzoKJiM0MzsJCQlzYWRkciA9IG9wdGFyZzsKJiM0MzsJCQlicmVhazsKIAkJY2FzZSAmIzM5O3QmIzM5OzoKIAkJCWNmZ19zdGFydF90aW1lX25zID0gc3RydG9sbChvcHRhcmcsIE5VTEwsIDApOwogCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTttJiMzOTs6Ci0JCQljZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApOwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZShhcmd2WzBdKTsKIAkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5CmluZGV4IGFkZjZjODQ4ZDZkODBmLi43Yjc1YTMzZjVjNDNmOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weQpAQCAtMTIsMTAgJiM0MzsxMiwxMyBAQCBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfdmFyaWFudHMKIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBLc2Z0U2tpcEV4CiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIGJrZywgY21kLCBkZWZlciwgdGMKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgRXRodG9vbEZhbWlseSwgTmxFcnJvcgogCiAKIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7TWFpbiBmdW5jdGlvbi4gUnVuIHNvX3R4dGltZSBhcyBzZW5kZXIgYW5kIHJlY2VpdmVyLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcikKJiM0MzsKICAgICBzbG93X21hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgmIzM5O0tTRlRfTUFDSElORV9TTE9XJiMzOTspCiAKICAgICBpZiBub3QgaGFzYXR0cihjZmcsICYjMzQ7YmluX3JlbW90ZSYjMzQ7KToKQEAgLTM4LDYgJiM0Mzs0MSwzNCBAQCBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOgogICAgICAgICBjbWQoY21kX3R4KQogCiAKJiM0MztkZWYgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtDb25maWd1cmUgcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgZXRobmwgPSBFdGh0b29sRmFtaWx5KCkKJiM0MzsKJiM0MzsgICAgdHJ5OgomIzQzOyAgICAgICAgcmluZ3MgPSBldGhubC5yaW5nc19nZXQoeyYjMzk7aGVhZGVyJiMzOTs6IHsmIzM5O2Rldi1pbmRleCYjMzk7OiBjZmcuaWZpbmRleH19KQomIzQzOyAgICBleGNlcHQgTmxFcnJvciBhcyBlOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3JpbmctZ2V0IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJiMzOTspIGZyb20gZQomIzQzOwomIzQzOyAgICBpZiAmIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5OyBub3QgaW4gcmluZ3Mgb3IgXAomIzQzOyAgICAgICAmIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JiMzOTsgbm90IGluIHJpbmdzOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3BhY2luZyBvZmZsb2FkIGhvcml6b24gbm90IHN1cHBvcnRlZCBieSBkZXZpY2UmIzM5OykKJiM0MzsKJiM0MzsgICAgaWYgcmluZ3NbJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heCYjMzk7XSAmbHQ7IDUwXzAwMDoKJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzOTtwYWNpbmcgb2ZmbG9hZCBtYXggaG9yaXpvbiB0b28gc21hbGwmIzM5OykKJiM0MzsKJiM0MzsgICAgY3VyX2hvcml6b24gPSByaW5nc1smIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5O10KJiM0MzsgICAgbmV3X2hvcml6b24gPSA1MF8wMDAKJiM0MzsgICAgZXRobmwucmluZ3Nfc2V0KHsKJiM0MzsgICAgICAgICYjMzk7aGVhZGVyJiMzOTs6IHsmIzM5O2Rldi1pbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sCiYjNDM7ICAgICAgICAmIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5OzogbmV3X2hvcml6b24sCiYjNDM7ICAgIH0pCiYjNDM7ICAgIGRlZmVyKGV0aG5sLnJpbmdzX3NldCwgewomIzQzOyAgICAgICAgJiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fSwKJiM0MzsgICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7OiBjdXJfaG9yaXpvbgomIzQzOyAgICB9KQomIzQzOwomIzQzOwogZGVmIF9xZGlzY19zZXR1cChpZm5hbWUsIHFkaXNjLCBvcHRhcmdzPSYjMzQ7JiMzNDspOgogICAgICYjMzQ7JiMzNDsmIzM0O1JlcGxhY2Ugcm9vdCBxZGlzYy4gUmVzdG9yZSB0aGUgb3JpZ2luYWwgYWZ0ZXIgdGhlIHRlc3QuCiAKQEAgLTU2LDYgJiM0Mzs4Nyw3IEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOgogICAgICAgICAgICAgWyYjMzQ7b25lX3BrdCYjMzQ7LCAmIzM0O2EsMTAmIzM0OywgJiMzNDthLDEwJiMzNDtdLAogICAgICAgICAgICAgWyYjMzQ7aW5fb3JkZXImIzM0OywgJiMzNDthLDEwLGIsMjAmIzM0OywgJiMzNDthLDEwLGIsMjAmIzM0O10sCiAgICAgICAgICAgICBbJiMzNDtyZXZlcnNlX29yZGVyJiMzNDssICYjMzQ7YSwyMCxiLDEwJiMzNDssICYjMzQ7YiwxMCxhLDIwJiMzNDtdLAomIzQzOyAgICAgICAgICAgIFsmIzM0O2JleW9uZF9od19ob3Jpem9uJiMzNDssICYjMzQ7YSw3MCYjMzQ7LCAmIzM0O2EsNzAmIzM0O10sCiAgICAgICAgIF06CiAgICAgICAgICAgICBuYW1lID0gZiYjMzQ7dntpcHZlcn1fe3Rlc3RjYXNlWzBdfSYjMzQ7CiAgICAgICAgICAgICB5aWVsZCBLc2Z0TmFtZWRWYXJpYW50KG5hbWUsIGlwdmVyLCB0ZXN0Y2FzZVsxXSwgdGVzdGNhc2VbMl0pCkBAIC02NCwxNSAmIzQzOzk2LDQyIEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOgogQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSkKIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOgogICAgICYjMzQ7JiMzNDsmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIChmcSkgdGVzdHMuJiMzNDsmIzM0OyYjMzQ7Ci0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpCiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsICYjMzQ7ZnEmIzM0OykKICAgICB0ZXN0X3NvX3R4dGltZShjZmcsICYjMzQ7bW9ubyYjMzQ7LCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSkKIAogCiYjNDM7QGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSkKJiM0MztkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgZnEgdGVzdHMsIHdpdGggb2ZmbG9hZCBob3Jpem9uLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBjZmcucmVxdWlyZV9uc2ltKG5zaW1fdGVzdD1GYWxzZSkKJiM0MzsKJiM0MzsgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpCiYjNDM7ICAgIHRyeToKJiM0MzsgICAgICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCAmIzM0O2ZxJiMzNDssICYjMzQ7b2ZmbG9hZF9ob3Jpem9uIDUwbXMmIzM0OykKJiM0MzsgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O25ldGRldiBkb2VzIG5vdCBzdXBwb3J0IG9mZmxvYWQuIHNraXBwaW5nJiMzNDspIGZyb20gZQomIzQzOwomIzQzOyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gdXNlIG9ubHkgaHcgcGFjaW5nLCBleGNlcHQgYmV5b25kX2h3X2hvcml6b24uCiYjNDM7ICAgIGh3X29ubHkgPSAmIzM0Oy1oJiMzNDsgaWYgYXJnc190eCAhPSAmIzM0O2EsNzAmIzM0OyBlbHNlICYjMzQ7JiMzNDsKJiM0MzsgICAgdGVzdF9zb190eHRpbWUoY2ZnLCAmIzM0O21vbm8mIzM0OywgaXB2ZXIsIGYmIzM0O3tod19vbmx5fSB7YXJnc190eH0mIzM0OywgYXJnc19yeCwgVHJ1ZSkKJiM0MzsKJiM0MzsKJiM0MztAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKQomIzQzO2RlZiB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgdGVzdHMsIHdpdGhvdXQgZnEgcGFjaW5nIHN3IGJhY2t1cC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpCiYjNDM7CiYjNDM7ICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKQomIzQzOyAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgJiMzNDtwZmlmb19mYXN0JiMzNDspCiYjNDM7CiYjNDM7ICAgICMgRXhwZWN0IGFsbCB0ZXN0cyB0byBwYXNzLCBleGNlcHQgYmV5b25kX2h3X2hvcml6b24gd2l0aG91dCBzdyBmYWxsYmFjay4KJiM0MzsgICAgZXhwZWN0X3Bhc3MgPSBub3QgYXJnc190eCA9PSAmIzM0O2EsNzAmIzM0OwomIzQzOyAgICB0ZXN0X3NvX3R4dGltZShjZmcsICYjMzQ7bW9ubyYjMzQ7LCBpcHZlciwgZiYjMzQ7LWgge2FyZ3NfdHh9JiMzNDssIGFyZ3NfcngsIGV4cGVjdF9wYXNzKQomIzQzOwomIzQzOwogQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSkKIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV90YWkoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBmcSB0ZXN0cywgYnV0IHBhc3MgQ0xPQ0tfVEFJIHRvIHRlc3QgY29udmVyc2lvbi4mIzM0OyYjMzQ7JiMzNDsKLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcikKICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgJiMzNDtmcSYjMzQ7KQogICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgJiMzNDt0YWkmIzM0OywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIFRydWUpCiAKQEAgLTk1LDcgJiM0MzsxNTQsNiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZXRmKCk6CiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19ldGYoKSkKIGRlZiB0ZXN0X3NvX3R4dGltZV9ldGYoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X2ZhaWwpOgogICAgICYjMzQ7JiMzNDsmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgZXRmIHRlc3RzLiYjMzQ7JiMzNDsmIzM0OwotICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKQogICAgIHRyeToKICAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsICYjMzQ7ZXRmJiMzNDssICYjMzQ7Y2xvY2tpZCBDTE9DS19UQUkgZGVsdGEgNDAwMDAwJiMzNDspCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgpAQCAtMTA4LDcgJiM0MzsxNjYsMTMgQEAgZGVmIG1haW4oKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0O0JvaWxlcnBsYXRlIGtzZnQgbWFpbi4mIzM0OyYjMzQ7JiMzNDsKICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6CiAgICAgICAgIGtzZnRfcnVuKAotICAgICAgICAgICAgW3Rlc3Rfc29fdHh0aW1lX2ZxX21vbm8sIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwgdGVzdF9zb190eHRpbWVfZXRmXSwKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8sCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcsCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3LAomIzQzOyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV90YWksCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2V0ZiwKJiM0MzsgICAgICAgICAgICBdLAogICAgICAgICAgICAgYXJncz0oY2ZnLCksCiAgICAgICAgICkKICAgICBrc2Z0X2V4aXQoKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhY2luZyBPZmZsb2FkIEhvcml6b24gUGF0Y2gqKgoKT2theSwgc28gd2UgaGF2ZSBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyB0aGUgJiMzNDtwYWNpbmcgb2ZmbG9hZCBob3Jpem9uJiMzNDsgZmVhdHVyZS4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIHRoaXMgdGhpbmcgdG91Y2hlcyBhIHByZXR0eSB3aWRlIHJhbmdlIG9mIGZpbGVzLiBJdCYjMzk7cyBtb2RpZnlpbmcgZG9jdW1lbnRhdGlvbiwgc2V2ZXJhbCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgYW5kIGRyaXZlcnMgZm9yIHRoZSBJbnRlbCBgaWRwZmAgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHVwZGF0aW5nIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sYCwgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdGAsIHBhcnRzIG9mIHRoZSBgaWRwZmAgZHJpdmVyLCBhbmQga2V5IGZpbGVzIGluIGNvcmUgbmV0d29ya2luZzogYG5ldC9zY2hlZC9zY2hfZnEuY2AsIGBuZXQvY29yZS9wa3RnZW4uY2AsIGBuZXQvZXRodG9vbC9yaW5ncy5jYCwgYW5kIG1vcmUuCgpUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgaW50ZWdyYXRpbmcgZGlyZWN0bHkgd2l0aCBjb3JlIHNjaGVkdWxpbmcsIHBhY2tldCBnZW5lcmF0aW9uLCBhbmQgYGV0aHRvb2xgLCB3aGljaCBtZWFucyB0aGlzIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IgaW4gc29tZSBzaWduaWZpY2FudCB3YXlzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIGBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgdG8gYHN0cnVjdCBuZXRfZGV2aWNlYC4gTG9va2luZyBkZWVwZXIsIHRoZSBjaGFuZ2VzIGluIGBuZXQvc2NoZWQvc2NoX2ZxLmNgIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGZlYXR1cmUsIHVzaW5nIGBxLSZndDtvZmZsb2FkX2hvcml6b25gIHdoaWNoIGlzIGNvbmZpZ3VyZWQgdmlhIGBUQ0FfRlFfT0ZGTE9BRF9IT1JJWk9OYCBhbmQgY2hlY2tlZCBhZ2FpbnN0IGBxZGlzY19kZXYoc2NoKS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbmAuIEFsc28sIGBuZXQvY29yZS9wa3RnZW4uY2Agbm93IGhhcyBzdXBwb3J0IGZvciBgVFhUSU1FYCwgYW5kIGBuZXQvZXRodG9vbC9yaW5ncy5jYCBpcyBiZWluZyBtb2RpZmllZCB0byBhbGxvdyBzZXR0aW5nIHRoZSBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBgc2NoX2ZxLmNgIGlzIHRoZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIsIGFuZCB0aGF0JiMzOTtzICp3aWRlbHkqIHVzZWQuIEl0JiMzOTtzIGNlcnRhaW5seSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBJIGtub3cgbWF0dGVycyBhIGxvdCB0byBteSBjdXJyZW50IHdvcmsuIFNpbWlsYXJseSwgYHBrdGdlbi5jYCBpcyB0aGUgcGFja2V0IGdlbmVyYXRvciwgYWxzbyBhY2Nlc3NpYmxlLiBFdGh0b29sIGNvcmUgaXMsIG9mIGNvdXJzZSwgcmVhY2hhYmxlLiBUaGF0JiMzOTtzIGdvb2QuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGNoYW5nZXM6IExvb2tpbmcgYXQgYG5ldC9zY2hlZC9zY2hfZnEuY2AsIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGBmcV9jbGFzc2lmeWAsIGBmcV9kZXF1ZXVlYCwgYW5kIGBmcV9jaGFuZ2VgLiBJbiBgbmV0L2NvcmUvcGt0Z2VuLmNgLCBpdCYjMzk7cyBgcGt0Z2VuX2lmX3Nob3dgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl9zZXR1cF9pbmplY3RgLCBga3RpbWVfZ2V0X2Nsb2NrYCwgYHBrdGdlbl94bWl0YCwgYW5kIGBwa3RnZW5fYWRkX2RldmljZWAuIEFuZCBmb3IgYG5ldC9ldGh0b29sL3JpbmdzLmNgIGl0JiMzOTtzIGByaW5nc19wcmVwYXJlX2RhdGFgLCBgcmluZ3NfcmVwbHlfc2l6ZWAsIGByaW5nc19maWxsX3JlcGx5YCwgYGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZWAsIGFuZCBgZXRobmxfc2V0X3JpbmdzYC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyBpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgICggYHJ0bmxfZmlsbF9pZmluZm9gKSBhbmQgYG5ldC9ldGh0b29sL2NvbW1vbi5jYCAoIGBldGh0b29sX3JpbmdwYXJhbV9nZXRfY2ZnYCkuCgpTbywgdGhlIGJpZ2dlc3QgaW1wYWN0IGlzIG9uIGBzY2hfZnEuY2AsIGBwa3RnZW4uY2AsIGFuZCBgZXRodG9vbGAsIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBkZXNlcnZlcyBzb21lIHNlcmlvdXMgZnV6emluZy4gRXNwZWNpYWxseSB0aGVzZSBzeW1ib2xzOiBgZnFfY2xhc3NpZnlgLCBgZnFfZGVxdWV1ZWAsIGBmcV9jaGFuZ2VgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl94bWl0YCwgYW5kIGBldGhubF9zZXRfcmluZ3NgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBjb25maWdzLiBGb3IgYHNjaF9mcS5jYCwgaXQmIzM5O3MgYENPTkZJR19ORVRfU0NIX0ZRYC4gRm9yIGBwa3RnZW4uY2AsIGl0JiMzOTtzIGBDT05GSUdfTkVUX1BLVEdFTmAuIEFuZCBmb3IgYGV0aHRvb2xgLCBpdCYjMzk7cyBhbHdheXMgZW5hYmxlZCB3aXRoIGBDT05GSUdfTkVUYC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBlbnN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lcy4gT2theSwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz0zMjI9Y29uZmlnIE5FVF9TQ0hfUElFXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzMzLVxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzM1LVx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTQ0Mz1jaG9pY2Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy00NTAtXHRjb25maWcgREVGQVVMVF9GUVxubmV0L3NjaGVkL0tjb25maWc6NDUxOlx0XHRib29sIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDsgaWYgTkVUX1NDSF9GUVxubmV0L3NjaGVkL0tjb25maWctNDUyLVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQ1Ni1cdGNvbmZpZyBERUZBVUxUX0ZRX0NPREVMXG5uZXQvc2NoZWQvS2NvbmZpZzo0NTc6XHRcdGJvb2wgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5XCYjMzQ7IGlmIE5FVF9TQ0hfRlFfQ09ERUxcbm5ldC9zY2hlZC9LY29uZmlnLTQ1OC1cbm5ldC9zY2hlZC9LY29uZmlnLTQ1OS1cdGNvbmZpZyBERUZBVUxUX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWc6NDYwOlx0XHRib29sIFwmIzM0O0Zsb3cgUXVldWUgUHJvcG9ydGlvbmFsIEludGVncmFsIGNvbnRyb2xsZXIgRW5oYW5jZWRcJiMzNDsgaWYgTkVUX1NDSF9GUV9QSUVcbm5ldC9zY2hlZC9LY29uZmlnLTQ2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA2MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBORVRfU0NIX0ZRYCBpcyBkZWZpbml0ZWx5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRyaXZlcyB0aGUgZnVuY3Rpb25hbGl0eSBpbiBgc2NoX2ZxLmNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHBhY2tldCBnZW5lcmF0aW9uIGFzcGVjdC4gTm93LCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBsZXQmIzM5O3MgcGl2b3QgdG8gdGhlIHBhY2tldCBnZW5lcmF0b3ImIzM5O3MgY29uZmlndXJhdGlvbiDigJMgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBhdCBgcGt0Z2VuLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyBvcmNoZXN0cmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfUEtUR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNTQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZWJ1Z2dpbmcgUGFja2V0IEdlbmVyYXRpb24gTW9kdWxlIFBsYWNlbWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgbG9jYXRpb24gb2YgYHBrdGdlbmAuIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGJ1cmllZCBzb21ld2hlcmUgaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgYW5kIHRoZSBoaW50IGlzIHRoYXQgaXQmIzM5O3MgYHBrdGdlbi5jYCB3aGljaCBvZnRlbiBpbXBsaWVzIGl0IGlzIGNvcmUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbG9jYXRpb24gZm9yIGNvcmUgbmV0d29yayBjb21wb25lbnRzLiBUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZWl0aGVyIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byBgcGt0Z2VuYCwgb3IgSSYjMzk7bGwgbG9vayBpbnRvIGBuZXQvY29yZS9NYWtlZmlsZWAgZm9yIHRoZSBidWlsZCBkaXJlY3RpdmVzIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLiBIb3BlZnVsbHkgb25lIG9mIHRoZXNlIGZpbGVzIHdpbGwgZXhwbGljaXRseSBzdGF0ZSB3aGVyZSB0aGUgYHBrdGdlbmAgbW9kdWxlIGJlbG9uZ3MuIEZyb20gdGhlcmUsIEkgY2FuIGJ1aWxkIGFuIGltYWdlIHRvIGlzb2xhdGUgdGhlIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBuZXQtcHJvY2ZzLm9cbm5ldC9jb3JlL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfUEtUR0VOKSAmIzQzOz0gcGt0Z2VuLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRQT0xMKSAmIzQzOz0gbmV0cG9sbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1OTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRmluZGluZyB0aGUgRGVmaW5pdGlvbiBvZiBORVRfUEtUR0VOKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBORVRfUEtUR0VOYC4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhpcyBwdXp6bGUsIGFuZCB3aXRob3V0IGtub3dpbmcgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQsIEkmIzM5O20gZXNzZW50aWFsbHkgZmx5aW5nIGJsaW5kLiBJcyBpdCBhIG1hY3JvPyBBIGZ1bmN0aW9uPyBBIHN0cnVjdD8gUGFydCBvZiBhIGJyb2FkZXIgbGlicmFyeT8gVGhlIG5hbWUgZmVlbHMgbGlrZSBpdCBjb3VsZCBiZSByZWxhdGVkIHRvIG5ldHdvcmsgcGFja2V0IGdlbmVyYXRpb24sIHdoaWNoIGlzIGEgZmFpcmx5IGNvbW1vbiBhcmVhLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBzZWFyY2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgdXNlIHRvIGRldGVybWluZSB3aGVyZSB0aGlzIGlzIGRlZmluZWQgLSBpcyB0aGlzIGEgcHJvamVjdCBzcGVjaWZpYyBkZWZpbml0aW9uIG9yIGFuIGFscmVhZHkgaW50ZWdyYXRlZCBwaWVjZSBvZiBjb2RlPyBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGdvIGFib3V0IGZpbmRpbmcgaXQsIGFuZCBtYXkgY2hhbmdlIHRoZSBhcHByb2FjaC4gSSBjb3VsZCBqdXN0IGdyZXAgdGhyb3VnaCB0aGUgY29kZSBiYXNlIGFuZCBzZWUgaWYgaXQmIzM5O3MgdGhlcmUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2VhcmNoLCBtYXliZSBpbiB0aGUgaW5jbHVkZSBmaWxlcywgb3IgcG9zc2libHkgSSYjMzk7bGwgbmFycm93IG15IHNlYXJjaCB0byBhIHN1YmZvbGRlciB0aGF0IGlzIG1vcmUgcmVsZXZhbnQuIFRpbWUgdG8gZ2V0IHRvIHdvcmshCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfUEtUR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM4ND1tZW51IFwmIzM0O05ldHdvcmsgdGVzdGluZ1wmIzM0O1xubmV0L0tjb25maWctMzg1LVxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEdlbmVyYXRvciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBORVRfUEtUR0VOYCBsaXN0ZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGhvdyB0aGlzIGltcGFjdHMgdGhlIHN5c3RlbS4gTG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBuZXQvZXRodG9vbC9yaW5ncy5jYCBmaWxlLiBJIHJlY2FsbCB0aGF0IGBldGh0b29sYCBpbnRlcmFjdGlvbnMgYXJlIHNvbWV0aW1lcyBjb25kaXRpb25lZCBieSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb21waWxhdGlvbiBvZiB0aGF0IHNwZWNpZmljIGZpbGUgZGVwZW5kcyBvbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmbGFnLiBCaW5nbyEgSXQgbG9va3MgbGlrZSBgcmluZ3MuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2AgaXMgZW5hYmxlZC4gTm93IEkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L2V0aHRvb2wvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyB3aG9sZSB0aGluZyBoYW5ncyB0b2dldGhlciwgcGFydGljdWxhcmx5IHdpdGggdGhhdCBORVRMSU5LIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYWNrZXQgZ2VuZXJhdGlvbiwgZXRodG9vbCwgYW5kIHRoaXMgbmV0bGluayBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaW5nc1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9NYWtlZmlsZT03PWV0aHRvb2xfbmwteVx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcbm5ldC9ldGh0b29sL01ha2VmaWxlOjg6XHRcdCAgIGxpbmtzdGF0ZS5vIGRlYnVnLm8gd29sLm8gZmVhdHVyZXMubyBwcml2ZmxhZ3MubyByaW5ncy5vIFxcXG5uZXQvZXRodG9vbC9NYWtlZmlsZS05LVx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgYGV0aHRvb2xfbmwteWAgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgc28gKmBldGh0b29sX25sLXlgKi4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgZmlsZSwgaXNuJiMzOTt0IGl0PyBUaGUgb25lIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBtb2R1bGVzIGdldCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSB3aG9sZSBxdWVzdGlvbiBib2lscyBkb3duIHRvICp3aGVuKiBleGFjdGx5IGRvZXMgdGhpcyBzcGVjaWZpYyBmaWxlIGdldCBjb21waWxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRpbWluZyBvZiB0aGF0IGNvbXBpbGF0aW9uLiBLbm93aW5nICp3aGVuKiB3aWxsIGlsbHVtaW5hdGUgdGhlIGRlcGVuZGVuY2llcywgYnVpbGQgb3JkZXIsIGFuZCBwb3RlbnRpYWxseSwgYW55IGltcGxpY2l0IGNvbmRpdGlvbmFsIGxvZ2ljIGluIHRoZSBtYWtlZmlsZXMgb3IgYnVpbGQgc3lzdGVtIHRoYXQgY29udHJvbHMgaXQuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2Ygd2hhdCBJIG5lZWQgdG8gZmlndXJlIG91dC4gSSBzdXNwZWN0IHRoZSBhbnN3ZXIgaXMgbGlua2VkIHRvIHRoZSBidWlsZCBzeXN0ZW0mIzM5O3MgZGVjaXNpb24gdHJlZSwgYnV0IEkgY2FuJiMzOTt0IHF1aXRlIHNlZSB0aGUgdHJpZ2dlciBmb3IgdGhhdCBjb21waWxhdGlvbiB5ZXQuIFNvLCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBXaGVuIGlzIGBldGh0b29sX25sLXlgIGNvbXBpbGVkPyBUaGF0JiMzOTtzIHRoZSBxdWVzdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9ubCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL01ha2VmaWxlPTM9b2JqLXlcdFx0XHRcdCYjNDM7PSBpb2N0bC5vIGNvbW1vbi5vXG5uZXQvZXRodG9vbC9NYWtlZmlsZS00LVxubmV0L2V0aHRvb2wvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfRVRIVE9PTF9ORVRMSU5LKVx0JiM0Mzs9IGV0aHRvb2xfbmwub1xubmV0L2V0aHRvb2wvTWFrZWZpbGUtNi1cbm5ldC9ldGh0b29sL01ha2VmaWxlOjc6ZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxubmV0L2V0aHRvb2wvTWFrZWZpbGUtOC1cdFx0ICAgbGlua3N0YXRlLm8gZGVidWcubyB3b2wubyBmZWF0dXJlcy5vIHByaXZmbGFncy5vIHJpbmdzLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NDUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQ2hlY2tpbmcgZm9yIEVUSFRPT0xfTkVUTElOSyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBFVEhUT09MX05FVExJTktgIGhlcmUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY29uZmlybSB3aGVyZSB0aGF0JiMzOTtzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBleHBsaWNpdGx5IGVuYWJsZWQgb3IgY29uZmlndXJhYmxlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBtb3N0IGxpa2VseSB0byBiZSBsdXJraW5nIGluIGVpdGhlciBgbmV0L2V0aHRvb2wvS2NvbmZpZ2Agb3IsIHBlcmhhcHMgbW9yZSBicm9hZGx5LCBgbmV0L0tjb25maWdgLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSXQmIzM5O3MgYSBxdWljayBzY2FuLCBsb29raW5nIGZvciB0aGF0IHNwZWNpZmljIHN5bWJvbCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFVEhUT09MX05FVExJTksmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NTA3PWNvbmZpZyBGQUlMT1ZFUlxuLS1cbm5ldC9LY29uZmlnLTUxOS1cbm5ldC9LY29uZmlnOjUyMDpjb25maWcgRVRIVE9PTF9ORVRMSU5LXG5uZXQvS2NvbmZpZy01MjEtXHRib29sIFwmIzM0O05ldGxpbmsgaW50ZXJmYWNlIGZvciBldGh0b29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290LiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBORVRfU0NIX0ZRYCwgYE5FVF9QS1RHRU5gLCBhbmQgYEVUSFRPT0xfTkVUTElOS2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGVzZSBjb25maWdzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYG5ldC9zY2hlZC9zY2hfZnEuY2AsIEkmIzM5O20gc2VlaW5nIGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGFuZCBgZnFfY2xhc3NpZnlgIGFzIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gVGhvc2UgYXJlIHRoZSB0cmFmZmljIHNoYXBpbmcgYml0cy4gSW4gYG5ldC9jb3JlL3BrdGdlbi5jYCwgSSBoYXZlIGBwa3RnZW5faWZfd3JpdGVgIGFuZCBgcGt0Z2VuX3htaXRgLCB3aGljaCBhcmUgaW52b2x2ZWQgaW4gcGFja2V0IGdlbmVyYXRpb24uIEFuZCBpbiBgbmV0L2V0aHRvb2wvcmluZ3MuY2AsIEkgc2VlIGBldGhubF9zZXRfcmluZ3NgIGFuZCBgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlYCwgd2hpY2ggZGVhbHMgd2l0aCBuZXR3b3JrIHJpbmcgY29uZmlndXJhdGlvbiB0aHJvdWdoIG5ldGxpbmsuCgpUaGVuIEkgc2VlIHNvbWUgZnVuY3Rpb25zIGluIGEgZHJpdmVyLiBIb2xkIG9uLi4uIGBpZHBmYCBpcyBhbiBJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBsYW5lIEZ1bmN0aW9uIGRyaXZlci4gTm93LCBpcyB0aGF0IGV2ZW4gcmVsZXZhbnQ/IFByb2JhYmx5IG5vdCBkaXJlY3RseSwgYmVjYXVzZSBpdCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgc28gcHJvYmFibHkgbm90IHJlbGV2YW50IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQnV0IHRoZSB1bmRlcmx5aW5nIG5ldHdvcmtpbmcgY2hhbmdlcyBhcmUgdGhlIGltcG9ydGFudCBwYXJ0cy4KClNvIEkgdGhpbmsgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gTm93LCBqdXN0IHRvIGJlIHN1cmUsIGxldCYjMzk7cyB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGF0IGBmcV9jaGFuZ2VgIGZ1bmN0aW9uIGluIGBuZXQvc2NoZWQvc2NoX2ZxLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcS5jPTEwNTg9c3RhdGljIGludCBmcV9sb2FkX3ByaW9tYXAoc3RydWN0IGZxX3NjaGVkX2RhdGEgKnEsXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jLTEwNzktXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTA4MDpzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9mcS5jLTEwODEtXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYz0xMjMzPXN0YXRpYyBpbnQgZnFfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy0xMjcxLVx0aWYgKG9wdClcbm5ldC9zY2hlZC9zY2hfZnEuYzoxMjcyOlx0XHRlcnIgPSBmcV9jaGFuZ2Uoc2NoLCBvcHQsIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTI3My1cdGVsc2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmM9MTM4OT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTM5OC1cdC5kZXN0cm95XHQ9XHRmcV9kZXN0cm95LFxubmV0L3NjaGVkL3NjaF9mcS5jOjEzOTk6XHQuY2hhbmdlXHRcdD1cdGZxX2NoYW5nZSxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xNDAwLVx0LmR1bXBcdFx0PVx0ZnFfZHVtcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIEZRIExvZ2ljKioKClJpZ2h0LCBgZnFfY2hhbmdlYCBpcyB3aGVyZSBpdCBhbGwgYmVnaW5zLCB0aGUgaW5pdGlhbCBzZXR1cCBmb3IgdGhlIGZhaXIgcXVldWluZyBkaXNjaXBsaW5lLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCB0aGUgZW50cnkgdG8gYWxsIHRoZSBhY3Rpb24uIE5vdywgdGhlIHJlYWwgbWVhdCBvZiBpdCBpcyBnb2luZyB0byBiZSBpbiBob3cgaXQgYWN0dWFsbHkgKmZ1bmN0aW9ucyouIEkgbmVlZCB0byBnZXQgZG93biBpbnRvIHRoZSB3ZWVkcyBhbmQgc2VlIGhvdyB0aGUgcGFja2V0cyBhcmUgYmVpbmcgaGFuZGxlZCwgaG93IHRyYWZmaWMgaXMgYWN0dWFsbHkgbWFuYWdlZCBvbmNlIGl0JiMzOTtzIGluIHRoZSBxdWV1ZS4gTXkgZm9jdXMgbm93IGlzIGRlZmluaXRlbHkgb24gYGZxX2RlcXVldWVgIGFuZCBgZnFfY2xhc3NpZnlgIOKAkyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHJlYWxseSB3YW50IHRvIHVuZGVyc3RhbmQuIExldCYjMzk7cyBzZWUgaG93IHRoZSBxdWV1ZWQgcGFja2V0cyBhcmUgc2VsZWN0ZWQgYW5kIHdoaWNoIG9uZXMgZ2V0IGEgcHJpb3JpdHkgYnVtcCBvciBhIHNodW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcV9kZXF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnEuYz02OT1zdHJ1Y3QgZnFfZmxvdyB7XG5uZXQvc2NoZWQvc2NoX2ZxLmM6NzA6LyogRmlyc3QgY2FjaGUgbGluZSA6IHVzZWQgaW4gZnFfZ2MoKSwgZnFfZW5xdWV1ZSgpLCBmcV9kZXF1ZXVlKCkgKi9cbm5ldC9zY2hlZC9zY2hfZnEuYy03MS1cdHN0cnVjdCByYl9yb290XHR0X3Jvb3Q7XG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jPTExMT1zdHJ1Y3QgZnFfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jLTEzMi1cbm5ldC9zY2hlZC9zY2hfZnEuYzoxMzM6XHR1bnNpZ25lZCBpbnQgYmFuZF9ucjsgLyogYmFuZCBiZWluZyBzZXJ2aWNlZCBpbiBmcV9kZXF1ZXVlKCkgKi9cbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzQtXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jPTQ4Nj1zdGF0aWMgdm9pZCBmcV9lcmFzZV9oZWFkKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZnFfZmxvdyAqZmxvdyxcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNTAyLSAqL1xubmV0L3NjaGVkL3NjaF9mcS5jOjUwMzpzdGF0aWMgdm9pZCBmcV9kZXF1ZXVlX3NrYihzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGZxX2Zsb3cgKmZsb3csXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNTA0LVx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jPTY5OT1zdGF0aWMgc3RydWN0IGZxX2Zsb3dfaGVhZCAqZnFfcGJhbmRfaGVhZF9zZWxlY3Qoc3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy03MDktXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NzEwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnEuYy03MTEte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy03MjgtXHRcdHEtXHUwMDNlaW50ZXJuYWwucWxlbi0tO1xubmV0L3NjaGVkL3NjaF9mcS5jOjcyOTpcdFx0ZnFfZGVxdWV1ZV9za2Ioc2NoLCBcdTAwMjZxLVx1MDAzZWludGVybmFsLCBza2IpO1xubmV0L3NjaGVkL3NjaF9mcS5jLTczMC1cdFx0cmV0dXJuIHNrYjtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNzc2LVx0XHRwcmVmZXRjaChcdTAwMjZza2ItXHUwMDNlZW5kKTtcbm5ldC9zY2hlZC9zY2hfZnEuYzo3Nzc6XHRcdGZxX2RlcXVldWVfc2tiKHNjaCwgZiwgc2tiKTtcbm5ldC9zY2hlZC9zY2hfZnEuYy03NzgtXHRcdGlmICh1bmxpa2VseSgoczY0KShub3cgLSB0aW1lX25leHRfcGFja2V0IC0gcS1cdTAwM2VjZV90aHJlc2hvbGQpIFx1MDAzZSAwKSkge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYz0xMzg5PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzkzLVx0LmVucXVldWVcdD1cdGZxX2VucXVldWUsXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTM5NDpcdC5kZXF1ZXVlXHQ9XHRmcV9kZXF1ZXVlLFxubmV0L3NjaGVkL3NjaF9mcS5jLTEzOTUtXHQucGVla1x0XHQ9XHRxZGlzY19wZWVrX2RlcXVldWVkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk1NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBOZXR3b3JrIEludGVyZmFjZSBSaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYGZxX2RlcXVldWVgIGlzIHByb3ZpbmcgdG8gYmUgYSBzb2xpZCBzb2x1dGlvbiBpbiB0aGlzIGNvbnRleHQuIE15IHByaW1hcnkgaW50ZXJlc3Qgbm93IGlzIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJpbmdzIGFyZSBhY3R1YWxseSBjb25maWd1cmVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBldGh0b29sIGZyYW1ld29yay4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG5ldC9ldGh0b29sL3JpbmdzLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBldGhubF9zZXRfcmluZ3NgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIHJpbmcgc2V0dGluZ3MsIGxpa2VseSByZWxhdGVkIHRvIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHF1ZXVlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzZXR0aW5ncywgYXJlIGJlaW5nIHRyYW5zbGF0ZWQgaW50byBsb3ctbGV2ZWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIC0gYXJlIHdlIGRpcmVjdGx5IG1hbmlwdWxhdGluZyByZWdpc3RlcnMsIHVzaW5nIHNwZWNpZmljIGRyaXZlci1kZWZpbmVkIGNhbGxzLCBvciBpbnRlcmFjdGluZyB3aXRoIGEgbW9yZSBnZW5lcmljIGludGVyZmFjZT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSByaW5nIHNpemUsIGludGVycnVwdCBtb2RlcmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBSU1MgcGFyYW1ldGVycy4gVGhpcyBzaG91bGQgaW5mb3JtIGFueSBwb3RlbnRpYWwgdHVuaW5nIGRlY2lzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRobmxfc2V0X3JpbmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvcmluZ3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9yaW5ncy5jPTE2MT1zdGF0aWMgaW50XG5uZXQvZXRodG9vbC9yaW5ncy5jOjE2MjpldGhubF9zZXRfcmluZ3NfdmFsaWRhdGUoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbm5ldC9ldGh0b29sL3JpbmdzLmMtMTYzLVx0XHRcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL3JpbmdzLmM9MjM1PXN0YXRpYyBpbnRcbm5ldC9ldGh0b29sL3JpbmdzLmM6MjM2OmV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2V0aHRvb2wvcmluZ3MuYy0yMzcte1xuLS1cbm5ldC9ldGh0b29sL3JpbmdzLmM9MzM3PWNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9yaW5nc19yZXF1ZXN0X29wcyA9IHtcbi0tXG5uZXQvZXRodG9vbC9yaW5ncy5jLTM0Ny1cbm5ldC9ldGh0b29sL3JpbmdzLmM6MzQ4Olx0LnNldF92YWxpZGF0ZVx0XHQ9IGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZSxcbm5ldC9ldGh0b29sL3JpbmdzLmM6MzQ5Olx0LnNldFx0XHRcdD0gZXRobmxfc2V0X3JpbmdzLFxubmV0L2V0aHRvb2wvcmluZ3MuYy0zNTAtXHQuc2V0X250Zl9jbWRcdFx0PSBFVEhUT09MX01TR19SSU5HU19OVEYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBhY2tldCBHZW5lcmF0aW9uIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBgZXRobmxfc2V0X3JpbmdzYCBzZWVtcyBsaWtlIGEgc29saWQgcGllY2Ugb2YgY29kZSwgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTm93LCBJIHdhbnQgdG8gZHJpbGwgZG93biBmdXJ0aGVyIGludG8gdGhlIHBhY2tldCBnZW5lcmF0aW9uIHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBwa3RnZW5faWZfd3JpdGVgIHdpdGhpbiBgbmV0L2NvcmUvcGt0Z2VuLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXItcHJvdmlkZWQgZGF0YSwgYW5kIGFueSBjb25maWd1cmF0aW9uLCBpcyBhY3R1YWxseSB0cmFuc2xhdGVkIGludG8gYSB3aXJlIGltYWdlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgZm9ybWF0dGluZywgY2hlY2tzdW0gY2FsY3VsYXRpb25zIChpZiBlbmFibGVkKSwgYW5kIGluc2VydGlvbiBpbnRvIHRoZSB0cmFuc21pdCBxdWV1ZSBhcmUgaGFwcGVuaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBwa3RnZW5faWZfd3JpdGVgIGFuZCBsb3dlci1sZXZlbCBuZXR3b3JraW5nIGNvbXBvbmVudHMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyBwYWNrZXQgaW5qZWN0aW9uIHBlcmZvcm1hbmNlIGFuZCBlbnN1cmluZyBhY2N1cmF0ZSBwYXlsb2FkIHRyYW5zbWlzc2lvbi4gSSYjMzk7bGwgbmVlZCB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBkYXRhIGNvcGllcywgYW5kIGFueSBsb2NraW5nIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBwYXRoIGZvciBwYWNrZXQgZ2VuZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcGt0Z2VuLmM9OTcxPXN0YXRpYyBfX3UzMiBwa3RnZW5fcmVhZF9mbGFnKGNvbnN0IGNoYXIgKmYsIGJvb2wgKmRpc2FibGUpXG4tLVxubmV0L2NvcmUvcGt0Z2VuLmMtOTk5LVxubmV0L2NvcmUvcGt0Z2VuLmM6MTAwMDpzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5uZXQvY29yZS9wa3RnZW4uYy0xMDAxLVx0XHRcdCAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0xOTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX2lmX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTE5NDItXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG5uZXQvY29yZS9wa3RnZW4uYzoxOTQzOlx0LnByb2Nfd3JpdGVcdD0gcGt0Z2VuX2lmX3dyaXRlLFxubmV0L2NvcmUvcGt0Z2VuLmMtMTk0NC1cdC5wcm9jX3JlbGVhc2VcdD0gc2luZ2xlX3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFBhY2tldCBHZW5lcmF0aW9uIFdvcmtmbG93KioKCkFscmlnaHQsIHNvIGBwa3RnZW5faWZfd3JpdGVgIGlzIGxvb2tpbmcgc29saWQuIFRoYXQgc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIGluaXRpYWwgaW50ZXJmYWNlIHdyaXRlIGFzIGV4cGVjdGVkLiBOb3csIEkgd2FudCB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGl0c2VsZi4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHBrdGdlbl94bWl0YCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvcGt0Z2VuLmNgLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBwcmVjaXNlbHkgaG93IHRoZSBnZW5lcmF0ZWQgcGFja2V0cyBhcmUgYWN0dWFsbHkgc2VudCBvdXQgb24gdGhlIHdpcmUgZnJvbSB0aGUgY29yZSwgZ2l2ZW4gdGhhdCBpbml0aWFsIGNoZWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgdG8gZW5zdXJlIHRoZSBwYXRoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZGVzaXJlZCBvcGVyYXRpb24sIGFuZCBmdWxseSB1bmRlcnN0YW5kIHRoZSB0cmFuc21pc3Npb24gYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGt0Z2VuX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9wa3RnZW4uYz0xMDAwPXN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0xNDA2LVx0XHRcdC8qIG1ha2Ugc3VyZSBuZXcgcGFja2V0IGlzIGFsbG9jYXRlZCBldmVyeSB0aW1lXG5uZXQvY29yZS9wa3RnZW4uYzoxNDA3Olx0XHRcdCAqIHBrdGdlbl94bWl0KCkgaXMgY2FsbGVkXG5uZXQvY29yZS9wa3RnZW4uYy0xNDA4LVx0XHRcdCAqL1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTM1NzI9c3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zNTg3LVxubmV0L2NvcmUvcGt0Z2VuLmM6MzU4ODpzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbm5ldC9jb3JlL3BrdGdlbi5jLTM1ODkte1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM2MDEtXHQgKiBwcmV2ZW50IHNvbWUgY29uY3VycmVudCBjaGFuZ2VzIGZyb20gc2xpcHBpbmcgaW4uIEFuZCB0aGUgc3RhYmlsaXplZFxubmV0L2NvcmUvcGt0Z2VuLmM6MzYwMjpcdCAqIGNvbmZpZyB3aWxsIGJlIHJlYWQgaW4gZHVyaW5nIHRoZSBuZXh0IHJ1biBvZiBwa3RnZW5feG1pdC5cbm5ldC9jb3JlL3BrdGdlbi5jLTM2MDMtXHQgKi9cbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zNzkwPXN0YXRpYyBpbnQgcGt0Z2VuX3RocmVhZF93b3JrZXIodm9pZCAqYXJnKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTM4MTYtXHRcdGlmIChsaWtlbHkocGt0X2RldikpIHtcbm5ldC9jb3JlL3BrdGdlbi5jOjM4MTc6XHRcdFx0cGt0Z2VuX3htaXQocGt0X2Rldik7XG5uZXQvY29yZS9wa3RnZW4uYy0zODE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY2MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHJ1bmRvd24gb2YgdGhlc2UgZnVuY3Rpb25zLCByZWZsZWN0aW5nIG15IGluaXRpYWwgYXNzZXNzbWVudDoKCioqRnVuY3Rpb25hbGl0eSBPdmVydmlldyoqCgpBbHJpZ2h0LCBzbyBgcGt0Z2VuX3htaXRgLCB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgc2VlbXMgdG8gYmUgaW4gYSBnb29kIHN0YXRlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBlY29zeXN0ZW0sIHRoZSBmb2N1cyBmdW5jdGlvbnMgc2VlbSB0byBiZTogYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYGV0aG5sX3NldF9yaW5nc2AsIGBwa3RnZW5faWZfd3JpdGVgLCBhbmQgb2YgY291cnNlIGBwa3RnZW5feG1pdGAuIE5lZWQgdG8ga2VlcCB0aGVzZSBmdW5jdGlvbnMgaW4gbWluZCB0byBlc3RhYmxpc2ggdGhlIGJpZyBwaWN0dXJlLiBMb29rcyBsaWtlIGBmcV9jbGFzc2lmeWAgaGFzIGFsc28gc2VlbiBzb21lIG1vZGlmaWNhdGlvbnM7IGdvaW5nIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMgdG8gdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG9mIGl0cyBpbmZsdWVuY2UuIEl0JiMzOTtzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciwgcmVsYXRlZCBmdW5jdGlvbnMgaW4gcGxheSB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuIEdvdHRhIGJlIG1ldGljdWxvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZxX2NsYXNzaWZ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnEuYz0zMTQ9c3RhdGljIGJvb2wgZnFfZmFzdHBhdGhfY2hlY2soY29uc3Qgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jLTM1NS1cbm5ldC9zY2hlZC9zY2hfZnEuYzozNTY6c3RhdGljIHN0cnVjdCBmcV9mbG93ICpmcV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9zY2hfZnEuYy0zNTctXHRcdFx0XHQgICB1NjQgbm93KVxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYz01OTk9c3RhdGljIGludCBmcV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy02MzItXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NjMzOlx0ZiA9IGZxX2NsYXNzaWZ5KHNjaCwgc2tiLCBub3cpO1xubmV0L3NjaGVkL3NjaF9mcS5jLTYzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTmV0d29yayBJbnRlcmZhY2UgSW5mb3JtYXRpb24gSGFuZGxpbmcqKgoKQWxyaWdodCwgYGZxX2NsYXNzaWZ5YCBpcyBkZWZpbml0ZWx5IGEgc29saWQgcGllY2Ugb2YgdGhlIHB1enpsZSwgc2VlbXMgd2VsbCBpbXBsZW1lbnRlZCBmcm9tIHdoYXQgSSByZW1lbWJlci4gQnV0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBkZWVwZXIsIGFuZCB0byBkbyB0aGF0IEkgbmVlZCB0byBsb29rIGF0IGhvdyBpbnRlcmZhY2UgaW5mb3JtYXRpb24gaXMgYWN0dWFsbHkgZmlsbGVkLCBhbmQgdGhhdCBtZWFucyBJIG5lZWQgdG8gZ28gc3BlbHVua2luZyBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uICpydG5sX2ZpbGxfaWZpbmZvKiBzZWVtcyBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB3aGVyZSB0aGF0IGluZm9ybWF0aW9uIGlzIGNvbnN0cnVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBuZXRsaW5rIGNvZGUgZGlyZWN0bHkgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSBpdHMgc3BlY2lmaWMgYmVoYXZpb3IuIEkgYmV0IEkgY2FuIGdhaW4gc29tZSBuZXcgaW5zaWdodHMgaW50byB0aGUgaW50ZXJmYWNlIG1ldGFkYXRhIHBvcHVsYXRpb24gd2l0aGluIHRoYXQgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2ZpbGxfaWZpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmM9MjA2OD1zdGF0aWMgaW50IHJ0bmxfZmlsbF9kcGxsX3BpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwODktXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDkwOnN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA5MS1cdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqc3JjX25ldCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNTI0PXN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU5OS1cdFx0XHRjb250aW51ZTtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2MDA6XHRcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8oc2tiLCBkZXYsIG5ldCwgUlRNX05FV0xJTkssXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjAxLVx0XHRcdFx0ICAgICAgIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDI1Nj1zdGF0aWMgaW50IHJ0bmxfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzI4LVx0aWYgKG5za2IpXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MzI5Olx0XHRlcnIgPSBydG5sX2ZpbGxfaWZpbmZvKG5za2IsIGRldiwgbmV0LFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDMzMC1cdFx0XHRcdCAgICAgICBSVE1fTkVXTElOSywgTkVUTElOS19DQihza2IpLnBvcnRpZCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NTQ5PXN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1NjgtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTY5Olx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgZGV2X25ldChkZXYpLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU3MC1cdFx0XHQgICAgICAgdHlwZSwgcG9ydGlkLCBzZXEsIGNoYW5nZSwgMCwgMCwgZXZlbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDA3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTYwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqQXNzZXNzbWVudCBvZiBOZXRsaW5rIGFuZCBFdGh0b29sIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYHJ0bmxfZmlsbF9pZmluZm9gIGlzIGEgcHJldHR5IGJyb2FkIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgdXNlZCBxdWl0ZSBhIGJpdCBpbiBuZXRsaW5rIGR1bXBzLiBXaGlsZSBpdCB3b3JrcywgaXQmIzM5O3MgYSBiaXQgb2YgYSBob3Qgc3BvdCBpbiB0aGUgY29kZSwgd2hpY2ggY291bGQgbGVhZCB0byBzb21lIHNrZXdlZCByZXN1bHRzIGlmIEkmIzM5O20gZnV6emluZyB3aXRoIGl0LiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gc2tpcCBpdCBmb3Igbm93LiBJIHdhbnQgdG8gdHJ5IHRvIGtlZXAgdGhlIGZ1enppbmcgYmFsYW5jZWQgYWNyb3NzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmdgIGluc2lkZSBgbmV0L2V0aHRvb2wvY29tbW9uLmNgLiBJIG5lZWQgdG8gcmV2aWV3IHRoaXMgZm9yIHNvbWUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5jPTkyND1pbnQgZXRodG9vbF9jaGVja19vcHMoY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMpXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmMtOTQyLVxubmV0L2V0aHRvb2wvY29tbW9uLmM6OTQzOnZvaWQgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvY29tbW9uLmMtOTQ0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnBhcmFtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM2NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiB0aGUgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZ2AgaXMgYW5vdGhlciBnZXQgZnVuY3Rpb24sIGFuZCBmcmFua2x5LCBub3QgYXMgaW50cmlndWluZyBhcyB0aGUgc2V0IGZ1bmN0aW9ucyB3ZSYjMzk7cmUgbG9va2luZyBhdC4gV2UmIzM5O3JlIGdvaW5nIHRvIGtlZXAgb3VyIGF0dGVudGlvbiBmaXJtbHkgb24gdGhlc2U6IGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGBmcV9jbGFzc2lmeWAsIGBldGhubF9zZXRfcmluZ3NgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYW5kIGBwa3RnZW5feG1pdGAuIFRob3NlIHNlZW0gdG8gYmUgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZywgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmlwdWxhdGlvbiBvZiB0aGUgc3lzdGVtLgoKTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIHRoZW1zZWx2ZXMsIHdlIGhhdmUgYE5FVF9TQ0hfRlFgLCBgTkVUX1BLVEdFTmAsIGFuZCBgRVRIVE9PTF9ORVRMSU5LYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfRlFgIHRob3VnaC4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gb3Zlcmxvb2sgYW55IGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50cyB0aGVyZS4gRW5zdXJpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzIGluZGVwZW5kZW50bHkgdXNhYmxlIHdpbGwgYmUgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9GUSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz0zMjI9Y29uZmlnIE5FVF9TQ0hfUElFXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzMzLVxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzM1LVx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlF1aWNrIE5ldHdvcmsgU2NoZWR1bGVyIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgTkVUX1NDSF9GUWAuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSB0aGF0IG9uZSYjMzk7cyBnb3QgYW55IHBhcnRpY3VsYXJseSBjb21wbGV4IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gd29ycnkgYWJvdXQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgd2hpY2ggaXMgYWx3YXlzIG5pY2UuIE5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgTkVUX1BLVEdFTmAuIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHNjaGVkdWxlcjsgdGhlcmUgY291bGQgYmUgc3VidGxlIGludGVyYWN0aW9ucyBJJiMzOTttIG1pc3NpbmcgYXQgZmlyc3QgZ2xhbmNlLCBlc3BlY2lhbGx5IGlmIGl0IHVzZXMgY3VzdG9tIHBhY2tldCBnZW5lcmF0aW9uIHRlY2huaXF1ZXMuIEJldHRlciB0byBiZSB0aG9yb3VnaCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9QS1RHRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zODQ9bWVudSBcJiMzNDtOZXR3b3JrIHRlc3RpbmdcJiMzNDtcbm5ldC9LY29uZmlnLTM4NS1cbm5ldC9LY29uZmlnOjM4Njpjb25maWcgTkVUX1BLVEdFTlxubmV0L0tjb25maWctMzg3LVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBEZXBlbmRlbmNpZXMgaW4gTmV0d29yayBQYWNrZXQgR2VuZXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBgTkVUX1BLVEdFTmAgaXMgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIEdlbmVyYWxseSwgaXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIHRoYXQgYE5FVF9QS1RHRU5gIHJlbGllcyBvbiBgSU5FVGAsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBJJiMzOTttIG5vdCB0b28gY29uY2VybmVkIGFib3V0IHRoYXQgcGFydGljdWxhciByZWxhdGlvbnNoaXAuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgZnVuY3Rpb24uCgpIb3dldmVyLCBJJiMzOTttIGZlZWxpbmcgYSBxdWljayBpdGNoIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgRVRIVE9PTF9ORVRMSU5LYCBpcyBzZXQgYXMgZXhwZWN0ZWQsIGdpdmVuIHRoZSBjb250ZXh0LiBKdXN0IHdhbnQgdG8gZWxpbWluYXRlIGFueSBwb3RlbnRpYWwgZ290Y2hhcy4gQSBxdWljayBzYW5pdHkgY2hlY2sgbmV2ZXIgaHVydHMsIGV2ZW4gd2hlbiB0aGluZ3MgKnNlZW0qIGZpbmUuIEEgbGl0dGxlIGR1ZSBkaWxpZ2VuY2UgaXMgYWx3YXlzIGEgZ29vZCB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMDc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVUSFRPT0xfTkVUTElOSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTUwNz1jb25maWcgRkFJTE9WRVJcbi0tXG5uZXQvS2NvbmZpZy01MTktXG5uZXQvS2NvbmZpZzo1MjA6Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xubmV0L0tjb25maWctNTIxLVx0Ym9vbCBcJiMzNDtOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU0NwoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggcmVsaWVzIG9uIGBFVEhUT09MX05FVExJTktgLCB3aGljaCwgb2YgY291cnNlLCBkZXBlbmRzIG9uIGJvdGggYE5FVGAgYW5kIGBORVRMSU5LYC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nPyBMZXQgbWUgc2VlLgoKQWxyaWdodCwgdGhlIGNvZGUgY2hhbmdlcyBmb2N1cyBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY2AuIFNob3VsZCBJIGJlIGNvbmNlcm5lZCBhYm91dCBhbiBgSURQRmAgY29uZmlnIHJlcXVpcmVtZW50IGhlcmU/IEJhc2VkIG9uIHRoZSBwcm9tcHQsIGl0IHNvdW5kcyBsaWtlIHRoaXMgaW52b2x2ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIHdoaWNoIHVzdWFsbHkgZXhwZWN0IGFjdHVhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhpbmtpbmcgYWJvdXQgaXQsIGBpZHBmYCBpcyBJbnRlbCYjMzk7cyBJbmZyYXN0cnVjdHVyZSBEYXRhIFBsYW5lIEZ1bmN0aW9uLCBhIGhhcmR3YXJlIGRyaXZlci4gVGhhdCBtYWtlcyBzZW5zZS4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gU28sIEkgY2FuIGRpc3JlZ2FyZCB0aGUgYGlkcGZgIGNoYW5nZXMgZm9yIGZ1enppbmcgcHVycG9zZXMgYmVjYXVzZSB0aGV5IGxpa2VseSB3b24mIzM5O3QgYmUgdHJpZ2dlcmVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4KCkhvd2V2ZXIsIHRoZSBrZXkgbmV0d29ya2luZyBjb21wb25lbnRzIHRoYXQgKmFyZSogY2hhbmdlZCAtIGxpa2UgYHNjaF9mcS5jYCwgYHBrdGdlbi5jYCwgYW5kIHRoZSBldGh0b29sIGludGVyZmFjZSAtIHRoZXNlIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgZXZlbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc3ludGhlc2l6ZSB0aGlzLiBXZSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6CgoqICAgYGZxX2NoYW5nZWAKKiAgIGBmcV9kZXF1ZXVlYAoqICAgYGZxX2NsYXNzaWZ5YAoqICAgYGV0aG5sX3NldF9yaW5nc2AKKiAgIGBwa3RnZW5faWZfd3JpdGVgCiogICBgcGt0Z2VuX3htaXRgCgpBbmQgd2UmIzM5O2xsIGVuYWJsZSB0aGVzZSBjb25maWd1cmF0aW9uczoKCiogICBgTkVUX1NDSF9GUWAKKiAgIGBORVRfUEtUR0VOYAoqICAgYEVUSFRPT0xfTkVUTElOS2AKClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCB0b3VjaGVzIHRoZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKGBzY2hfZnEuY2ApLCB0aGUgcGFja2V0IGdlbmVyYXRvciAoYHBrdGdlbi5jYCksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSB0byBlbmFibGUgdGhpcyBob3Jpem9uLiBHaXZlbiB0aGF0IHRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZnV6emluZyBpcyBhcHByb3ByaWF0ZSwgZXZlbiBpZiB0aGUgZHJpdmVyIGNoYW5nZXMgYXJlIGhhcmR3YXJlLXNwZWNpZmljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAwNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSF9GUSYjMzQ7LAogICAgJiMzNDtORVRfUEtUR0VOJiMzNDssCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZxX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2ZxX2NsYXNzaWZ5JiMzNDssCiAgICAmIzM0O2V0aG5sX3NldF9yaW5ncyYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OywKICAgICYjMzQ7cGt0Z2VuX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCBtb2RpZmllcyB0aGUgY29yZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKHNjaF9mcS5jKSwgdGhlIHBhY2tldCBnZW5lcmF0b3IgKHBrdGdlbi5jKSwgYW5kIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIChyaW5ncy5jKSB0byBzdXBwb3J0IGNvbmZpZ3VyaW5nIGFuZCB1c2luZyB0aGlzIGhvcml6b24uIFRoZXNlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgdG8gdGhlIGlkcGYgZHJpdmVyIGFyZSBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgbm90IGVtdWxhdGVkLCBidXQgdGhlIGNvcmUgY2hhbmdlcyBhcmUgc3VmZmljaWVudCB0byB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7LAogICAgJiMzNDtFVEhUT09MX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmcV9jbGFzc2lmeSYjMzQ7LAogICAgJiMzNDtldGhubF9zZXRfcmluZ3MmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDssCiAgICAmIzM0O3BrdGdlbl94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbi4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgRmFpciBRdWV1ZSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfZnEuYyksIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIChwa3RnZW4uYyksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSAocmluZ3MuYykgdG8gc3VwcG9ydCBjb25maWd1cmluZyBhbmQgdXNpbmcgdGhpcyBob3Jpem9uLiBUaGVzZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIHRvIHRoZSBpZHBmIGRyaXZlciBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCBlbXVsYXRlZCwgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIHN1ZmZpY2llbnQgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6Mjk6MzEuMzY1NDE0MjE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MzU4MTUwNTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfRlFcIixcbiAgICBcIk5FVF9QS1RHRU5cIixcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwiZnFfZGVxdWV1ZVwiLFxuICAgIFwiZnFfY2xhc3NpZnlcIixcbiAgICBcImV0aG5sX3NldF9yaW5nc1wiLFxuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCIsXG4gICAgXCJwa3RnZW5feG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBmb3IgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbi4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgRmFpciBRdWV1ZSBwYWNrZXQgc2NoZWR1bGVyIChzY2hfZnEuYyksIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIChwa3RnZW4uYyksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSAocmluZ3MuYykgdG8gc3VwcG9ydCBjb25maWd1cmluZyBhbmQgdXNpbmcgdGhpcyBob3Jpem9uLiBUaGVzZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIHRvIHRoZSBpZHBmIGRyaXZlciBhcmUgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCBlbXVsYXRlZCwgYnV0IHRoZSBjb3JlIGNoYW5nZXMgYXJlIHN1ZmZpY2llbnQgdG8gd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzoyOTozMS4zNjU0MjE2NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzg3MzAyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNmQzMmI3Mzk1ODQ1NTk1NThlOTY0YTJkNzAzYjc5ZjIyNDhiNGJhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDA3OjI5OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuaW5kZXggNWRkNGQxYjVkOTRiYmIuLmM3ODA2ODRjYTFiYzBjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuQEAgLTQ0OCw2ICs0NDgsMTIgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBoZHMtdGhyZXNoLW1heFxcbiAgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcXG4rICAgICAgICB0eXBlOiB1MzJcXG4gXFxuICAgLVxcbiAgICAgbmFtZTogbW0tc3RhdFxcbkBAIC0yMTY4LDYgKzIxNzQsOCBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIHR4LXB1c2gtYnVmLWxlbi1tYXhcXG4gICAgICAgICAgICAgLSBoZHMtdGhyZXNoXFxuICAgICAgICAgICAgIC0gaGRzLXRocmVzaC1tYXhcXG4rICAgICAgICAgICAgLSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uXFxuKyAgICAgICAgICAgIC0gcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcXG4gICAgICAgZHVtcDogKnJpbmctZ2V0LW9wXFxuICAgICAtXFxuICAgICAgIG5hbWU6IHJpbmdzLXNldFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcXG5pbmRleCA1MTJmNmQ2ZmEzZDhmOC4uM2I5Y2UxYzZlMTA1NzggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XFxuQEAgLTE4Myw3ICsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcXG4gc3RydWN0IGRwbGxfcGluKiAgICAgICAgICAgICAgICAgICAgZHBsbF9waW5cXG4gc3RydWN0IGhsaXN0X2hlYWQgICAgICAgICAgICAgICAgICAgcGFnZV9wb29sc1xcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcXG4tdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b25cXG4rdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjaW5nX29mZmxvYWRfaG9yaXpvblxcbit1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxcbiBzdHJ1Y3RfbmFwaV9jb25maWcqICAgICAgICAgICAgICAgICBuYXBpX2NvbmZpZ1xcbiB1bnNpZ25lZF9sb25nICAgICAgICAgICAgICAgICAgICAgICBncm9fZmx1c2hfdGltZW91dFxcbiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2RlZmVyX2hhcmRfaXJxc1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xcbmluZGV4IGJiOTlkOWU3YzY1ZDUxLi41ZGRmMzQ3OTI3ZGMzZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xcbkBAIC0xODAxLDcgKzE4MDEsOCBAQCBzdGF0aWMgdm9pZCBpZHBmX2dldF90c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsXFxuLVxcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQsXFxuK1xcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQgfFxcbitcXHRcXHRcXHRcXHQgIEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcXG4gXFx0LmdldF9tc2dsZXZlbFxcdFxcdD0gaWRwZl9nZXRfbXNnbGV2ZWwsXFxuIFxcdC5zZXRfbXNnbGV2ZWxcXHRcXHQ9IGlkcGZfc2V0X21zZ2xldmVsLFxcbiBcXHQuZ2V0X2xpbmtcXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xcbmluZGV4IGNmOTY2ZmU2Yzc1OWNlLi5kZTQxNzBjMmFhM2JhMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcXG5AQCAtODg4LDYgKzg4OCwxMSBAQCBzdGF0aWMgaW50IGlkcGZfY2ZnX25ldGRldihzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIFxcdG5ldGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSB2cG9ydC1cXHUwMDNlbWF4X210dTtcXG4gXFxuK1xcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVxcdTAwM2VkZmx0X3F2X3JzcmMudHhxX21vZGVsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlkcGZfaXNfY2FwX2VuYShhZGFwdGVyLCBJRFBGX09USEVSX0NBUFMsXFxuK1xcdFxcdFxcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxcbitcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gMTI4MDAwO1xcbitcXG4gXFx0ZGZsdF9mZWF0dXJlcyA9IE5FVElGX0ZfU0dcXHR8XFxuIFxcdFxcdFxcdE5FVElGX0ZfSElHSERNQTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjhmMTFkZTU3YzhiYzc3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuQEAgLTEsNiArMSw4IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gLyogQ29weXJpZ2h0IChDKSAyMDIzIEludGVsIENvcnBvcmF0aW9uICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0cG9sbC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcImlkcGYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlkcGZfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpZHBmX3ZpcnRjaG5sLmhcXFwiXFxuQEAgLTI0MDgsOSArMjQxMCwxMyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcyxcXG4gXFx0XFx0XFx0XFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxcbiB7XFxuLVxcdCoodTMyICopXFx1MDAyNmRlc2MtXFx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLVxcdTAwM2VkdHlwZSB8IHRkX2NtZCk7XFxuK1xcdCooX19sZTMyICopXFx1MDAyNmRlc2MtXFx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9IGNwdV90b19sZTMyKCh1OCkocGFyYW1zLVxcdTAwM2VkdHlwZSB8IHRkX2NtZCkpO1xcbiBcXHRkZXNjLVxcdTAwM2VmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7XFxuIFxcdGRlc2MtXFx1MDAzZWZsb3cucXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KHBhcmFtcy1cXHUwMDNlY29tcGxfdGFnKTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzBdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF07XFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzFdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzJdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl07XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0zMDExLDYgKzMwMTcsNjMgQEAgc3RhdGljIGJvb2wgaWRwZl90eF9zcGxpdHFfbmVlZF9yZShzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSlcXG4gXFx0cmV0dXJuIGdhcCBcXHUwMDNlPSBJRFBGX1RYX1NQTElUUV9SRV9NSU5fR0FQO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp0eF9xLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXFxuK3tcXG4rXFx0Y29uc3QgaW50IHRzX2dyYW5fcG93MiA9IDk7XFxuK1xcdHU2NCB0cywgbm93LCBob3Jpem9uO1xcbitcXG4rXFx0aG9yaXpvbiA9IFJFQURfT05DRShza2ItXFx1MDAzZWRldi1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XFxuK1xcdGlmICghaG9yaXpvbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi9cXG4rXFx0aWYgKG5ldHBvbGxfdHhfcnVubmluZyhza2ItXFx1MDAzZWRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN3aXRjaCAoc2tiLVxcdTAwM2V0c3RhbXBfdHlwZSkge1xcbitcXHRjYXNlIFNLQl9DTE9DS19SRUFMVElNRTpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9hZGQoc2tiLVxcdTAwM2V0c3RhbXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0tCX0NMT0NLX01PTk9UT05JQzpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9tb25vX3RvX2FueShza2ItXFx1MDAzZXRzdGFtcCwgVEtfT0ZGU19UQUkpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0tCX0NMT0NLX1RBSTpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhza2ItXFx1MDAzZXRzdGFtcCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0bm93ID0ga3RpbWVfZ2V0X2Nsb2NrdGFpX25zKCk7XFxuK1xcdGlmICh0cyBcXHUwMDNjIG5vdylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogYmV5b25kIG9mZmxvYWQgaG9yaXpvbj8gc2V0IG92ZXJmbG93IGJpdCBvbmx5ICovXFxuK1xcdGlmICh0cyBcXHUwMDNlIG5vdyArIChob3Jpem9uICogTlNFQ19QRVJfVVNFQykpIHtcXG4rXFx0XFx0dHhfcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAxIFxcdTAwM2NcXHUwMDNjIDc7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0dHMgXFx1MDAzZVxcdTAwM2U9IHRzX2dyYW5fcG93MjtcXG4rXFxuK1xcdC8qIDAgaXMgdmFsaWQgMjRiIHRpbWVzdGFtcCwgYnV0IGFsc28gbWVhbnMgZmllbGQgdW5zZXQuXFxuK1xcdCAqIEFkZCA1MTIgbnMgKHRzX2dyYW5fcG93MikgdG8gYXZvaWQgdGhpcyBjYXNlXFxuK1xcdCAqL1xcbitcXHRpZiAoKHRzIFxcdTAwMjYgMHg3ZmZmZmYpID09IDApIHtcXG4rXFx0XFx0dHhfcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF0gPSAxO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHR4X3BhcmFtcy1cXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgXFx1MDAyNiAweGZmO1xcbitcXHR0eF9wYXJhbXMtXFx1MDAzZW9mZmxvYWQuZGVzY190c1sxXSA9ICh0cyBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdHR4X3BhcmFtcy1cXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDdmKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGlkcGZfdHhfc3BsaXRxX2ZyYW1lIC0gU2VuZHMgYnVmZmVyIG9uIFR4IHJpbmcgdXNpbmcgZmxleCBkZXNjcmlwdG9yc1xcbiAgKiBAc2tiOiBzZW5kIGJ1ZmZlclxcbkBAIC0zMDk3LDYgKzMxNjAsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRcXHR0eF9wYXJhbXMuZHR5cGUgPSBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEU7XFxuIFxcdFxcdHR4X3BhcmFtcy5lb3BfY21kID0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9FT1A7XFxuK1xcbitcXHRcXHRpZiAoc2tiLVxcdTAwM2V0c3RhbXApXFxuK1xcdFxcdFxcdGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUodHhfcSwgc2tiLCBcXHUwMDI2dHhfcGFyYW1zKTtcXG4rXFxuIFxcdFxcdC8qIFNldCB0aGUgUkUgYml0IHRvIHBlcmlvZGljYWxseSBcXFwiY2xlYW5cXFwiIHRoZSBkZXNjcmlwdG9yIHJpbmcuXFxuIFxcdFxcdCAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0XFxuIFxcdFxcdCAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5pbmRleCA0YmU1YjNiNmQzZWQyYi4uODY1NDA4YjU3YjBkNTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5AQCAtMTYxLDYgKzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHtcXG4gICogQHRzb19zZWdzOiBOdW1iZXIgb2Ygc2VnbWVudHMgdG8gYmUgc2VudFxcbiAgKiBAdHNvX2hkcl9sZW46IExlbmd0aCBvZiBoZWFkZXJzIHRvIGJlIGR1cGxpY2F0ZWRcXG4gICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3JcXG4rICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcFxcbiAgKi9cXG4gc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xcbiBcXHR1MzIgdHhfZmxhZ3M7XFxuQEAgLTE3NCw2ICsxNzUsNyBAQCBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7XFxuIFxcdHUxNiB0c29faGRyX2xlbjtcXG4gXFxuIFxcdHUxNiB0ZF9jbWQ7XFxuK1xcdHU4IGRlc2NfdHNbM107XFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXFxuQEAgLTg1LDYgKzg1LDggQEAgZW51bSB7XFxuICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlclxcbiAgKiBAaGRzX3RocmVzaDogUGFja2V0IHNpemUgdGhyZXNob2xkIGZvciBoZWFkZXIgZGF0YSBzcGxpdCAoSERTKVxcbiAgKiBAaGRzX3RocmVzaF9tYXg6IE1heGltdW0gc3VwcG9ydGVkIHNldHRpbmcgZm9yIEBoZHNfdGhyZXNob2xkXFxuKyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcXG4rICogQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjXFxuICAqXFxuICAqL1xcbiBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG5AQCAtOTcsNiArOTksOCBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG4gXFx0dTMyXFx0dHhfcHVzaF9idWZfbWF4X2xlbjtcXG4gXFx0dTMyXFx0aGRzX3RocmVzaDtcXG4gXFx0dTMyXFx0aGRzX3RocmVzaF9tYXg7XFxuK1xcdHUzMlxcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XFxuK1xcdHUzMlxcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTEwOCw2ICsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG4gICogQEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOOiBjYXB0dXJlIGZvciBzZXR0aW5nIHR4X3B1c2hfYnVmX2xlblxcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVDogY2FwdHVyZSBmb3Igc2V0dGluZyB0Y3BfZGF0YV9zcGxpdFxcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2hcXG4rICogQEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTjogY2FwdHVyZSBmb3Igc2V0dGluZyBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uXFxuICAqL1xcbiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xcbiBcXHRFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU5cXHRcXHQ9IEJJVCgwKSxcXG5AQCAtMTE3LDYgKzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XFxuIFxcdEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOXFx0PSBCSVQoNCksXFxuIFxcdEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVRcXHRcXHQ9IEJJVCg1KSxcXG4gXFx0RVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSU1xcdFxcdD0gQklUKDYpLFxcbitcXHRFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05cXHQ9IEJJVCg3KSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgX19FVEhfUlNTX0hBU0hfQklUKGJpdClcXHQoKHUzMikxIFxcdTAwM2NcXHUwMDNjIChiaXQpKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xcbiAgKlxcdEBkcGxsX3BpbjogUG9pbnRlciB0byB0aGUgU3luY0Ugc291cmNlIHBpbiBvZiBhIERQTEwgc3Vic3lzdGVtLFxcbiAgKlxcdFxcdCAgIHdoZXJlIHRoZSBjbG9jayBpcyByZWNvdmVyZWQuXFxuICAqXFxuLSAqXFx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggRURUIG9mZmxvYWQgaG9yaXpvbiBpbiBuc2VjLlxcbisgKlxcdEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBhY3RpdmUgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxcbisgKlxcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cXG4gICpcXHRAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSVxcbiAgKlxcdFxcdCAgICAgIHNldHRpbmdzLlxcbiAgKlxcdEBudW1fbmFwaV9jb25maWdzOlxcdG51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cyxcXG5AQCAtMjU1Miw3ICsyNTUzLDggQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiBcXHQvKiogQGlycV9tb2RlcjogZGltIHBhcmFtZXRlcnMgdXNlZCBpZiBJU19FTkFCTEVEKENPTkZJR19ESU1MSUIpLiAqL1xcbiBcXHRzdHJ1Y3QgZGltX2lycV9tb2RlclxcdCppcnFfbW9kZXI7XFxuIFxcbi1cXHR1NjRcXHRcXHRcXHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0dTMyXFx0XFx0XFx0cGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0dTMyXFx0XFx0XFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XFxuIFxcdHN0cnVjdCBuYXBpX2NvbmZpZ1xcdCpuYXBpX2NvbmZpZztcXG4gXFx0dTMyXFx0XFx0XFx0bnVtX25hcGlfY29uZmlncztcXG4gXFx0dTMyXFx0XFx0XFx0bmFwaV9kZWZlcl9oYXJkX2lycXM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuQEAgLTE5Myw2ICsxOTMsOCBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVgsXFxuIFxcdEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxcbiBcXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXFxuK1xcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxcbitcXHRFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVgsXFxuIFxcbiBcXHRfX0VUSFRPT0xfQV9SSU5HU19DTlQsXFxuIFxcdEVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSlcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xcbmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xcbisrKyBiL25ldC9jb3JlL3BrdGdlbi5jXFxuQEAgLTIwMSw2ICsyMDEsNyBAQFxcbiBcXHRwZihTVklEX1JORClcXHRcXHQvKiBSYW5kb20gU1ZMQU4gSUQgKi9cXHRcXHRcXHRcXFxcXFxuIFxcdHBmKE5PREUpXFx0XFx0LyogTm9kZSBtZW1vcnkgYWxsb2MqL1xcdFxcdFxcdFxcXFxcXG4gXFx0cGYoU0hBUkVEKVxcdFxcdC8qIFNoYXJlZCBTS0IgKi9cXHRcXHRcXHRcXFxcXFxuK1xcdHBmKFRYVElNRSlcXHRcXHQvKiBTT19UWFRJTUUgc3VwcG9ydCAqL1xcdFxcdFxcdFxcXFxcXG4gXFxuICNkZWZpbmUgcGYoZmxhZylcXHRcXHRmbGFnIyNfU0hJRlQsXFxuIGVudW0gcGt0X2ZsYWdzIHtcXG5AQCAtMjkxLDYgKzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1NjQgZGVsYXk7XFx0XFx0LyogbmFuby1zZWNvbmRzICovXFxuIFxcbitcXHQvKiBUWFRJTUUgc3VwcG9ydCAqL1xcbitcXHR1NjQgdHh0aW1lX2RlbGF5O1xcdC8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi9cXG4rXFx0Y2xvY2tpZF90IHR4dGltZV9jbG9ja2lkOyAvKiBjbG9ja2lkIGZvciBTT19UWFRJTUUgKi9cXG4rXFxuIFxcdF9fdTY0IGNvdW50O1xcdFxcdC8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovXFxuIFxcdF9fdTY0IHNvZmFyO1xcdFxcdC8qIEhvdyBtYW55IHBrdHMgd2UndmUgc2VudCBzbyBmYXIgKi9cXG4gXFx0X191NjQgdHhfYnl0ZXM7XFx0XFx0LyogSG93IG1hbnkgYnl0ZXMgd2UndmUgdHJhbnNtaXR0ZWQgKi9cXG5AQCAtNjY2LDYgKzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiBcXHRpZiAocGt0X2Rldi1cXHUwMDNlbm9kZSBcXHUwMDNlPSAwKVxcbiBcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiAgICAgbm9kZTogJWRcXFxcblxcXCIsIHBrdF9kZXYtXFx1MDAzZW5vZGUpO1xcbiBcXG4rXFx0aWYgKHBrdF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRl9UWFRJTUUpIHtcXG4rXFx0XFx0Y2xvY2tpZF90IGNsb2NraWQgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xcbitcXG4rXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIgICAgIHR4dGltZV9kZWxheTogJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXkpO1xcbitcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiAgICAgdHh0aW1lX2Nsb2NraWQ6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBjbG9ja2lkID09IENMT0NLX01PTk9UT05JQyA/IFxcXCJtb25vdG9uaWNcXFwiIDpcXG4rXFx0XFx0XFx0ICAgY2xvY2tpZCA9PSBDTE9DS19SRUFMVElNRSA/IFxcXCJyZWFsdGltZVxcXCIgOlxcbitcXHRcXHRcXHQgICBjbG9ja2lkID09IENMT0NLX1RBSSA/IFxcXCJ0YWlcXFwiIDogXFxcInVua25vd25cXFwiKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHBrdF9kZXYtXFx1MDAzZXhtaXRfbW9kZSA9PSBNX05FVElGX1JFQ0VJVkUpXFxuIFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIiAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXFxcXG5cXFwiKTtcXG4gXFx0ZWxzZSBpZiAocGt0X2Rldi1cXHUwMDNleG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVClcXG5AQCAtMTE0MSw2ICsxMTU3LDUwIEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi1cXHUwMDNlZGVsYXkpO1xcbiBcXHRcXHRyZXR1cm4gY291bnQ7XFxuIFxcdH1cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInR4dGltZV9kZWxheVxcXCIpKSB7XFxuK1xcdFxcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcXG4rXFx0XFx0bGVuID0gbnVtX2FyZyhcXHUwMDI2dXNlcl9idWZmZXJbaV0sIG1heCwgXFx1MDAyNnZhbHVlKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBsZW47XFxuK1xcbitcXHRcXHQvKiBpbiBxdWV1ZV94bWl0IG1vZGUgZnEgbWF5IGNsZWFyIHRzdGFtcCwgZG8gbm90IHJldXNlIHNrYiAqL1xcbitcXHRcXHRpZiAodmFsdWUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBrdF9kZXYtXFx1MDAzZWNsb25lX3NrYiBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpO1xcbitcXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIk9LOiB0eHRpbWVfZGVsYXk9JWxsdVxcXCIsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpdmFsdWUpO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdH1cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInR4dGltZV9jbG9ja2lkXFxcIikpIHtcXG4rXFx0XFx0Y2hhciBjbG9ja3N0clszMl07XFxuK1xcdFxcdGNsb2NraWRfdCBjbGs7XFxuK1xcbitcXHRcXHRtZW1zZXQoY2xvY2tzdHIsIDAsIHNpemVvZihjbG9ja3N0cikpO1xcbitcXHRcXHRtYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7XFxuK1xcdFxcdGxlbiA9IHN0cm5fbGVuKFxcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4KTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBsZW47XFxuK1xcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoY2xvY2tzdHIsIFxcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbGVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRcXHRpZiAoIXN0cmNtcChjbG9ja3N0ciwgXFxcIm1vbm90b25pY1xcXCIpKSB7XFxuK1xcdFxcdFxcdGNsayA9IENMT0NLX01PTk9UT05JQztcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcXFwicmVhbHRpbWVcXFwiKSkge1xcbitcXHRcXHRcXHRjbGsgPSBDTE9DS19SRUFMVElNRTtcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcXFwidGFpXFxcIikpIHtcXG4rXFx0XFx0XFx0Y2xrID0gQ0xPQ0tfVEFJO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIkVSUk9SOiB1bmtub3duIGNsb2NraWQgJyVzJ1xcXCIsXFxuK1xcdFxcdFxcdFxcdGNsb2Nrc3RyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHNwcmludGYocGdfcmVzdWx0LCBcXFwiT0s6IHR4dGltZV9jbG9ja2lkPSVzXFxcIiwgY2xvY2tzdHIpO1xcbitcXHRcXHRXUklURV9PTkNFKHBrdF9kZXYtXFx1MDAzZXR4dGltZV9jbG9ja2lkLCBjbGspO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdH1cXG4gXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInJhdGVcXFwiKSkge1xcbiBcXHRcXHRtYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7XFxuIFxcdFxcdGxlbiA9IG51bV9hcmcoXFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFxcdTAwMjZ2YWx1ZSk7XFxuQEAgLTEyMzgsNiArMTI5OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0aWYgKHZhbHVlIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAocGt0X2Rldi1cXHUwMDNlbl9pbWl4X2VudHJpZXMgXFx1MDAzZSAwIHx8XFxuIFxcdFxcdFxcdFxcdCAgIShwa3RfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEZfU0hBUkVEKSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRpZiAodmFsdWUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdHBrdF9kZXYtXFx1MDAzZWNsb25lX3NrYiA9IHZhbHVlO1xcbiBcXG5AQCAtMjMyMSw2ICsyMzgzLDIxIEBAIHN0YXRpYyB2b2lkIHBrdGdlbl9zZXR1cF9pbmplY3Qoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIH1cXG4gXFxuIFxcbitzdGF0aWMga3RpbWVfdCBrdGltZV9nZXRfY2xvY2soY2xvY2tpZF90IGNsb2NraWQpXFxuK3tcXG4rXFx0c3dpdGNoIChjbG9ja2lkKSB7XFxuK1xcdGNhc2UgQ0xPQ0tfUkVBTFRJTUU6XFxuK1xcdFxcdHJldHVybiBrdGltZV9nZXRfcmVhbCgpO1xcbitcXHRjYXNlIENMT0NLX01PTk9UT05JQzpcXG4rXFx0XFx0cmV0dXJuIGt0aW1lX2dldCgpO1xcbitcXHRjYXNlIENMT0NLX1RBSTpcXG4rXFx0XFx0cmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybiBrdGltZV9nZXQoKTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpXFxuIHtcXG4gXFx0a3RpbWVfdCBzdGFydF90aW1lLCBlbmRfdGltZTtcXG5AQCAtMzUxMCw3ICszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFxuIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiB7XFxuLVxcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNiBGX1NIQVJFRCk7XFxuK1xcdHUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKGZsYWdzIFxcdTAwMjYgRl9TSEFSRUQpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtXFx1MDAzZW9kZXY7XFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gXFx0dW5zaWduZWQgaW50IGJ1cnN0ID0gMTtcXG5AQCAtMzU0NSw2ICszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIFxcdC8qIElmIG5vIHNrYiBvciBjbG9uZSBjb3VudCBleGhhdXN0ZWQgdGhlbiBnZXQgbmV3IG9uZSAqL1xcbiBcXHRpZiAoIXBrdF9kZXYtXFx1MDAzZXNrYiB8fCAocGt0X2Rldi1cXHUwMDNlbGFzdF9vayBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICArK3BrdF9kZXYtXFx1MDAzZWNsb25lX2NvdW50IFxcdTAwM2U9IGNsb25lX3NrYikpIHtcXG4rXFx0XFx0dTY0IHR4dGltZV9kZWxheTtcXG4rXFxuIFxcdFxcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xcbiBcXHRcXHRrZnJlZV9za2IocGt0X2Rldi1cXHUwMDNlc2tiKTtcXG4gXFxuQEAgLTM1NTcsNiArMzYzNywxNiBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFx0XFx0fVxcbiBcXHRcXHRwa3RfZGV2LVxcdTAwM2VsYXN0X3BrdF9zaXplID0gcGt0X2Rldi1cXHUwMDNlc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdHBrdF9kZXYtXFx1MDAzZWNsb25lX2NvdW50ID0gMDtcXHQvKiByZXNldCBjb3VudGVyICovXFxuK1xcbitcXHRcXHR0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2RlbGF5KTtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRl9UWFRJTUUgXFx1MDAyNlxcdTAwMjYgdHh0aW1lX2RlbGF5KSB7XFxuK1xcdFxcdFxcdGNsb2NraWRfdCBjbGsgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xcbitcXHRcXHRcXHRrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdHh0aW1lX2RlbGF5KTtcXG4rXFxuK1xcdFxcdFxcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtXFx1MDAzZXNrYiwgdHh0aW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY2xrKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocGt0X2Rldi1cXHUwMDNlZGVsYXkgXFx1MDAyNlxcdTAwMjYgcGt0X2Rldi1cXHUwMDNlbGFzdF9vaylcXG5AQCAtMzg2OSw2ICszOTU5LDcgQEAgc3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxcbiBcXHRwa3RfZGV2LVxcdTAwM2VidXJzdCA9IDE7XFxuIFxcdHBrdF9kZXYtXFx1MDAzZW5vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdHBrdF9kZXYtXFx1MDAzZWZsYWdzID0gRl9TSEFSRUQ7XFx0LyogU0tCIHNoYXJlZCBieSBkZWZhdWx0ICovXFxuK1xcdHBrdF9kZXYtXFx1MDAzZXR4dGltZV9jbG9ja2lkID0gQ0xPQ0tfTU9OT1RPTklDO1xcbiBcXG4gXFx0ZXJyID0gcGt0Z2VuX3NldHVwX2Rldih0LVxcdTAwM2VuZXQsIHBrdF9kZXYsIGlmbmFtZSk7XFxuIFxcdGlmIChlcnIpXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG5pbmRleCAzMWM2NWE1NDVhMTA3Yy4uMmM3YTI0NWM1ZmZjMmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC0yMTU1LDcgKzIxNTUsNyBAQCBzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9UU09fTUFYX1NFR1MsXFxuIFxcdFxcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZXRzb19tYXhfc2VncykpIHx8XFxuIFxcdCAgICBubGFfcHV0X3VpbnQoc2tiLCBJRkxBX01BWF9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxcbi1cXHRcXHRcXHQgUkVBRF9PTkNFKGRldi1cXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fFxcbitcXHRcXHRcXHQgKHU2NClSRUFEX09OQ0UoZGV2LVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fFxcbiAjaWZkZWYgQ09ORklHX1JQU1xcbiBcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsXFxuIFxcdFxcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZW51bV9yeF9xdWV1ZXMpKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uYyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXFxuaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjljYTY5ODBmMjI5MWU2IDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5jXFxuKysrIGIvbmV0L2V0aHRvb2wvY29tbW9uLmNcXG5AQCAtOTU0LDYgKzk1NCwxMCBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0LyogRHJpdmVyIGdpdmVzIHVzIGN1cnJlbnQgc3RhdGUsIHdlIHdhbnQgdG8gcmV0dXJuIGN1cnJlbnQgY29uZmlnICovXFxuIFxcdGtwYXJhbS1cXHUwMDNldGNwX2RhdGFfc3BsaXQgPSBkZXYtXFx1MDAzZWNmZy1cXHUwMDNlaGRzX2NvbmZpZztcXG4gXFx0a3BhcmFtLVxcdTAwM2VoZHNfdGhyZXNoID0gZGV2LVxcdTAwM2VjZmctXFx1MDAzZWhkc190aHJlc2g7XFxuK1xcbitcXHRrcGFyYW0tXFx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24gPSBSRUFEX09OQ0UoZGV2LVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4rXFx0a3BhcmFtLVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XFxuK1xcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZXRodG9vbF9pbml0X3RzaW5mbyhzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXFxuaW5kZXggM2U5NjlhMDcwZjlmZTQuLmFlN2I2NTFjNjU4Zjc0IDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbkBAIC00OTQsNyArNDk0LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ZlYXR1cmVzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0ZFQVRVUkVTX1dBTlRcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3ByaXZmbGFnc19nZXRfcG9saWN5W0VUSFRPT0xfQV9QUklWRkxBR1NfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0ZMQUdTICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19nZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRUFERVIgKyAxXTtcXG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYICsgMV07XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jaGFubmVsc19zZXRfcG9saWN5W0VUSFRPT0xfQV9DSEFOTkVMU19DT01CSU5FRF9DT1VOVCArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY29hbGVzY2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ09BTEVTQ0VfSEVBREVSICsgMV07XFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3JpbmdzLmMgYi9uZXQvZXRodG9vbC9yaW5ncy5jXFxuaW5kZXggOTA1NGM4OWM1ZDdiYjIuLjVjYzIwZDU4MWM0NmVjIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL3JpbmdzLmNcXG4rKysgYi9uZXQvZXRodG9vbC9yaW5ncy5jXFxuQEAgLTQyLDYgKzQyLDEwIEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuIFxcbiBcXHRkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnRjcF9kYXRhX3NwbGl0ID0gZGV2LVxcdTAwM2VjZmctXFx1MDAzZWhkc19jb25maWc7XFxuIFxcdGRhdGEtXFx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cXHUwMDNlY2ZnLVxcdTAwM2VoZHNfdGhyZXNoO1xcbitcXHRkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b24gPVxcbitcXHRcXHRSRUFEX09OQ0UoZGV2LVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4rXFx0ZGF0YS1cXHUwMDNla2VybmVsX3JpbmdwYXJhbS5tYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XFxuK1xcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4gXFxuIFxcdGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWdldF9yaW5ncGFyYW0oZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNlcmluZ3BhcmFtLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZGF0YS1cXHUwMDNla2VybmVsX3JpbmdwYXJhbSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5AQCAtNjksNyArNzMsOSBAQCBzdGF0aWMgaW50IHJpbmdzX3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4gXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXFx0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTiAqL1xcbiBcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOX01BWCAqL1xcbiBcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBfUklOR1NfSERTX1RIUkVTSCAqL1xcbi1cXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIF9SSU5HU19IRFNfVEhSRVNIX01BWCovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIF9SSU5HU19IRFNfVEhSRVNIX01BWCAqL1xcbitcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTiAqL1xcbitcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCAqL1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJpbmdzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTIxLDcgKzEyNywxMiBAQCBzdGF0aWMgaW50IHJpbmdzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSCxcXG4gXFx0XFx0XFx0ICBrci1cXHUwMDNlaGRzX3RocmVzaCkgfHxcXG4gXFx0ICAgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXFxuLVxcdFxcdFxcdCAga3ItXFx1MDAzZWhkc190aHJlc2hfbWF4KSkpKVxcbitcXHRcXHRcXHQgIGtyLVxcdTAwM2VoZHNfdGhyZXNoX21heCkpKSB8fFxcbitcXHQgICAgKChzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sXFxuK1xcdFxcdFxcdCAga3ItXFx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8XFxuK1xcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxcbitcXHRcXHRcXHQgIGtyLVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikpKSlcXG4gXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xNDQsNiArMTU1LDcgQEAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtdID0ge1xcbiBcXHRbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIDEpLFxcbiBcXHRbRVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIFxcdFtFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuK1xcdFtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50XFxuQEAgLTE3Nyw2ICsxODksMTQgQEAgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShvcHMtXFx1MDAzZXN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwic2V0dGluZyBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIGlzIG5vdCBzdXBwb3J0ZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX0NRRV9TSVpFXSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIShvcHMtXFx1MDAzZXN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfQ1FFX1NJWkUpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLFxcbkBAIC0yNDYsNiArMjY2LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdFxcdCB0YltFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXSwgXFx1MDAyNm1vZCk7XFxuIFxcdGV0aG5sX3VwZGF0ZV91MzIoXFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCxcXG4gXFx0XFx0XFx0IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgXFx1MDAyNm1vZCk7XFxuK1xcdGV0aG5sX3VwZGF0ZV91MzIoXFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcXG4rXFx0XFx0XFx0IHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSwgXFx1MDAyNm1vZCk7XFxuIFxcdGlmICghbW9kKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTI4MSw2ICszMDMsOSBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfVFhdO1xcbiBcXHRlbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggXFx1MDAzZSBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KVxcbiBcXHRcXHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTtcXG4rXFx0ZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uIFxcdTAwM2VcXG4rXFx0XFx0IGtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pXFxuK1xcdFxcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGVycl9hdHRyID0gTlVMTDtcXG4gXFx0aWYgKGVycl9hdHRyKSB7XFxuQEAgLTMwMiw2ICszMjcsMTAgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcbiBcXHRyZXQgPSBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VzZXRfcmluZ3BhcmFtKGRldiwgXFx1MDAyNnJpbmdwYXJhbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbixcXG4rXFx0XFx0XFx0ICAga2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcXG4rXFxuIFxcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXFxuaW5kZXggN2NhZTA4MmE5ODQ3MjEuLmNiZjAxNWRmNjhjY2Y4IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnEuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfZnEuY1xcbkBAIC0zOTksNiArMzk5LDExIEBAIHN0YXRpYyBzdHJ1Y3QgZnFfZmxvdyAqZnFfY2xhc3NpZnkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3BhY2luZ19zdGF0dXMpICE9IFNLX1BBQ0lOR19GUSlcXG4gXFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnNrLVxcdTAwM2Vza19wYWNpbmdfc3RhdHVzLFxcbiBcXHRcXHRcXHRcXHRcXHQgIFNLX1BBQ0lOR19GUSk7XFxuK1xcbitcXHRcXHRpZiAocS1cXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBmcV9za2JfY2Ioc2tiKS1cXHUwMDNldGltZV90b19zZW5kIFxcdTAwM2M9IG5vdylcXG4rXFx0XFx0XFx0c2tiLVxcdTAwM2V0c3RhbXAgPSAwO1xcbitcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZxLVxcdTAwM2VpbnRlcm5hbDtcXG4gXFx0fVxcbiBcXG5AQCAtNzA3LDYgKzcxMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gXFx0c3RydWN0IGZxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuIFxcdHN0cnVjdCBmcV9wZXJiYW5kX2Zsb3dzICpwYmFuZDtcXG4gXFx0c3RydWN0IGZxX2Zsb3dfaGVhZCAqaGVhZDtcXG4rXFx0dTY0IHRpbWVfbmV4dF9wYWNrZXQ7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCBmcV9mbG93ICpmO1xcbiBcXHR1bnNpZ25lZCBsb25nIHJhdGU7XFxuQEAgLTcyMSw3ICs3MjcsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuIFxcdGlmIChza2IpIHtcXG4gXFx0XFx0cS1cXHUwMDNlaW50ZXJuYWwucWxlbi0tO1xcbiBcXHRcXHRmcV9kZXF1ZXVlX3NrYihzY2gsIFxcdTAwMjZxLVxcdTAwM2VpbnRlcm5hbCwgc2tiKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdHJldHVybiBza2I7XFxuIFxcdH1cXG4gXFxuIFxcdG5vdyA9IGt0aW1lX2dldF9ucygpO1xcbkBAIC03NTgsOCArNzY0LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiBcXG4gXFx0c2tiID0gZnFfcGVlayhmKTtcXG4gXFx0aWYgKHNrYikge1xcbi1cXHRcXHR1NjQgdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXFx1MDAzZXRpbWVfdG9fc2VuZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBmLVxcdTAwM2V0aW1lX25leHRfcGFja2V0KTtcXG4rXFx0XFx0dGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXFx1MDAzZXRpbWVfdG9fc2VuZCxcXG4rXFx0XFx0XFx0XFx0XFx0IGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xcbiBcXG4gXFx0XFx0aWYgKG5vdyArIHEtXFx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcXHUwMDNjIHRpbWVfbmV4dF9wYWNrZXQpIHtcXG4gXFx0XFx0XFx0aGVhZC1cXHUwMDNlZmlyc3QgPSBmLVxcdTAwM2VuZXh0O1xcbkBAIC04MjgsMTEgKzgzNCwxNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuIFxcdFxcdCAqIGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgd2FzIHNldCB3aGVuIHByaW9yIHBhY2tldCB3YXMgc2VudCxcXG4gXFx0XFx0ICogYW5kIGN1cnJlbnQgdGltZSAoQG5vdykgY2FuIGJlIHRvbyBsYXRlIGJ5IHRlbnMgb2YgdXMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldClcXG4rXFx0XFx0aWYgKGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgXFx1MDAyNlxcdTAwMjYgZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCBcXHUwMDNjIG5vdylcXG4gXFx0XFx0XFx0bGVuIC09IG1pbihsZW4vMiwgbm93IC0gZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XFxuIFxcdFxcdGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgPSBub3cgKyBsZW47XFxuIFxcdH1cXG4rXFxuIG91dDpcXG4rXFx0aWYgKHEtXFx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcXHUwMDI2XFx1MDAyNiB0aW1lX25leHRfcGFja2V0IFxcdTAwM2M9IG5vdylcXG4rXFx0XFx0c2tiLVxcdTAwM2V0c3RhbXAgPSAwO1xcbitcXG4gXFx0cmV0dXJuIHNrYjtcXG4gfVxcbiBcXG5AQCAtMTE3OSw3ICsxMTg5LDkgQEAgc3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4gXFx0XFx0dTY0IG9mZmxvYWRfaG9yaXpvbiA9ICh1NjQpTlNFQ19QRVJfVVNFQyAqXFxuIFxcdFxcdFxcdFxcdCAgICAgIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9PRkZMT0FEX0hPUklaT05dKTtcXG4gXFxuLVxcdFxcdGlmIChvZmZsb2FkX2hvcml6b24gXFx1MDAzYz0gcWRpc2NfZGV2KHNjaCktXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB7XFxuK1xcdFxcdGlmIChvZmZsb2FkX2hvcml6b24gXFx1MDAzYz1cXG4rXFx0XFx0ICAgICh1NjQpUkVBRF9PTkNFKHFkaXNjX2RldihzY2gpLVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSAqXFxuK1xcdFxcdCAgICBOU0VDX1BFUl9VU0VDKSB7XFxuIFxcdFxcdFxcdFdSSVRFX09OQ0UocS1cXHUwMDNlb2ZmbG9hZF9ob3Jpem9uLCBvZmZsb2FkX2hvcml6b24pO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiaW52YWxpZCBvZmZsb2FkX2hvcml6b25cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xcbmluZGV4IDU1YTM4NmYzZDFiOTBmLi42ZTY0YmFhNGM2MGRkOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXFxuQEAgLTQyLDggKzQyLDEwIEBAIHN0YXRpYyBib29sXFx0Y2ZnX21hY2hpbmVfc2xvdztcXG4gc3RhdGljIHVpbnQ2NF90XFx0Y2ZnX3N0YXJ0X3RpbWVfbnM7XFxuIHN0YXRpYyBpbnRcXHRjZmdfbWFyaztcXG4gc3RhdGljIGJvb2xcXHRjZmdfcng7XFxuK3N0YXRpYyBib29sXFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkO1xcbiBcXG4gc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0O1xcbitzdGF0aWMgdWludDY0X3QgZ2xvYl90c3RhcnRfcmVhbDtcXG4gc3RhdGljIHVpbnQ2NF90IHRkZWxpdmVyX21heDtcXG4gXFxuIHN0YXRpYyBpbnQgZXJyb3JzO1xcbkBAIC0xNTgsMTggKzE2MCw3MCBAQCBzdGF0aWMgdm9pZCBkb19yZWN2X3ZlcmlmeV9lbXB0eShpbnQgZmRyKVxcbiBcXHRcXHRlcnJvcigxLCAwLCBcXFwicmVjdjogbm90IGVtcHR5IGFzIGV4cGVjdGVkICglZCwgJWQpXFxcIiwgcmV0LCBlcnJubyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXFxuK3N0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciBwYXlsb2FkX2NoYXIpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcXG4rXFx0aW50NjRfdCB0c3RhbXAgPSAwO1xcbitcXG4rXFx0c3dpdGNoIChlcnItXFx1MDAzZWVlX2Vycm5vKSB7XFxuK1xcdGNhc2UgRUNBTkNFTEVEOlxcbitcXHRcXHRpZiAoZXJyLVxcdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX01JU1NFRClcXG4rXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4rXFx0XFx0cmVhc29uID0gXFxcIm1pc3NlZCB0eHRpbWVcXFwiO1xcbitcXHRicmVhaztcXG4rXFx0Y2FzZSBFSU5WQUw6XFxuK1xcdFxcdGlmIChlcnItXFx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcXG4rXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4rXFx0XFx0cmVhc29uID0gXFxcImludmFsaWQgdHh0aW1lXFxcIjtcXG4rXFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9lcnJubywgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4rXFx0fVxcbitcXG4rXFx0dHN0YW1wID0gKChpbnQ2NF90KWVyci1cXHUwMDNlZWVfZGF0YSkgXFx1MDAzY1xcdTAwM2MgMzIgfCBlcnItXFx1MDAzZWVlX2luZm87XFxuK1xcdHRzdGFtcCAtPSAoaW50NjRfdClnbG9iX3RzdGFydDtcXG4rXFx0dHN0YW1wIC89IDEwMDAgKiAxMDAwO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInNlbmQ6IHBrdCAlYyBhdCAlXFxcIiBQUklkNjQgXFxcIm1zIGRyb3BwZWQ6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRwYXlsb2FkX2NoYXIsIHRzdGFtcCwgcmVhc29uKTtcXG4rXFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkb19yZWN2X2VycnF1ZXVlX3RpbWVzdGFtcGluZyhzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycixcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyAqdHNzKVxcbit7XFxuK1xcdGludDY0X3QgdHM7XFxuK1xcbitcXHR0cyA9IHRzcy1cXHUwMDNldHNbMF0udHZfc2VjO1xcbitcXHR0cyAqPSAxMDAwVUxMICogMTAwMCAqIDEwMDA7XFxuK1xcdHRzICs9IHRzcy1cXHUwMDNldHNbMF0udHZfbnNlYztcXG4rXFx0dHMgLT0gZ2xvYl90c3RhcnRfcmVhbDtcXG4rXFx0dHMgLz0gMTAwMDtcXG4rXFxuK1xcdGlmICh0cyBcXHUwMDNlIGNmZ192YXJpYW5jZV91cykge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInN3IGRlbGF5ICVcXFwiIFBSSWQ2NCBcXFwidXMgZXhjZWVkcyBib3VuZHNcXFxcblxcXCIsIHRzKTtcXG4rXFx0XFx0aWYgKCFjZmdfbWFjaGluZV9zbG93KVxcbitcXHRcXHRcXHRlcnJvcnMrKztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWUoaW50IGZkdClcXG4ge1xcbiBcXHRjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSkgK1xcbitcXHRcXHQgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY21fdGltZXN0YW1waW5nKSkgK1xcbiBcXHRcXHQgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKV0gPSB7MH07XFxuIFxcdGNoYXIgZGF0YVtzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICtcXG4gXFx0XFx0ICBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyAxXTtcXG4rXFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcztcXG4gXFx0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnI7XFxuIFxcdGludCByZXQsIG51bV90c3RhbXAgPSAwO1xcbiBcXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHswfTtcXG4gXFx0c3RydWN0IGlvdmVjIGlvdiA9IHswfTtcXG4gXFx0c3RydWN0IGNtc2doZHIgKmNtO1xcbi1cXHRpbnQ2NF90IHRzdGFtcCA9IDA7XFxuIFxcbiBcXHRpb3YuaW92X2Jhc2UgPSBkYXRhO1xcbiBcXHRpb3YuaW92X2xlbiA9IHNpemVvZihkYXRhKTtcXG5AQCAtMTgxLDggKzIzNSw2IEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXFxuIFxcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTtcXG4gXFxuIFxcdHdoaWxlICgxKSB7XFxuLVxcdFxcdGNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7XFxuLVxcbiBcXHRcXHRyZXQgPSByZWN2bXNnKGZkdCwgXFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcXG4gXFx0XFx0aWYgKHJldCA9PSAtMSBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFQUdBSU4pXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xOTIsNDIgKzI0NCwzMiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxcbiBcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IGZsYWdzIDB4JXhcXFxcblxcXCIsIG1zZy5tc2dfZmxhZ3MpO1xcbiBcXG4gXFx0XFx0Y20gPSBDTVNHX0ZJUlNUSERSKFxcdTAwMjZtc2cpO1xcbitcXHRcXHR0c3MgPSBOVUxMO1xcbitcXG4rXFx0XFx0aWYgKGNtLVxcdTAwM2VjbXNnX2xldmVsID09IFNPTF9TT0NLRVQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGNtLVxcdTAwM2VjbXNnX3R5cGUgPT0gU0NNX1RJTUVTVEFNUElORykge1xcbitcXHRcXHRcXHR0c3MgPSAodm9pZCAqKUNNU0dfREFUQShjbSk7XFxuK1xcdFxcdFxcdGNtID0gQ01TR19OWFRIRFIoXFx1MDAyNm1zZywgY20pO1xcbitcXHRcXHRcXHRpZiAoIWNtKVxcbitcXHRcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwidGltZXN0YW1wIG1pc3NpbmcgaXAgZXJyXFxcXG5cXFwiKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKGNtLVxcdTAwM2VjbXNnX2xldmVsICE9IGNmZ19lcnJxX2xldmVsIHx8XFxuIFxcdFxcdCAgICBjbS1cXHUwMDNlY21zZ190eXBlICE9IGNmZ19lcnJxX3R5cGUpXFxuIFxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogdHlwZSAweCV4LjB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICBjbS1cXHUwMDNlY21zZ19sZXZlbCwgY20tXFx1MDAzZWNtc2dfdHlwZSk7XFxuIFxcbiBcXHRcXHRlcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcXG4tXFx0XFx0aWYgKGVyci1cXHUwMDNlZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9UWFRJTUUpXFxuK1xcdFxcdGlmIChlcnItXFx1MDAzZWVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVFhUSU1FKVxcbitcXHRcXHRcXHRudW1fdHN0YW1wICs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChlcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBkYXRhW3JldCAtIDFdKTtcXG4rXFx0XFx0ZWxzZSBpZiAoZXJyLVxcdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyBcXHUwMDI2XFx1MDAyNiB0c3MpXFxuK1xcdFxcdFxcdGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKGVyciwgdHNzKTtcXG4rXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IG9yaWdpbiAweCV4XFxcXG5cXFwiLCBlcnItXFx1MDAzZWVlX29yaWdpbik7XFxuIFxcbi1cXHRcXHRzd2l0Y2ggKGVyci1cXHUwMDNlZWVfZXJybm8pIHtcXG4tXFx0XFx0Y2FzZSBFQ0FOQ0VMRUQ6XFxuLVxcdFxcdFxcdGlmIChlcnItXFx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKVxcbi1cXHRcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IHVua25vd24gRUNBTkNFTEVEICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlcnItXFx1MDAzZWVlX2NvZGUpO1xcbi1cXHRcXHRcXHRyZWFzb24gPSBcXFwibWlzc2VkIHR4dGltZVxcXCI7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEVJTlZBTDpcXG4tXFx0XFx0XFx0aWYgKGVyci1cXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKVxcbi1cXHRcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlcnItXFx1MDAzZWVlX2NvZGUpO1xcbi1cXHRcXHRcXHRyZWFzb24gPSBcXFwiaW52YWxpZCB0eHRpbWVcXFwiO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiBlcnJubyAldSBjb2RlICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICBlcnItXFx1MDAzZWVlX2Vycm5vLCBlcnItXFx1MDAzZWVlX2NvZGUpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHR0c3RhbXAgPSAoKGludDY0X3QpIGVyci1cXHUwMDNlZWVfZGF0YSkgXFx1MDAzY1xcdTAwM2MgMzIgfCBlcnItXFx1MDAzZWVlX2luZm87XFxuLVxcdFxcdHRzdGFtcCAtPSAoaW50NjRfdCkgZ2xvYl90c3RhcnQ7XFxuLVxcdFxcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcXG4tXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJzZW5kOiBwa3QgJWMgYXQgJVxcXCIgUFJJZDY0IFxcXCJtcyBkcm9wcGVkOiAlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0ZGF0YVtyZXQgLSAxXSwgdHN0YW1wLCByZWFzb24pO1xcbi1cXG4gXFx0XFx0bXNnLm1zZ19mbGFncyA9IDA7XFxuIFxcdFxcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTtcXG4tXFx0XFx0bnVtX3RzdGFtcCsrO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gbnVtX3RzdGFtcDtcXG5AQCAtMjQ1LDEyICsyODcsMTMgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJxdWV1ZV9tc2dzKGludCBmZHQpXFxuIFxcdFxcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwicG9sbFxcXCIpO1xcbiBcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiAocGZkLnJldmVudHMgXFx1MDAyNiBQT0xMRVJSKSlcXG4tXFx0XFx0XFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZmR0KTtcXG4rXFx0XFx0XFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlKGZkdCk7XFxuIFxcbiBcXHRcXHRpZiAobnVtX3RzdGFtcCA9PSBjZmdfbnVtX3BrdClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHR9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSBcXHUwMDNjIHRkZWxpdmVyX21heCk7XFxuK1xcdH0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpIFxcdTAwM2NcXG4rXFx0XFx0IHRkZWxpdmVyX21heCArIChjZmdfdmFyaWFuY2VfdXMgKiAxMDAwKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHN0YXJ0X3RpbWVfd2FpdCh2b2lkKVxcbkBAIC0yOTUsNiArMzM4LDE4IEBAIHN0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lKGludCBmZClcXG4gXFx0XFx0ZXJyb3IoMSwgMCwgXFxcImdldHNvY2tvcHQgdHh0aW1lOiBtaXNtYXRjaFxcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGludCBmZClcXG4re1xcbitcXHRpbnQgdmFsID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XFxuK1xcdFxcdCAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSB8XFxuK1xcdFxcdCAgU09GX1RJTUVTVEFNUElOR19PUFRfSUQgfFxcbitcXHRcXHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX1RTT05MWTtcXG4rXFxuK1xcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsXFxuK1xcdFxcdCAgICAgICBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXFxuK1xcdFxcdGVycm9yKDEsIGVycm5vLCBcXFwic2V0c29ja29wdCB0aW1lc3RhbXBpbmdcXFwiKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxcbiB7XFxuIFxcdGludCBmZDtcXG5AQCAtMzA4LDYgKzM2Myw5IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4gXFxuIFxcdHNldHNvY2tvcHRfdHh0aW1lKGZkKTtcXG4gXFxuK1xcdGlmIChjZmdfdmVyaWZ5X2h3X29mZmxvYWQpXFxuK1xcdFxcdHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoZmQpO1xcbitcXG4gXFx0aWYgKGNmZ19tYXJrIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19NQVJLLCBcXHUwMDI2Y2ZnX21hcmssIHNpemVvZihjZmdfbWFyaykpKVxcbiBcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgbWFya1xcXCIpO1xcbkBAIC0zMTcsNyArMzc1LDcgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxcbiBcXG4gc3RhdGljIGludCBzZXR1cF9yeChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxcbiB7XFxuLVxcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDEwMCAqIDEwMDAgfTtcXG4rXFx0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gNjAwICogMTAwMCB9O1xcbiBcXHRpbnQgZmQ7XFxuIFxcbiBcXHRmZCA9IHNvY2tldChhZGRyLVxcdTAwM2VzYV9mYW1pbHksIFNPQ0tfREdSQU0sIDApO1xcbkBAIC0zNDgsNiArNDA2LDcgQEAgc3RhdGljIHZvaWQgZG9fdGVzdF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxcbiBcXG4gXFx0c3RhcnRfdGltZV93YWl0KCk7XFxuIFxcdGdsb2JfdHN0YXJ0ID0gZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCk7XFxuK1xcdGdsb2JfdHN0YXJ0X3JlYWwgPSBnZXR0aW1lX25zKENMT0NLX1JFQUxUSU1FKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjZmdfbnVtX3BrdDsgaSsrKVxcbiBcXHRcXHRkb19zZW5kX29uZShmZHQsIFxcdTAwMjZjZmdfYnVmW2ldKTtcXG5AQCAtNDQwLDEwICs0OTksMTEgQEAgc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpXFxuIFxcdFxcdFxcdFxcXCIgIC02ICAgICAgICAgICAgb25seSBJUHY2XFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgIC1jIFxcdTAwM2NjbG9ja1xcdTAwM2UgICAgbW9ub3RvbmljIG9yIHRhaSAoZGVmYXVsdClcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIiAgLUQgXFx1MDAzY2FkZHJcXHUwMDNlICAgICBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzIChzZXJ2ZXIpXFxcXG5cXFwiXFxuLVxcdFxcdFxcdFxcXCIgIC1TIFxcdTAwM2NhZGRyXFx1MDAzZSAgICAgc291cmNlIElQIGFkZHJlc3MgKGNsaWVudClcXFxcblxcXCJcXG4rXFx0XFx0XFx0XFxcIiAgLWggICAgICAgICAgICB2ZXJpZnkgaGFyZHdhcmUgb2ZmbG9hZCAodHgpXFxcXG5cXFwiXFxuK1xcdFxcdFxcdFxcXCIgIC1tIFxcdTAwM2NtYXJrXFx1MDAzZSAgICAgc29ja2V0IG1hcmtcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIiAgLXIgICAgICAgICAgICBydW4gcnggbW9kZVxcXFxuXFxcIlxcbitcXHRcXHRcXHRcXFwiICAtUyBcXHUwMDNjYWRkclxcdTAwM2UgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgIC10IFxcdTAwM2Nuc2VjXFx1MDAzZSAgICAgc3RhcnQgdGltZSAoVVRDIG5hbm9zZWNvbmRzKVxcXFxuXFxcIlxcbi1cXHRcXHRcXHRcXFwiICAtbSBcXHUwMDNjbWFya1xcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCJcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHByb2duYW1lKTtcXG4gXFx0ZXhpdCgxKTtcXG5AQCAtNDU1LDcgKzUxNSw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRpbnQgZG9tYWluID0gUEZfVU5TUEVDO1xcbiBcXHRpbnQgYztcXG4gXFxuLVxcdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiNDZjOlM6RDpydDptOlxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIjQ2YzpEOmhtOnJTOnQ6XFxcIikpICE9IC0xKSB7XFxuIFxcdFxcdHN3aXRjaCAoYykge1xcbiBcXHRcXHRjYXNlICc0JzpcXG4gXFx0XFx0XFx0aWYgKGRvbWFpbiAhPSBQRl9VTlNQRUMpXFxuQEAgLTQ4MiwyMSArNTQyLDI0IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJ1bmtub3duIGNsb2NrIGlkICVzXFxcIiwgb3B0YXJnKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ1MnOlxcbi1cXHRcXHRcXHRzYWRkciA9IG9wdGFyZztcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ0QnOlxcbiBcXHRcXHRcXHRkYWRkciA9IG9wdGFyZztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2gnOlxcbitcXHRcXHRcXHRjZmdfdmVyaWZ5X2h3X29mZmxvYWQgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAnbSc6XFxuK1xcdFxcdFxcdGNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdyJzpcXG4gXFx0XFx0XFx0Y2ZnX3J4ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ1MnOlxcbitcXHRcXHRcXHRzYWRkciA9IG9wdGFyZztcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3QnOlxcbiBcXHRcXHRcXHRjZmdfc3RhcnRfdGltZV9ucyA9IHN0cnRvbGwob3B0YXJnLCBOVUxMLCAwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ20nOlxcbi1cXHRcXHRcXHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dXNhZ2UoYXJndlswXSk7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XFxuaW5kZXggYWRmNmM4NDhkNmQ4MGYuLjdiNzVhMzNmNWM0M2Y4IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxcbkBAIC0xMiwxMCArMTIsMTMgQEAgaW1wb3J0IHRpbWVcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfdmFyaWFudHNcXG4gZnJvbSBsaWIucHkgaW1wb3J0IEtzZnROYW1lZFZhcmlhbnQsIEtzZnRTa2lwRXhcXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBia2csIGNtZCwgZGVmZXIsIHRjXFxuK2Zyb20gbGliLnB5IGltcG9ydCBFdGh0b29sRmFtaWx5LCBObEVycm9yXFxuIFxcbiBcXG4gZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKTpcXG4gICAgIFxcXCJcXFwiXFxcIk1haW4gZnVuY3Rpb24uIFJ1biBzb190eHRpbWUgYXMgc2VuZGVyIGFuZCByZWNlaXZlci5cXFwiXFxcIlxcXCJcXG4rICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxcbitcXG4gICAgIHNsb3dfbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCdLU0ZUX01BQ0hJTkVfU0xPVycpXFxuIFxcbiAgICAgaWYgbm90IGhhc2F0dHIoY2ZnLCBcXFwiYmluX3JlbW90ZVxcXCIpOlxcbkBAIC0zOCw2ICs0MSwzNCBAQCBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOlxcbiAgICAgICAgIGNtZChjbWRfdHgpXFxuIFxcbiBcXG4rZGVmIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKTpcXG4rICAgIFxcXCJcXFwiXFxcIkNvbmZpZ3VyZSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLlxcXCJcXFwiXFxcIlxcbisgICAgZXRobmwgPSBFdGh0b29sRmFtaWx5KClcXG4rXFxuKyAgICB0cnk6XFxuKyAgICAgICAgcmluZ3MgPSBldGhubC5yaW5nc19nZXQoeydoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fX0pXFxuKyAgICBleGNlcHQgTmxFcnJvciBhcyBlOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ3JpbmctZ2V0IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJykgZnJvbSBlXFxuK1xcbisgICAgaWYgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nIG5vdCBpbiByaW5ncyBvciBcXFxcXFxuKyAgICAgICAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgnIG5vdCBpbiByaW5nczpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJylcXG4rXFxuKyAgICBpZiByaW5nc1sncGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgnXSBcXHUwMDNjIDUwXzAwMDpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdwYWNpbmcgb2ZmbG9hZCBtYXggaG9yaXpvbiB0b28gc21hbGwnKVxcbitcXG4rICAgIGN1cl9ob3Jpem9uID0gcmluZ3NbJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nXVxcbisgICAgbmV3X2hvcml6b24gPSA1MF8wMDBcXG4rICAgIGV0aG5sLnJpbmdzX3NldCh7XFxuKyAgICAgICAgJ2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9LFxcbisgICAgICAgICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJzogbmV3X2hvcml6b24sXFxuKyAgICB9KVxcbisgICAgZGVmZXIoZXRobmwucmluZ3Nfc2V0LCB7XFxuKyAgICAgICAgJ2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9LFxcbisgICAgICAgICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJzogY3VyX2hvcml6b25cXG4rICAgIH0pXFxuK1xcbitcXG4gZGVmIF9xZGlzY19zZXR1cChpZm5hbWUsIHFkaXNjLCBvcHRhcmdzPVxcXCJcXFwiKTpcXG4gICAgIFxcXCJcXFwiXFxcIlJlcGxhY2Ugcm9vdCBxZGlzYy4gUmVzdG9yZSB0aGUgb3JpZ2luYWwgYWZ0ZXIgdGhlIHRlc3QuXFxuIFxcbkBAIC01Niw2ICs4Nyw3IEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxcbiAgICAgICAgICAgICBbXFxcIm9uZV9wa3RcXFwiLCBcXFwiYSwxMFxcXCIsIFxcXCJhLDEwXFxcIl0sXFxuICAgICAgICAgICAgIFtcXFwiaW5fb3JkZXJcXFwiLCBcXFwiYSwxMCxiLDIwXFxcIiwgXFxcImEsMTAsYiwyMFxcXCJdLFxcbiAgICAgICAgICAgICBbXFxcInJldmVyc2Vfb3JkZXJcXFwiLCBcXFwiYSwyMCxiLDEwXFxcIiwgXFxcImIsMTAsYSwyMFxcXCJdLFxcbisgICAgICAgICAgICBbXFxcImJleW9uZF9od19ob3Jpem9uXFxcIiwgXFxcImEsNzBcXFwiLCBcXFwiYSw3MFxcXCJdLFxcbiAgICAgICAgIF06XFxuICAgICAgICAgICAgIG5hbWUgPSBmXFxcInZ7aXB2ZXJ9X3t0ZXN0Y2FzZVswXX1cXFwiXFxuICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQobmFtZSwgaXB2ZXIsIHRlc3RjYXNlWzFdLCB0ZXN0Y2FzZVsyXSlcXG5AQCAtNjQsMTUgKzk2LDQyIEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ubyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcXG4gICAgIFxcXCJcXFwiXFxcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIChmcSkgdGVzdHMuXFxcIlxcXCJcXFwiXFxuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcXG4gICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcXFwiZnFcXFwiKVxcbiAgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcXFwibW9ub1xcXCIsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxcbiBcXG4gXFxuK0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXFxuK2RlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxcbisgICAgXFxcIlxcXCJcXFwiUnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgZnEgdGVzdHMsIHdpdGggb2ZmbG9hZCBob3Jpem9uLlxcXCJcXFwiXFxcIlxcbisgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpXFxuK1xcbisgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpXFxuKyAgICB0cnk6XFxuKyAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFxcXCJmcVxcXCIsIFxcXCJvZmZsb2FkX2hvcml6b24gNTBtc1xcXCIpXFxuKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwibmV0ZGV2IGRvZXMgbm90IHN1cHBvcnQgb2ZmbG9hZC4gc2tpcHBpbmdcXFwiKSBmcm9tIGVcXG4rXFxuKyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gdXNlIG9ubHkgaHcgcGFjaW5nLCBleGNlcHQgYmV5b25kX2h3X2hvcml6b24uXFxuKyAgICBod19vbmx5ID0gXFxcIi1oXFxcIiBpZiBhcmdzX3R4ICE9IFxcXCJhLDcwXFxcIiBlbHNlIFxcXCJcXFwiXFxuKyAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFxcXCJtb25vXFxcIiwgaXB2ZXIsIGZcXFwie2h3X29ubHl9IHthcmdzX3R4fVxcXCIsIGFyZ3NfcngsIFRydWUpXFxuK1xcbitcXG4rQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcXG4rZGVmIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxcbisgICAgXFxcIlxcXCJcXFwiUnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgdGVzdHMsIHdpdGhvdXQgZnEgcGFjaW5nIHN3IGJhY2t1cC5cXFwiXFxcIlxcXCJcXG4rICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxcbitcXG4rICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxcbisgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFxcXCJwZmlmb19mYXN0XFxcIilcXG4rXFxuKyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gcGFzcywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uIHdpdGhvdXQgc3cgZmFsbGJhY2suXFxuKyAgICBleHBlY3RfcGFzcyA9IG5vdCBhcmdzX3R4ID09IFxcXCJhLDcwXFxcIlxcbisgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcXFwibW9ub1xcXCIsIGlwdmVyLCBmXFxcIi1oIHthcmdzX3R4fVxcXCIsIGFyZ3NfcngsIGV4cGVjdF9wYXNzKVxcbitcXG4rXFxuIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXFxuIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV90YWkoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gYWxsIHZhcmlhbnRzIG9mIGZxIHRlc3RzLCBidXQgcGFzcyBDTE9DS19UQUkgdG8gdGVzdCBjb252ZXJzaW9uLlxcXCJcXFwiXFxcIlxcbi0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXFxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXFxcImZxXFxcIilcXG4gICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXFxcInRhaVxcXCIsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxcbiBcXG5AQCAtOTUsNyArMTU0LDYgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2V0ZigpOlxcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19ldGYoKSlcXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2V0ZihjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3RfZmFpbCk6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gYWxsIHZhcmlhbnRzIG9mIGV0ZiB0ZXN0cy5cXFwiXFxcIlxcXCJcXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxcbiAgICAgdHJ5OlxcbiAgICAgICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcXFwiZXRmXFxcIiwgXFxcImNsb2NraWQgQ0xPQ0tfVEFJIGRlbHRhIDQwMDAwMFxcXCIpXFxuICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XFxuQEAgLTEwOCw3ICsxNjYsMTMgQEAgZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiQm9pbGVycGxhdGUga3NmdCBtYWluLlxcXCJcXFwiXFxcIlxcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxcbiAgICAgICAgIGtzZnRfcnVuKFxcbi0gICAgICAgICAgICBbdGVzdF9zb190eHRpbWVfZnFfbW9ubywgdGVzdF9zb190eHRpbWVfZnFfdGFpLCB0ZXN0X3NvX3R4dGltZV9ldGZdLFxcbisgICAgICAgICAgICBbXFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV9tb25vLFxcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyxcXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3LFxcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfdGFpLFxcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZXRmLFxcbisgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSxcXG4gICAgICAgICApXFxuICAgICBrc2Z0X2V4aXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzoyOTozMi41MDU3NTM0NjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTMyMTc3OTY2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9GUVwiLFxuICAgIFwiTkVUX1BLVEdFTlwiLFxuICAgIFwiRVRIVE9PTF9ORVRMSU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnFfY2hhbmdlXCIsXG4gICAgXCJmcV9kZXF1ZXVlXCIsXG4gICAgXCJmcV9jbGFzc2lmeVwiLFxuICAgIFwiZXRobmxfc2V0X3JpbmdzXCIsXG4gICAgXCJwa3RnZW5faWZfd3JpdGVcIixcbiAgICBcInBrdGdlbl94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCBtb2RpZmllcyB0aGUgY29yZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKHNjaF9mcS5jKSwgdGhlIHBhY2tldCBnZW5lcmF0b3IgKHBrdGdlbi5jKSwgYW5kIHRoZSBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlIChyaW5ncy5jKSB0byBzdXBwb3J0IGNvbmZpZ3VyaW5nIGFuZCB1c2luZyB0aGlzIGhvcml6b24uIFRoZXNlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgdG8gdGhlIGlkcGYgZHJpdmVyIGFyZSBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgbm90IGVtdWxhdGVkLCBidXQgdGhlIGNvcmUgY2hhbmdlcyBhcmUgc3VmZmljaWVudCB0byB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE2ZDMyYjczOTU4NDU1OTU1OGU5NjRhMmQ3MDNiNzlmMjI0OGI0YmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAwNzoyOToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uYzc4MDY4NGNhMWJjMGMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5AQCAtNDQ4LDYgKzQ0OCwxMiBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBoZHMtdGhyZXNoLW1heFxuICAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcbisgICAgICAgIHR5cGU6IHUzMlxuIFxuICAgLVxuICAgICBuYW1lOiBtbS1zdGF0XG5AQCAtMjE2OCw2ICsyMTc0LDggQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIHR4LXB1c2gtYnVmLWxlbi1tYXhcbiAgICAgICAgICAgICAtIGhkcy10aHJlc2hcbiAgICAgICAgICAgICAtIGhkcy10aHJlc2gtbWF4XG4rICAgICAgICAgICAgLSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uXG4rICAgICAgICAgICAgLSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heFxuICAgICAgIGR1bXA6ICpyaW5nLWdldC1vcFxuICAgICAtXG4gICAgICAgbmFtZTogcmluZ3Mtc2V0XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XG5pbmRleCA1MTJmNmQ2ZmEzZDhmOC4uM2I5Y2UxYzZlMTA1NzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdFxuQEAgLTE4Myw3ICsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcbiBzdHJ1Y3QgZHBsbF9waW4qICAgICAgICAgICAgICAgICAgICBkcGxsX3BpblxuIHN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIHBhZ2VfcG9vbHNcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcbi11NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuK3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2luZ19vZmZsb2FkX2hvcml6b25cbit1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuIHN0cnVjdF9uYXBpX2NvbmZpZyogICAgICAgICAgICAgICAgIG5hcGlfY29uZmlnXG4gdW5zaWduZWRfbG9uZyAgICAgICAgICAgICAgICAgICAgICAgZ3JvX2ZsdXNoX3RpbWVvdXRcbiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2RlZmVyX2hhcmRfaXJxc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG5pbmRleCBiYjk5ZDllN2M2NWQ1MS4uNWRkZjM0NzkyN2RjM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG5AQCAtMTgwMSw3ICsxODAxLDggQEAgc3RhdGljIHZvaWQgaWRwZl9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbi1cdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCxcbitcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCB8XG4rXHRcdFx0XHQgIEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbiBcdC5nZXRfbXNnbGV2ZWxcdFx0PSBpZHBmX2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSBpZHBmX3NldF9tc2dsZXZlbCxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG5pbmRleCBjZjk2NmZlNmM3NTljZS4uZGU0MTcwYzJhYTNiYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuQEAgLTg4OCw2ICs4ODgsMTEgQEAgc3RhdGljIGludCBpZHBmX2NmZ19uZXRkZXYoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIFx0bmV0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbiBcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gdnBvcnQtXHUwMDNlbWF4X210dTtcbiBcbitcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVx1MDAzZWRmbHRfcXZfcnNyYy50eHFfbW9kZWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpZHBmX2lzX2NhcF9lbmEoYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuK1x0XHRcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxuK1x0XHRuZXRkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSAxMjgwMDA7XG4rXG4gXHRkZmx0X2ZlYXR1cmVzID0gTkVUSUZfRl9TR1x0fFxuIFx0XHRcdE5FVElGX0ZfSElHSERNQTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjhmMTFkZTU3YzhiYzc3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTEsNiArMSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qIENvcHlyaWdodCAoQykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbiAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldHBvbGwuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwiaWRwZi5oXCJcbiAjaW5jbHVkZSBcImlkcGZfcHRwLmhcIlxuICNpbmNsdWRlIFwiaWRwZl92aXJ0Y2hubC5oXCJcbkBAIC0yNDA4LDkgKzI0MTAsMTMgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsXG4gXHRcdFx0XHQgICAgc3RydWN0IGlkcGZfdHhfc3BsaXRxX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxuIHtcbi1cdCoodTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSAodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCk7XG4rXHQqKF9fbGUzMiAqKVx1MDAyNmRlc2MtXHUwMDNlZmxvdy5xdzEuY21kX2R0eXBlID0gY3B1X3RvX2xlMzIoKHU4KShwYXJhbXMtXHUwMDNlZHR5cGUgfCB0ZF9jbWQpKTtcbiBcdGRlc2MtXHUwMDNlZmxvdy5xdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNigodTE2KXNpemUpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtXHUwMDNlY29tcGxfdGFnKTtcbitcbitcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMF0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdO1xuK1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1sxXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XG4rXHRkZXNjLVx1MDAzZWZsb3cucXcxLnRzWzJdID0gcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXTtcbiB9XG4gXG4gLyoqXG5AQCAtMzAxMSw2ICszMDE3LDYzIEBAIHN0YXRpYyBib29sIGlkcGZfdHhfc3BsaXRxX25lZWRfcmUoc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EpXG4gXHRyZXR1cm4gZ2FwIFx1MDAzZT0gSURQRl9UWF9TUExJVFFfUkVfTUlOX0dBUDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZShjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXG4re1xuK1x0Y29uc3QgaW50IHRzX2dyYW5fcG93MiA9IDk7XG4rXHR1NjQgdHMsIG5vdywgaG9yaXpvbjtcbitcbitcdGhvcml6b24gPSBSRUFEX09OQ0Uoc2tiLVx1MDAzZWRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcbitcdGlmICghaG9yaXpvbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi9cbitcdGlmIChuZXRwb2xsX3R4X3J1bm5pbmcoc2tiLVx1MDAzZWRldikpXG4rXHRcdHJldHVybjtcbitcbitcdHN3aXRjaCAoc2tiLVx1MDAzZXRzdGFtcF90eXBlKSB7XG4rXHRjYXNlIFNLQl9DTE9DS19SRUFMVElNRTpcbitcdFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9hZGQoc2tiLVx1MDAzZXRzdGFtcCxcbitcdFx0XHRcdFx0ICAga3RpbWVfbW9ub190b19hbnkoMCwgVEtfT0ZGU19UQUkpIC1cbitcdFx0XHRcdFx0ICAga3RpbWVfbW9ub190b19hbnkoMCwgVEtfT0ZGU19SRUFMKSkpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU0tCX0NMT0NLX01PTk9UT05JQzpcbitcdFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9tb25vX3RvX2FueShza2ItXHUwMDNldHN0YW1wLCBUS19PRkZTX1RBSSkpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU0tCX0NMT0NLX1RBSTpcbitcdFx0dHMgPSBrdGltZV90b19ucyhza2ItXHUwMDNldHN0YW1wKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRXQVJOX09OX09OQ0UoMSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdG5vdyA9IGt0aW1lX2dldF9jbG9ja3RhaV9ucygpO1xuK1x0aWYgKHRzIFx1MDAzYyBub3cpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIGJleW9uZCBvZmZsb2FkIGhvcml6b24/IHNldCBvdmVyZmxvdyBiaXQgb25seSAqL1xuK1x0aWYgKHRzIFx1MDAzZSBub3cgKyAoaG9yaXpvbiAqIE5TRUNfUEVSX1VTRUMpKSB7XG4rXHRcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAxIFx1MDAzY1x1MDAzYyA3O1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR0cyBcdTAwM2VcdTAwM2U9IHRzX2dyYW5fcG93MjtcbitcbitcdC8qIDAgaXMgdmFsaWQgMjRiIHRpbWVzdGFtcCwgYnV0IGFsc28gbWVhbnMgZmllbGQgdW5zZXQuXG4rXHQgKiBBZGQgNTEyIG5zICh0c19ncmFuX3BvdzIpIHRvIGF2b2lkIHRoaXMgY2FzZVxuK1x0ICovXG4rXHRpZiAoKHRzIFx1MDAyNiAweDdmZmZmZikgPT0gMCkge1xuK1x0XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gMTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1swXSA9IHRzIFx1MDAyNiAweGZmO1xuK1x0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1sxXSA9ICh0cyBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDB4ZmY7XG4rXHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmKTtcbit9XG4rXG4gLyoqXG4gICogaWRwZl90eF9zcGxpdHFfZnJhbWUgLSBTZW5kcyBidWZmZXIgb24gVHggcmluZyB1c2luZyBmbGV4IGRlc2NyaXB0b3JzXG4gICogQHNrYjogc2VuZCBidWZmZXJcbkBAIC0zMDk3LDYgKzMxNjAsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRcdHR4X3BhcmFtcy5kdHlwZSA9IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRTtcbiBcdFx0dHhfcGFyYW1zLmVvcF9jbWQgPSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbitcbitcdFx0aWYgKHNrYi1cdTAwM2V0c3RhbXApXG4rXHRcdFx0aWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZSh0eF9xLCBza2IsIFx1MDAyNnR4X3BhcmFtcyk7XG4rXG4gXHRcdC8qIFNldCB0aGUgUkUgYml0IHRvIHBlcmlvZGljYWxseSBcImNsZWFuXCIgdGhlIGRlc2NyaXB0b3IgcmluZy5cbiBcdFx0ICogTUlOX0dBUCBpcyBzZXQgdG8gTUlOX1JJTkcgc2l6ZSB0byBlbnN1cmUgaXQgd2lsbCBiZSBzZXQgYXRcbiBcdFx0ICogbGVhc3Qgb25jZSBlYWNoIHRpbWUgYXJvdW5kIHRoZSByaW5nLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5pbmRleCA0YmU1YjNiNmQzZWQyYi4uODY1NDA4YjU3YjBkNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5AQCAtMTYxLDYgKzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHtcbiAgKiBAdHNvX3NlZ3M6IE51bWJlciBvZiBzZWdtZW50cyB0byBiZSBzZW50XG4gICogQHRzb19oZHJfbGVuOiBMZW5ndGggb2YgaGVhZGVycyB0byBiZSBkdXBsaWNhdGVkXG4gICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3JcbisgKiBAZGVzY190czogRmxvdyBzY2hlZHVsaW5nIG9mZmxvYWQgdGltZXN0YW1wXG4gICovXG4gc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xuIFx0dTMyIHR4X2ZsYWdzO1xuQEAgLTE3NCw2ICsxNzUsNyBAQCBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7XG4gXHR1MTYgdHNvX2hkcl9sZW47XG4gXG4gXHR1MTYgdGRfY21kO1xuK1x0dTggZGVzY190c1szXTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTg1LDYgKzg1LDggQEAgZW51bSB7XG4gICogQHR4X3B1c2hfYnVmX21heF9sZW46IE1heGltdW0gYWxsb3dlZCBzaXplIG9mIFRYIHB1c2ggYnVmZmVyXG4gICogQGhkc190aHJlc2g6IFBhY2tldCBzaXplIHRocmVzaG9sZCBmb3IgaGVhZGVyIGRhdGEgc3BsaXQgKEhEUylcbiAgKiBAaGRzX3RocmVzaF9tYXg6IE1heGltdW0gc3VwcG9ydGVkIHNldHRpbmcgZm9yIEBoZHNfdGhyZXNob2xkXG4rICogQHBhY2luZ19vZmZsb2FkX2hvcml6b246IHBhY2luZyBvZmZsb2FkIGhvcml6b24gdmFsdWUgaW4gdXNlY1xuKyAqIEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gdmFsdWUgaW4gdXNlY1xuICAqXG4gICovXG4gc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7XG5AQCAtOTcsNiArOTksOCBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbiBcdHUzMlx0dHhfcHVzaF9idWZfbWF4X2xlbjtcbiBcdHUzMlx0aGRzX3RocmVzaDtcbiBcdHUzMlx0aGRzX3RocmVzaF9tYXg7XG4rXHR1MzJcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHR1MzJcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuIH07XG4gXG4gLyoqXG5AQCAtMTA4LDYgKzExMiw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0ge1xuICAqIEBFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTjogY2FwdHVyZSBmb3Igc2V0dGluZyB0eF9wdXNoX2J1Zl9sZW5cbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVDogY2FwdHVyZSBmb3Igc2V0dGluZyB0Y3BfZGF0YV9zcGxpdFxuICAqIEBFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTOiBjYXB0dXJlIGZvciBzZXR0aW5nIGhlYWRlci1kYXRhLXNwbGl0LXRocmVzaFxuKyAqIEBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT046IGNhcHR1cmUgZm9yIHNldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvblxuICAqL1xuIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XG4gXHRFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU5cdFx0PSBCSVQoMCksXG5AQCAtMTE3LDYgKzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XG4gXHRFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTlx0PSBCSVQoNCksXG4gXHRFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElUXHRcdD0gQklUKDUpLFxuIFx0RVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSU1x0XHQ9IEJJVCg2KSxcbitcdEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTlx0PSBCSVQoNyksXG4gfTtcbiBcbiAjZGVmaW5lIF9fRVRIX1JTU19IQVNIX0JJVChiaXQpXHQoKHUzMikxIFx1MDAzY1x1MDAzYyAoYml0KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOGRiMjViNzk1NzNlM2MuLjNjMmVkNDViNTVkY2FkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTIxMjksNyArMjEyOSw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XG4gICpcdEBkcGxsX3BpbjogUG9pbnRlciB0byB0aGUgU3luY0Ugc291cmNlIHBpbiBvZiBhIERQTEwgc3Vic3lzdGVtLFxuICAqXHRcdCAgIHdoZXJlIHRoZSBjbG9jayBpcyByZWNvdmVyZWQuXG4gICpcbi0gKlx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggRURUIG9mZmxvYWQgaG9yaXpvbiBpbiBuc2VjLlxuKyAqXHRAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogYWN0aXZlIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cbisgKlx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxuICAqXHRAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSVxuICAqXHRcdCAgICAgIHNldHRpbmdzLlxuICAqXHRAbnVtX25hcGlfY29uZmlnczpcdG51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cyxcbkBAIC0yNTUyLDcgKzI1NTMsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XG4gXHQvKiogQGlycV9tb2RlcjogZGltIHBhcmFtZXRlcnMgdXNlZCBpZiBJU19FTkFCTEVEKENPTkZJR19ESU1MSUIpLiAqL1xuIFx0c3RydWN0IGRpbV9pcnFfbW9kZXJcdCppcnFfbW9kZXI7XG4gXG4tXHR1NjRcdFx0XHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbitcdHUzMlx0XHRcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHR1MzJcdFx0XHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiBcdHN0cnVjdCBuYXBpX2NvbmZpZ1x0Km5hcGlfY29uZmlnO1xuIFx0dTMyXHRcdFx0bnVtX25hcGlfY29uZmlncztcbiBcdHUzMlx0XHRcdG5hcGlfZGVmZXJfaGFyZF9pcnFzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5pbmRleCA4MTM0YmFmNzg2MGYzYy4uNmYxYTJmYTM2MTU3ZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5AQCAtMTkzLDYgKzE5Myw4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVgsXG4gXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSCxcbiBcdEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCxcbitcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxuK1x0RVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxuIFxuIFx0X19FVEhUT09MX0FfUklOR1NfQ05ULFxuIFx0RVRIVE9PTF9BX1JJTkdTX01BWCA9IChfX0VUSFRPT0xfQV9SSU5HU19DTlQgLSAxKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3BrdGdlbi5jXG4rKysgYi9uZXQvY29yZS9wa3RnZW4uY1xuQEAgLTIwMSw2ICsyMDEsNyBAQFxuIFx0cGYoU1ZJRF9STkQpXHRcdC8qIFJhbmRvbSBTVkxBTiBJRCAqL1x0XHRcdFxcXG4gXHRwZihOT0RFKVx0XHQvKiBOb2RlIG1lbW9yeSBhbGxvYyovXHRcdFx0XFxcbiBcdHBmKFNIQVJFRClcdFx0LyogU2hhcmVkIFNLQiAqL1x0XHRcdFxcXG4rXHRwZihUWFRJTUUpXHRcdC8qIFNPX1RYVElNRSBzdXBwb3J0ICovXHRcdFx0XFxcbiBcbiAjZGVmaW5lIHBmKGZsYWcpXHRcdGZsYWcjI19TSElGVCxcbiBlbnVtIHBrdF9mbGFncyB7XG5AQCAtMjkxLDYgKzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHU2NCBkZWxheTtcdFx0LyogbmFuby1zZWNvbmRzICovXG4gXG4rXHQvKiBUWFRJTUUgc3VwcG9ydCAqL1xuK1x0dTY0IHR4dGltZV9kZWxheTtcdC8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi9cbitcdGNsb2NraWRfdCB0eHRpbWVfY2xvY2tpZDsgLyogY2xvY2tpZCBmb3IgU09fVFhUSU1FICovXG4rXG4gXHRfX3U2NCBjb3VudDtcdFx0LyogRGVmYXVsdCBObyBwYWNrZXRzIHRvIHNlbmQgKi9cbiBcdF9fdTY0IHNvZmFyO1x0XHQvKiBIb3cgbWFueSBwa3RzIHdlJ3ZlIHNlbnQgc28gZmFyICovXG4gXHRfX3U2NCB0eF9ieXRlcztcdFx0LyogSG93IG1hbnkgYnl0ZXMgd2UndmUgdHJhbnNtaXR0ZWQgKi9cbkBAIC02NjYsNiArNjcxLDE3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4gXHRpZiAocGt0X2Rldi1cdTAwM2Vub2RlIFx1MDAzZT0gMClcbiBcdFx0c2VxX3ByaW50ZihzZXEsIFwiICAgICBub2RlOiAlZFxcblwiLCBwa3RfZGV2LVx1MDAzZW5vZGUpO1xuIFxuK1x0aWYgKHBrdF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZfVFhUSU1FKSB7XG4rXHRcdGNsb2NraWRfdCBjbG9ja2lkID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xuK1xuK1x0XHRzZXFfcHJpbnRmKHNlcSwgXCIgICAgIHR4dGltZV9kZWxheTogJWxsdVxcblwiLFxuK1x0XHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXkpO1xuK1x0XHRzZXFfcHJpbnRmKHNlcSwgXCIgICAgIHR4dGltZV9jbG9ja2lkOiAlc1xcblwiLFxuK1x0XHRcdCAgIGNsb2NraWQgPT0gQ0xPQ0tfTU9OT1RPTklDID8gXCJtb25vdG9uaWNcIiA6XG4rXHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19SRUFMVElNRSA/IFwicmVhbHRpbWVcIiA6XG4rXHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19UQUkgPyBcInRhaVwiIDogXCJ1bmtub3duXCIpO1xuK1x0fVxuK1xuIFx0aWYgKHBrdF9kZXYtXHUwMDNleG1pdF9tb2RlID09IE1fTkVUSUZfUkVDRUlWRSlcbiBcdFx0c2VxX3B1dHMoc2VxLCBcIiAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXFxuXCIpO1xuIFx0ZWxzZSBpZiAocGt0X2Rldi1cdTAwM2V4bWl0X21vZGUgPT0gTV9RVUVVRV9YTUlUKVxuQEAgLTExNDEsNiArMTE1Nyw1MCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi1cdTAwM2VkZWxheSk7XG4gXHRcdHJldHVybiBjb3VudDtcbiBcdH1cbitcdGlmICghc3RyY21wKG5hbWUsIFwidHh0aW1lX2RlbGF5XCIpKSB7XG4rXHRcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcbitcdFx0bGVuID0gbnVtX2FyZyhcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4LCBcdTAwMjZ2YWx1ZSk7XG4rXHRcdGlmIChsZW4gXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIGxlbjtcbitcbitcdFx0LyogaW4gcXVldWVfeG1pdCBtb2RlIGZxIG1heSBjbGVhciB0c3RhbXAsIGRvIG5vdCByZXVzZSBza2IgKi9cbitcdFx0aWYgKHZhbHVlIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiBcdTAwM2UgMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSwgKHU2NCl2YWx1ZSk7XG4rXHRcdHNwcmludGYocGdfcmVzdWx0LCBcIk9LOiB0eHRpbWVfZGVsYXk9JWxsdVwiLFxuK1x0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpdmFsdWUpO1xuK1x0XHRyZXR1cm4gY291bnQ7XG4rXHR9XG4rXHRpZiAoIXN0cmNtcChuYW1lLCBcInR4dGltZV9jbG9ja2lkXCIpKSB7XG4rXHRcdGNoYXIgY2xvY2tzdHJbMzJdO1xuK1x0XHRjbG9ja2lkX3QgY2xrO1xuK1xuK1x0XHRtZW1zZXQoY2xvY2tzdHIsIDAsIHNpemVvZihjbG9ja3N0cikpO1xuK1x0XHRtYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7XG4rXHRcdGxlbiA9IHN0cm5fbGVuKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgpO1xuK1x0XHRpZiAobGVuIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBsZW47XG4rXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihjbG9ja3N0ciwgXHUwMDI2dXNlcl9idWZmZXJbaV0sIGxlbikpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRcdGlmICghc3RyY21wKGNsb2Nrc3RyLCBcIm1vbm90b25pY1wiKSkge1xuK1x0XHRcdGNsayA9IENMT0NLX01PTk9UT05JQztcbitcdFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcInJlYWx0aW1lXCIpKSB7XG4rXHRcdFx0Y2xrID0gQ0xPQ0tfUkVBTFRJTUU7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCJ0YWlcIikpIHtcbitcdFx0XHRjbGsgPSBDTE9DS19UQUk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwiRVJST1I6IHVua25vd24gY2xvY2tpZCAnJXMnXCIsXG4rXHRcdFx0XHRjbG9ja3N0cik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwiT0s6IHR4dGltZV9jbG9ja2lkPSVzXCIsIGNsb2Nrc3RyKTtcbitcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkLCBjbGspO1xuK1x0XHRyZXR1cm4gY291bnQ7XG4rXHR9XG4gXHRpZiAoIXN0cmNtcChuYW1lLCBcInJhdGVcIikpIHtcbiBcdFx0bWF4ID0gbWluKDEwLCBjb3VudCAtIGkpO1xuIFx0XHRsZW4gPSBudW1fYXJnKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFx1MDAyNnZhbHVlKTtcbkBAIC0xMjM4LDYgKzEyOTgsOCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGlmICh2YWx1ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgKHBrdF9kZXYtXHUwMDNlbl9pbWl4X2VudHJpZXMgXHUwMDNlIDAgfHxcbiBcdFx0XHRcdCAgIShwa3RfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBGX1NIQVJFRCkpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRpZiAodmFsdWUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdHBrdF9kZXYtXHUwMDNlY2xvbmVfc2tiID0gdmFsdWU7XG4gXG5AQCAtMjMyMSw2ICsyMzgzLDIxIEBAIHN0YXRpYyB2b2lkIHBrdGdlbl9zZXR1cF9pbmplY3Qoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gfVxuIFxuIFxuK3N0YXRpYyBrdGltZV90IGt0aW1lX2dldF9jbG9jayhjbG9ja2lkX3QgY2xvY2tpZClcbit7XG4rXHRzd2l0Y2ggKGNsb2NraWQpIHtcbitcdGNhc2UgQ0xPQ0tfUkVBTFRJTUU6XG4rXHRcdHJldHVybiBrdGltZV9nZXRfcmVhbCgpO1xuK1x0Y2FzZSBDTE9DS19NT05PVE9OSUM6XG4rXHRcdHJldHVybiBrdGltZV9nZXQoKTtcbitcdGNhc2UgQ0xPQ0tfVEFJOlxuK1x0XHRyZXR1cm4ga3RpbWVfZ2V0X2Nsb2NrdGFpKCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRXQVJOX09OX09OQ0UoMSk7XG4rXHRcdHJldHVybiBrdGltZV9nZXQoKTtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgc3BpbihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldiwga3RpbWVfdCBzcGluX3VudGlsKVxuIHtcbiBcdGt0aW1lX3Qgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG5AQCAtMzUxMCw3ICszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiBcbiBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiB7XG4tXHRib29sIHNrYl9zaGFyZWQgPSAhIShSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VmbGFncykgXHUwMDI2IEZfU0hBUkVEKTtcbitcdHUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZWZsYWdzKTtcbitcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKGZsYWdzIFx1MDAyNiBGX1NIQVJFRCk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtXHUwMDNlb2RldjtcbiBcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcdHVuc2lnbmVkIGludCBidXJzdCA9IDE7XG5AQCAtMzU0NSw2ICszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHQvKiBJZiBubyBza2Igb3IgY2xvbmUgY291bnQgZXhoYXVzdGVkIHRoZW4gZ2V0IG5ldyBvbmUgKi9cbiBcdGlmICghcGt0X2Rldi1cdTAwM2Vza2IgfHwgKHBrdF9kZXYtXHUwMDNlbGFzdF9vayBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICArK3BrdF9kZXYtXHUwMDNlY2xvbmVfY291bnQgXHUwMDNlPSBjbG9uZV9za2IpKSB7XG4rXHRcdHU2NCB0eHRpbWVfZGVsYXk7XG4rXG4gXHRcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xuIFx0XHRrZnJlZV9za2IocGt0X2Rldi1cdTAwM2Vza2IpO1xuIFxuQEAgLTM1NTcsNiArMzYzNywxNiBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiBcdFx0fVxuIFx0XHRwa3RfZGV2LVx1MDAzZWxhc3RfcGt0X3NpemUgPSBwa3RfZGV2LVx1MDAzZXNrYi1cdTAwM2VsZW47XG4gXHRcdHBrdF9kZXYtXHUwMDNlY2xvbmVfY291bnQgPSAwO1x0LyogcmVzZXQgY291bnRlciAqL1xuK1xuK1x0XHR0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXkpO1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEZfVFhUSU1FIFx1MDAyNlx1MDAyNiB0eHRpbWVfZGVsYXkpIHtcbitcdFx0XHRjbG9ja2lkX3QgY2xrID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xuK1x0XHRcdGt0aW1lX3QgdHh0aW1lID0ga3RpbWVfYWRkX25zKGt0aW1lX2dldF9jbG9jayhjbGspLFxuK1x0XHRcdFx0XHRcdCAgICAgIHR4dGltZV9kZWxheSk7XG4rXG4rXHRcdFx0c2tiX3NldF9kZWxpdmVyeV90eXBlX2J5X2Nsb2NraWQocGt0X2Rldi1cdTAwM2Vza2IsIHR4dGltZSxcbitcdFx0XHRcdFx0XHRcdCBjbGspO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAocGt0X2Rldi1cdTAwM2VkZWxheSBcdTAwMjZcdTAwMjYgcGt0X2Rldi1cdTAwM2VsYXN0X29rKVxuQEAgLTM4NjksNiArMzk1OSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSlcbiBcdHBrdF9kZXYtXHUwMDNlYnVyc3QgPSAxO1xuIFx0cGt0X2Rldi1cdTAwM2Vub2RlID0gTlVNQV9OT19OT0RFO1xuIFx0cGt0X2Rldi1cdTAwM2VmbGFncyA9IEZfU0hBUkVEO1x0LyogU0tCIHNoYXJlZCBieSBkZWZhdWx0ICovXG4rXHRwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkID0gQ0xPQ0tfTU9OT1RPTklDO1xuIFxuIFx0ZXJyID0gcGt0Z2VuX3NldHVwX2Rldih0LVx1MDAzZW5ldCwgcGt0X2RldiwgaWZuYW1lKTtcbiBcdGlmIChlcnIpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuaW5kZXggMzFjNjVhNTQ1YTEwN2MuLjJjN2EyNDVjNWZmYzJlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtMjE1NSw3ICsyMTU1LDcgQEAgc3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX1RTT19NQVhfU0VHUyxcbiBcdFx0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZXRzb19tYXhfc2VncykpIHx8XG4gXHQgICAgbmxhX3B1dF91aW50KHNrYiwgSUZMQV9NQVhfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbi1cdFx0XHQgUkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikpIHx8XG4rXHRcdFx0ICh1NjQpUkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fFxuICNpZmRlZiBDT05GSUdfUlBTXG4gXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsXG4gXHRcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2VudW1fcnhfcXVldWVzKSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uYyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXG5pbmRleCAyM2RiNDA2MThmZWQxNC4uOWNhNjk4MGYyMjkxZTYgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9jb21tb24uY1xuKysrIGIvbmV0L2V0aHRvb2wvY29tbW9uLmNcbkBAIC05NTQsNiArOTU0LDEwIEBAIHZvaWQgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0LyogRHJpdmVyIGdpdmVzIHVzIGN1cnJlbnQgc3RhdGUsIHdlIHdhbnQgdG8gcmV0dXJuIGN1cnJlbnQgY29uZmlnICovXG4gXHRrcGFyYW0tXHUwMDNldGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRrcGFyYW0tXHUwMDNlaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbitcbitcdGtwYXJhbS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gUkVBRF9PTkNFKGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKTtcbitcdGtwYXJhbS1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9XG4rXHRcdFJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuaW5kZXggM2U5NjlhMDcwZjlmZTQuLmFlN2I2NTFjNjU4Zjc0IDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5oXG4rKysgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbkBAIC00OTQsNyArNDk0LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ZlYXR1cmVzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0ZFQVRVUkVTX1dBTlRcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19IRUFERVIgKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19GTEFHUyArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19nZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRUFERVIgKyAxXTtcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVggKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX3NldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0NPTUJJTkVEX0NPVU5UICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NvYWxlc2NlX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NPQUxFU0NFX0hFQURFUiArIDFdO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3JpbmdzLmMgYi9uZXQvZXRodG9vbC9yaW5ncy5jXG5pbmRleCA5MDU0Yzg5YzVkN2JiMi4uNWNjMjBkNTgxYzQ2ZWMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9yaW5ncy5jXG4rKysgYi9uZXQvZXRodG9vbC9yaW5ncy5jXG5AQCAtNDIsNiArNDIsMTAgQEAgc3RhdGljIGludCByaW5nc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbiBcbiBcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS50Y3BfZGF0YV9zcGxpdCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX2NvbmZpZztcbiBcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoID0gZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfdGhyZXNoO1xuK1x0ZGF0YS1cdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b24gPVxuK1x0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pO1xuK1x0ZGF0YS1cdTAwM2VrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID1cbitcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3JpbmdwYXJhbShkZXYsIFx1MDAyNmRhdGEtXHUwMDNlcmluZ3BhcmFtLFxuIFx0XHRcdFx0XHRcdTAwMjZkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXHUwMDNlZXh0YWNrKTtcbkBAIC02OSw3ICs3Myw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovXG4gXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYICovXG4gXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXG4tXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYICovXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEyMSw3ICsxMjcsMTIgQEAgc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaCkgfHxcbiBcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuLVx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXG4rXHRcdFx0ICBrci1cdTAwM2VoZHNfdGhyZXNoX21heCkpKSB8fFxuK1x0ICAgICgoc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbitcdFx0XHQgIGtyLVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8XG4rXHQgICAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCxcbitcdFx0XHQgIGtyLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0LDYgKzE1NSw3IEBAIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbXSA9IHtcbiBcdFtFVEhUT09MX0FfUklOR1NfUlhfUFVTSF1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIDEpLFxuIFx0W0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gXHRbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnRcbkBAIC0xNzcsNiArMTg5LDE0IEBAIGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4rXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEob3BzLVx1MDAzZXN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcdTAwMjYgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OKSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0ICAgIHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSxcbitcdFx0XHRcdCAgICBcInNldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX0NRRV9TSVpFXSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKG9wcy1cdTAwM2VzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfQ1FFX1NJWkUpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssXG5AQCAtMjQ2LDYgKzI2Niw4IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRcdCB0YltFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXSwgXHUwMDI2bW9kKTtcbiBcdGV0aG5sX3VwZGF0ZV91MzIoXHUwMDI2a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLFxuIFx0XHRcdCB0YltFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF0sIFx1MDAyNm1vZCk7XG4rXHRldGhubF91cGRhdGVfdTMyKFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcbitcdFx0XHQgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLCBcdTAwMjZtb2QpO1xuIFx0aWYgKCFtb2QpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTI4MSw2ICszMDMsOSBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfVFhdO1xuIFx0ZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoIFx1MDAzZSBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KVxuIFx0XHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTtcbitcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiBcdTAwM2VcbitcdFx0IGtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pXG4rXHRcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dO1xuIFx0ZWxzZVxuIFx0XHRlcnJfYXR0ciA9IE5VTEw7XG4gXHRpZiAoZXJyX2F0dHIpIHtcbkBAIC0zMDIsNiArMzI3LDEwIEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0cmV0ID0gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9yaW5ncGFyYW0oZGV2LCBcdTAwMjZyaW5ncGFyYW0sXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXHUwMDNlZXh0YWNrKTtcbitcdGlmICghcmV0KVxuK1x0XHRXUklURV9PTkNFKGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLFxuK1x0XHRcdCAgIGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbik7XG4rXG4gXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jXG5pbmRleCA3Y2FlMDgyYTk4NDcyMS4uY2JmMDE1ZGY2OGNjZjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuQEAgLTM5OSw2ICszOTksMTEgQEAgc3RhdGljIHN0cnVjdCBmcV9mbG93ICpmcV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgIFJFQURfT05DRShzay1cdTAwM2Vza19wYWNpbmdfc3RhdHVzKSAhPSBTS19QQUNJTkdfRlEpXG4gXHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c2stXHUwMDNlc2tfcGFjaW5nX3N0YXR1cyxcbiBcdFx0XHRcdFx0ICBTS19QQUNJTkdfRlEpO1xuK1xuK1x0XHRpZiAocS1cdTAwM2VvZmZsb2FkX2hvcml6b24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBmcV9za2JfY2Ioc2tiKS1cdTAwM2V0aW1lX3RvX3NlbmQgXHUwMDNjPSBub3cpXG4rXHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IDA7XG4rXG4gXHRcdHJldHVybiBcdTAwMjZxLVx1MDAzZWludGVybmFsO1xuIFx0fVxuIFxuQEAgLTcwNyw2ICs3MTIsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gXHRzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbiBcdHN0cnVjdCBmcV9wZXJiYW5kX2Zsb3dzICpwYmFuZDtcbiBcdHN0cnVjdCBmcV9mbG93X2hlYWQgKmhlYWQ7XG4rXHR1NjQgdGltZV9uZXh0X3BhY2tldDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZnFfZmxvdyAqZjtcbiBcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbkBAIC03MjEsNyArNzI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIFx0aWYgKHNrYikge1xuIFx0XHRxLVx1MDAzZWludGVybmFsLnFsZW4tLTtcbiBcdFx0ZnFfZGVxdWV1ZV9za2Ioc2NoLCBcdTAwMjZxLVx1MDAzZWludGVybmFsLCBza2IpO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0cmV0dXJuIHNrYjtcbiBcdH1cbiBcbiBcdG5vdyA9IGt0aW1lX2dldF9ucygpO1xuQEAgLTc1OCw4ICs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gXG4gXHRza2IgPSBmcV9wZWVrKGYpO1xuIFx0aWYgKHNrYikge1xuLVx0XHR1NjQgdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXHUwMDNldGltZV90b19zZW5kLFxuLVx0XHRcdFx0XHQgICAgIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4rXHRcdHRpbWVfbmV4dF9wYWNrZXQgPSBtYXhfdCh1NjQsIGZxX3NrYl9jYihza2IpLVx1MDAzZXRpbWVfdG9fc2VuZCxcbitcdFx0XHRcdFx0IGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4gXG4gXHRcdGlmIChub3cgKyBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcdTAwM2MgdGltZV9uZXh0X3BhY2tldCkge1xuIFx0XHRcdGhlYWQtXHUwMDNlZmlyc3QgPSBmLVx1MDAzZW5leHQ7XG5AQCAtODI4LDExICs4MzQsMTUgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIFx0XHQgKiBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgd2FzIHNldCB3aGVuIHByaW9yIHBhY2tldCB3YXMgc2VudCxcbiBcdFx0ICogYW5kIGN1cnJlbnQgdGltZSAoQG5vdykgY2FuIGJlIHRvbyBsYXRlIGJ5IHRlbnMgb2YgdXMuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZi1cdTAwM2V0aW1lX25leHRfcGFja2V0KVxuK1x0XHRpZiAoZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IFx1MDAyNlx1MDAyNiBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgXHUwMDNjIG5vdylcbiBcdFx0XHRsZW4gLT0gbWluKGxlbi8yLCBub3cgLSBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xuIFx0XHRmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgPSBub3cgKyBsZW47XG4gXHR9XG4rXG4gb3V0OlxuK1x0aWYgKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFx1MDAyNlx1MDAyNiB0aW1lX25leHRfcGFja2V0IFx1MDAzYz0gbm93KVxuK1x0XHRza2ItXHUwMDNldHN0YW1wID0gMDtcbitcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuQEAgLTExNzksNyArMTE4OSw5IEBAIHN0YXRpYyBpbnQgZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gXHRcdHU2NCBvZmZsb2FkX2hvcml6b24gPSAodTY0KU5TRUNfUEVSX1VTRUMgKlxuIFx0XHRcdFx0ICAgICAgbmxhX2dldF91MzIodGJbVENBX0ZRX09GRkxPQURfSE9SSVpPTl0pO1xuIFxuLVx0XHRpZiAob2ZmbG9hZF9ob3Jpem9uIFx1MDAzYz0gcWRpc2NfZGV2KHNjaCktXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHtcbitcdFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcdTAwM2M9XG4rXHRcdCAgICAodTY0KVJFQURfT05DRShxZGlzY19kZXYoc2NoKS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSAqXG4rXHRcdCAgICBOU0VDX1BFUl9VU0VDKSB7XG4gXHRcdFx0V1JJVEVfT05DRShxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiwgb2ZmbG9hZF9ob3Jpem9uKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImludmFsaWQgb2ZmbG9hZF9ob3Jpem9uXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcbmluZGV4IDU1YTM4NmYzZDFiOTBmLi42ZTY0YmFhNGM2MGRkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xuQEAgLTQyLDggKzQyLDEwIEBAIHN0YXRpYyBib29sXHRjZmdfbWFjaGluZV9zbG93O1xuIHN0YXRpYyB1aW50NjRfdFx0Y2ZnX3N0YXJ0X3RpbWVfbnM7XG4gc3RhdGljIGludFx0Y2ZnX21hcms7XG4gc3RhdGljIGJvb2xcdGNmZ19yeDtcbitzdGF0aWMgYm9vbFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkO1xuIFxuIHN0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydDtcbitzdGF0aWMgdWludDY0X3QgZ2xvYl90c3RhcnRfcmVhbDtcbiBzdGF0aWMgdWludDY0X3QgdGRlbGl2ZXJfbWF4O1xuIFxuIHN0YXRpYyBpbnQgZXJyb3JzO1xuQEAgLTE1OCwxOCArMTYwLDcwIEBAIHN0YXRpYyB2b2lkIGRvX3JlY3ZfdmVyaWZ5X2VtcHR5KGludCBmZHIpXG4gXHRcdGVycm9yKDEsIDAsIFwicmVjdjogbm90IGVtcHR5IGFzIGV4cGVjdGVkICglZCwgJWQpXCIsIHJldCwgZXJybm8pO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuK3N0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLFxuK1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgcGF5bG9hZF9jaGFyKVxuK3tcbitcdGNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7XG4rXHRpbnQ2NF90IHRzdGFtcCA9IDA7XG4rXG4rXHRzd2l0Y2ggKGVyci1cdTAwM2VlZV9lcnJubykge1xuK1x0Y2FzZSBFQ0FOQ0VMRUQ6XG4rXHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXG4rXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXG5cIixcbitcdFx0XHQgICAgICBlcnItXHUwMDNlZWVfY29kZSk7XG4rXHRcdHJlYXNvbiA9IFwibWlzc2VkIHR4dGltZVwiO1xuK1x0YnJlYWs7XG4rXHRjYXNlIEVJTlZBTDpcbitcdFx0aWYgKGVyci1cdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX0lOVkFMSURfUEFSQU0pXG4rXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcXG5cIixcbitcdFx0XHQgICAgICBlcnItXHUwMDNlZWVfY29kZSk7XG4rXHRcdHJlYXNvbiA9IFwiaW52YWxpZCB0eHRpbWVcIjtcbitcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcblwiLFxuK1x0XHQgICAgICBlcnItXHUwMDNlZWVfZXJybm8sIGVyci1cdTAwM2VlZV9jb2RlKTtcbitcdH1cbitcbitcdHRzdGFtcCA9ICgoaW50NjRfdCllcnItXHUwMDNlZWVfZGF0YSkgXHUwMDNjXHUwMDNjIDMyIHwgZXJyLVx1MDAzZWVlX2luZm87XG4rXHR0c3RhbXAgLT0gKGludDY0X3QpZ2xvYl90c3RhcnQ7XG4rXHR0c3RhbXAgLz0gMTAwMCAqIDEwMDA7XG4rXHRmcHJpbnRmKHN0ZGVyciwgXCJzZW5kOiBwa3QgJWMgYXQgJVwiIFBSSWQ2NCBcIm1zIGRyb3BwZWQ6ICVzXFxuXCIsXG4rXHRcdHBheWxvYWRfY2hhciwgdHN0YW1wLCByZWFzb24pO1xuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3MpXG4re1xuK1x0aW50NjRfdCB0cztcbitcbitcdHRzID0gdHNzLVx1MDAzZXRzWzBdLnR2X3NlYztcbitcdHRzICo9IDEwMDBVTEwgKiAxMDAwICogMTAwMDtcbitcdHRzICs9IHRzcy1cdTAwM2V0c1swXS50dl9uc2VjO1xuK1x0dHMgLT0gZ2xvYl90c3RhcnRfcmVhbDtcbitcdHRzIC89IDEwMDA7XG4rXG4rXHRpZiAodHMgXHUwMDNlIGNmZ192YXJpYW5jZV91cykge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJzdyBkZWxheSAlXCIgUFJJZDY0IFwidXMgZXhjZWVkcyBib3VuZHNcXG5cIiwgdHMpO1xuK1x0XHRpZiAoIWNmZ19tYWNoaW5lX3Nsb3cpXG4rXHRcdFx0ZXJyb3JzKys7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZShpbnQgZmR0KVxuIHtcbiBcdGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIpKSArXG4rXHRcdCAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjbV90aW1lc3RhbXBpbmcpKSArXG4gXHRcdCAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpXSA9IHswfTtcbiBcdGNoYXIgZGF0YVtzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICtcbiBcdFx0ICBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyAxXTtcbitcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3M7XG4gXHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycjtcbiBcdGludCByZXQsIG51bV90c3RhbXAgPSAwO1xuIFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7MH07XG4gXHRzdHJ1Y3QgaW92ZWMgaW92ID0gezB9O1xuIFx0c3RydWN0IGNtc2doZHIgKmNtO1xuLVx0aW50NjRfdCB0c3RhbXAgPSAwO1xuIFxuIFx0aW92Lmlvdl9iYXNlID0gZGF0YTtcbiBcdGlvdi5pb3ZfbGVuID0gc2l6ZW9mKGRhdGEpO1xuQEAgLTE4MSw4ICsyMzUsNiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuIFx0bXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpO1xuIFxuIFx0d2hpbGUgKDEpIHtcbi1cdFx0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcbi1cbiBcdFx0cmV0ID0gcmVjdm1zZyhmZHQsIFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcbiBcdFx0aWYgKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUFHQUlOKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTE5Miw0MiArMjQ0LDMyIEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXG4gXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogZmxhZ3MgMHgleFxcblwiLCBtc2cubXNnX2ZsYWdzKTtcbiBcbiBcdFx0Y20gPSBDTVNHX0ZJUlNUSERSKFx1MDAyNm1zZyk7XG4rXHRcdHRzcyA9IE5VTEw7XG4rXG4rXHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsID09IFNPTF9TT0NLRVQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjbS1cdTAwM2VjbXNnX3R5cGUgPT0gU0NNX1RJTUVTVEFNUElORykge1xuK1x0XHRcdHRzcyA9ICh2b2lkICopQ01TR19EQVRBKGNtKTtcbitcdFx0XHRjbSA9IENNU0dfTlhUSERSKFx1MDAyNm1zZywgY20pO1xuK1x0XHRcdGlmICghY20pXG4rXHRcdFx0XHRlcnJvcigxLCAwLCBcInRpbWVzdGFtcCBtaXNzaW5nIGlwIGVyclxcblwiKTtcbitcdFx0fVxuK1xuIFx0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBjZmdfZXJycV9sZXZlbCB8fFxuIFx0XHQgICAgY20tXHUwMDNlY21zZ190eXBlICE9IGNmZ19lcnJxX3R5cGUpXG4gXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdHlwZSAweCV4LjB4JXhcXG5cIixcbiBcdFx0XHRcdCAgICBjbS1cdTAwM2VjbXNnX2xldmVsLCBjbS1cdTAwM2VjbXNnX3R5cGUpO1xuIFxuIFx0XHRlcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcbi1cdFx0aWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1RYVElNRSlcbitcdFx0aWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RYVElNRSlcbitcdFx0XHRudW1fdHN0YW1wICs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChlcnIsXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgZGF0YVtyZXQgLSAxXSk7XG4rXHRcdGVsc2UgaWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RJTUVTVEFNUElORyBcdTAwMjZcdTAwMjYgdHNzKVxuK1x0XHRcdGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKGVyciwgdHNzKTtcbitcdFx0ZWxzZVxuIFx0XHRcdGVycm9yKDEsIDAsIFwiZXJycXVldWU6IG9yaWdpbiAweCV4XFxuXCIsIGVyci1cdTAwM2VlZV9vcmlnaW4pO1xuIFxuLVx0XHRzd2l0Y2ggKGVyci1cdTAwM2VlZV9lcnJubykge1xuLVx0XHRjYXNlIEVDQU5DRUxFRDpcbi1cdFx0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfTUlTU0VEKVxuLVx0XHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXG5cIixcbi1cdFx0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0XHRyZWFzb24gPSBcIm1pc3NlZCB0eHRpbWVcIjtcbi1cdFx0YnJlYWs7XG4tXHRcdGNhc2UgRUlOVkFMOlxuLVx0XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKVxuLVx0XHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcXG5cIixcbi1cdFx0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0XHRyZWFzb24gPSBcImludmFsaWQgdHh0aW1lXCI7XG4tXHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGVycm9yKDEsIDAsIFwiZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcXG5cIixcbi1cdFx0XHQgICAgICBlcnItXHUwMDNlZWVfZXJybm8sIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0fVxuLVxuLVx0XHR0c3RhbXAgPSAoKGludDY0X3QpIGVyci1cdTAwM2VlZV9kYXRhKSBcdTAwM2NcdTAwM2MgMzIgfCBlcnItXHUwMDNlZWVfaW5mbztcbi1cdFx0dHN0YW1wIC09IChpbnQ2NF90KSBnbG9iX3RzdGFydDtcbi1cdFx0dHN0YW1wIC89IDEwMDAgKiAxMDAwO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCJzZW5kOiBwa3QgJWMgYXQgJVwiIFBSSWQ2NCBcIm1zIGRyb3BwZWQ6ICVzXFxuXCIsXG4tXHRcdFx0ZGF0YVtyZXQgLSAxXSwgdHN0YW1wLCByZWFzb24pO1xuLVxuIFx0XHRtc2cubXNnX2ZsYWdzID0gMDtcbiBcdFx0bXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpO1xuLVx0XHRudW1fdHN0YW1wKys7XG4gXHR9XG4gXG4gXHRyZXR1cm4gbnVtX3RzdGFtcDtcbkBAIC0yNDUsMTIgKzI4NywxMyBAQCBzdGF0aWMgdm9pZCByZWN2X2VycnF1ZXVlX21zZ3MoaW50IGZkdClcbiBcdFx0XHRlcnJvcigxLCBlcnJubywgXCJwb2xsXCIpO1xuIFxuIFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAocGZkLnJldmVudHMgXHUwMDI2IFBPTExFUlIpKVxuLVx0XHRcdG51bV90c3RhbXAgKz0gZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGZkdCk7XG4rXHRcdFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlKGZkdCk7XG4gXG4gXHRcdGlmIChudW1fdHN0YW1wID09IGNmZ19udW1fcGt0KVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0fSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgXHUwMDNjIHRkZWxpdmVyX21heCk7XG4rXHR9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSBcdTAwM2NcbitcdFx0IHRkZWxpdmVyX21heCArIChjZmdfdmFyaWFuY2VfdXMgKiAxMDAwKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHN0YXJ0X3RpbWVfd2FpdCh2b2lkKVxuQEAgLTI5NSw2ICszMzgsMTggQEAgc3RhdGljIHZvaWQgc2V0c29ja29wdF90eHRpbWUoaW50IGZkKVxuIFx0XHRlcnJvcigxLCAwLCBcImdldHNvY2tvcHQgdHh0aW1lOiBtaXNtYXRjaFwiKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc2V0c29ja29wdF90eHRpbWVzdGFtcGluZyhpbnQgZmQpXG4re1xuK1x0aW50IHZhbCA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxuK1x0XHQgIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgfFxuK1x0XHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEIHxcbitcdFx0ICBTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk7XG4rXG4rXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLFxuK1x0XHQgICAgICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXG4rXHRcdGVycm9yKDEsIGVycm5vLCBcInNldHNvY2tvcHQgdGltZXN0YW1waW5nXCIpO1xuK31cbitcbiBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4ge1xuIFx0aW50IGZkO1xuQEAgLTMwOCw2ICszNjMsOSBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4gXG4gXHRzZXRzb2Nrb3B0X3R4dGltZShmZCk7XG4gXG4rXHRpZiAoY2ZnX3ZlcmlmeV9od19vZmZsb2FkKVxuK1x0XHRzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGZkKTtcbitcbiBcdGlmIChjZmdfbWFyayBcdTAwMjZcdTAwMjZcbiBcdCAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19NQVJLLCBcdTAwMjZjZmdfbWFyaywgc2l6ZW9mKGNmZ19tYXJrKSkpXG4gXHRcdGVycm9yKDEsIGVycm5vLCBcInNldHNvY2tvcHQgbWFya1wiKTtcbkBAIC0zMTcsNyArMzc1LDcgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIHN0YXRpYyBpbnQgc2V0dXBfcngoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiB7XG4tXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSAxMDAgKiAxMDAwIH07XG4rXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSA2MDAgKiAxMDAwIH07XG4gXHRpbnQgZmQ7XG4gXG4gXHRmZCA9IHNvY2tldChhZGRyLVx1MDAzZXNhX2ZhbWlseSwgU09DS19ER1JBTSwgMCk7XG5AQCAtMzQ4LDYgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX3Rlc3RfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiBcbiBcdHN0YXJ0X3RpbWVfd2FpdCgpO1xuIFx0Z2xvYl90c3RhcnQgPSBnZXR0aW1lX25zKGNmZ19jbG9ja2lkKTtcbitcdGdsb2JfdHN0YXJ0X3JlYWwgPSBnZXR0aW1lX25zKENMT0NLX1JFQUxUSU1FKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNmZ19udW1fcGt0OyBpKyspXG4gXHRcdGRvX3NlbmRfb25lKGZkdCwgXHUwMDI2Y2ZnX2J1ZltpXSk7XG5AQCAtNDQwLDEwICs0OTksMTEgQEAgc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpXG4gXHRcdFx0XCIgIC02ICAgICAgICAgICAgb25seSBJUHY2XFxuXCJcbiBcdFx0XHRcIiAgLWMgXHUwMDNjY2xvY2tcdTAwM2UgICAgbW9ub3RvbmljIG9yIHRhaSAoZGVmYXVsdClcXG5cIlxuIFx0XHRcdFwiICAtRCBcdTAwM2NhZGRyXHUwMDNlICAgICBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzIChzZXJ2ZXIpXFxuXCJcbi1cdFx0XHRcIiAgLVMgXHUwMDNjYWRkclx1MDAzZSAgICAgc291cmNlIElQIGFkZHJlc3MgKGNsaWVudClcXG5cIlxuK1x0XHRcdFwiICAtaCAgICAgICAgICAgIHZlcmlmeSBoYXJkd2FyZSBvZmZsb2FkICh0eClcXG5cIlxuK1x0XHRcdFwiICAtbSBcdTAwM2NtYXJrXHUwMDNlICAgICBzb2NrZXQgbWFya1xcblwiXG4gXHRcdFx0XCIgIC1yICAgICAgICAgICAgcnVuIHJ4IG1vZGVcXG5cIlxuK1x0XHRcdFwiICAtUyBcdTAwM2NhZGRyXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcblwiXG4gXHRcdFx0XCIgIC10IFx1MDAzY25zZWNcdTAwM2UgICAgIHN0YXJ0IHRpbWUgKFVUQyBuYW5vc2Vjb25kcylcXG5cIlxuLVx0XHRcdFwiICAtbSBcdTAwM2NtYXJrXHUwMDNlICAgICBzb2NrZXQgbWFya1xcblwiXG4gXHRcdFx0XCJcXG5cIixcbiBcdFx0XHRwcm9nbmFtZSk7XG4gXHRleGl0KDEpO1xuQEAgLTQ1NSw3ICs1MTUsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdGludCBkb21haW4gPSBQRl9VTlNQRUM7XG4gXHRpbnQgYztcbiBcbi1cdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcIjQ2YzpTOkQ6cnQ6bTpcIikpICE9IC0xKSB7XG4rXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXCI0NmM6RDpobTpyUzp0OlwiKSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChjKSB7XG4gXHRcdGNhc2UgJzQnOlxuIFx0XHRcdGlmIChkb21haW4gIT0gUEZfVU5TUEVDKVxuQEAgLTQ4MiwyMSArNTQyLDI0IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGVycm9yKDEsIDAsIFwidW5rbm93biBjbG9jayBpZCAlc1wiLCBvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdTJzpcbi1cdFx0XHRzYWRkciA9IG9wdGFyZztcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAnRCc6XG4gXHRcdFx0ZGFkZHIgPSBvcHRhcmc7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ2gnOlxuK1x0XHRcdGNmZ192ZXJpZnlfaHdfb2ZmbG9hZCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ20nOlxuK1x0XHRcdGNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ3InOlxuIFx0XHRcdGNmZ19yeCA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ1MnOlxuK1x0XHRcdHNhZGRyID0gb3B0YXJnO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICd0JzpcbiBcdFx0XHRjZmdfc3RhcnRfdGltZV9ucyA9IHN0cnRvbGwob3B0YXJnLCBOVUxMLCAwKTtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnbSc6XG4tXHRcdFx0Y2ZnX21hcmsgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZShhcmd2WzBdKTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxuaW5kZXggYWRmNmM4NDhkNmQ4MGYuLjdiNzVhMzNmNWM0M2Y4IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcbkBAIC0xMiwxMCArMTIsMTMgQEAgaW1wb3J0IHRpbWVcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF92YXJpYW50c1xuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBLc2Z0U2tpcEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBia2csIGNtZCwgZGVmZXIsIHRjXG4rZnJvbSBsaWIucHkgaW1wb3J0IEV0aHRvb2xGYW1pbHksIE5sRXJyb3JcbiBcbiBcbiBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOlxuICAgICBcIlwiXCJNYWluIGZ1bmN0aW9uLiBSdW4gc29fdHh0aW1lIGFzIHNlbmRlciBhbmQgcmVjZWl2ZXIuXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuK1xuICAgICBzbG93X21hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgnS1NGVF9NQUNISU5FX1NMT1cnKVxuIFxuICAgICBpZiBub3QgaGFzYXR0cihjZmcsIFwiYmluX3JlbW90ZVwiKTpcbkBAIC0zOCw2ICs0MSwzNCBAQCBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOlxuICAgICAgICAgY21kKGNtZF90eClcbiBcbiBcbitkZWYgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpOlxuKyAgICBcIlwiXCJDb25maWd1cmUgcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi5cIlwiXCJcbisgICAgZXRobmwgPSBFdGh0b29sRmFtaWx5KClcbitcbisgICAgdHJ5OlxuKyAgICAgICAgcmluZ3MgPSBldGhubC5yaW5nc19nZXQoeydoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fX0pXG4rICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdyaW5nLWdldCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZScpIGZyb20gZVxuK1xuKyAgICBpZiAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbicgbm90IGluIHJpbmdzIG9yIFxcXG4rICAgICAgICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heCcgbm90IGluIHJpbmdzOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgncGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZScpXG4rXG4rICAgIGlmIHJpbmdzWydwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heCddIFx1MDAzYyA1MF8wMDA6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdwYWNpbmcgb2ZmbG9hZCBtYXggaG9yaXpvbiB0b28gc21hbGwnKVxuK1xuKyAgICBjdXJfaG9yaXpvbiA9IHJpbmdzWydwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJ11cbisgICAgbmV3X2hvcml6b24gPSA1MF8wMDBcbisgICAgZXRobmwucmluZ3Nfc2V0KHtcbisgICAgICAgICdoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fSxcbisgICAgICAgICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJzogbmV3X2hvcml6b24sXG4rICAgIH0pXG4rICAgIGRlZmVyKGV0aG5sLnJpbmdzX3NldCwge1xuKyAgICAgICAgJ2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9LFxuKyAgICAgICAgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nOiBjdXJfaG9yaXpvblxuKyAgICB9KVxuK1xuK1xuIGRlZiBfcWRpc2Nfc2V0dXAoaWZuYW1lLCBxZGlzYywgb3B0YXJncz1cIlwiKTpcbiAgICAgXCJcIlwiUmVwbGFjZSByb290IHFkaXNjLiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBhZnRlciB0aGUgdGVzdC5cbiBcbkBAIC01Niw2ICs4Nyw3IEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxuICAgICAgICAgICAgIFtcIm9uZV9wa3RcIiwgXCJhLDEwXCIsIFwiYSwxMFwiXSxcbiAgICAgICAgICAgICBbXCJpbl9vcmRlclwiLCBcImEsMTAsYiwyMFwiLCBcImEsMTAsYiwyMFwiXSxcbiAgICAgICAgICAgICBbXCJyZXZlcnNlX29yZGVyXCIsIFwiYSwyMCxiLDEwXCIsIFwiYiwxMCxhLDIwXCJdLFxuKyAgICAgICAgICAgIFtcImJleW9uZF9od19ob3Jpem9uXCIsIFwiYSw3MFwiLCBcImEsNzBcIl0sXG4gICAgICAgICBdOlxuICAgICAgICAgICAgIG5hbWUgPSBmXCJ2e2lwdmVyfV97dGVzdGNhc2VbMF19XCJcbiAgICAgICAgICAgICB5aWVsZCBLc2Z0TmFtZWRWYXJpYW50KG5hbWUsIGlwdmVyLCB0ZXN0Y2FzZVsxXSwgdGVzdGNhc2VbMl0pXG5AQCAtNjQsMTUgKzk2LDQyIEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxuIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8oY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4gICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIChmcSkgdGVzdHMuXCJcIlwiXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCJmcVwiKVxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwibW9ub1wiLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSlcbiBcbiBcbitAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuK2RlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuKyAgICBcIlwiXCJSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyBmcSB0ZXN0cywgd2l0aCBvZmZsb2FkIGhvcml6b24uXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxuK1xuKyAgICBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZylcbisgICAgdHJ5OlxuKyAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwiZnFcIiwgXCJvZmZsb2FkX2hvcml6b24gNTBtc1wiKVxuKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwibmV0ZGV2IGRvZXMgbm90IHN1cHBvcnQgb2ZmbG9hZC4gc2tpcHBpbmdcIikgZnJvbSBlXG4rXG4rICAgICMgRXhwZWN0IGFsbCB0ZXN0cyB0byB1c2Ugb25seSBodyBwYWNpbmcsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbi5cbisgICAgaHdfb25seSA9IFwiLWhcIiBpZiBhcmdzX3R4ICE9IFwiYSw3MFwiIGVsc2UgXCJcIlxuKyAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwibW9ub1wiLCBpcHZlciwgZlwie2h3X29ubHl9IHthcmdzX3R4fVwiLCBhcmdzX3J4LCBUcnVlKVxuK1xuK1xuK0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4rZGVmIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuKyAgICBcIlwiXCJSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyB0ZXN0cywgd2l0aG91dCBmcSBwYWNpbmcgc3cgYmFja3VwLlwiXCJcIlxuKyAgICBjZmcucmVxdWlyZV9uc2ltKG5zaW1fdGVzdD1GYWxzZSlcbitcbisgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpXG4rICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcInBmaWZvX2Zhc3RcIilcbitcbisgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHBhc3MsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbiB3aXRob3V0IHN3IGZhbGxiYWNrLlxuKyAgICBleHBlY3RfcGFzcyA9IG5vdCBhcmdzX3R4ID09IFwiYSw3MFwiXG4rICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCJtb25vXCIsIGlwdmVyLCBmXCItaCB7YXJnc190eH1cIiwgYXJnc19yeCwgZXhwZWN0X3Bhc3MpXG4rXG4rXG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfdGFpKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuICAgICBcIlwiXCJSdW4gYWxsIHZhcmlhbnRzIG9mIGZxIHRlc3RzLCBidXQgcGFzcyBDTE9DS19UQUkgdG8gdGVzdCBjb252ZXJzaW9uLlwiXCJcIlxuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwiZnFcIilcbiAgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcInRhaVwiLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSlcbiBcbkBAIC05NSw3ICsxNTQsNiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZXRmKCk6XG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZXRmKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2V0ZihjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3RfZmFpbCk6XG4gICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgZXRmIHRlc3RzLlwiXCJcIlxuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgdHJ5OlxuICAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwiZXRmXCIsIFwiY2xvY2tpZCBDTE9DS19UQUkgZGVsdGEgNDAwMDAwXCIpXG4gICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbkBAIC0xMDgsNyArMTY2LDEzIEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJCb2lsZXJwbGF0ZSBrc2Z0IG1haW4uXCJcIlwiXG4gICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcbiAgICAgICAgIGtzZnRfcnVuKFxuLSAgICAgICAgICAgIFt0ZXN0X3NvX3R4dGltZV9mcV9tb25vLCB0ZXN0X3NvX3R4dGltZV9mcV90YWksIHRlc3Rfc29fdHh0aW1lX2V0Zl0sXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV9tb25vLFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3LFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyxcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfdGFpLFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9ldGYsXG4rICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICBhcmdzPShjZmcsKSxcbiAgICAgICAgIClcbiAgICAga3NmdF9leGl0KClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjI5OjMyLjUwNTc1NzM4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTE1OTIwNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFjaW5nIE9mZmxvYWQgSG9yaXpvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgdGhlIFwicGFjaW5nIG9mZmxvYWQgaG9yaXpvblwiIGZlYXR1cmUuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGlzIHRoaW5nIHRvdWNoZXMgYSBwcmV0dHkgd2lkZSByYW5nZSBvZiBmaWxlcy4gSXQncyBtb2RpZnlpbmcgZG9jdW1lbnRhdGlvbiwgc2V2ZXJhbCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgYW5kIGRyaXZlcnMgZm9yIHRoZSBJbnRlbCBgaWRwZmAgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0J3MgdXBkYXRpbmcgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxgLCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0YCwgcGFydHMgb2YgdGhlIGBpZHBmYCBkcml2ZXIsIGFuZCBrZXkgZmlsZXMgaW4gY29yZSBuZXR3b3JraW5nOiBgbmV0L3NjaGVkL3NjaF9mcS5jYCwgYG5ldC9jb3JlL3BrdGdlbi5jYCwgYG5ldC9ldGh0b29sL3JpbmdzLmNgLCBhbmQgbW9yZS5cblxuVGhpcyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgaW50ZWdyYXRpbmcgZGlyZWN0bHkgd2l0aCBjb3JlIHNjaGVkdWxpbmcsIHBhY2tldCBnZW5lcmF0aW9uLCBhbmQgYGV0aHRvb2xgLCB3aGljaCBtZWFucyB0aGlzIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IgaW4gc29tZSBzaWduaWZpY2FudCB3YXlzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIGBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgdG8gYHN0cnVjdCBuZXRfZGV2aWNlYC4gTG9va2luZyBkZWVwZXIsIHRoZSBjaGFuZ2VzIGluIGBuZXQvc2NoZWQvc2NoX2ZxLmNgIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGZlYXR1cmUsIHVzaW5nIGBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbmAgd2hpY2ggaXMgY29uZmlndXJlZCB2aWEgYFRDQV9GUV9PRkZMT0FEX0hPUklaT05gIGFuZCBjaGVja2VkIGFnYWluc3QgYHFkaXNjX2RldihzY2gpLVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b25gLiBBbHNvLCBgbmV0L2NvcmUvcGt0Z2VuLmNgIG5vdyBoYXMgc3VwcG9ydCBmb3IgYFRYVElNRWAsIGFuZCBgbmV0L2V0aHRvb2wvcmluZ3MuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWxsb3cgc2V0dGluZyB0aGUgYHBhY2luZ19vZmZsb2FkX2hvcml6b25gLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBgc2NoX2ZxLmNgIGlzIHRoZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIsIGFuZCB0aGF0J3MgKndpZGVseSogdXNlZC4gSXQncyBjZXJ0YWlubHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggSSBrbm93IG1hdHRlcnMgYSBsb3QgdG8gbXkgY3VycmVudCB3b3JrLiBTaW1pbGFybHksIGBwa3RnZW4uY2AgaXMgdGhlIHBhY2tldCBnZW5lcmF0b3IsIGFsc28gYWNjZXNzaWJsZS4gRXRodG9vbCBjb3JlIGlzLCBvZiBjb3Vyc2UsIHJlYWNoYWJsZS4gVGhhdCdzIGdvb2QuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgY29yZSBjaGFuZ2VzOiBMb29raW5nIGF0IGBuZXQvc2NoZWQvc2NoX2ZxLmNgLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBgZnFfY2xhc3NpZnlgLCBgZnFfZGVxdWV1ZWAsIGFuZCBgZnFfY2hhbmdlYC4gSW4gYG5ldC9jb3JlL3BrdGdlbi5jYCwgaXQncyBgcGt0Z2VuX2lmX3Nob3dgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl9zZXR1cF9pbmplY3RgLCBga3RpbWVfZ2V0X2Nsb2NrYCwgYHBrdGdlbl94bWl0YCwgYW5kIGBwa3RnZW5fYWRkX2RldmljZWAuIEFuZCBmb3IgYG5ldC9ldGh0b29sL3JpbmdzLmNgIGl0J3MgYHJpbmdzX3ByZXBhcmVfZGF0YWAsIGByaW5nc19yZXBseV9zaXplYCwgYHJpbmdzX2ZpbGxfcmVwbHlgLCBgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlYCwgYW5kIGBldGhubF9zZXRfcmluZ3NgLiBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgKCBgcnRubF9maWxsX2lmaW5mb2ApIGFuZCBgbmV0L2V0aHRvb2wvY29tbW9uLmNgICggYGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmdgKS5cblxuU28sIHRoZSBiaWdnZXN0IGltcGFjdCBpcyBvbiBgc2NoX2ZxLmNgLCBgcGt0Z2VuLmNgLCBhbmQgYGV0aHRvb2xgLCBzbyBJJ20gdGhpbmtpbmcgdGhpcyBkZXNlcnZlcyBzb21lIHNlcmlvdXMgZnV6emluZy4gRXNwZWNpYWxseSB0aGVzZSBzeW1ib2xzOiBgZnFfY2xhc3NpZnlgLCBgZnFfZGVxdWV1ZWAsIGBmcV9jaGFuZ2VgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYHBrdGdlbl94bWl0YCwgYW5kIGBldGhubF9zZXRfcmluZ3NgLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgY29uZmlncy4gRm9yIGBzY2hfZnEuY2AsIGl0J3MgYENPTkZJR19ORVRfU0NIX0ZRYC4gRm9yIGBwa3RnZW4uY2AsIGl0J3MgYENPTkZJR19ORVRfUEtUR0VOYC4gQW5kIGZvciBgZXRodG9vbGAsIGl0J3MgYWx3YXlzIGVuYWJsZWQgd2l0aCBgQ09ORklHX05FVGAuIEknbGwgdXNlIGBncmVwcGVyYCB0byBlbnN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lcy4gT2theSwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6Mjk6NDQuNjIxNjgwODE2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODIwODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfU0NIX0ZRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjc2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxcbm5ldC9zY2hlZC9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0VcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTI5OC1cXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcXG5uZXQvc2NoZWQvS2NvbmZpZy0zMDAtXFx0dHJpc3RhdGUgXFxcIkZhaXIgUXVldWVcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz0zMjI9Y29uZmlnIE5FVF9TQ0hfUElFXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0zMzMtXFxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxcbm5ldC9zY2hlZC9LY29uZmlnLTMzNS1cXHRkZXBlbmRzIG9uIE5FVF9TQ0hfUElFXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz00NDM9Y2hvaWNlXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00NTAtXFx0Y29uZmlnIERFRkFVTFRfRlFcXG5uZXQvc2NoZWQvS2NvbmZpZzo0NTE6XFx0XFx0Ym9vbCBcXFwiRmFpciBRdWV1ZVxcXCIgaWYgTkVUX1NDSF9GUVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ1Mi1cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ1Ni1cXHRjb25maWcgREVGQVVMVF9GUV9DT0RFTFxcbm5ldC9zY2hlZC9LY29uZmlnOjQ1NzpcXHRcXHRib29sIFxcXCJGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXlcXFwiIGlmIE5FVF9TQ0hfRlFfQ09ERUxcXG5uZXQvc2NoZWQvS2NvbmZpZy00NTgtXFxubmV0L3NjaGVkL0tjb25maWctNDU5LVxcdGNvbmZpZyBERUZBVUxUX0ZRX1BJRVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ2MDpcXHRcXHRib29sIFxcXCJGbG93IFF1ZXVlIFByb3BvcnRpb25hbCBJbnRlZ3JhbCBjb250cm9sbGVyIEVuaGFuY2VkXFxcIiBpZiBORVRfU0NIX0ZRX1BJRVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6Mjk6NDQuOTE5ODk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMDU4NjI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgTkVUX1NDSF9GUWAgaXMgZGVmaW5pdGVseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBkcml2ZXMgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gYHNjaF9mcS5jYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHBhY2tldCBnZW5lcmF0aW9uIGFzcGVjdC4gTm93LCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBsZXQncyBwaXZvdCB0byB0aGUgcGFja2V0IGdlbmVyYXRvcidzIGNvbmZpZ3VyYXRpb24g4oCTIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayBhdCBgcGt0Z2VuLmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyBvcmNoZXN0cmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDYxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6Mjk6NDcuNjUwNDg0NzcyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTQ1MTU3MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1BLVEdFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzoyOTo0Ny44MDE5NDU0MzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE1OTgxMDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgUGFja2V0IEdlbmVyYXRpb24gTW9kdWxlIFBsYWNlbWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBwcmVjaXNlIGxvY2F0aW9uIG9mIGBwa3RnZW5gLiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCBpdCdzIGJ1cmllZCBzb21ld2hlcmUgaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgYW5kIHRoZSBoaW50IGlzIHRoYXQgaXQncyBgcGt0Z2VuLmNgIHdoaWNoIG9mdGVuIGltcGxpZXMgaXQgaXMgY29yZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLiBUaGF0J3MgYSBjbGFzc2ljIGxvY2F0aW9uIGZvciBjb3JlIG5ldHdvcmsgY29tcG9uZW50cy4gVG8gZG8gdGhhdCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZWl0aGVyIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIGBwa3RnZW5gLCBvciBJJ2xsIGxvb2sgaW50byBgbmV0L2NvcmUvTWFrZWZpbGVgIGZvciB0aGUgYnVpbGQgZGlyZWN0aXZlcyBhbmQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4gSG9wZWZ1bGx5IG9uZSBvZiB0aGVzZSBmaWxlcyB3aWxsIGV4cGxpY2l0bHkgc3RhdGUgd2hlcmUgdGhlIGBwa3RnZW5gIG1vZHVsZSBiZWxvbmdzLiBGcm9tIHRoZXJlLCBJIGNhbiBidWlsZCBhbiBpbWFnZSB0byBpc29sYXRlIHRoZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI1NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjI5OjUxLjYxNzkyOTMxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMwOTE1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGt0Z2VuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTI2PW9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBuZXQtcHJvY2ZzLm9cXG5uZXQvY29yZS9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVUX1BLVEdFTikgKz0gcGt0Z2VuLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjI5OjUxLjkwMTAyNjI3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzk2MjA5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipGaW5kaW5nIHRoZSBEZWZpbml0aW9uIG9mIE5FVF9QS1RHRU4qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgTkVUX1BLVEdFTmAuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhpcyBwdXp6bGUsIGFuZCB3aXRob3V0IGtub3dpbmcgd2hlcmUgaXQncyBkZWNsYXJlZCwgSSdtIGVzc2VudGlhbGx5IGZseWluZyBibGluZC4gSXMgaXQgYSBtYWNybz8gQSBmdW5jdGlvbj8gQSBzdHJ1Y3Q/IFBhcnQgb2YgYSBicm9hZGVyIGxpYnJhcnk/IFRoZSBuYW1lIGZlZWxzIGxpa2UgaXQgY291bGQgYmUgcmVsYXRlZCB0byBuZXR3b3JrIHBhY2tldCBnZW5lcmF0aW9uLCB3aGljaCBpcyBhIGZhaXJseSBjb21tb24gYXJlYSwgc28gdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBzZWFyY2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgdXNlIHRvIGRldGVybWluZSB3aGVyZSB0aGlzIGlzIGRlZmluZWQgLSBpcyB0aGlzIGEgcHJvamVjdCBzcGVjaWZpYyBkZWZpbml0aW9uIG9yIGFuIGFscmVhZHkgaW50ZWdyYXRlZCBwaWVjZSBvZiBjb2RlPyBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGdvIGFib3V0IGZpbmRpbmcgaXQsIGFuZCBtYXkgY2hhbmdlIHRoZSBhcHByb2FjaC4gSSBjb3VsZCBqdXN0IGdyZXAgdGhyb3VnaCB0aGUgY29kZSBiYXNlIGFuZCBzZWUgaWYgaXQncyB0aGVyZS4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2VhcmNoLCBtYXliZSBpbiB0aGUgaW5jbHVkZSBmaWxlcywgb3IgcG9zc2libHkgSSdsbCBuYXJyb3cgbXkgc2VhcmNoIHRvIGEgc3ViZm9sZGVyIHRoYXQgaXMgbW9yZSByZWxldmFudC4gVGltZSB0byBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA1OTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzoyOTo1NS4yNDA2NDk4MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mjk4MDU3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9QS1RHRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mzg0PW1lbnUgXFxcIk5ldHdvcmsgdGVzdGluZ1xcXCJcXG5uZXQvS2NvbmZpZy0zODUtXFxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXFxubmV0L0tjb25maWctMzg3LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6MDAuMDcwNDYzMTk3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODE5MDg2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEdlbmVyYXRvciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYE5FVF9QS1RHRU5gIGxpc3RlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaG93IHRoaXMgaW1wYWN0cyB0aGUgc3lzdGVtLiBMb29rcyBsaWtlIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYG5ldC9ldGh0b29sL3JpbmdzLmNgIGZpbGUuIEkgcmVjYWxsIHRoYXQgYGV0aHRvb2xgIGludGVyYWN0aW9ucyBhcmUgc29tZXRpbWVzIGNvbmRpdGlvbmVkIGJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZSBpZiB0aGUgY29tcGlsYXRpb24gb2YgdGhhdCBzcGVjaWZpYyBmaWxlIGRlcGVuZHMgb24gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gZmxhZy4gQmluZ28hIEl0IGxvb2tzIGxpa2UgYHJpbmdzLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19FVEhUT09MX05FVExJTktgIGlzIGVuYWJsZWQuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgYG5ldC9ldGh0b29sL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgd2hvbGUgdGhpbmcgaGFuZ3MgdG9nZXRoZXIsIHBhcnRpY3VsYXJseSB3aXRoIHRoYXQgTkVUTElOSyBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFja2V0IGdlbmVyYXRpb24sIGV0aHRvb2wsIGFuZCB0aGlzIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MjksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDowMy44NTIzNzY0NDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU5MjQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaW5nc1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9NYWtlZmlsZT03PWV0aHRvb2xfbmwteVxcdDo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFxcXFxcXG5uZXQvZXRodG9vbC9NYWtlZmlsZTo4OlxcdFxcdCAgIGxpbmtzdGF0ZS5vIGRlYnVnLm8gd29sLm8gZmVhdHVyZXMubyBwcml2ZmxhZ3MubyByaW5ncy5vIFxcXFxcXG5uZXQvZXRodG9vbC9NYWtlZmlsZS05LVxcdFxcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6MDMuOTY1OTc0NDM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjMzOTI1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgYGV0aHRvb2xfbmwteWAgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyAqYGV0aHRvb2xfbmwteWAqLi4uIHRoYXQncyB0aGUga2V5IGZpbGUsIGlzbid0IGl0PyBUaGUgb25lIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBtb2R1bGVzIGdldCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSB3aG9sZSBxdWVzdGlvbiBib2lscyBkb3duIHRvICp3aGVuKiBleGFjdGx5IGRvZXMgdGhpcyBzcGVjaWZpYyBmaWxlIGdldCBjb21waWxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRpbWluZyBvZiB0aGF0IGNvbXBpbGF0aW9uLiBLbm93aW5nICp3aGVuKiB3aWxsIGlsbHVtaW5hdGUgdGhlIGRlcGVuZGVuY2llcywgYnVpbGQgb3JkZXIsIGFuZCBwb3RlbnRpYWxseSwgYW55IGltcGxpY2l0IGNvbmRpdGlvbmFsIGxvZ2ljIGluIHRoZSBtYWtlZmlsZXMgb3IgYnVpbGQgc3lzdGVtIHRoYXQgY29udHJvbHMgaXQuIFRoYXQncyB0aGUgY29yZSBvZiB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0LiBJIHN1c3BlY3QgdGhlIGFuc3dlciBpcyBsaW5rZWQgdG8gdGhlIGJ1aWxkIHN5c3RlbSdzIGRlY2lzaW9uIHRyZWUsIGJ1dCBJIGNhbid0IHF1aXRlIHNlZSB0aGUgdHJpZ2dlciBmb3IgdGhhdCBjb21waWxhdGlvbiB5ZXQuIFNvLCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBXaGVuIGlzIGBldGh0b29sX25sLXlgIGNvbXBpbGVkPyBUaGF0J3MgdGhlIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMzMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjA3LjMyOTM3MTI3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY5NjQyMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfbmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvTWFrZWZpbGU9Mz1vYmoteVxcdFxcdFxcdFxcdCs9IGlvY3RsLm8gY29tbW9uLm9cXG5uZXQvZXRodG9vbC9NYWtlZmlsZS00LVxcbm5ldC9ldGh0b29sL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0VUSFRPT0xfTkVUTElOSylcXHQrPSBldGh0b29sX25sLm9cXG5uZXQvZXRodG9vbC9NYWtlZmlsZS02LVxcbm5ldC9ldGh0b29sL01ha2VmaWxlOjc6ZXRodG9vbF9ubC15XFx0Oj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXFxcXFxcbm5ldC9ldGh0b29sL01ha2VmaWxlLTgtXFx0XFx0ICAgbGlua3N0YXRlLm8gZGVidWcubyB3b2wubyBmZWF0dXJlcy5vIHByaXZmbGFncy5vIHJpbmdzLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDowNy42OTkwMjMwNDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNDUzMzgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkNoZWNraW5nIGZvciBFVEhUT09MX05FVExJTksgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYEVUSFRPT0xfTkVUTElOS2AgaGVyZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHdoZXJlIHRoYXQncyBkZWZpbmVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBleHBsaWNpdGx5IGVuYWJsZWQgb3IgY29uZmlndXJhYmxlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBpdCdzIG1vc3QgbGlrZWx5IHRvIGJlIGx1cmtpbmcgaW4gZWl0aGVyIGBuZXQvZXRodG9vbC9LY29uZmlnYCBvciwgcGVyaGFwcyBtb3JlIGJyb2FkbHksIGBuZXQvS2NvbmZpZ2AuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgZmlsZXMgZGlyZWN0bHkuIEl0J3MgYSBxdWljayBzY2FuLCBsb29raW5nIGZvciB0aGF0IHNwZWNpZmljIHN5bWJvbCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzQ1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6MTEuNzIzNTYwODk0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY3MjkxMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFVEhUT09MX05FVExJTktcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NTA3PWNvbmZpZyBGQUlMT1ZFUlxcbi0tXFxubmV0L0tjb25maWctNTE5LVxcbm5ldC9LY29uZmlnOjUyMDpjb25maWcgRVRIVE9PTF9ORVRMSU5LXFxubmV0L0tjb25maWctNTIxLVxcdGJvb2wgXFxcIk5ldGxpbmsgaW50ZXJmYWNlIGZvciBldGh0b29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDoxNi44OTA4NjI5NTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE2MDU1ODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVUX1NDSF9GUWAsIGBORVRfUEtUR0VOYCwgYW5kIGBFVEhUT09MX05FVExJTktgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgY29yZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhlc2UgY29uZmlncy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYG5ldC9zY2hlZC9zY2hfZnEuY2AsIEknbSBzZWVpbmcgYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYW5kIGBmcV9jbGFzc2lmeWAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBUaG9zZSBhcmUgdGhlIHRyYWZmaWMgc2hhcGluZyBiaXRzLiBJbiBgbmV0L2NvcmUvcGt0Z2VuLmNgLCBJIGhhdmUgYHBrdGdlbl9pZl93cml0ZWAgYW5kIGBwa3RnZW5feG1pdGAsIHdoaWNoIGFyZSBpbnZvbHZlZCBpbiBwYWNrZXQgZ2VuZXJhdGlvbi4gQW5kIGluIGBuZXQvZXRodG9vbC9yaW5ncy5jYCwgSSBzZWUgYGV0aG5sX3NldF9yaW5nc2AgYW5kIGBldGhubF9zZXRfcmluZ3NfdmFsaWRhdGVgLCB3aGljaCBkZWFscyB3aXRoIG5ldHdvcmsgcmluZyBjb25maWd1cmF0aW9uIHRocm91Z2ggbmV0bGluay5cblxuVGhlbiBJIHNlZSBzb21lIGZ1bmN0aW9ucyBpbiBhIGRyaXZlci4gSG9sZCBvbi4uLiBgaWRwZmAgaXMgYW4gSW50ZWwgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQbGFuZSBGdW5jdGlvbiBkcml2ZXIuIE5vdywgaXMgdGhhdCBldmVuIHJlbGV2YW50PyBQcm9iYWJseSBub3QgZGlyZWN0bHksIGJlY2F1c2UgaXQgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIHNvIHByb2JhYmx5IG5vdCByZWxldmFudCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEJ1dCB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIGNoYW5nZXMgYXJlIHRoZSBpbXBvcnRhbnQgcGFydHMuXG5cblNvIEkgdGhpbmsgSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gTm93LCBqdXN0IHRvIGJlIHN1cmUsIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoYXQgYGZxX2NoYW5nZWAgZnVuY3Rpb24gaW4gYG5ldC9zY2hlZC9zY2hfZnEuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjIyLjA1MTQyMzc2M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzkxMzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZxX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2ZxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9mcS5jPTEwNTg9c3RhdGljIGludCBmcV9sb2FkX3ByaW9tYXAoc3RydWN0IGZxX3NjaGVkX2RhdGEgKnEsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3OS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTA4MDpzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMDgxLVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jPTEyMzM9c3RhdGljIGludCBmcV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTI3MS1cXHRpZiAob3B0KVxcbm5ldC9zY2hlZC9zY2hfZnEuYzoxMjcyOlxcdFxcdGVyciA9IGZxX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTI3My1cXHRlbHNlXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM9MTM4OT1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzk4LVxcdC5kZXN0cm95XFx0PVxcdGZxX2Rlc3Ryb3ksXFxubmV0L3NjaGVkL3NjaF9mcS5jOjEzOTk6XFx0LmNoYW5nZVxcdFxcdD1cXHRmcV9jaGFuZ2UsXFxubmV0L3NjaGVkL3NjaF9mcS5jLTE0MDAtXFx0LmR1bXBcXHRcXHQ9XFx0ZnFfZHVtcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6MjIuMjA5ODIzMjc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTM4MTg1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGUSBMb2dpYyoqXG5cblJpZ2h0LCBgZnFfY2hhbmdlYCBpcyB3aGVyZSBpdCBhbGwgYmVnaW5zLCB0aGUgaW5pdGlhbCBzZXR1cCBmb3IgdGhlIGZhaXIgcXVldWluZyBkaXNjaXBsaW5lLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSB0byBhbGwgdGhlIGFjdGlvbi4gTm93LCB0aGUgcmVhbCBtZWF0IG9mIGl0IGlzIGdvaW5nIHRvIGJlIGluIGhvdyBpdCBhY3R1YWxseSAqZnVuY3Rpb25zKi4gSSBuZWVkIHRvIGdldCBkb3duIGludG8gdGhlIHdlZWRzIGFuZCBzZWUgaG93IHRoZSBwYWNrZXRzIGFyZSBiZWluZyBoYW5kbGVkLCBob3cgdHJhZmZpYyBpcyBhY3R1YWxseSBtYW5hZ2VkIG9uY2UgaXQncyBpbiB0aGUgcXVldWUuIE15IGZvY3VzIG5vdyBpcyBkZWZpbml0ZWx5IG9uIGBmcV9kZXF1ZXVlYCBhbmQgYGZxX2NsYXNzaWZ5YCDigJMgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSByZWFsbHkgd2FudCB0byB1bmRlcnN0YW5kLiBMZXQncyBzZWUgaG93IHRoZSBxdWV1ZWQgcGFja2V0cyBhcmUgc2VsZWN0ZWQgYW5kIHdoaWNoIG9uZXMgZ2V0IGEgcHJpb3JpdHkgYnVtcCBvciBhIHNodW50aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAxMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjI1LjYwMzY0NjU3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTg0NjgzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnFfZGVxdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2ZxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9mcS5jPTY5PXN0cnVjdCBmcV9mbG93IHtcXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NzA6LyogRmlyc3QgY2FjaGUgbGluZSA6IHVzZWQgaW4gZnFfZ2MoKSwgZnFfZW5xdWV1ZSgpLCBmcV9kZXF1ZXVlKCkgKi9cXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNzEtXFx0c3RydWN0IHJiX3Jvb3RcXHR0X3Jvb3Q7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM9MTExPXN0cnVjdCBmcV9zY2hlZF9kYXRhIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzItXFxubmV0L3NjaGVkL3NjaF9mcS5jOjEzMzpcXHR1bnNpZ25lZCBpbnQgYmFuZF9ucjsgLyogYmFuZCBiZWluZyBzZXJ2aWNlZCBpbiBmcV9kZXF1ZXVlKCkgKi9cXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTM0LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jPTQ4Nj1zdGF0aWMgdm9pZCBmcV9lcmFzZV9oZWFkKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZnFfZmxvdyAqZmxvdyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy01MDItICovXFxubmV0L3NjaGVkL3NjaF9mcS5jOjUwMzpzdGF0aWMgdm9pZCBmcV9kZXF1ZXVlX3NrYihzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGZxX2Zsb3cgKmZsb3csXFxubmV0L3NjaGVkL3NjaF9mcS5jLTUwNC1cXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jPTY5OT1zdGF0aWMgc3RydWN0IGZxX2Zsb3dfaGVhZCAqZnFfcGJhbmRfaGVhZF9zZWxlY3Qoc3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTcwOS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NzEwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNzExLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy03MjgtXFx0XFx0cS1cXHUwMDNlaW50ZXJuYWwucWxlbi0tO1xcbm5ldC9zY2hlZC9zY2hfZnEuYzo3Mjk6XFx0XFx0ZnFfZGVxdWV1ZV9za2Ioc2NoLCBcXHUwMDI2cS1cXHUwMDNlaW50ZXJuYWwsIHNrYik7XFxubmV0L3NjaGVkL3NjaF9mcS5jLTczMC1cXHRcXHRyZXR1cm4gc2tiO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTc3Ni1cXHRcXHRwcmVmZXRjaChcXHUwMDI2c2tiLVxcdTAwM2VlbmQpO1xcbm5ldC9zY2hlZC9zY2hfZnEuYzo3Nzc6XFx0XFx0ZnFfZGVxdWV1ZV9za2Ioc2NoLCBmLCBza2IpO1xcbm5ldC9zY2hlZC9zY2hfZnEuYy03NzgtXFx0XFx0aWYgKHVubGlrZWx5KChzNjQpKG5vdyAtIHRpbWVfbmV4dF9wYWNrZXQgLSBxLVxcdTAwM2VjZV90aHJlc2hvbGQpIFxcdTAwM2UgMCkpIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYz0xMzg5PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTEzOTMtXFx0LmVucXVldWVcXHQ9XFx0ZnFfZW5xdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTM5NDpcXHQuZGVxdWV1ZVxcdD1cXHRmcV9kZXF1ZXVlLFxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzk1LVxcdC5wZWVrXFx0XFx0PVxcdHFkaXNjX3BlZWtfZGVxdWV1ZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjI1LjkyMjEyMTE1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODEwOTcwNzE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgSW50ZXJmYWNlIFJpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGBmcV9kZXF1ZXVlYCBpcyBwcm92aW5nIHRvIGJlIGEgc29saWQgc29sdXRpb24gaW4gdGhpcyBjb250ZXh0LiBNeSBwcmltYXJ5IGludGVyZXN0IG5vdyBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSByaW5ncyBhcmUgYWN0dWFsbHkgY29uZmlndXJlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZXRodG9vbCBmcmFtZXdvcmsuIExldCdzIGRlbHZlIGludG8gYG5ldC9ldGh0b29sL3JpbmdzLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBldGhubF9zZXRfcmluZ3NgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIHJpbmcgc2V0dGluZ3MsIGxpa2VseSByZWxhdGVkIHRvIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHF1ZXVlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzZXR0aW5ncywgYXJlIGJlaW5nIHRyYW5zbGF0ZWQgaW50byBsb3ctbGV2ZWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QgLSBhcmUgd2UgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIHJlZ2lzdGVycywgdXNpbmcgc3BlY2lmaWMgZHJpdmVyLWRlZmluZWQgY2FsbHMsIG9yIGludGVyYWN0aW5nIHdpdGggYSBtb3JlIGdlbmVyaWMgaW50ZXJmYWNlPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgd2UncmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcmluZyBzaXplLCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gUlNTIHBhcmFtZXRlcnMuIFRoaXMgc2hvdWxkIGluZm9ybSBhbnkgcG90ZW50aWFsIHR1bmluZyBkZWNpc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTU1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6NDQuMDMxODMxNjM5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTcwMjU5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRobmxfc2V0X3JpbmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL3JpbmdzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvcmluZ3MuYz0xNjE9c3RhdGljIGludFxcbm5ldC9ldGh0b29sL3JpbmdzLmM6MTYyOmV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbm5ldC9ldGh0b29sL3JpbmdzLmMtMTYzLVxcdFxcdFxcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvcmluZ3MuYz0yMzU9c3RhdGljIGludFxcbm5ldC9ldGh0b29sL3JpbmdzLmM6MjM2OmV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9ldGh0b29sL3JpbmdzLmMtMjM3LXtcXG4tLVxcbm5ldC9ldGh0b29sL3JpbmdzLmM9MzM3PWNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9yaW5nc19yZXF1ZXN0X29wcyA9IHtcXG4tLVxcbm5ldC9ldGh0b29sL3JpbmdzLmMtMzQ3LVxcbm5ldC9ldGh0b29sL3JpbmdzLmM6MzQ4OlxcdC5zZXRfdmFsaWRhdGVcXHRcXHQ9IGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZSxcXG5uZXQvZXRodG9vbC9yaW5ncy5jOjM0OTpcXHQuc2V0XFx0XFx0XFx0PSBldGhubF9zZXRfcmluZ3MsXFxubmV0L2V0aHRvb2wvcmluZ3MuYy0zNTAtXFx0LnNldF9udGZfY21kXFx0XFx0PSBFVEhUT09MX01TR19SSU5HU19OVEYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjQ0LjI4ODg2MzY4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ2NjAwMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUGFja2V0IEdlbmVyYXRpb24gRnVuY3Rpb25zKipcblxuQWxyaWdodCwgYGV0aG5sX3NldF9yaW5nc2Agc2VlbXMgbGlrZSBhIHNvbGlkIHBpZWNlIG9mIGNvZGUsIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIE5vdywgSSB3YW50IHRvIGRyaWxsIGRvd24gZnVydGhlciBpbnRvIHRoZSBwYWNrZXQgZ2VuZXJhdGlvbiBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgcGt0Z2VuX2lmX3dyaXRlYCB3aXRoaW4gYG5ldC9jb3JlL3BrdGdlbi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyLXByb3ZpZGVkIGRhdGEsIGFuZCBhbnkgY29uZmlndXJhdGlvbiwgaXMgYWN0dWFsbHkgdHJhbnNsYXRlZCBpbnRvIGEgd2lyZSBpbWFnZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIGZpbmFsIGZvcm1hdHRpbmcsIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyAoaWYgZW5hYmxlZCksIGFuZCBpbnNlcnRpb24gaW50byB0aGUgdHJhbnNtaXQgcXVldWUgYXJlIGhhcHBlbmluZy4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgcGt0Z2VuX2lmX3dyaXRlYCBhbmQgbG93ZXItbGV2ZWwgbmV0d29ya2luZyBjb21wb25lbnRzIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgcGFja2V0IGluamVjdGlvbiBwZXJmb3JtYW5jZSBhbmQgZW5zdXJpbmcgYWNjdXJhdGUgcGF5bG9hZCB0cmFuc21pc3Npb24uIEknbGwgbmVlZCB0byBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBkYXRhIGNvcGllcywgYW5kIGFueSBsb2NraW5nIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IHByaW1hcnkgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBwYXRoIGZvciBwYWNrZXQgZ2VuZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDo0Ny43MzU0NjkzMDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTUwODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RnZW5faWZfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9OTcxPXN0YXRpYyBfX3UzMiBwa3RnZW5fcmVhZF9mbGFnKGNvbnN0IGNoYXIgKmYsIGJvb2wgKmRpc2FibGUpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy05OTktXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTAwMDpzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTAwMS1cXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLCBzaXplX3QgY291bnQsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0xOTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcGt0Z2VuX2lmX3Byb2Nfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmMtMTk0Mi1cXHQucHJvY19sc2Vla1xcdD0gc2VxX2xzZWVrLFxcbm5ldC9jb3JlL3BrdGdlbi5jOjE5NDM6XFx0LnByb2Nfd3JpdGVcXHQ9IHBrdGdlbl9pZl93cml0ZSxcXG5uZXQvY29yZS9wa3RnZW4uYy0xOTQ0LVxcdC5wcm9jX3JlbGVhc2VcXHQ9IHNpbmdsZV9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDo0Ny45NjA5ODc3NjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NTQyNjg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFBhY2tldCBHZW5lcmF0aW9uIFdvcmtmbG93KipcblxuQWxyaWdodCwgc28gYHBrdGdlbl9pZl93cml0ZWAgaXMgbG9va2luZyBzb2xpZC4gVGhhdCBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGUgaW5pdGlhbCBpbnRlcmZhY2Ugd3JpdGUgYXMgZXhwZWN0ZWQuIE5vdywgSSB3YW50IHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgaXRzZWxmLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgcGt0Z2VuX3htaXRgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9wa3RnZW4uY2AuIEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgcHJlY2lzZWx5IGhvdyB0aGUgZ2VuZXJhdGVkIHBhY2tldHMgYXJlIGFjdHVhbGx5IHNlbnQgb3V0IG9uIHRoZSB3aXJlIGZyb20gdGhlIGNvcmUsIGdpdmVuIHRoYXQgaW5pdGlhbCBjaGVjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwb3J0aW9uIG9mIHRoZSBjb2RlIHRvIGVuc3VyZSB0aGUgcGF0aCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGRlc2lyZWQgb3BlcmF0aW9uLCBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgdHJhbnNtaXNzaW9uIGFzcGVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzA6NTEuMTQ2NDE4NzMyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3OTkyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGt0Z2VuX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcGt0Z2VuLmM9MTAwMD1zdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0xNDA2LVxcdFxcdFxcdC8qIG1ha2Ugc3VyZSBuZXcgcGFja2V0IGlzIGFsbG9jYXRlZCBldmVyeSB0aW1lXFxubmV0L2NvcmUvcGt0Z2VuLmM6MTQwNzpcXHRcXHRcXHQgKiBwa3RnZW5feG1pdCgpIGlzIGNhbGxlZFxcbm5ldC9jb3JlL3BrdGdlbi5jLTE0MDgtXFx0XFx0XFx0ICovXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYz0zNTcyPXN0YXRpYyB2b2lkIHBrdGdlbl93YWl0X2Zvcl9za2Ioc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNTg3LVxcbm5ldC9jb3JlL3BrdGdlbi5jOjM1ODg6c3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzU4OS17XFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zNjAxLVxcdCAqIHByZXZlbnQgc29tZSBjb25jdXJyZW50IGNoYW5nZXMgZnJvbSBzbGlwcGluZyBpbi4gQW5kIHRoZSBzdGFiaWxpemVkXFxubmV0L2NvcmUvcGt0Z2VuLmM6MzYwMjpcXHQgKiBjb25maWcgd2lsbCBiZSByZWFkIGluIGR1cmluZyB0aGUgbmV4dCBydW4gb2YgcGt0Z2VuX3htaXQuXFxubmV0L2NvcmUvcGt0Z2VuLmMtMzYwMy1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTM3OTA9c3RhdGljIGludCBwa3RnZW5fdGhyZWFkX3dvcmtlcih2b2lkICphcmcpXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zODE2LVxcdFxcdGlmIChsaWtlbHkocGt0X2RldikpIHtcXG5uZXQvY29yZS9wa3RnZW4uYzozODE3OlxcdFxcdFxcdHBrdGdlbl94bWl0KHBrdF9kZXYpO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTM4MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMwOjUxLjM1MTIyNTI0MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ0MTg5NDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgcXVpY2sgcnVuZG93biBvZiB0aGVzZSBmdW5jdGlvbnMsIHJlZmxlY3RpbmcgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OlxuXG4qKkZ1bmN0aW9uYWxpdHkgT3ZlcnZpZXcqKlxuXG5BbHJpZ2h0LCBzbyBgcGt0Z2VuX3htaXRgLCB0aGF0J3MgYSBrZXkgZnVuY3Rpb24sIGFuZCBzZWVtcyB0byBiZSBpbiBhIGdvb2Qgc3RhdGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgZWNvc3lzdGVtLCB0aGUgZm9jdXMgZnVuY3Rpb25zIHNlZW0gdG8gYmU6IGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGBldGhubF9zZXRfcmluZ3NgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYW5kIG9mIGNvdXJzZSBgcGt0Z2VuX3htaXRgLiBOZWVkIHRvIGtlZXAgdGhlc2UgZnVuY3Rpb25zIGluIG1pbmQgdG8gZXN0YWJsaXNoIHRoZSBiaWcgcGljdHVyZS4gTG9va3MgbGlrZSBgZnFfY2xhc3NpZnlgIGhhcyBhbHNvIHNlZW4gc29tZSBtb2RpZmljYXRpb25zOyBnb2luZyB0byBtYWtlIGEgbm90ZSBvZiB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiBpdHMgaW5mbHVlbmNlLiBJdCdzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC4gTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCByZWxhdGVkIGZ1bmN0aW9ucyBpbiBwbGF5IHRoYXQgSSBtaWdodCBoYXZlIG1pc3NlZC4gR290dGEgYmUgbWV0aWN1bG91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDo1Ni4wOTU0MTgyNTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTU4ODA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmcV9jbGFzc2lmeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2ZxLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9mcS5jPTMxND1zdGF0aWMgYm9vbCBmcV9mYXN0cGF0aF9jaGVjayhjb25zdCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0zNTUtXFxubmV0L3NjaGVkL3NjaF9mcS5jOjM1NjpzdGF0aWMgc3RydWN0IGZxX2Zsb3cgKmZxX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9zY2hfZnEuYy0zNTctXFx0XFx0XFx0XFx0ICAgdTY0IG5vdylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYz01OTk9c3RhdGljIGludCBmcV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTYzMi1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM6NjMzOlxcdGYgPSBmcV9jbGFzc2lmeShzY2gsIHNrYiwgbm93KTtcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtNjM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMDo1Ni4zNTcwMTE5NDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5OTM3ODY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE5ldHdvcmsgSW50ZXJmYWNlIEluZm9ybWF0aW9uIEhhbmRsaW5nKipcblxuQWxyaWdodCwgYGZxX2NsYXNzaWZ5YCBpcyBkZWZpbml0ZWx5IGEgc29saWQgcGllY2Ugb2YgdGhlIHB1enpsZSwgc2VlbXMgd2VsbCBpbXBsZW1lbnRlZCBmcm9tIHdoYXQgSSByZW1lbWJlci4gQnV0LCBsZXQncyBkcmlsbCBkb3duIGRlZXBlciwgYW5kIHRvIGRvIHRoYXQgSSBuZWVkIHRvIGxvb2sgYXQgaG93IGludGVyZmFjZSBpbmZvcm1hdGlvbiBpcyBhY3R1YWxseSBmaWxsZWQsIGFuZCB0aGF0IG1lYW5zIEkgbmVlZCB0byBnbyBzcGVsdW5raW5nIGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLiAqcnRubF9maWxsX2lmaW5mbyogc2VlbXMgbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igd2hlcmUgdGhhdCBpbmZvcm1hdGlvbiBpcyBjb25zdHJ1Y3RlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBuZXRsaW5rIGNvZGUgZGlyZWN0bHkgaW4gYG5ldC9jb3JlL3J0bmV0bGluay5jYCB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHZlcmlmeSBpdHMgc3BlY2lmaWMgYmVoYXZpb3IuIEkgYmV0IEkgY2FuIGdhaW4gc29tZSBuZXcgaW5zaWdodHMgaW50byB0aGUgaW50ZXJmYWNlIG1ldGFkYXRhIHBvcHVsYXRpb24gd2l0aGluIHRoYXQgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMxOjAwLjM1NjM5MzgwMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc2NTgyOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmM9MjA2OD1zdGF0aWMgaW50IHJ0bmxfZmlsbF9kcGxsX3BpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA4OS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDkwOnN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwOTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKnNyY19uZXQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNTI0PXN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNTk5LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2MDA6XFx0XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgbmV0LCBSVE1fTkVXTElOSyxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjAxLVxcdFxcdFxcdFxcdCAgICAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQyNTY9c3RhdGljIGludCBydG5sX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzI4LVxcdGlmIChuc2tiKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzMjk6XFx0XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhuc2tiLCBkZXYsIG5ldCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzMwLVxcdFxcdFxcdFxcdCAgICAgICBSVE1fTkVXTElOSywgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1NDk9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTY4LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1Njk6XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgZGV2X25ldChkZXYpLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1NzAtXFx0XFx0XFx0ICAgICAgIHR5cGUsIHBvcnRpZCwgc2VxLCBjaGFuZ2UsIDAsIDAsIGV2ZW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMTowMC42MzI5ODM2OTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0Njk3OTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqQXNzZXNzbWVudCBvZiBOZXRsaW5rIGFuZCBFdGh0b29sIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgcnRubF9maWxsX2lmaW5mb2AgaXMgYSBwcmV0dHkgYnJvYWQgZnVuY3Rpb24sIGFuZCBpdCdzIHVzZWQgcXVpdGUgYSBiaXQgaW4gbmV0bGluayBkdW1wcy4gV2hpbGUgaXQgd29ya3MsIGl0J3MgYSBiaXQgb2YgYSBob3Qgc3BvdCBpbiB0aGUgY29kZSwgd2hpY2ggY291bGQgbGVhZCB0byBzb21lIHNrZXdlZCByZXN1bHRzIGlmIEknbSBmdXp6aW5nIHdpdGggaXQuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNraXAgaXQgZm9yIG5vdy4gSSB3YW50IHRvIHRyeSB0byBrZWVwIHRoZSBmdXp6aW5nIGJhbGFuY2VkIGFjcm9zcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZ2AgaW5zaWRlIGBuZXQvZXRodG9vbC9jb21tb24uY2AuIEkgbmVlZCB0byByZXZpZXcgdGhpcyBmb3Igc29tZSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk2MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMxOjA0LjQ3OTk2NjE2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODE5MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2V0aHRvb2wvY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvY29tbW9uLmM9OTI0PWludCBldGh0b29sX2NoZWNrX29wcyhjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcylcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5jLTk0Mi1cXG5uZXQvZXRodG9vbC9jb21tb24uYzo5NDM6dm9pZCBldGh0b29sX3JpbmdwYXJhbV9nZXRfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvY29tbW9uLmMtOTQ0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnBhcmFtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMTowNC42MTQ3OTIzNTFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDU5MDQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBldGh0b29sX3JpbmdwYXJhbV9nZXRfY2ZnYCBpcyBhbm90aGVyIGdldCBmdW5jdGlvbiwgYW5kIGZyYW5rbHksIG5vdCBhcyBpbnRyaWd1aW5nIGFzIHRoZSBzZXQgZnVuY3Rpb25zIHdlJ3JlIGxvb2tpbmcgYXQuIFdlJ3JlIGdvaW5nIHRvIGtlZXAgb3VyIGF0dGVudGlvbiBmaXJtbHkgb24gdGhlc2U6IGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGBmcV9jbGFzc2lmeWAsIGBldGhubF9zZXRfcmluZ3NgLCBgcGt0Z2VuX2lmX3dyaXRlYCwgYW5kIGBwa3RnZW5feG1pdGAuIFRob3NlIHNlZW0gdG8gYmUgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZywgc3BlY2lmaWNhbGx5IHJlbGF0aW5nIHRvIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmlwdWxhdGlvbiBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIGZvciB0aGUgY29uZmlndXJhdGlvbnMgdGhlbXNlbHZlcywgd2UgaGF2ZSBgTkVUX1NDSF9GUWAsIGBORVRfUEtUR0VOYCwgYW5kIGBFVEhUT09MX05FVExJTktgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgZGVwZW5kZW5jaWVzIGZvciBgTkVUX1NDSF9GUWAgdGhvdWdoLiBXZSBkb24ndCB3YW50IHRvIG92ZXJsb29rIGFueSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudHMgdGhlcmUuIEVuc3VyaW5nIHRoaXMgY29uZmlndXJhdGlvbiBpcyBpbmRlcGVuZGVudGx5IHVzYWJsZSB3aWxsIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6MDguODE5Mzg2MzIyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5OTU3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRlFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzYtXFxubmV0L3NjaGVkL0tjb25maWc6Mjc3OmNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz0yODg9Y29uZmlnIE5FVF9TQ0hfQ0FLRVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjk4LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI5OTpjb25maWcgTkVUX1NDSF9GUVxcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTMyMj1jb25maWcgTkVUX1NDSF9QSUVcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTMzMy1cXG5uZXQvc2NoZWQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVF9TQ0hfRlFfUElFXFxubmV0L3NjaGVkL0tjb25maWctMzM1LVxcdGRlcGVuZHMgb24gTkVUX1NDSF9QSUVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6MDkuMDM2MzkzMjAxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Njg5MTAxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlF1aWNrIE5ldHdvcmsgU2NoZWR1bGVyIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYE5FVF9TQ0hfRlFgLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGF0IG9uZSdzIGdvdCBhbnkgcGFydGljdWxhcmx5IGNvbXBsZXggZGVwZW5kZW5jaWVzIEkgbmVlZCB0byB3b3JyeSBhYm91dC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB3aGljaCBpcyBhbHdheXMgbmljZS4gTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYE5FVF9QS1RHRU5gLiBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzY2hlZHVsZXI7IHRoZXJlIGNvdWxkIGJlIHN1YnRsZSBpbnRlcmFjdGlvbnMgSSdtIG1pc3NpbmcgYXQgZmlyc3QgZ2xhbmNlLCBlc3BlY2lhbGx5IGlmIGl0IHVzZXMgY3VzdG9tIHBhY2tldCBnZW5lcmF0aW9uIHRlY2huaXF1ZXMuIEJldHRlciB0byBiZSB0aG9yb3VnaCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMToxMi41MDUzMDY2NDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjUxMjQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1BLVEdFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zODQ9bWVudSBcXFwiTmV0d29yayB0ZXN0aW5nXFxcIlxcbm5ldC9LY29uZmlnLTM4NS1cXG5uZXQvS2NvbmZpZzozODY6Y29uZmlnIE5FVF9QS1RHRU5cXG5uZXQvS2NvbmZpZy0zODctXFx0dHJpc3RhdGUgXFxcIlBhY2tldCBHZW5lcmF0b3IgKFVTRSBXSVRIIENBVVRJT04pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMToxMi44MTc4MzI2MjVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NjYwNDUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgRGVwZW5kZW5jaWVzIGluIE5ldHdvcmsgUGFja2V0IEdlbmVyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgTkVUX1BLVEdFTmAgaXMgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS4gR2VuZXJhbGx5LCBpdCdzIHByZXR0eSBzdGFuZGFyZCB0aGF0IGBORVRfUEtUR0VOYCByZWxpZXMgb24gYElORVRgLCBhbmQgdGhhdCdzIHVzdWFsbHkgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBJJ20gbm90IHRvbyBjb25jZXJuZWQgYWJvdXQgdGhhdCBwYXJ0aWN1bGFyIHJlbGF0aW9uc2hpcC4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBmdW5jdGlvbi5cblxuSG93ZXZlciwgSSdtIGZlZWxpbmcgYSBxdWljayBpdGNoIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLiBMZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBFVEhUT09MX05FVExJTktgIGlzIHNldCBhcyBleHBlY3RlZCwgZ2l2ZW4gdGhlIGNvbnRleHQuIEp1c3Qgd2FudCB0byBlbGltaW5hdGUgYW55IHBvdGVudGlhbCBnb3RjaGFzLiBBIHF1aWNrIHNhbml0eSBjaGVjayBuZXZlciBodXJ0cywgZXZlbiB3aGVuIHRoaW5ncyAqc2VlbSogZmluZS4gQSBsaXR0bGUgZHVlIGRpbGlnZW5jZSBpcyBhbHdheXMgYSBnb29kIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODIzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDA3OjMxOjE2LjAxNDQ0MTkzMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxNTg5OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFVEhUT09MX05FVExJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NTA3PWNvbmZpZyBGQUlMT1ZFUlxcbi0tXFxubmV0L0tjb25maWctNTE5LVxcbm5ldC9LY29uZmlnOjUyMDpjb25maWcgRVRIVE9PTF9ORVRMSU5LXFxubmV0L0tjb25maWctNTIxLVxcdGJvb2wgXFxcIk5ldGxpbmsgaW50ZXJmYWNlIGZvciBldGh0b29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QwNzozMToxNi4zMDYwMzkwMTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE0NTk3MTIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBwYXRjaCByZWxpZXMgb24gYEVUSFRPT0xfTkVUTElOS2AsIHdoaWNoLCBvZiBjb3Vyc2UsIGRlcGVuZHMgb24gYm90aCBgTkVUYCBhbmQgYE5FVExJTktgLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmc/IExldCBtZSBzZWUuXG5cbkFscmlnaHQsIHRoZSBjb2RlIGNoYW5nZXMgZm9jdXMgb24gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNgLiBTaG91bGQgSSBiZSBjb25jZXJuZWQgYWJvdXQgYW4gYElEUEZgIGNvbmZpZyByZXF1aXJlbWVudCBoZXJlPyBCYXNlZCBvbiB0aGUgcHJvbXB0LCBpdCBzb3VuZHMgbGlrZSB0aGlzIGludm9sdmVzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLCB3aGljaCB1c3VhbGx5IGV4cGVjdCBhY3R1YWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoaW5raW5nIGFib3V0IGl0LCBgaWRwZmAgaXMgSW50ZWwncyBJbmZyYXN0cnVjdHVyZSBEYXRhIFBsYW5lIEZ1bmN0aW9uLCBhIGhhcmR3YXJlIGRyaXZlci4gVGhhdCBtYWtlcyBzZW5zZS4gSXQncyBhbG1vc3QgY2VydGFpbmx5IG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBTbywgSSBjYW4gZGlzcmVnYXJkIHRoZSBgaWRwZmAgY2hhbmdlcyBmb3IgZnV6emluZyBwdXJwb3NlcyBiZWNhdXNlIHRoZXkgbGlrZWx5IHdvbid0IGJlIHRyaWdnZXJlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuXG5cbkhvd2V2ZXIsIHRoZSBrZXkgbmV0d29ya2luZyBjb21wb25lbnRzIHRoYXQgKmFyZSogY2hhbmdlZCAtIGxpa2UgYHNjaF9mcS5jYCwgYHBrdGdlbi5jYCwgYW5kIHRoZSBldGh0b29sIGludGVyZmFjZSAtIHRoZXNlIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgZXZlbiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLlxuXG5Ob3csIGxldCdzIHN5bnRoZXNpemUgdGhpcy4gV2UgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOlxuXG4qICAgYGZxX2NoYW5nZWBcbiogICBgZnFfZGVxdWV1ZWBcbiogICBgZnFfY2xhc3NpZnlgXG4qICAgYGV0aG5sX3NldF9yaW5nc2BcbiogICBgcGt0Z2VuX2lmX3dyaXRlYFxuKiAgIGBwa3RnZW5feG1pdGBcblxuQW5kIHdlJ2xsIGVuYWJsZSB0aGVzZSBjb25maWd1cmF0aW9uczpcblxuKiAgIGBORVRfU0NIX0ZRYFxuKiAgIGBORVRfUEtUR0VOYFxuKiAgIGBFVEhUT09MX05FVExJTktgXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGZvciBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uLiBJdCB0b3VjaGVzIHRoZSBGYWlyIFF1ZXVlIHBhY2tldCBzY2hlZHVsZXIgKGBzY2hfZnEuY2ApLCB0aGUgcGFja2V0IGdlbmVyYXRvciAoYHBrdGdlbi5jYCksIGFuZCB0aGUgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZSB0byBlbmFibGUgdGhpcyBob3Jpem9uLiBHaXZlbiB0aGF0IHRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZnV6emluZyBpcyBhcHByb3ByaWF0ZSwgZXZlbiBpZiB0aGUgZHJpdmVyIGNoYW5nZXMgYXJlIGhhcmR3YXJlLXNwZWNpZmljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU0NywiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMDc6MzE6MjUuNDUyMDE1MTk5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxNTI5MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfUEtUR0VOXCIsXG4gICAgXCJFVEhUT09MX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmcV9jaGFuZ2VcIixcbiAgICBcImZxX2RlcXVldWVcIixcbiAgICBcImZxX2NsYXNzaWZ5XCIsXG4gICAgXCJldGhubF9zZXRfcmluZ3NcIixcbiAgICBcInBrdGdlbl9pZl93cml0ZVwiLFxuICAgIFwicGt0Z2VuX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgZm9yIHBhY2luZyBvZmZsb2FkIGhvcml6b24uIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEZhaXIgUXVldWUgcGFja2V0IHNjaGVkdWxlciAoc2NoX2ZxLmMpLCB0aGUgcGFja2V0IGdlbmVyYXRvciAocGt0Z2VuLmMpLCBhbmQgdGhlIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2UgKHJpbmdzLmMpIHRvIHN1cHBvcnQgY29uZmlndXJpbmcgYW5kIHVzaW5nIHRoaXMgaG9yaXpvbi4gVGhlc2UgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlcyB0byB0aGUgaWRwZiBkcml2ZXIgYXJlIGhhcmR3YXJlLXNwZWNpZmljIGFuZCBub3QgZW11bGF0ZWQsIGJ1dCB0aGUgY29yZSBjaGFuZ2VzIGFyZSBzdWZmaWNpZW50IHRvIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfUEtUR0VOXCIsXG4gICAgXCJFVEhUT09MX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmcV9jaGFuZ2VcIixcbiAgICBcImZxX2RlcXVldWVcIixcbiAgICBcImZxX2NsYXNzaWZ5XCIsXG4gICAgXCJldGhubF9zZXRfcmluZ3NcIixcbiAgICBcInBrdGdlbl9pZl93cml0ZVwiLFxuICAgIFwicGt0Z2VuX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgZm9yIHBhY2luZyBvZmZsb2FkIGhvcml6b24uIEl0IG1vZGlmaWVzIHRoZSBjb3JlIEZhaXIgUXVldWUgcGFja2V0IHNjaGVkdWxlciAoc2NoX2ZxLmMpLCB0aGUgcGFja2V0IGdlbmVyYXRvciAocGt0Z2VuLmMpLCBhbmQgdGhlIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2UgKHJpbmdzLmMpIHRvIHN1cHBvcnQgY29uZmlndXJpbmcgYW5kIHVzaW5nIHRoaXMgaG9yaXpvbi4gVGhlc2UgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlcyB0byB0aGUgaWRwZiBkcml2ZXIgYXJlIGhhcmR3YXJlLXNwZWNpZmljIGFuZCBub3QgZW11bGF0ZWQsIGJ1dCB0aGUgY29yZSBjaGFuZ2VzIGFyZSBzdWZmaWNpZW50IHRvIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmmffg[1] Phase: Succeeded StartedAt: 2026-07-27 07:32:16 +0000 UTC FinishedAt: 2026-07-27 07:32:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 07:32:16 +0000 UTC FinishedAt: 2026-07-27 07:32:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2] Phase: Succeeded StartedAt: 2026-07-27 07:32:16 +0000 UTC FinishedAt: 2026-07-27 11:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 07:32:16 +0000 UTC FinishedAt: 2026-07-27 11:58:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 07:32:16 +0000 UTC FinishedAt: 2026-07-27 07:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 07:32:16 +0000 UTC FinishedAt: 2026-07-27 07:33:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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-workflowmmffg/series-workflowmmffg-convert-artifact-1930002730/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 07:33:48 +0000 UTC FinishedAt: 2026-07-27 08:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 07:33:48 +0000 UTC FinishedAt: 2026-07-27 08:05:50 +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:*b267f89f-e021-49b8-b3bf-5ff0a5d3aebe,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-workflowmmffg/series-workflowmmffg-convert-artifact-1930002730/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": "66243ded-248d-41fc-ab6b-ec2be16c9e8c", "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-workflowmmffg/series-workflowmmffg-build-action-3612277400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 07:33:48 +0000 UTC FinishedAt: 2026-07-27 08:05:40 +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:*b267f89f-e021-49b8-b3bf-5ff0a5d3aebe,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-workflowmmffg/series-workflowmmffg-convert-artifact-1930002730/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": "66243ded-248d-41fc-ab6b-ec2be16c9e8c", "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-workflowmmffg/series-workflowmmffg-build-action-3612277400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 08:05:50 +0000 UTC FinishedAt: 2026-07-27 08:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 08:05:50 +0000 UTC FinishedAt: 2026-07-27 08:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 08:05:50 +0000 UTC FinishedAt: 2026-07-27 08:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 08:05:50 +0000 UTC FinishedAt: 2026-07-27 08:05:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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-workflowmmffg/series-workflowmmffg-convert-artifact-1306472773/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 08:06:00 +0000 UTC FinishedAt: 2026-07-27 08:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 08:06:00 +0000 UTC FinishedAt: 2026-07-27 08:07:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*66243ded-248d-41fc-ab6b-ec2be16c9e8c,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-workflowmmffg/series-workflowmmffg-build-action-3612277400/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-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 08:08:03 +0000 UTC FinishedAt: 2026-07-27 08:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 08:08:03 +0000 UTC FinishedAt: 2026-07-27 08:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 08:08:03 +0000 UTC FinishedAt: 2026-07-27 08:53:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 08:08:03 +0000 UTC FinishedAt: 2026-07-27 08:53:36 +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:*b267f89f-e021-49b8-b3bf-5ff0a5d3aebe,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-workflowmmffg/series-workflowmmffg-convert-artifact-1306472773/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": "f42cdf44-fbc5-4dc3-82b0-17f3274f7a8d", "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-workflowmmffg/series-workflowmmffg-build-action-3148518801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 08:08:03 +0000 UTC FinishedAt: 2026-07-27 08:53:26 +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:*b267f89f-e021-49b8-b3bf-5ff0a5d3aebe,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-workflowmmffg/series-workflowmmffg-convert-artifact-1306472773/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": "f42cdf44-fbc5-4dc3-82b0-17f3274f7a8d", "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-workflowmmffg/series-workflowmmffg-build-action-3148518801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 08:53:36 +0000 UTC FinishedAt: 2026-07-27 08:53:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 08:53:36 +0000 UTC FinishedAt: 2026-07-27 08:53:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 08:53:36 +0000 UTC FinishedAt: 2026-07-27 08:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 08:53:36 +0000 UTC FinishedAt: 2026-07-27 08:55:22 +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:*f42cdf44-fbc5-4dc3-82b0-17f3274f7a8d,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-workflowmmffg/series-workflowmmffg-build-action-3148518801/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-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 08:55:32 +0000 UTC FinishedAt: 2026-07-27 11:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 08:55:32 +0000 UTC FinishedAt: 2026-07-27 11:58:24 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"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:*66243ded-248d-41fc-ab6b-ec2be16c9e8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f42cdf44-fbc5-4dc3-82b0-17f3274f7a8d,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-workflowmmffg/series-workflowmmffg-build-action-3612277400/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-workflowmmffg/series-workflowmmffg-build-action-3148518801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 08:55:32 +0000 UTC FinishedAt: 2026-07-27 08:55:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 08:55:32 +0000 UTC FinishedAt: 2026-07-27 08:55:42 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"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-workflowmmffg/series-workflowmmffg-convert-artifact-2310163914/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 08:55:32 +0000 UTC FinishedAt: 2026-07-27 08:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 08:55:32 +0000 UTC FinishedAt: 2026-07-27 08:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 08:55:32 +0000 UTC FinishedAt: 2026-07-27 08:55:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 08:55:52 +0000 UTC FinishedAt: 2026-07-27 11:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fq_change","fq_dequeue","fq_classify","ethnl_set_rings","pktgen_if_write","pktgen_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN","ETHTOOL_NETLINK"],"series_id":"a9b2312f-b3f9-44eb-b3ee-fb6b9707fbfd","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 08:55:52 +0000 UTC FinishedAt: 2026-07-27 11:58:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*66243ded-248d-41fc-ab6b-ec2be16c9e8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f42cdf44-fbc5-4dc3-82b0-17f3274f7a8d,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-workflowmmffg/series-workflowmmffg-build-action-3612277400/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-workflowmmffg/series-workflowmmffg-build-action-3148518801/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-workflowmmffg/series-workflowmmffg-convert-artifact-2310163914/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,}