Name: series-workflow5sd67 Phase: Succeeded StartedAt: 2026-07-23 21:35:30 +0000 UTC FinishedAt: 2026-07-24 02:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[0] Phase: Succeeded StartedAt: 2026-07-23 21:35:30 +0000 UTC FinishedAt: 2026-07-23 21:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 21:35:30 +0000 UTC FinishedAt: 2026-07-23 21:54:15 +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": "92f0217f8afd8c96288a5e88263d1a15cf98ceec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_FQ", "NET_PKTGEN" ], "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": "92f0217f8afd8c96288a5e88263d1a15cf98ceec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_FQ", "NET_PKTGEN" ], "series_id": "3442606c-8dfe-43e1-9f7c-fb0f966dd68e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ethnl_set_rings", "rings_fill_reply", "fq_change", "pktgen_if_write" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3NldF9yaW5ncyYjMzQ7LAogICAgJiMzNDtyaW5nc19maWxsX3JlcGx5JiMzNDssCiAgICAmIzM0O2ZxX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhbmQgbW9kaWZpZXMgYHNjaF9mcWAgdG8gdXNlIGl0LiBJdCBhbHNvIGFkZHMgYFNPX1RYVElNRWAgc3VwcG9ydCB0byBgcGt0Z2VuYC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA1MWZkODJkYzNiM2U0OGNlN2U1OWNlODk3MDcxNzNmZTBhNDFkMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMTo1MzowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuaW5kZXggNWRkNGQxYjVkOTRiYmIuLjQ4ZjQzZGRhMmU2ZTVlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTQ0OCw2ICYjNDM7NDQ4LDEyIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGhkcy10aHJlc2gtbWF4XG4gICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHBhY2luZy1vZmZsb2FkLWhvcml6b25cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHBhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4XG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4gXG4gICAtXG4gICAgIG5hbWU6IG1tLXN0YXRcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcbmluZGV4IDUxMmY2ZDZmYTNkOGY4Li4zYjljZTFjNmUxMDU3OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XG5AQCAtMTgzLDcgJiM0MzsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcbiBzdHJ1Y3QgZHBsbF9waW4qICAgICAgICAgICAgICAgICAgICBkcGxsX3BpblxuIHN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIHBhZ2VfcG9vbHNcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcbi11NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuJiM0Mzt1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uXG4mIzQzO3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uXG4gc3RydWN0X25hcGlfY29uZmlnKiAgICAgICAgICAgICAgICAgbmFwaV9jb25maWdcbiB1bnNpZ25lZF9sb25nICAgICAgICAgICAgICAgICAgICAgICBncm9fZmx1c2hfdGltZW91dFxuIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcGlfZGVmZXJfaGFyZF9pcnFzXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmNcbmluZGV4IGJiOTlkOWU3YzY1ZDUxLi41ZGRmMzQ3OTI3ZGMzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmNcbkBAIC0xODAxLDcgJiM0MzsxODAxLDggQEAgc3RhdGljIHZvaWQgaWRwZl9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbi1cdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCxcbiYjNDM7XHQuc3VwcG9ydGVkX3JpbmdfcGFyYW1zXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQgfFxuJiM0MztcdFx0XHRcdCAgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxuIFx0LmdldF9tc2dsZXZlbFx0XHQ9IGlkcGZfZ2V0X21zZ2xldmVsLFxuIFx0LnNldF9tc2dsZXZlbFx0XHQ9IGlkcGZfc2V0X21zZ2xldmVsLFxuIFx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbmluZGV4IGNmOTY2ZmU2Yzc1OWNlLi5kZTQxNzBjMmFhM2JhMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG5AQCAtODg4LDYgJiM0Mzs4ODgsMTEgQEAgc3RhdGljIGludCBpZHBmX2NmZ19uZXRkZXYoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIFx0bmV0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbiBcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gdnBvcnQtXHUwMDNlbWF4X210dTtcbiBcbiYjNDM7XHRpZiAoaWRwZl9pc19xdWV1ZV9tb2RlbF9zcGxpdCh2cG9ydC1cdTAwM2VkZmx0X3F2X3JzcmMudHhxX21vZGVsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlkcGZfaXNfY2FwX2VuYShhZGFwdGVyLCBJRFBGX09USEVSX0NBUFMsXG4mIzQzO1x0XHRcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxuJiM0MztcdFx0bmV0ZGV2LVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gMTI4MDAwO1xuJiM0MztcbiBcdGRmbHRfZmVhdHVyZXMgPSBORVRJRl9GX1NHXHR8XG4gXHRcdFx0TkVUSUZfRl9ISUdIRE1BO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5pbmRleCA1NjZiMDhjYTNhNmNiMS4uMWNjZmFlYjM1MTkzNWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5AQCAtMSw2ICYjNDM7MSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qIENvcHlyaWdodCAoQykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRwb2xsLmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXCYjMzQ7aWRwZi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWRwZl9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2lkcGZfdmlydGNobmwuaFwmIzM0O1xuQEAgLTI0MDgsOSAmIzQzOzI0MTAsMTMgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsXG4gXHRcdFx0XHQgICAgc3RydWN0IGlkcGZfdHhfc3BsaXRxX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxuIHtcbi1cdCoodTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSAodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCk7XG4mIzQzO1x0KihfX2xlMzIgKilcdTAwMjZkZXNjLVx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9IGNwdV90b19sZTMyKCh1OCkocGFyYW1zLVx1MDAzZWR0eXBlIHwgdGRfY21kKSk7XG4gXHRkZXNjLVx1MDAzZWZsb3cucXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoKHUxNilzaXplKTtcbiBcdGRlc2MtXHUwMDNlZmxvdy5xdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYocGFyYW1zLVx1MDAzZWNvbXBsX3RhZyk7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMF0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdO1xuJiM0MztcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMV0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzFdO1xuJiM0MztcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMl0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdO1xuIH1cbiBcbiAvKipcbkBAIC0zMDExLDYgJiM0MzszMDE3LDU5IEBAIHN0YXRpYyBib29sIGlkcGZfdHhfc3BsaXRxX25lZWRfcmUoc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EpXG4gXHRyZXR1cm4gZ2FwIFx1MDAzZT0gSURQRl9UWF9TUExJVFFfUkVfTUlOX0dBUDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBpbnQgdHNfZ3Jhbl9wb3cyID0gOTtcbiYjNDM7XHR1NjQgdHMsIG5vdztcbiYjNDM7XG4mIzQzO1x0LyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi9cbiYjNDM7XHRpZiAobmV0cG9sbF90eF9ydW5uaW5nKHNrYi1cdTAwM2VkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNrYi1cdTAwM2V0c3RhbXBfdHlwZSkge1xuJiM0MztcdGNhc2UgU0tCX0NMT0NLX1JFQUxUSU1FOlxuJiM0MztcdFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9hZGQoc2tiLVx1MDAzZXRzdGFtcCxcbiYjNDM7XHRcdFx0XHRcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtXG4mIzQzO1x0XHRcdFx0XHQgICBrdGltZV9tb25vX3RvX2FueSgwLCBUS19PRkZTX1JFQUwpKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNLQl9DTE9DS19NT05PVE9OSUM6XG4mIzQzO1x0XHR0cyA9IGt0aW1lX3RvX25zKGt0aW1lX21vbm9fdG9fYW55KHNrYi1cdTAwM2V0c3RhbXAsIFRLX09GRlNfVEFJKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNLQl9DTE9DS19UQUk6XG4mIzQzO1x0XHR0cyA9IGt0aW1lX3RvX25zKHNrYi1cdTAwM2V0c3RhbXApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFdBUk5fT05fT05DRSgxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5vdyA9IGt0aW1lX2dldF9jbG9ja3RhaV9ucygpO1xuJiM0MztcdGlmICh0cyBcdTAwM2Mgbm93KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBiZXlvbmQgb2ZmbG9hZCBob3Jpem9uPyBzZXQgb3ZlcmZsb3cgYml0IG9ubHkgKi9cbiYjNDM7XHRpZiAodHMgXHUwMDNlIG5vdyAmIzQzOyAoKHU2NClza2ItXHUwMDNlZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24gKiBOU0VDX1BFUl9VU0VDKSkge1xuJiM0MztcdFx0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXSA9IDEgXHUwMDNjXHUwMDNjIDc7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0cyBcdTAwM2VcdTAwM2U9IHRzX2dyYW5fcG93MjtcbiYjNDM7XG4mIzQzO1x0LyogMCBpcyB2YWxpZCAyNGIgdGltZXN0YW1wLCBidXQgYWxzbyBtZWFucyBmaWVsZCB1bnNldC5cbiYjNDM7XHQgKiBBZGQgNTEyIG5zICh0c19ncmFuX3BvdzIpIHRvIGF2b2lkIHRoaXMgY2FzZVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgodHMgXHUwMDI2IDB4N2ZmZmZmKSA9PSAwKSB7XG4mIzQzO1x0XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gMTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF0gPSB0cyBcdTAwMjYgMHhmZjtcbiYjNDM7XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzFdID0gKHRzIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpZHBmX3R4X3NwbGl0cV9mcmFtZSAtIFNlbmRzIGJ1ZmZlciBvbiBUeCByaW5nIHVzaW5nIGZsZXggZGVzY3JpcHRvcnNcbiAgKiBAc2tiOiBzZW5kIGJ1ZmZlclxuQEAgLTMwOTcsNiAmIzQzOzMxNTYsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRcdHR4X3BhcmFtcy5kdHlwZSA9IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRTtcbiBcdFx0dHhfcGFyYW1zLmVvcF9jbWQgPSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2tiLVx1MDAzZXRzdGFtcCBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKVxuJiM0MztcdFx0XHRpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKHR4X3EsIHNrYiwgXHUwMDI2dHhfcGFyYW1zKTtcbiYjNDM7XG4gXHRcdC8qIFNldCB0aGUgUkUgYml0IHRvIHBlcmlvZGljYWxseSBcJiMzNDtjbGVhblwmIzM0OyB0aGUgZGVzY3JpcHRvciByaW5nLlxuIFx0XHQgKiBNSU5fR0FQIGlzIHNldCB0byBNSU5fUklORyBzaXplIHRvIGVuc3VyZSBpdCB3aWxsIGJlIHNldCBhdFxuIFx0XHQgKiBsZWFzdCBvbmNlIGVhY2ggdGltZSBhcm91bmQgdGhlIHJpbmcuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbmluZGV4IDRiZTViM2I2ZDNlZDJiLi44NjU0MDhiNTdiMGQ1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbkBAIC0xNjEsNiAmIzQzOzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHtcbiAgKiBAdHNvX3NlZ3M6IE51bWJlciBvZiBzZWdtZW50cyB0byBiZSBzZW50XG4gICogQHRzb19oZHJfbGVuOiBMZW5ndGggb2YgaGVhZGVycyB0byBiZSBkdXBsaWNhdGVkXG4gICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3JcbiYjNDM7ICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcFxuICAqL1xuIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHtcbiBcdHUzMiB0eF9mbGFncztcbkBAIC0xNzQsNiAmIzQzOzE3NSw3IEBAIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHtcbiBcdHUxNiB0c29faGRyX2xlbjtcbiBcbiBcdHUxNiB0ZF9jbWQ7XG4mIzQzO1x0dTggZGVzY190c1szXTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTg1LDYgJiM0Mzs4NSw4IEBAIGVudW0ge1xuICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlclxuICAqIEBoZHNfdGhyZXNoOiBQYWNrZXQgc2l6ZSB0aHJlc2hvbGQgZm9yIGhlYWRlciBkYXRhIHNwbGl0IChIRFMpXG4gICogQGhkc190aHJlc2hfbWF4OiBNYXhpbXVtIHN1cHBvcnRlZCBzZXR0aW5nIGZvciBAaGRzX3RocmVzaG9sZFxuJiM0MzsgKiBAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjXG4mIzQzOyAqIEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gdmFsdWUgaW4gdXNlY1xuICAqXG4gICovXG4gc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7XG5AQCAtOTcsNiAmIzQzOzk5LDggQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7XG4gXHR1MzJcdHR4X3B1c2hfYnVmX21heF9sZW47XG4gXHR1MzJcdGhkc190aHJlc2g7XG4gXHR1MzJcdGhkc190aHJlc2hfbWF4O1xuJiM0MztcdHUzMlx0cGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiYjNDM7XHR1MzJcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuIH07XG4gXG4gLyoqXG5AQCAtMTA4LDYgJiM0MzsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UWF9QVVNIX0JVRl9MRU46IGNhcHR1cmUgZm9yIHNldHRpbmcgdHhfcHVzaF9idWZfbGVuXG4gICogQEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQ6IGNhcHR1cmUgZm9yIHNldHRpbmcgdGNwX2RhdGFfc3BsaXRcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2hcbiYjNDM7ICogQEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTjogY2FwdHVyZSBmb3Igc2V0dGluZyBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uXG4gICovXG4gZW51bSBldGh0b29sX3N1cHBvcnRlZF9yaW5nX3BhcmFtIHtcbiBcdEVUSFRPT0xfUklOR19VU0VfUlhfQlVGX0xFTlx0XHQ9IEJJVCgwKSxcbkBAIC0xMTcsNiAmIzQzOzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XG4gXHRFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTlx0PSBCSVQoNCksXG4gXHRFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElUXHRcdD0gQklUKDUpLFxuIFx0RVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSU1x0XHQ9IEJJVCg2KSxcbiYjNDM7XHRFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05cdD0gQklUKDcpLFxuIH07XG4gXG4gI2RlZmluZSBfX0VUSF9SU1NfSEFTSF9CSVQoYml0KVx0KCh1MzIpMSBcdTAwM2NcdTAwM2MgKGJpdCkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0yMTI5LDcgJiM0MzsyMTI5LDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbiAgKlx0QGRwbGxfcGluOiBQb2ludGVyIHRvIHRoZSBTeW5jRSBzb3VyY2UgcGluIG9mIGEgRFBMTCBzdWJzeXN0ZW0sXG4gICpcdFx0ICAgd2hlcmUgdGhlIGNsb2NrIGlzIHJlY292ZXJlZC5cbiAgKlxuLSAqXHRAbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b246IG1heCBFRFQgb2ZmbG9hZCBob3Jpem9uIGluIG5zZWMuXG4mIzQzOyAqXHRAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogYWN0aXZlIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cbiYjNDM7ICpcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cbiAgKlx0QG5hcGlfY29uZmlnOiBBbiBhcnJheSBvZiBuYXBpX2NvbmZpZyBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgcGVyLU5BUElcbiAgKlx0XHQgICAgICBzZXR0aW5ncy5cbiAgKlx0QG51bV9uYXBpX2NvbmZpZ3M6XHRudW1iZXIgb2YgYWxsb2NhdGVkIE5BUEkgY29uZmlnIHN0cnVjdHMsXG5AQCAtMjU1Miw3ICYjNDM7MjU1Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiBcdC8qKiBAaXJxX21vZGVyOiBkaW0gcGFyYW1ldGVycyB1c2VkIGlmIElTX0VOQUJMRUQoQ09ORklHX0RJTUxJQikuICovXG4gXHRzdHJ1Y3QgZGltX2lycV9tb2Rlclx0KmlycV9tb2RlcjtcbiBcbi1cdHU2NFx0XHRcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuJiM0MztcdHUzMlx0XHRcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XG4mIzQzO1x0dTMyXHRcdFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gXHRzdHJ1Y3QgbmFwaV9jb25maWdcdCpuYXBpX2NvbmZpZztcbiBcdHUzMlx0XHRcdG51bV9uYXBpX2NvbmZpZ3M7XG4gXHR1MzJcdFx0XHRuYXBpX2RlZmVyX2hhcmRfaXJxcztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuQEAgLTE5Myw2ICYjNDM7MTkzLDggQEAgZW51bSB7XG4gXHRFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOX01BWCxcbiBcdEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0RVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuJiM0MztcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxuJiM0MztcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCxcbiBcbiBcdF9fRVRIVE9PTF9BX1JJTkdTX0NOVCxcbiBcdEVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jXG5pbmRleCA1YjRkZDA0ZDYxMjQ3Ni4uNzg5N2U0MjIwNTEzMDAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmNcbkBAIC0yMDEsNiAmIzQzOzIwMSw3IEBAXG4gXHRwZihTVklEX1JORClcdFx0LyogUmFuZG9tIFNWTEFOIElEICovXHRcdFx0XFxcbiBcdHBmKE5PREUpXHRcdC8qIE5vZGUgbWVtb3J5IGFsbG9jKi9cdFx0XHRcXFxuIFx0cGYoU0hBUkVEKVx0XHQvKiBTaGFyZWQgU0tCICovXHRcdFx0XFxcbiYjNDM7XHRwZihUWFRJTUUpXHRcdC8qIFNPX1RYVElNRSBzdXBwb3J0ICovXHRcdFx0XFxcbiBcbiAjZGVmaW5lIHBmKGZsYWcpXHRcdGZsYWcjI19TSElGVCxcbiBlbnVtIHBrdF9mbGFncyB7XG5AQCAtMjkxLDYgJiM0MzsyOTIsMTAgQEAgc3RydWN0IHBrdGdlbl9kZXYge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHR1NjQgZGVsYXk7XHRcdC8qIG5hbm8tc2Vjb25kcyAqL1xuIFxuJiM0MztcdC8qIFRYVElNRSBzdXBwb3J0ICovXG4mIzQzO1x0dTY0IHR4dGltZV9kZWxheTtcdC8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi9cbiYjNDM7XHRjbG9ja2lkX3QgdHh0aW1lX2Nsb2NraWQ7IC8qIGNsb2NraWQgZm9yIFNPX1RYVElNRSAqL1xuJiM0MztcbiBcdF9fdTY0IGNvdW50O1x0XHQvKiBEZWZhdWx0IE5vIHBhY2tldHMgdG8gc2VuZCAqL1xuIFx0X191NjQgc29mYXI7XHRcdC8qIEhvdyBtYW55IHBrdHMgd2UmIzM5O3ZlIHNlbnQgc28gZmFyICovXG4gXHRfX3U2NCB0eF9ieXRlcztcdFx0LyogSG93IG1hbnkgYnl0ZXMgd2UmIzM5O3ZlIHRyYW5zbWl0dGVkICovXG5AQCAtNjY2LDYgJiM0Mzs2NzEsMTcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcdGlmIChwa3RfZGV2LVx1MDAzZW5vZGUgXHUwMDNlPSAwKVxuIFx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7ICAgICBub2RlOiAlZFxcblwmIzM0OywgcGt0X2Rldi1cdTAwM2Vub2RlKTtcbiBcbiYjNDM7XHRpZiAocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgRl9UWFRJTUUpIHtcbiYjNDM7XHRcdGNsb2NraWRfdCBjbG9ja2lkID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xuJiM0MztcbiYjNDM7XHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDsgICAgIHR4dGltZV9kZWxheTogJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSk7XG4mIzQzO1x0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7ICAgICB0eHRpbWVfY2xvY2tpZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGNsb2NraWQgPT0gQ0xPQ0tfTU9OT1RPTklDID8gXCYjMzQ7bW9ub3RvbmljXCYjMzQ7IDpcbiYjNDM7XHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19SRUFMVElNRSA/IFwmIzM0O3JlYWx0aW1lXCYjMzQ7IDpcbiYjNDM7XHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19UQUkgPyBcJiMzNDt0YWlcJiMzNDsgOiBcJiMzNDt1bmtub3duXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHBrdF9kZXYtXHUwMDNleG1pdF9tb2RlID09IE1fTkVUSUZfUkVDRUlWRSlcbiBcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDsgICAgIHhtaXRfbW9kZTogbmV0aWZfcmVjZWl2ZVxcblwmIzM0Oyk7XG4gXHRlbHNlIGlmIChwa3RfZGV2LVx1MDAzZXhtaXRfbW9kZSA9PSBNX1FVRVVFX1hNSVQpXG5AQCAtMTE0MSw2ICYjNDM7MTE1Nyw1MCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi1cdTAwM2VkZWxheSk7XG4gXHRcdHJldHVybiBjb3VudDtcbiBcdH1cbiYjNDM7XHRpZiAoIXN0cmNtcChuYW1lLCBcJiMzNDt0eHRpbWVfZGVsYXlcJiMzNDspKSB7XG4mIzQzO1x0XHRtYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7XG4mIzQzO1x0XHRsZW4gPSBudW1fYXJnKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFx1MDAyNnZhbHVlKTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBsZW47XG4mIzQzO1xuJiM0MztcdFx0LyogaW4gcXVldWVfeG1pdCBtb2RlIGZxIG1heSBjbGVhciB0c3RhbXAsIGRvIG5vdCByZXVzZSBza2IgKi9cbiYjNDM7XHRcdGlmICh2YWx1ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcGt0X2Rldi1cdTAwM2VjbG9uZV9za2IgXHUwMDNlIDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpO1xuJiM0MztcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O09LOiB0eHRpbWVfZGVsYXk9JWxsdVwmIzM0OyxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghc3RyY21wKG5hbWUsIFwmIzM0O3R4dGltZV9jbG9ja2lkXCYjMzQ7KSkge1xuJiM0MztcdFx0Y2hhciBjbG9ja3N0clszMl07XG4mIzQzO1x0XHRjbG9ja2lkX3QgY2xrO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChjbG9ja3N0ciwgMCwgc2l6ZW9mKGNsb2Nrc3RyKSk7XG4mIzQzO1x0XHRtYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7XG4mIzQzO1x0XHRsZW4gPSBzdHJuX2xlbihcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4KTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBsZW47XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGNsb2Nrc3RyLCBcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbGVuKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzdHJjbXAoY2xvY2tzdHIsIFwmIzM0O21vbm90b25pY1wmIzM0OykpIHtcbiYjNDM7XHRcdFx0Y2xrID0gQ0xPQ0tfTU9OT1RPTklDO1xuJiM0MztcdFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcJiMzNDtyZWFsdGltZVwmIzM0OykpIHtcbiYjNDM7XHRcdFx0Y2xrID0gQ0xPQ0tfUkVBTFRJTUU7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjbXAoY2xvY2tzdHIsIFwmIzM0O3RhaVwmIzM0OykpIHtcbiYjNDM7XHRcdFx0Y2xrID0gQ0xPQ0tfVEFJO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O0VSUk9SOiB1bmtub3duIGNsb2NraWQgJiMzOTslcyYjMzk7XCYjMzQ7LFxuJiM0MztcdFx0XHRcdGNsb2Nrc3RyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O09LOiB0eHRpbWVfY2xvY2tpZD0lc1wmIzM0OywgY2xvY2tzdHIpO1xuJiM0MztcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkLCBjbGspO1xuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdH1cbiBcdGlmICghc3RyY21wKG5hbWUsIFwmIzM0O3JhdGVcJiMzNDspKSB7XG4gXHRcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcbiBcdFx0bGVuID0gbnVtX2FyZyhcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4LCBcdTAwMjZ2YWx1ZSk7XG5AQCAtMTIzOCw2ICYjNDM7MTI5OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0aWYgKHZhbHVlIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiAocGt0X2Rldi1cdTAwM2VuX2ltaXhfZW50cmllcyBcdTAwM2UgMCB8fFxuIFx0XHRcdFx0ICAhKHBrdF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZfU0hBUkVEKSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAodmFsdWUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiA9IHZhbHVlO1xuIFxuQEAgLTIzMjEsNiAmIzQzOzIzODMsMjEgQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiB9XG4gXG4gXG4mIzQzO3N0YXRpYyBrdGltZV90IGt0aW1lX2dldF9jbG9jayhjbG9ja2lkX3QgY2xvY2tpZClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoY2xvY2tpZCkge1xuJiM0MztcdGNhc2UgQ0xPQ0tfUkVBTFRJTUU6XG4mIzQzO1x0XHRyZXR1cm4ga3RpbWVfZ2V0X3JlYWwoKTtcbiYjNDM7XHRjYXNlIENMT0NLX01PTk9UT05JQzpcbiYjNDM7XHRcdHJldHVybiBrdGltZV9nZXQoKTtcbiYjNDM7XHRjYXNlIENMT0NLX1RBSTpcbiYjNDM7XHRcdHJldHVybiBrdGltZV9nZXRfY2xvY2t0YWkoKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdFx0cmV0dXJuIGt0aW1lX2dldCgpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpXG4ge1xuIFx0a3RpbWVfdCBzdGFydF90aW1lLCBlbmRfdGltZTtcbkBAIC0zNTEwLDcgJiM0MzszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiBcbiBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiB7XG4tXHRib29sIHNrYl9zaGFyZWQgPSAhIShSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VmbGFncykgXHUwMDI2IEZfU0hBUkVEKTtcbiYjNDM7XHR1MzIgZmxhZ3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Ym9vbCBza2Jfc2hhcmVkID0gISEoZmxhZ3MgXHUwMDI2IEZfU0hBUkVEKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2ID0gcGt0X2Rldi1cdTAwM2VvZGV2O1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0dW5zaWduZWQgaW50IGJ1cnN0ID0gMTtcbkBAIC0zNTQ1LDYgJiM0MzszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHQvKiBJZiBubyBza2Igb3IgY2xvbmUgY291bnQgZXhoYXVzdGVkIHRoZW4gZ2V0IG5ldyBvbmUgKi9cbiBcdGlmICghcGt0X2Rldi1cdTAwM2Vza2IgfHwgKHBrdF9kZXYtXHUwMDNlbGFzdF9vayBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICAmIzQzOyYjNDM7cGt0X2Rldi1cdTAwM2VjbG9uZV9jb3VudCBcdTAwM2U9IGNsb25lX3NrYikpIHtcbiYjNDM7XHRcdHU2NCB0eHRpbWVfZGVsYXk7XG4mIzQzO1xuIFx0XHQvKiBidWlsZCBhIG5ldyBwa3QgKi9cbiBcdFx0a2ZyZWVfc2tiKHBrdF9kZXYtXHUwMDNlc2tiKTtcbiBcbkBAIC0zNTU3LDYgJiM0MzszNjM3LDE2IEBAIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHR9XG4gXHRcdHBrdF9kZXYtXHUwMDNlbGFzdF9wa3Rfc2l6ZSA9IHBrdF9kZXYtXHUwMDNlc2tiLVx1MDAzZWxlbjtcbiBcdFx0cGt0X2Rldi1cdTAwM2VjbG9uZV9jb3VudCA9IDA7XHQvKiByZXNldCBjb3VudGVyICovXG4mIzQzO1xuJiM0MztcdFx0dHh0aW1lX2RlbGF5ID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KTtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgRl9UWFRJTUUgXHUwMDI2XHUwMDI2IHR4dGltZV9kZWxheSkge1xuJiM0MztcdFx0XHRjbG9ja2lkX3QgY2xrID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xuJiM0MztcdFx0XHRrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgdHh0aW1lX2RlbGF5KTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtXHUwMDNlc2tiLCB0eHRpbWUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IGNsayk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAocGt0X2Rldi1cdTAwM2VkZWxheSBcdTAwMjZcdTAwMjYgcGt0X2Rldi1cdTAwM2VsYXN0X29rKVxuQEAgLTM4NjksNiAmIzQzOzM5NTksNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9hZGRfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyICppZm5hbWUpXG4gXHRwa3RfZGV2LVx1MDAzZWJ1cnN0ID0gMTtcbiBcdHBrdF9kZXYtXHUwMDNlbm9kZSA9IE5VTUFfTk9fTk9ERTtcbiBcdHBrdF9kZXYtXHUwMDNlZmxhZ3MgPSBGX1NIQVJFRDtcdC8qIFNLQiBzaGFyZWQgYnkgZGVmYXVsdCAqL1xuJiM0MztcdHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQgPSBDTE9DS19NT05PVE9OSUM7XG4gXG4gXHRlcnIgPSBwa3RnZW5fc2V0dXBfZGV2KHQtXHUwMDNlbmV0LCBwa3RfZGV2LCBpZm5hbWUpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCAzMWM2NWE1NDVhMTA3Yy4uMmM3YTI0NWM1ZmZjMmUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC0yMTU1LDcgJiM0MzsyMTU1LDcgQEAgc3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX1RTT19NQVhfU0VHUyxcbiBcdFx0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZXRzb19tYXhfc2VncykpIHx8XG4gXHQgICAgbmxhX3B1dF91aW50KHNrYiwgSUZMQV9NQVhfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbi1cdFx0XHQgUkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikpIHx8XG4mIzQzO1x0XHRcdCAodTY0KVJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pICogTlNFQ19QRVJfVVNFQykgfHxcbiAjaWZkZWYgQ09ORklHX1JQU1xuIFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fUlhfUVVFVUVTLFxuIFx0XHRcdFJFQURfT05DRShkZXYtXHUwMDNlbnVtX3J4X3F1ZXVlcykpIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmMgYi9uZXQvZXRodG9vbC9jb21tb24uY1xuaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjVjMjMyM2FhYTAyYjZiIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXG5AQCAtOTU0LDYgJiM0Mzs5NTQsOSBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIERyaXZlciBnaXZlcyB1cyBjdXJyZW50IHN0YXRlLCB3ZSB3YW50IHRvIHJldHVybiBjdXJyZW50IGNvbmZpZyAqL1xuIFx0a3BhcmFtLVx1MDAzZXRjcF9kYXRhX3NwbGl0ID0gZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfY29uZmlnO1xuIFx0a3BhcmFtLVx1MDAzZWhkc190aHJlc2ggPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc190aHJlc2g7XG4mIzQzO1xuJiM0MztcdGtwYXJhbS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b247XG4mIzQzO1x0a3BhcmFtLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuaW5kZXggM2U5NjlhMDcwZjlmZTQuLmFlN2I2NTFjNjU4Zjc0IDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbkBAIC00OTQsNyAmIzQzOzQ5NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9mZWF0dXJlc19zZXRfcG9saWN5W0VUSFRPT0xfQV9GRUFUVVJFU19XQU5UXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3ByaXZmbGFnc19nZXRfcG9saWN5W0VUSFRPT0xfQV9QUklWRkxBR1NfSEVBREVSICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0ZMQUdTICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19nZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRUFERVIgJiM0MzsgMV07XG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYICYjNDM7IDFdO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0hFQURFUiAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfc2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfQ09NQklORURfQ09VTlQgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NvYWxlc2NlX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NPQUxFU0NFX0hFQURFUiAmIzQzOyAxXTtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9yaW5ncy5jIGIvbmV0L2V0aHRvb2wvcmluZ3MuY1xuaW5kZXggOTA1NGM4OWM1ZDdiYjIuLjUyMTU4NTcyZmUxMGMwIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvcmluZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcmluZ3MuY1xuQEAgLTQyLDYgJiM0Mzs0Miw4IEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4gXG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbiYjNDM7XHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuJiM0MztcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS5tYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiBcbiBcdGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfcmluZ3BhcmFtKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VyaW5ncGFyYW0sXG4gXHRcdFx0XHRcdFx1MDAyNmRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbSwgaW5mby1cdTAwM2VleHRhY2spO1xuQEAgLTY5LDcgJiM0Mzs3MSw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTiAqL1xuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVggKi9cbiBcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXG4tXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBfUklOR1NfSERTX1RIUkVTSF9NQVggKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTiAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggKi9cbiB9XG4gXG4gc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTIxLDcgJiM0MzsxMjUsMTIgQEAgc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaCkgfHxcbiBcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuLVx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXG4mIzQzO1x0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkgfHxcbiYjNDM7XHQgICAgKChzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbiYjNDM7XHRcdFx0ICBrci1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB8fFxuJiM0MztcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxuJiM0MztcdFx0XHQgIGtyLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0LDYgJiM0MzsxNTMsNyBAQCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W10gPSB7XG4gXHRbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCAxKSxcbiBcdFtFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIH07XG4gXG4gc3RhdGljIGludFxuQEAgLTE3Nyw2ICYjNDM7MTg3LDE0IEBAIGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShvcHMtXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3NldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19DUUVfU0laRV0gXHUwMDI2XHUwMDI2XG4gXHQgICAgIShvcHMtXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX0NRRV9TSVpFKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuQEAgLTI0Niw2ICYjNDM7MjY0LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dLCBcdTAwMjZtb2QpO1xuIFx0ZXRobmxfdXBkYXRlX3UzMihcdTAwMjZrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2gsXG4gXHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgXHUwMDI2bW9kKTtcbiYjNDM7XHRldGhubF91cGRhdGVfdTMyKFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcbiYjNDM7XHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSwgXHUwMDI2bW9kKTtcbiBcdGlmICghbW9kKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yODEsNiAmIzQzOzMwMSw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19UWF07XG4gXHRlbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggXHUwMDNlIGtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaF9tYXgpXG4gXHRcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdO1xuJiM0MztcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiBcdTAwM2VcbiYjNDM7XHRcdCBrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKVxuJiM0MztcdFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07XG4gXHRlbHNlXG4gXHRcdGVycl9hdHRyID0gTlVMTDtcbiBcdGlmIChlcnJfYXR0cikge1xuQEAgLTMwMiw2ICYjNDM7MzI1LDkgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRyZXQgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3JpbmdwYXJhbShkZXYsIFx1MDAyNnJpbmdwYXJhbSxcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2a2VybmVsX3JpbmdwYXJhbSwgaW5mby1cdTAwM2VleHRhY2spO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0ZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24gPSBrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b247XG4mIzQzO1xuIFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnEuYyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuaW5kZXggN2NhZTA4MmE5ODQ3MjEuLjM2MDA2ZjY5YTg3NTM2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC0zOTksNiAmIzQzOzM5OSwxMSBAQCBzdGF0aWMgc3RydWN0IGZxX2Zsb3cgKmZxX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19zdGF0dXMpICE9IFNLX1BBQ0lOR19GUSlcbiBcdFx0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzay1cdTAwM2Vza19wYWNpbmdfc3RhdHVzLFxuIFx0XHRcdFx0XHQgIFNLX1BBQ0lOR19GUSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGZxX3NrYl9jYihza2IpLVx1MDAzZXRpbWVfdG9fc2VuZCBcdTAwM2M9IG5vdylcbiYjNDM7XHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IDA7XG4mIzQzO1xuIFx0XHRyZXR1cm4gXHUwMDI2cS1cdTAwM2VpbnRlcm5hbDtcbiBcdH1cbiBcbkBAIC03MDcsNiAmIzQzOzcxMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdHN0cnVjdCBmcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIFx0c3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kO1xuIFx0c3RydWN0IGZxX2Zsb3dfaGVhZCAqaGVhZDtcbiYjNDM7XHR1NjQgdGltZV9uZXh0X3BhY2tldDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZnFfZmxvdyAqZjtcbiBcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbkBAIC03MjEsNyAmIzQzOzcyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdGlmIChza2IpIHtcbiBcdFx0cS1cdTAwM2VpbnRlcm5hbC5xbGVuLS07XG4gXHRcdGZxX2RlcXVldWVfc2tiKHNjaCwgXHUwMDI2cS1cdTAwM2VpbnRlcm5hbCwgc2tiKTtcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuIFx0fVxuIFxuIFx0bm93ID0ga3RpbWVfZ2V0X25zKCk7XG5AQCAtNzU4LDggJiM0Mzs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gXG4gXHRza2IgPSBmcV9wZWVrKGYpO1xuIFx0aWYgKHNrYikge1xuLVx0XHR1NjQgdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXHUwMDNldGltZV90b19zZW5kLFxuLVx0XHRcdFx0XHQgICAgIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4mIzQzO1x0XHR0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cdTAwM2V0aW1lX3RvX3NlbmQsXG4mIzQzO1x0XHRcdFx0XHQgZi1cdTAwM2V0aW1lX25leHRfcGFja2V0KTtcbiBcbiBcdFx0aWYgKG5vdyAmIzQzOyBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcdTAwM2MgdGltZV9uZXh0X3BhY2tldCkge1xuIFx0XHRcdGhlYWQtXHUwMDNlZmlyc3QgPSBmLVx1MDAzZW5leHQ7XG5AQCAtODI4LDExICYjNDM7ODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdFx0ICogZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IHdhcyBzZXQgd2hlbiBwcmlvciBwYWNrZXQgd2FzIHNlbnQsXG4gXHRcdCAqIGFuZCBjdXJyZW50IHRpbWUgKEBub3cpIGNhbiBiZSB0b28gbGF0ZSBieSB0ZW5zIG9mIHVzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGYtXHUwMDNldGltZV9uZXh0X3BhY2tldClcbiYjNDM7XHRcdGlmIChmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgXHUwMDI2XHUwMDI2IGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCBcdTAwM2Mgbm93KVxuIFx0XHRcdGxlbiAtPSBtaW4obGVuLzIsIG5vdyAtIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4gXHRcdGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCA9IG5vdyAmIzQzOyBsZW47XG4gXHR9XG4mIzQzO1xuIG91dDpcbiYjNDM7XHRpZiAocS1cdTAwM2VvZmZsb2FkX2hvcml6b24gXHUwMDI2XHUwMDI2IHRpbWVfbmV4dF9wYWNrZXQgXHUwMDNjPSBub3cpXG4mIzQzO1x0XHRza2ItXHUwMDNldHN0YW1wID0gMDtcbiYjNDM7XG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbkBAIC0xMTc5LDcgJiM0MzsxMTg5LDggQEAgc3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbiBcdFx0dTY0IG9mZmxvYWRfaG9yaXpvbiA9ICh1NjQpTlNFQ19QRVJfVVNFQyAqXG4gXHRcdFx0XHQgICAgICBubGFfZ2V0X3UzMih0YltUQ0FfRlFfT0ZGTE9BRF9IT1JJWk9OXSk7XG4gXG4tXHRcdGlmIChvZmZsb2FkX2hvcml6b24gXHUwMDNjPSBxZGlzY19kZXYoc2NoKS1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikge1xuJiM0MztcdFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcdTAwM2M9XG4mIzQzO1x0XHQgICAgKHU2NClxZGlzY19kZXYoc2NoKS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICogTlNFQ19QRVJfVVNFQykge1xuIFx0XHRcdFdSSVRFX09OQ0UocS1cdTAwM2VvZmZsb2FkX2hvcml6b24sIG9mZmxvYWRfaG9yaXpvbik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7aW52YWxpZCBvZmZsb2FkX2hvcml6b25cJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc2V0dGluZ3Ncbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjQ3OGU2ODQ4NDZhMTZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0Mzt0aW1lb3V0PTI0MFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcbmluZGV4IDU1YTM4NmYzZDFiOTBmLi42ZTY0YmFhNGM2MGRkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xuQEAgLTQyLDggJiM0Mzs0MiwxMCBAQCBzdGF0aWMgYm9vbFx0Y2ZnX21hY2hpbmVfc2xvdztcbiBzdGF0aWMgdWludDY0X3RcdGNmZ19zdGFydF90aW1lX25zO1xuIHN0YXRpYyBpbnRcdGNmZ19tYXJrO1xuIHN0YXRpYyBib29sXHRjZmdfcng7XG4mIzQzO3N0YXRpYyBib29sXHRjZmdfdmVyaWZ5X2h3X29mZmxvYWQ7XG4gXG4gc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0O1xuJiM0MztzdGF0aWMgdWludDY0X3QgZ2xvYl90c3RhcnRfcmVhbDtcbiBzdGF0aWMgdWludDY0X3QgdGRlbGl2ZXJfbWF4O1xuIFxuIHN0YXRpYyBpbnQgZXJyb3JzO1xuQEAgLTE1OCwxOCAmIzQzOzE2MCw3MCBAQCBzdGF0aWMgdm9pZCBkb19yZWN2X3ZlcmlmeV9lbXB0eShpbnQgZmRyKVxuIFx0XHRlcnJvcigxLCAwLCBcJiMzNDtyZWN2OiBub3QgZW1wdHkgYXMgZXhwZWN0ZWQgKCVkLCAlZClcJiMzNDssIHJldCwgZXJybm8pO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuJiM0MztzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciBwYXlsb2FkX2NoYXIpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpyZWFzb24gPSBOVUxMO1xuJiM0MztcdGludDY0X3QgdHN0YW1wID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChlcnItXHUwMDNlZWVfZXJybm8pIHtcbiYjNDM7XHRjYXNlIEVDQU5DRUxFRDpcbiYjNDM7XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXG4mIzQzO1x0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuJiM0MztcdFx0cmVhc29uID0gXCYjMzQ7bWlzc2VkIHR4dGltZVwmIzM0OztcbiYjNDM7XHRicmVhaztcbiYjNDM7XHRjYXNlIEVJTlZBTDpcbiYjNDM7XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKVxuJiM0MztcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbiYjNDM7XHRcdHJlYXNvbiA9IFwmIzM0O2ludmFsaWQgdHh0aW1lXCYjMzQ7O1xuJiM0MztcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIGVyci1cdTAwM2VlZV9lcnJubywgZXJyLVx1MDAzZWVlX2NvZGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHN0YW1wID0gKChpbnQ2NF90KWVyci1cdTAwM2VlZV9kYXRhKSBcdTAwM2NcdTAwM2MgMzIgfCBlcnItXHUwMDNlZWVfaW5mbztcbiYjNDM7XHR0c3RhbXAgLT0gKGludDY0X3QpZ2xvYl90c3RhcnQ7XG4mIzQzO1x0dHN0YW1wIC89IDEwMDAgKiAxMDAwO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtzZW5kOiBwa3QgJWMgYXQgJVwmIzM0OyBQUklkNjQgXCYjMzQ7bXMgZHJvcHBlZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRwYXlsb2FkX2NoYXIsIHRzdGFtcCwgcmVhc29uKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyAqdHNzKVxuJiM0Mzt7XG4mIzQzO1x0aW50NjRfdCB0cztcbiYjNDM7XG4mIzQzO1x0dHMgPSB0c3MtXHUwMDNldHNbMF0udHZfc2VjO1xuJiM0MztcdHRzICo9IDEwMDBVTEwgKiAxMDAwICogMTAwMDtcbiYjNDM7XHR0cyAmIzQzOz0gdHNzLVx1MDAzZXRzWzBdLnR2X25zZWM7XG4mIzQzO1x0dHMgLT0gZ2xvYl90c3RhcnRfcmVhbDtcbiYjNDM7XHR0cyAvPSAxMDAwO1xuJiM0MztcbiYjNDM7XHRpZiAodHMgXHUwMDNlIGNmZ192YXJpYW5jZV91cykge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3N3IGRlbGF5ICVcJiMzNDsgUFJJZDY0IFwmIzM0O3VzIGV4Y2VlZHMgYm91bmRzXFxuXCYjMzQ7LCB0cyk7XG4mIzQzO1x0XHRpZiAoIWNmZ19tYWNoaW5lX3Nsb3cpXG4mIzQzO1x0XHRcdGVycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWUoaW50IGZkdClcbiB7XG4gXHRjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSkgJiM0MztcbiYjNDM7XHRcdCAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjbV90aW1lc3RhbXBpbmcpKSAmIzQzO1xuIFx0XHQgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKV0gPSB7MH07XG4gXHRjaGFyIGRhdGFbc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MztcbiBcdFx0ICBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsgMV07XG4mIzQzO1x0c3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcztcbiBcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyO1xuIFx0aW50IHJldCwgbnVtX3RzdGFtcCA9IDA7XG4gXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHswfTtcbiBcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7MH07XG4gXHRzdHJ1Y3QgY21zZ2hkciAqY207XG4tXHRpbnQ2NF90IHRzdGFtcCA9IDA7XG4gXG4gXHRpb3YuaW92X2Jhc2UgPSBkYXRhO1xuIFx0aW92Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7XG5AQCAtMTgxLDggJiM0MzsyMzUsNiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuIFx0bXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpO1xuIFxuIFx0d2hpbGUgKDEpIHtcbi1cdFx0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcbi1cbiBcdFx0cmV0ID0gcmVjdm1zZyhmZHQsIFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcbiBcdFx0aWYgKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUFHQUlOKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTE5Miw0MiAmIzQzOzI0NCwzMiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuIFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiBmbGFncyAweCV4XFxuXCYjMzQ7LCBtc2cubXNnX2ZsYWdzKTtcbiBcbiBcdFx0Y20gPSBDTVNHX0ZJUlNUSERSKFx1MDAyNm1zZyk7XG4mIzQzO1x0XHR0c3MgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsID09IFNPTF9TT0NLRVQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY20tXHUwMDNlY21zZ190eXBlID09IFNDTV9USU1FU1RBTVBJTkcpIHtcbiYjNDM7XHRcdFx0dHNzID0gKHZvaWQgKilDTVNHX0RBVEEoY20pO1xuJiM0MztcdFx0XHRjbSA9IENNU0dfTlhUSERSKFx1MDAyNm1zZywgY20pO1xuJiM0MztcdFx0XHRpZiAoIWNtKVxuJiM0MztcdFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O3RpbWVzdGFtcCBtaXNzaW5nIGlwIGVyclxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBjZmdfZXJycV9sZXZlbCB8fFxuIFx0XHQgICAgY20tXHUwMDNlY21zZ190eXBlICE9IGNmZ19lcnJxX3R5cGUpXG4gXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IHR5cGUgMHgleC4weCV4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIGNtLVx1MDAzZWNtc2dfbGV2ZWwsIGNtLVx1MDAzZWNtc2dfdHlwZSk7XG4gXG4gXHRcdGVyciA9IChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY20pO1xuLVx0XHRpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fVFhUSU1FKVxuJiM0MztcdFx0aWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RYVElNRSlcbiYjNDM7XHRcdFx0bnVtX3RzdGFtcCAmIzQzOz0gZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGVycixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgZGF0YVtyZXQgLSAxXSk7XG4mIzQzO1x0XHRlbHNlIGlmIChlcnItXHUwMDNlZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgXHUwMDI2XHUwMDI2IHRzcylcbiYjNDM7XHRcdFx0ZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoZXJyLCB0c3MpO1xuJiM0MztcdFx0ZWxzZVxuIFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiBvcmlnaW4gMHgleFxcblwmIzM0OywgZXJyLVx1MDAzZWVlX29yaWdpbik7XG4gXG4tXHRcdHN3aXRjaCAoZXJyLVx1MDAzZWVlX2Vycm5vKSB7XG4tXHRcdGNhc2UgRUNBTkNFTEVEOlxuLVx0XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXG4tXHRcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgICBlcnItXHUwMDNlZWVfY29kZSk7XG4tXHRcdFx0cmVhc29uID0gXCYjMzQ7bWlzc2VkIHR4dGltZVwmIzM0Oztcbi1cdFx0YnJlYWs7XG4tXHRcdGNhc2UgRUlOVkFMOlxuLVx0XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKVxuLVx0XHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHRcdHJlYXNvbiA9IFwmIzM0O2ludmFsaWQgdHh0aW1lXCYjMzQ7O1xuLVx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICBlcnItXHUwMDNlZWVfZXJybm8sIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0fVxuLVxuLVx0XHR0c3RhbXAgPSAoKGludDY0X3QpIGVyci1cdTAwM2VlZV9kYXRhKSBcdTAwM2NcdTAwM2MgMzIgfCBlcnItXHUwMDNlZWVfaW5mbztcbi1cdFx0dHN0YW1wIC09IChpbnQ2NF90KSBnbG9iX3RzdGFydDtcbi1cdFx0dHN0YW1wIC89IDEwMDAgKiAxMDAwO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7c2VuZDogcGt0ICVjIGF0ICVcJiMzNDsgUFJJZDY0IFwmIzM0O21zIGRyb3BwZWQ6ICVzXFxuXCYjMzQ7LFxuLVx0XHRcdGRhdGFbcmV0IC0gMV0sIHRzdGFtcCwgcmVhc29uKTtcbi1cbiBcdFx0bXNnLm1zZ19mbGFncyA9IDA7XG4gXHRcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTtcbi1cdFx0bnVtX3RzdGFtcCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHRyZXR1cm4gbnVtX3RzdGFtcDtcbkBAIC0yNDUsMTIgJiM0MzsyODcsMTMgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJxdWV1ZV9tc2dzKGludCBmZHQpXG4gXHRcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3BvbGxcJiMzNDspO1xuIFxuIFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAocGZkLnJldmVudHMgXHUwMDI2IFBPTExFUlIpKVxuLVx0XHRcdG51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChmZHQpO1xuJiM0MztcdFx0XHRudW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlKGZkdCk7XG4gXG4gXHRcdGlmIChudW1fdHN0YW1wID09IGNmZ19udW1fcGt0KVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0fSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgXHUwMDNjIHRkZWxpdmVyX21heCk7XG4mIzQzO1x0fSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgXHUwMDNjXG4mIzQzO1x0XHQgdGRlbGl2ZXJfbWF4ICYjNDM7IChjZmdfdmFyaWFuY2VfdXMgKiAxMDAwKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHN0YXJ0X3RpbWVfd2FpdCh2b2lkKVxuQEAgLTI5NSw2ICYjNDM7MzM4LDE4IEBAIHN0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lKGludCBmZClcbiBcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7Z2V0c29ja29wdCB0eHRpbWU6IG1pc21hdGNoXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbCA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxuJiM0MztcdFx0ICBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIHxcbiYjNDM7XHRcdCAgU09GX1RJTUVTVEFNUElOR19PUFRfSUQgfFxuJiM0MztcdFx0ICBTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsXG4mIzQzO1x0XHQgICAgICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c2V0c29ja29wdCB0aW1lc3RhbXBpbmdcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiB7XG4gXHRpbnQgZmQ7XG5AQCAtMzA4LDYgJiM0MzszNjMsOSBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4gXG4gXHRzZXRzb2Nrb3B0X3R4dGltZShmZCk7XG4gXG4mIzQzO1x0aWYgKGNmZ192ZXJpZnlfaHdfb2ZmbG9hZClcbiYjNDM7XHRcdHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoZmQpO1xuJiM0MztcbiBcdGlmIChjZmdfbWFyayBcdTAwMjZcdTAwMjZcbiBcdCAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19NQVJLLCBcdTAwMjZjZmdfbWFyaywgc2l6ZW9mKGNmZ19tYXJrKSkpXG4gXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IG1hcmtcJiMzNDspO1xuQEAgLTMxNyw3ICYjNDM7Mzc1LDcgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIHN0YXRpYyBpbnQgc2V0dXBfcngoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiB7XG4tXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSAxMDAgKiAxMDAwIH07XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gNjAwICogMTAwMCB9O1xuIFx0aW50IGZkO1xuIFxuIFx0ZmQgPSBzb2NrZXQoYWRkci1cdTAwM2VzYV9mYW1pbHksIFNPQ0tfREdSQU0sIDApO1xuQEAgLTM0OCw2ICYjNDM7NDA2LDcgQEAgc3RhdGljIHZvaWQgZG9fdGVzdF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIFx0c3RhcnRfdGltZV93YWl0KCk7XG4gXHRnbG9iX3RzdGFydCA9IGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpO1xuJiM0MztcdGdsb2JfdHN0YXJ0X3JlYWwgPSBnZXR0aW1lX25zKENMT0NLX1JFQUxUSU1FKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNmZ19udW1fcGt0OyBpJiM0MzsmIzQzOylcbiBcdFx0ZG9fc2VuZF9vbmUoZmR0LCBcdTAwMjZjZmdfYnVmW2ldKTtcbkBAIC00NDAsMTAgJiM0Mzs0OTksMTEgQEAgc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpXG4gXHRcdFx0XCYjMzQ7ICAtNiAgICAgICAgICAgIG9ubHkgSVB2NlxcblwmIzM0O1xuIFx0XHRcdFwmIzM0OyAgLWMgXHUwMDNjY2xvY2tcdTAwM2UgICAgbW9ub3RvbmljIG9yIHRhaSAoZGVmYXVsdClcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIC1EIFx1MDAzY2FkZHJcdTAwM2UgICAgIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MgKHNlcnZlcilcXG5cJiMzNDtcbi1cdFx0XHRcJiMzNDsgIC1TIFx1MDAzY2FkZHJcdTAwM2UgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0OyAgLWggICAgICAgICAgICB2ZXJpZnkgaGFyZHdhcmUgb2ZmbG9hZCAodHgpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0OyAgLW0gXHUwMDNjbWFya1x1MDAzZSAgICAgc29ja2V0IG1hcmtcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIC1yICAgICAgICAgICAgcnVuIHJ4IG1vZGVcXG5cJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7ICAtUyBcdTAwM2NhZGRyXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcblwmIzM0O1xuIFx0XHRcdFwmIzM0OyAgLXQgXHUwMDNjbnNlY1x1MDAzZSAgICAgc3RhcnQgdGltZSAoVVRDIG5hbm9zZWNvbmRzKVxcblwmIzM0O1xuLVx0XHRcdFwmIzM0OyAgLW0gXHUwMDNjbWFya1x1MDAzZSAgICAgc29ja2V0IG1hcmtcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDtcXG5cJiMzNDssXG4gXHRcdFx0cHJvZ25hbWUpO1xuIFx0ZXhpdCgxKTtcbkBAIC00NTUsNyAmIzQzOzUxNSw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aW50IGRvbWFpbiA9IFBGX1VOU1BFQztcbiBcdGludCBjO1xuIFxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0OzQ2YzpTOkQ6cnQ6bTpcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDs0NmM6RDpobTpyUzp0OlwmIzM0OykpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAoYykge1xuIFx0XHRjYXNlICYjMzk7NCYjMzk7OlxuIFx0XHRcdGlmIChkb21haW4gIT0gUEZfVU5TUEVDKVxuQEAgLTQ4MiwyMSAmIzQzOzU0MiwyNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDt1bmtub3duIGNsb2NrIGlkICVzXCYjMzQ7LCBvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7UyYjMzk7OlxuLVx0XHRcdHNhZGRyID0gb3B0YXJnO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7RCYjMzk7OlxuIFx0XHRcdGRhZGRyID0gb3B0YXJnO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiYjNDM7XHRcdFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7bSYjMzk7OlxuJiM0MztcdFx0XHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O3ImIzM5OzpcbiBcdFx0XHRjZmdfcnggPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O1MmIzM5OzpcbiYjNDM7XHRcdFx0c2FkZHIgPSBvcHRhcmc7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7dCYjMzk7OlxuIFx0XHRcdGNmZ19zdGFydF90aW1lX25zID0gc3RydG9sbChvcHRhcmcsIE5VTEwsIDApO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7bSYjMzk7OlxuLVx0XHRcdGNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0dXNhZ2UoYXJndlswXSk7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcbmluZGV4IGFkZjZjODQ4ZDZkODBmLi43Yjc1YTMzZjVjNDNmOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XG5AQCAtMTIsMTAgJiM0MzsxMiwxMyBAQCBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X3ZhcmlhbnRzXG4gZnJvbSBsaWIucHkgaW1wb3J0IEtzZnROYW1lZFZhcmlhbnQsIEtzZnRTa2lwRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIGJrZywgY21kLCBkZWZlciwgdGNcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IEV0aHRvb2xGYW1pbHksIE5sRXJyb3JcbiBcbiBcbiBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtNYWluIGZ1bmN0aW9uLiBSdW4gc29fdHh0aW1lIGFzIHNlbmRlciBhbmQgcmVjZWl2ZXIuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiYjNDM7XG4gICAgIHNsb3dfbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCYjMzk7S1NGVF9NQUNISU5FX1NMT1cmIzM5OylcbiBcbiAgICAgaWYgbm90IGhhc2F0dHIoY2ZnLCBcJiMzNDtiaW5fcmVtb3RlXCYjMzQ7KTpcbkBAIC0zOCw2ICYjNDM7NDEsMzQgQEAgZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKTpcbiAgICAgICAgIGNtZChjbWRfdHgpXG4gXG4gXG4mIzQzO2RlZiBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtDb25maWd1cmUgcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGV0aG5sID0gRXRodG9vbEZhbWlseSgpXG4mIzQzO1xuJiM0MzsgICAgdHJ5OlxuJiM0MzsgICAgICAgIHJpbmdzID0gZXRobmwucmluZ3NfZ2V0KHsmIzM5O2hlYWRlciYjMzk7OiB7JiMzOTtkZXYtaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9fSlcbiYjNDM7ICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3JpbmctZ2V0IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJiMzOTspIGZyb20gZVxuJiM0MztcbiYjNDM7ICAgIGlmICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7IG5vdCBpbiByaW5ncyBvciBcXFxuJiM0MzsgICAgICAgJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heCYjMzk7IG5vdCBpbiByaW5nczpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7cGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSYjMzk7KVxuJiM0MztcbiYjNDM7ICAgIGlmIHJpbmdzWyYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgmIzM5O10gXHUwMDNjIDUwXzAwMDpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7cGFjaW5nIG9mZmxvYWQgbWF4IGhvcml6b24gdG9vIHNtYWxsJiMzOTspXG4mIzQzO1xuJiM0MzsgICAgY3VyX2hvcml6b24gPSByaW5nc1smIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5O11cbiYjNDM7ICAgIG5ld19ob3Jpem9uID0gNTBfMDAwXG4mIzQzOyAgICBldGhubC5yaW5nc19zZXQoe1xuJiM0MzsgICAgICAgICYjMzk7aGVhZGVyJiMzOTs6IHsmIzM5O2Rldi1pbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sXG4mIzQzOyAgICAgICAgJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJiMzOTs6IG5ld19ob3Jpem9uLFxuJiM0MzsgICAgfSlcbiYjNDM7ICAgIGRlZmVyKGV0aG5sLnJpbmdzX3NldCwge1xuJiM0MzsgICAgICAgICYjMzk7aGVhZGVyJiMzOTs6IHsmIzM5O2Rldi1pbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sXG4mIzQzOyAgICAgICAgJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJiMzOTs6IGN1cl9ob3Jpem9uXG4mIzQzOyAgICB9KVxuJiM0MztcbiYjNDM7XG4gZGVmIF9xZGlzY19zZXR1cChpZm5hbWUsIHFkaXNjLCBvcHRhcmdzPVwmIzM0O1wmIzM0Oyk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1JlcGxhY2Ugcm9vdCBxZGlzYy4gUmVzdG9yZSB0aGUgb3JpZ2luYWwgYWZ0ZXIgdGhlIHRlc3QuXG4gXG5AQCAtNTYsNiAmIzQzOzg3LDcgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6XG4gICAgICAgICAgICAgW1wmIzM0O29uZV9wa3RcJiMzNDssIFwmIzM0O2EsMTBcJiMzNDssIFwmIzM0O2EsMTBcJiMzNDtdLFxuICAgICAgICAgICAgIFtcJiMzNDtpbl9vcmRlclwmIzM0OywgXCYjMzQ7YSwxMCxiLDIwXCYjMzQ7LCBcJiMzNDthLDEwLGIsMjBcJiMzNDtdLFxuICAgICAgICAgICAgIFtcJiMzNDtyZXZlcnNlX29yZGVyXCYjMzQ7LCBcJiMzNDthLDIwLGIsMTBcJiMzNDssIFwmIzM0O2IsMTAsYSwyMFwmIzM0O10sXG4mIzQzOyAgICAgICAgICAgIFtcJiMzNDtiZXlvbmRfaHdfaG9yaXpvblwmIzM0OywgXCYjMzQ7YSw3MFwmIzM0OywgXCYjMzQ7YSw3MFwmIzM0O10sXG4gICAgICAgICBdOlxuICAgICAgICAgICAgIG5hbWUgPSBmXCYjMzQ7dntpcHZlcn1fe3Rlc3RjYXNlWzBdfVwmIzM0O1xuICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQobmFtZSwgaXB2ZXIsIHRlc3RjYXNlWzFdLCB0ZXN0Y2FzZVsyXSlcbkBAIC02NCwxNSAmIzQzOzk2LDQyIEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxuIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8oY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIChmcSkgdGVzdHMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCYjMzQ7ZnFcJiMzNDspXG4gICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCYjMzQ7bW9ub1wmIzM0OywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIFRydWUpXG4gXG4gXG4mIzQzO0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4mIzQzO2RlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgZnEgdGVzdHMsIHdpdGggb2ZmbG9hZCBob3Jpem9uLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpXG4mIzQzO1xuJiM0MzsgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpXG4mIzQzOyAgICB0cnk6XG4mIzQzOyAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O2ZxXCYjMzQ7LCBcJiMzNDtvZmZsb2FkX2hvcml6b24gNTBtc1wmIzM0OylcbiYjNDM7ICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O25ldGRldiBkb2VzIG5vdCBzdXBwb3J0IG9mZmxvYWQuIHNraXBwaW5nXCYjMzQ7KSBmcm9tIGVcbiYjNDM7XG4mIzQzOyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gdXNlIG9ubHkgaHcgcGFjaW5nLCBleGNlcHQgYmV5b25kX2h3X2hvcml6b24uXG4mIzQzOyAgICBod19vbmx5ID0gXCYjMzQ7LWhcJiMzNDsgaWYgYXJnc190eCAhPSBcJiMzNDthLDcwXCYjMzQ7IGVsc2UgXCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwmIzM0O21vbm9cJiMzNDssIGlwdmVyLCBmXCYjMzQ7e2h3X29ubHl9IHthcmdzX3R4fVwmIzM0OywgYXJnc19yeCwgVHJ1ZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuJiM0MztkZWYgdGVzdF9zb190eHRpbWVfcGZpZm9mYXN0X21vbm9faHcoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyB0ZXN0cywgd2l0aG91dCBmcSBwYWNpbmcgc3cgYmFja3VwLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpXG4mIzQzO1xuJiM0MzsgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpXG4mIzQzOyAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCYjMzQ7cGZpZm9fZmFzdFwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gcGFzcywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uIHdpdGhvdXQgc3cgZmFsbGJhY2suXG4mIzQzOyAgICBleHBlY3RfcGFzcyA9IG5vdCBhcmdzX3R4ID09IFwmIzM0O2EsNzBcJiMzNDtcbiYjNDM7ICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCYjMzQ7bW9ub1wmIzM0OywgaXB2ZXIsIGZcJiMzNDstaCB7YXJnc190eH1cJiMzNDssIGFyZ3NfcngsIGV4cGVjdF9wYXNzKVxuJiM0MztcbiYjNDM7XG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfdGFpKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIGZxIHRlc3RzLCBidXQgcGFzcyBDTE9DS19UQUkgdG8gdGVzdCBjb252ZXJzaW9uLlwmIzM0O1wmIzM0O1wmIzM0O1xuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O2ZxXCYjMzQ7KVxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwmIzM0O3RhaVwmIzM0OywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIFRydWUpXG4gXG5AQCAtOTUsNyAmIzQzOzE1NCw2IEBAIGRlZiBfdGVzdF92YXJpYW50c19ldGYoKTpcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19ldGYoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZXRmKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9mYWlsKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBldGYgdGVzdHMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICB0cnk6XG4gICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCYjMzQ7ZXRmXCYjMzQ7LCBcJiMzNDtjbG9ja2lkIENMT0NLX1RBSSBkZWx0YSA0MDAwMDBcJiMzNDspXG4gICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbkBAIC0xMDgsNyAmIzQzOzE2NiwxMyBAQCBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7Qm9pbGVycGxhdGUga3NmdCBtYWluLlwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XG4gICAgICAgICBrc2Z0X3J1bihcbi0gICAgICAgICAgICBbdGVzdF9zb190eHRpbWVfZnFfbW9ubywgdGVzdF9zb190eHRpbWVfZnFfdGFpLCB0ZXN0X3NvX3R4dGltZV9ldGZdLFxuJiM0MzsgICAgICAgICAgICBbXG4mIzQzOyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV9tb25vLFxuJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3LFxuJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfdGFpLFxuJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZXRmLFxuJiM0MzsgICAgICAgICAgICBdLFxuICAgICAgICAgICAgIGFyZ3M9KGNmZywpLFxuICAgICAgICAgKVxuICAgICBrc2Z0X2V4aXQoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX0ZRJiMzNDssCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldGhubF9zZXRfcmluZ3MmIzM0OywKICAgICYjMzQ7cmluZ3NfZmlsbF9yZXBseSYjMzQ7LAogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCByaW5nIHBhcmFtZXRlciBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIG1vZGlmaWVzIGBzY2hfZnFgIHRvIHVzZSBpdC4gSXQgYWxzbyBhZGRzIGBTT19UWFRJTUVgIHN1cHBvcnQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbmV0d29ya2luZyBsb2dpYywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgcGFja2V0IGdlbmVyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1MWZkODJkYzNiM2U0OGNlN2U1OWNlODk3MDcxNzNmZTBhNDFkMjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAyMTo1MzowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCmluZGV4IDVkZDRkMWI1ZDk0YmJiLi40OGY0M2RkYTJlNmU1ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCkBAIC00NDgsNiAmIzQzOzQ0OCwxMiBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgIC0KICAgICAgICAgbmFtZTogaGRzLXRocmVzaC1tYXgKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgKJiM0MzsgICAgICAgIHR5cGU6IHUzMgogCiAgIC0KICAgICBuYW1lOiBtbS1zdGF0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QKaW5kZXggNTEyZjZkNmZhM2Q4ZjguLjNiOWNlMWM2ZTEwNTc4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0CkBAIC0xODMsNyAmIzQzOzE4Myw4IEBAIHN0cnVjdCBkZXZsaW5rX3BvcnQqICAgICAgICAgICAgICAgIGRldmxpbmtfcG9ydAogc3RydWN0IGRwbGxfcGluKiAgICAgICAgICAgICAgICAgICAgZHBsbF9waW4KIHN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIHBhZ2VfcG9vbHMKIHN0cnVjdCBkaW1faXJxX21vZGVyKiAgICAgICAgICAgICAgIGlycV9tb2RlcgotdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24KJiM0Mzt1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uCiYjNDM7dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24KIHN0cnVjdF9uYXBpX2NvbmZpZyogICAgICAgICAgICAgICAgIG5hcGlfY29uZmlnCiB1bnNpZ25lZF9sb25nICAgICAgICAgICAgICAgICAgICAgICBncm9fZmx1c2hfdGltZW91dAogdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFwaV9kZWZlcl9oYXJkX2lycXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jCmluZGV4IGJiOTlkOWU3YzY1ZDUxLi41ZGRmMzQ3OTI3ZGMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jCkBAIC0xODAxLDcgJiM0MzsxODAxLDggQEAgc3RhdGljIHZvaWQgaWRwZl9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWRwZl9ldGh0b29sX29wcyA9IHsKIAkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAogCQkJCSAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsCi0JLnN1cHBvcnRlZF9yaW5nX3BhcmFtcwk9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQsCiYjNDM7CS5zdXBwb3J0ZWRfcmluZ19wYXJhbXMJPSBFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElUIHwKJiM0MzsJCQkJICBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sCiAJLmdldF9tc2dsZXZlbAkJPSBpZHBmX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IGlkcGZfc2V0X21zZ2xldmVsLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jCmluZGV4IGNmOTY2ZmU2Yzc1OWNlLi5kZTQxNzBjMmFhM2JhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwpAQCAtODg4LDYgJiM0Mzs4ODgsMTEgQEAgc3RhdGljIGludCBpZHBmX2NmZ19uZXRkZXYoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCW5ldGRldi0mZ3Q7bWluX210dSA9IEVUSF9NSU5fTVRVOwogCW5ldGRldi0mZ3Q7bWF4X210dSA9IHZwb3J0LSZndDttYXhfbXR1OwogCiYjNDM7CWlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LSZndDtkZmx0X3F2X3JzcmMudHhxX21vZGVsKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaWRwZl9pc19jYXBfZW5hKGFkYXB0ZXIsIElEUEZfT1RIRVJfQ0FQUywKJiM0MzsJCQkgICAgVklSVENITkwyX0NBUF9TUExJVFFfUVNDSEVEKSkKJiM0MzsJCW5ldGRldi0mZ3Q7bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSAxMjgwMDA7CiYjNDM7CiAJZGZsdF9mZWF0dXJlcyA9IE5FVElGX0ZfU0cJfAogCQkJTkVUSUZfRl9ISUdIRE1BOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwppbmRleCA1NjZiMDhjYTNhNmNiMS4uMWNjZmFlYjM1MTkzNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwpAQCAtMSw2ICYjNDM7MSw4IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiAvKiBDb3B5cmlnaHQgKEMpIDIwMjMgSW50ZWwgQ29ycG9yYXRpb24gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRwb2xsLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O2lkcGYuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2lkcGZfcHRwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpZHBmX3ZpcnRjaG5sLmgmIzM0OwpAQCAtMjQwOCw5ICYjNDM7MjQxMCwxMyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYywKIAkJCQkgICAgc3RydWN0IGlkcGZfdHhfc3BsaXRxX3BhcmFtcyAqcGFyYW1zLAogCQkJCSAgICB1MTYgdGRfY21kLCB1MTYgc2l6ZSkKIHsKLQkqKHUzMiAqKSZhbXA7ZGVzYy0mZ3Q7Zmxvdy5xdzEuY21kX2R0eXBlID0gKHU4KShwYXJhbXMtJmd0O2R0eXBlIHwgdGRfY21kKTsKJiM0MzsJKihfX2xlMzIgKikmYW1wO2Rlc2MtJmd0O2Zsb3cucXcxLmNtZF9kdHlwZSA9IGNwdV90b19sZTMyKCh1OCkocGFyYW1zLSZndDtkdHlwZSB8IHRkX2NtZCkpOwogCWRlc2MtJmd0O2Zsb3cucXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoKHUxNilzaXplKTsKIAlkZXNjLSZndDtmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtJmd0O2NvbXBsX3RhZyk7CiYjNDM7CiYjNDM7CWRlc2MtJmd0O2Zsb3cucXcxLnRzWzBdID0gcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMF07CiYjNDM7CWRlc2MtJmd0O2Zsb3cucXcxLnRzWzFdID0gcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMV07CiYjNDM7CWRlc2MtJmd0O2Zsb3cucXcxLnRzWzJdID0gcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMl07CiB9CiAKIC8qKgpAQCAtMzAxMSw2ICYjNDM7MzAxNyw1OSBAQCBzdGF0aWMgYm9vbCBpZHBmX3R4X3NwbGl0cV9uZWVkX3JlKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp0eF9xKQogCXJldHVybiBnYXAgJmd0Oz0gSURQRl9UWF9TUExJVFFfUkVfTUlOX0dBUDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnR4X3BhcmFtcykKJiM0Mzt7CiYjNDM7CWNvbnN0IGludCB0c19ncmFuX3BvdzIgPSA5OwomIzQzOwl1NjQgdHMsIG5vdzsKJiM0MzsKJiM0MzsJLyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi8KJiM0MzsJaWYgKG5ldHBvbGxfdHhfcnVubmluZyhza2ItJmd0O2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN3aXRjaCAoc2tiLSZndDt0c3RhbXBfdHlwZSkgewomIzQzOwljYXNlIFNLQl9DTE9DS19SRUFMVElNRToKJiM0MzsJCXRzID0ga3RpbWVfdG9fbnMoa3RpbWVfYWRkKHNrYi0mZ3Q7dHN0YW1wLAomIzQzOwkJCQkJICAga3RpbWVfbW9ub190b19hbnkoMCwgVEtfT0ZGU19UQUkpIC0KJiM0MzsJCQkJCSAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNLQl9DTE9DS19NT05PVE9OSUM6CiYjNDM7CQl0cyA9IGt0aW1lX3RvX25zKGt0aW1lX21vbm9fdG9fYW55KHNrYi0mZ3Q7dHN0YW1wLCBUS19PRkZTX1RBSSkpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgU0tCX0NMT0NLX1RBSToKJiM0MzsJCXRzID0ga3RpbWVfdG9fbnMoc2tiLSZndDt0c3RhbXApOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJbm93ID0ga3RpbWVfZ2V0X2Nsb2NrdGFpX25zKCk7CiYjNDM7CWlmICh0cyAmbHQ7IG5vdykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogYmV5b25kIG9mZmxvYWQgaG9yaXpvbj8gc2V0IG92ZXJmbG93IGJpdCBvbmx5ICovCiYjNDM7CWlmICh0cyAmZ3Q7IG5vdyAmIzQzOyAoKHU2NClza2ItJmd0O2Rldi0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbiAqIE5TRUNfUEVSX1VTRUMpKSB7CiYjNDM7CQl0eF9wYXJhbXMtJmd0O29mZmxvYWQuZGVzY190c1syXSA9IDEgJmx0OyZsdDsgNzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl0cyAmZ3Q7Jmd0Oz0gdHNfZ3Jhbl9wb3cyOwomIzQzOwomIzQzOwkvKiAwIGlzIHZhbGlkIDI0YiB0aW1lc3RhbXAsIGJ1dCBhbHNvIG1lYW5zIGZpZWxkIHVuc2V0LgomIzQzOwkgKiBBZGQgNTEyIG5zICh0c19ncmFuX3BvdzIpIHRvIGF2b2lkIHRoaXMgY2FzZQomIzQzOwkgKi8KJiM0MzsJaWYgKCh0cyAmYW1wOyAweDdmZmZmZikgPT0gMCkgewomIzQzOwkJdHhfcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMF0gPSAxOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXR4X3BhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgJmFtcDsgMHhmZjsKJiM0MzsJdHhfcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMV0gPSAodHMgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsJdHhfcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMl0gPSAoKHRzICZndDsmZ3Q7IDE2KSAmYW1wOyAweDdmKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGlkcGZfdHhfc3BsaXRxX2ZyYW1lIC0gU2VuZHMgYnVmZmVyIG9uIFR4IHJpbmcgdXNpbmcgZmxleCBkZXNjcmlwdG9ycwogICogQHNrYjogc2VuZCBidWZmZXIKQEAgLTMwOTcsNiAmIzQzOzMxNTYsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCiAKIAkJdHhfcGFyYW1zLmR0eXBlID0gSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFOwogCQl0eF9wYXJhbXMuZW9wX2NtZCA9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QOwomIzQzOwomIzQzOwkJaWYgKHNrYi0mZ3Q7dHN0YW1wICZhbXA7JmFtcDsgc2tiLSZndDtkZXYtJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pCiYjNDM7CQkJaWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZSh0eF9xLCBza2IsICZhbXA7dHhfcGFyYW1zKTsKJiM0MzsKIAkJLyogU2V0IHRoZSBSRSBiaXQgdG8gcGVyaW9kaWNhbGx5ICYjMzQ7Y2xlYW4mIzM0OyB0aGUgZGVzY3JpcHRvciByaW5nLgogCQkgKiBNSU5fR0FQIGlzIHNldCB0byBNSU5fUklORyBzaXplIHRvIGVuc3VyZSBpdCB3aWxsIGJlIHNldCBhdAogCQkgKiBsZWFzdCBvbmNlIGVhY2ggdGltZSBhcm91bmQgdGhlIHJpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaAppbmRleCA0YmU1YjNiNmQzZWQyYi4uODY1NDA4YjU3YjBkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaApAQCAtMTYxLDYgJiM0MzsxNjEsNyBAQCB1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyB7CiAgKiBAdHNvX3NlZ3M6IE51bWJlciBvZiBzZWdtZW50cyB0byBiZSBzZW50CiAgKiBAdHNvX2hkcl9sZW46IExlbmd0aCBvZiBoZWFkZXJzIHRvIGJlIGR1cGxpY2F0ZWQKICAqIEB0ZF9jbWQ6IENvbW1hbmQgZmllbGQgdG8gYmUgaW5zZXJ0ZWQgaW50byBkZXNjcmlwdG9yCiYjNDM7ICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcAogICovCiBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7CiAJdTMyIHR4X2ZsYWdzOwpAQCAtMTc0LDYgJiM0MzsxNzUsNyBAQCBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7CiAJdTE2IHRzb19oZHJfbGVuOwogCiAJdTE2IHRkX2NtZDsKJiM0MzsJdTggZGVzY190c1szXTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCA1ZDQ5MWE5ODI2NWVmOS4uYWRlZWJiZjUzZGFkZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC04NSw2ICYjNDM7ODUsOCBAQCBlbnVtIHsKICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlcgogICogQGhkc190aHJlc2g6IFBhY2tldCBzaXplIHRocmVzaG9sZCBmb3IgaGVhZGVyIGRhdGEgc3BsaXQgKEhEUykKICAqIEBoZHNfdGhyZXNoX21heDogTWF4aW11bSBzdXBwb3J0ZWQgc2V0dGluZyBmb3IgQGhkc190aHJlc2hvbGQKJiM0MzsgKiBAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjCiYjNDM7ICogQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjCiAgKgogICovCiBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHsKQEAgLTk3LDYgJiM0Mzs5OSw4IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gewogCXUzMgl0eF9wdXNoX2J1Zl9tYXhfbGVuOwogCXUzMgloZHNfdGhyZXNoOwogCXUzMgloZHNfdGhyZXNoX21heDsKJiM0MzsJdTMyCXBhY2luZ19vZmZsb2FkX2hvcml6b247CiYjNDM7CXUzMgltYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKIH07CiAKIC8qKgpAQCAtMTA4LDYgJiM0MzsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHsKICAqIEBFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTjogY2FwdHVyZSBmb3Igc2V0dGluZyB0eF9wdXNoX2J1Zl9sZW4KICAqIEBFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElUOiBjYXB0dXJlIGZvciBzZXR0aW5nIHRjcF9kYXRhX3NwbGl0CiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2gKJiM0MzsgKiBARVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OOiBjYXB0dXJlIGZvciBzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b24KICAqLwogZW51bSBldGh0b29sX3N1cHBvcnRlZF9yaW5nX3BhcmFtIHsKIAlFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU4JCT0gQklUKDApLApAQCAtMTE3LDYgJiM0MzsxMjIsNyBAQCBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0gewogCUVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOCT0gQklUKDQpLAogCUVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQJCT0gQklUKDUpLAogCUVUSFRPT0xfUklOR19VU0VfSERTX1RIUlMJCT0gQklUKDYpLAomIzQzOwlFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04JPSBCSVQoNyksCiB9OwogCiAjZGVmaW5lIF9fRVRIX1JTU19IQVNIX0JJVChiaXQpCSgodTMyKTEgJmx0OyZsdDsgKGJpdCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA4ZGIyNWI3OTU3M2UzYy4uM2MyZWQ0NWI1NWRjYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMjEyOSw3ICYjNDM7MjEyOSw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKglAZHBsbF9waW46IFBvaW50ZXIgdG8gdGhlIFN5bmNFIHNvdXJjZSBwaW4gb2YgYSBEUExMIHN1YnN5c3RlbSwKICAqCQkgICB3aGVyZSB0aGUgY2xvY2sgaXMgcmVjb3ZlcmVkLgogICoKLSAqCUBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IEVEVCBvZmZsb2FkIGhvcml6b24gaW4gbnNlYy4KJiM0MzsgKglAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogYWN0aXZlIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy4KJiM0MzsgKglAbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b246IG1heCBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIGluIHVzZWMuCiAgKglAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSQogICoJCSAgICAgIHNldHRpbmdzLgogICoJQG51bV9uYXBpX2NvbmZpZ3M6CW51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cywKQEAgLTI1NTIsNyAmIzQzOzI1NTMsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7CiAJLyoqIEBpcnFfbW9kZXI6IGRpbSBwYXJhbWV0ZXJzIHVzZWQgaWYgSVNfRU5BQkxFRChDT05GSUdfRElNTElCKS4gKi8KIAlzdHJ1Y3QgZGltX2lycV9tb2RlcgkqaXJxX21vZGVyOwogCi0JdTY0CQkJbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247CiYjNDM7CXUzMgkJCXBhY2luZ19vZmZsb2FkX2hvcml6b247CiYjNDM7CXUzMgkJCW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOwogCXN0cnVjdCBuYXBpX2NvbmZpZwkqbmFwaV9jb25maWc7CiAJdTMyCQkJbnVtX25hcGlfY29uZmlnczsKIAl1MzIJCQluYXBpX2RlZmVyX2hhcmRfaXJxczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCmluZGV4IDgxMzRiYWY3ODYwZjNjLi42ZjFhMmZhMzYxNTdkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCkBAIC0xOTMsNiAmIzQzOzE5Myw4IEBAIGVudW0gewogCUVUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYLAogCUVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILAogCUVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCwKJiM0MzsJRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sCiYjNDM7CUVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCwKIAogCV9fRVRIVE9PTF9BX1JJTkdTX0NOVCwKIAlFVEhUT09MX0FfUklOR1NfTUFYID0gKF9fRVRIVE9PTF9BX1JJTkdTX0NOVCAtIDEpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTIwMSw2ICYjNDM7MjAxLDcgQEAKIAlwZihTVklEX1JORCkJCS8qIFJhbmRvbSBTVkxBTiBJRCAqLwkJCVwKIAlwZihOT0RFKQkJLyogTm9kZSBtZW1vcnkgYWxsb2MqLwkJCVwKIAlwZihTSEFSRUQpCQkvKiBTaGFyZWQgU0tCICovCQkJXAomIzQzOwlwZihUWFRJTUUpCQkvKiBTT19UWFRJTUUgc3VwcG9ydCAqLwkJCVwKIAogI2RlZmluZSBwZihmbGFnKQkJZmxhZyMjX1NISUZULAogZW51bSBwa3RfZmxhZ3MgewpAQCAtMjkxLDYgJiM0MzsyOTIsMTAgQEAgc3RydWN0IHBrdGdlbl9kZXYgewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXU2NCBkZWxheTsJCS8qIG5hbm8tc2Vjb25kcyAqLwogCiYjNDM7CS8qIFRYVElNRSBzdXBwb3J0ICovCiYjNDM7CXU2NCB0eHRpbWVfZGVsYXk7CS8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi8KJiM0MzsJY2xvY2tpZF90IHR4dGltZV9jbG9ja2lkOyAvKiBjbG9ja2lkIGZvciBTT19UWFRJTUUgKi8KJiM0MzsKIAlfX3U2NCBjb3VudDsJCS8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovCiAJX191NjQgc29mYXI7CQkvKiBIb3cgbWFueSBwa3RzIHdlJiMzOTt2ZSBzZW50IHNvIGZhciAqLwogCV9fdTY0IHR4X2J5dGVzOwkJLyogSG93IG1hbnkgYnl0ZXMgd2UmIzM5O3ZlIHRyYW5zbWl0dGVkICovCkBAIC02NjYsNiAmIzQzOzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogCWlmIChwa3RfZGV2LSZndDtub2RlICZndDs9IDApCiAJCXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgbm9kZTogJWRcbiYjMzQ7LCBwa3RfZGV2LSZndDtub2RlKTsKIAomIzQzOwlpZiAocGt0X2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgRl9UWFRJTUUpIHsKJiM0MzsJCWNsb2NraWRfdCBjbG9ja2lkID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O3R4dGltZV9jbG9ja2lkKTsKJiM0MzsKJiM0MzsJCXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgdHh0aW1lX2RlbGF5OiAlbGx1XG4mIzM0OywKJiM0MzsJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtJmd0O3R4dGltZV9kZWxheSk7CiYjNDM7CQlzZXFfcHJpbnRmKHNlcSwgJiMzNDsgICAgIHR4dGltZV9jbG9ja2lkOiAlc1xuJiMzNDssCiYjNDM7CQkJICAgY2xvY2tpZCA9PSBDTE9DS19NT05PVE9OSUMgPyAmIzM0O21vbm90b25pYyYjMzQ7IDoKJiM0MzsJCQkgICBjbG9ja2lkID09IENMT0NLX1JFQUxUSU1FID8gJiMzNDtyZWFsdGltZSYjMzQ7IDoKJiM0MzsJCQkgICBjbG9ja2lkID09IENMT0NLX1RBSSA/ICYjMzQ7dGFpJiMzNDsgOiAmIzM0O3Vua25vd24mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKIAlpZiAocGt0X2Rldi0mZ3Q7eG1pdF9tb2RlID09IE1fTkVUSUZfUkVDRUlWRSkKIAkJc2VxX3B1dHMoc2VxLCAmIzM0OyAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXG4mIzM0Oyk7CiAJZWxzZSBpZiAocGt0X2Rldi0mZ3Q7eG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVCkKQEAgLTExNDEsNiAmIzQzOzExNTcsNTAgQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0mZ3Q7ZGVsYXkpOwogCQlyZXR1cm4gY291bnQ7CiAJfQomIzQzOwlpZiAoIXN0cmNtcChuYW1lLCAmIzM0O3R4dGltZV9kZWxheSYjMzQ7KSkgewomIzQzOwkJbWF4ID0gbWluKDEwLCBjb3VudCAtIGkpOwomIzQzOwkJbGVuID0gbnVtX2FyZygmYW1wO3VzZXJfYnVmZmVyW2ldLCBtYXgsICZhbXA7dmFsdWUpOwomIzQzOwkJaWYgKGxlbiAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIGxlbjsKJiM0MzsKJiM0MzsJCS8qIGluIHF1ZXVlX3htaXQgbW9kZSBmcSBtYXkgY2xlYXIgdHN0YW1wLCBkbyBub3QgcmV1c2Ugc2tiICovCiYjNDM7CQlpZiAodmFsdWUgJmd0OyAwICZhbXA7JmFtcDsgcGt0X2Rldi0mZ3Q7Y2xvbmVfc2tiICZndDsgMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2RlbGF5LCAodTY0KXZhbHVlKTsKJiM0MzsJCXNwcmludGYocGdfcmVzdWx0LCAmIzM0O09LOiB0eHRpbWVfZGVsYXk9JWxsdSYjMzQ7LAomIzQzOwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdmFsdWUpOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwl9CiYjNDM7CWlmICghc3RyY21wKG5hbWUsICYjMzQ7dHh0aW1lX2Nsb2NraWQmIzM0OykpIHsKJiM0MzsJCWNoYXIgY2xvY2tzdHJbMzJdOwomIzQzOwkJY2xvY2tpZF90IGNsazsKJiM0MzsKJiM0MzsJCW1lbXNldChjbG9ja3N0ciwgMCwgc2l6ZW9mKGNsb2Nrc3RyKSk7CiYjNDM7CQltYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7CiYjNDM7CQlsZW4gPSBzdHJuX2xlbigmYW1wO3VzZXJfYnVmZmVyW2ldLCBtYXgpOwomIzQzOwkJaWYgKGxlbiAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIGxlbjsKJiM0MzsKJiM0MzsJCWlmIChjb3B5X2Zyb21fdXNlcihjbG9ja3N0ciwgJmFtcDt1c2VyX2J1ZmZlcltpXSwgbGVuKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJCWlmICghc3RyY21wKGNsb2Nrc3RyLCAmIzM0O21vbm90b25pYyYjMzQ7KSkgewomIzQzOwkJCWNsayA9IENMT0NLX01PTk9UT05JQzsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNtcChjbG9ja3N0ciwgJiMzNDtyZWFsdGltZSYjMzQ7KSkgewomIzQzOwkJCWNsayA9IENMT0NLX1JFQUxUSU1FOwomIzQzOwkJfSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCAmIzM0O3RhaSYjMzQ7KSkgewomIzQzOwkJCWNsayA9IENMT0NLX1RBSTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3ByaW50ZihwZ19yZXN1bHQsICYjMzQ7RVJST1I6IHVua25vd24gY2xvY2tpZCAmIzM5OyVzJiMzOTsmIzM0OywKJiM0MzsJCQkJY2xvY2tzdHIpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc3ByaW50ZihwZ19yZXN1bHQsICYjMzQ7T0s6IHR4dGltZV9jbG9ja2lkPSVzJiMzNDssIGNsb2Nrc3RyKTsKJiM0MzsJCVdSSVRFX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2Nsb2NraWQsIGNsayk7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KIAlpZiAoIXN0cmNtcChuYW1lLCAmIzM0O3JhdGUmIzM0OykpIHsKIAkJbWF4ID0gbWluKDEwLCBjb3VudCAtIGkpOwogCQlsZW4gPSBudW1fYXJnKCZhbXA7dXNlcl9idWZmZXJbaV0sIG1heCwgJmFtcDt2YWx1ZSk7CkBAIC0xMjM4LDYgJiM0MzsxMjk4LDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQlpZiAodmFsdWUgJmd0OyAwICZhbXA7JmFtcDsgKHBrdF9kZXYtJmd0O25faW1peF9lbnRyaWVzICZndDsgMCB8fAogCQkJCSAgIShwa3RfZGV2LSZndDtmbGFncyAmYW1wOyBGX1NIQVJFRCkpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlpZiAodmFsdWUgJmd0OyAwICZhbXA7JmFtcDsgUkVBRF9PTkNFKHBrdF9kZXYtJmd0O3R4dGltZV9kZWxheSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJcGt0X2Rldi0mZ3Q7Y2xvbmVfc2tiID0gdmFsdWU7CiAKQEAgLTIzMjEsNiAmIzQzOzIzODMsMjEgQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIH0KIAogCiYjNDM7c3RhdGljIGt0aW1lX3Qga3RpbWVfZ2V0X2Nsb2NrKGNsb2NraWRfdCBjbG9ja2lkKQomIzQzO3sKJiM0MzsJc3dpdGNoIChjbG9ja2lkKSB7CiYjNDM7CWNhc2UgQ0xPQ0tfUkVBTFRJTUU6CiYjNDM7CQlyZXR1cm4ga3RpbWVfZ2V0X3JlYWwoKTsKJiM0MzsJY2FzZSBDTE9DS19NT05PVE9OSUM6CiYjNDM7CQlyZXR1cm4ga3RpbWVfZ2V0KCk7CiYjNDM7CWNhc2UgQ0xPQ0tfVEFJOgomIzQzOwkJcmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJV0FSTl9PTl9PTkNFKDEpOwomIzQzOwkJcmV0dXJuIGt0aW1lX2dldCgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc3BpbihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldiwga3RpbWVfdCBzcGluX3VudGlsKQogewogCWt0aW1lX3Qgc3RhcnRfdGltZSwgZW5kX3RpbWU7CkBAIC0zNTEwLDcgJiM0MzszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAogc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiB7Ci0JYm9vbCBza2Jfc2hhcmVkID0gISEoUkVBRF9PTkNFKHBrdF9kZXYtJmd0O2ZsYWdzKSAmYW1wOyBGX1NIQVJFRCk7CiYjNDM7CXUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LSZndDtmbGFncyk7CiYjNDM7CWJvb2wgc2tiX3NoYXJlZCA9ICEhKGZsYWdzICZhbXA7IEZfU0hBUkVEKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtJmd0O29kZXY7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCXVuc2lnbmVkIGludCBidXJzdCA9IDE7CkBAIC0zNTQ1LDYgJiM0MzszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiAJLyogSWYgbm8gc2tiIG9yIGNsb25lIGNvdW50IGV4aGF1c3RlZCB0aGVuIGdldCBuZXcgb25lICovCiAJaWYgKCFwa3RfZGV2LSZndDtza2IgfHwgKHBrdF9kZXYtJmd0O2xhc3Rfb2sgJmFtcDsmYW1wOwogCQkJICAgICAgJiM0MzsmIzQzO3BrdF9kZXYtJmd0O2Nsb25lX2NvdW50ICZndDs9IGNsb25lX3NrYikpIHsKJiM0MzsJCXU2NCB0eHRpbWVfZGVsYXk7CiYjNDM7CiAJCS8qIGJ1aWxkIGEgbmV3IHBrdCAqLwogCQlrZnJlZV9za2IocGt0X2Rldi0mZ3Q7c2tiKTsKIApAQCAtMzU1Nyw2ICYjNDM7MzYzNywxNiBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAkJfQogCQlwa3RfZGV2LSZndDtsYXN0X3BrdF9zaXplID0gcGt0X2Rldi0mZ3Q7c2tiLSZndDtsZW47CiAJCXBrdF9kZXYtJmd0O2Nsb25lX2NvdW50ID0gMDsJLyogcmVzZXQgY291bnRlciAqLwomIzQzOwomIzQzOwkJdHh0aW1lX2RlbGF5ID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O3R4dGltZV9kZWxheSk7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgRl9UWFRJTUUgJmFtcDsmYW1wOyB0eHRpbWVfZGVsYXkpIHsKJiM0MzsJCQljbG9ja2lkX3QgY2xrID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O3R4dGltZV9jbG9ja2lkKTsKJiM0MzsJCQlrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSwKJiM0MzsJCQkJCQkgICAgICB0eHRpbWVfZGVsYXkpOwomIzQzOwomIzQzOwkJCXNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtJmd0O3NrYiwgdHh0aW1lLAomIzQzOwkJCQkJCQkgY2xrKTsKJiM0MzsJCX0KIAl9CiAKIAlpZiAocGt0X2Rldi0mZ3Q7ZGVsYXkgJmFtcDsmYW1wOyBwa3RfZGV2LSZndDtsYXN0X29rKQpAQCAtMzg2OSw2ICYjNDM7Mzk1OSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSkKIAlwa3RfZGV2LSZndDtidXJzdCA9IDE7CiAJcGt0X2Rldi0mZ3Q7bm9kZSA9IE5VTUFfTk9fTk9ERTsKIAlwa3RfZGV2LSZndDtmbGFncyA9IEZfU0hBUkVEOwkvKiBTS0Igc2hhcmVkIGJ5IGRlZmF1bHQgKi8KJiM0MzsJcGt0X2Rldi0mZ3Q7dHh0aW1lX2Nsb2NraWQgPSBDTE9DS19NT05PVE9OSUM7CiAKIAllcnIgPSBwa3RnZW5fc2V0dXBfZGV2KHQtJmd0O25ldCwgcGt0X2RldiwgaWZuYW1lKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAzMWM2NWE1NDVhMTA3Yy4uMmM3YTI0NWM1ZmZjMmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0yMTU1LDcgJiM0MzsyMTU1LDcgQEAgc3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsCiAJICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9UU09fTUFYX1NFR1MsCiAJCQlSRUFEX09OQ0UoZGV2LSZndDt0c29fbWF4X3NlZ3MpKSB8fAogCSAgICBubGFfcHV0X3VpbnQoc2tiLCBJRkxBX01BWF9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLAotCQkJIFJFQURfT05DRShkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkgfHwKJiM0MzsJCQkgKHU2NClSRUFEX09OQ0UoZGV2LSZndDttYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fAogI2lmZGVmIENPTkZJR19SUFMKIAkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsCiAJCQlSRUFEX09OQ0UoZGV2LSZndDtudW1fcnhfcXVldWVzKSkgfHwKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL2NvbW1vbi5jIGIvbmV0L2V0aHRvb2wvY29tbW9uLmMKaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjVjMjMyM2FhYTAyYjZiIDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9jb21tb24uYwpAQCAtOTU0LDYgJiM0Mzs5NTQsOSBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkvKiBEcml2ZXIgZ2l2ZXMgdXMgY3VycmVudCBzdGF0ZSwgd2Ugd2FudCB0byByZXR1cm4gY3VycmVudCBjb25maWcgKi8KIAlrcGFyYW0tJmd0O3RjcF9kYXRhX3NwbGl0ID0gZGV2LSZndDtjZmctJmd0O2hkc19jb25maWc7CiAJa3BhcmFtLSZndDtoZHNfdGhyZXNoID0gZGV2LSZndDtjZmctJmd0O2hkc190aHJlc2g7CiYjNDM7CiYjNDM7CWtwYXJhbS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKJiM0MzsJa3BhcmFtLSZndDttYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi0mZ3Q7bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247CiB9CiAKIHN0YXRpYyB2b2lkIGV0aHRvb2xfaW5pdF90c2luZm8oc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pCmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKaW5kZXggM2U5NjlhMDcwZjlmZTQuLmFlN2I2NTFjNjU4Zjc0IDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5oCkBAIC00OTQsNyAmIzQzOzQ5NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9mZWF0dXJlc19zZXRfcG9saWN5W0VUSFRPT0xfQV9GRUFUVVJFU19XQU5UCiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19IRUFERVIgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19GTEFHUyAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19nZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRUFERVIgJiM0MzsgMV07Ci1leHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVggJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0hFQURFUiAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jaGFubmVsc19zZXRfcG9saWN5W0VUSFRPT0xfQV9DSEFOTkVMU19DT01CSU5FRF9DT1VOVCAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jb2FsZXNjZV9nZXRfcG9saWN5W0VUSFRPT0xfQV9DT0FMRVNDRV9IRUFERVIgJiM0MzsgMV07CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9yaW5ncy5jIGIvbmV0L2V0aHRvb2wvcmluZ3MuYwppbmRleCA5MDU0Yzg5YzVkN2JiMi4uNTIxNTg1NzJmZTEwYzAgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL3JpbmdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcmluZ3MuYwpAQCAtNDIsNiAmIzQzOzQyLDggQEAgc3RhdGljIGludCByaW5nc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKIAogCWRhdGEtJmd0O2tlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtJmd0O2NmZy0mZ3Q7aGRzX2NvbmZpZzsKIAlkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggPSBkZXYtJmd0O2NmZy0mZ3Q7aGRzX3RocmVzaDsKJiM0MzsJZGF0YS0mZ3Q7a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LSZndDtwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOwomIzQzOwlkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LSZndDttYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKIAogCWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9yaW5ncGFyYW0oZGV2LCAmYW1wO2RhdGEtJmd0O3JpbmdwYXJhbSwKIAkJCQkJJmFtcDtkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLSZndDtleHRhY2spOwpAQCAtNjksNyAmIzQzOzcxLDkgQEAgc3RhdGljIGludCByaW5nc19yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiAJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovCiAJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOX01BWCAqLwogCSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogX1JJTkdTX0hEU19USFJFU0ggKi8KLQkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBfUklOR1NfSERTX1RIUkVTSF9NQVgqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIF9SSU5HU19IRFNfVEhSRVNIX01BWCAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCAqLwogfQogCiBzdGF0aWMgaW50IHJpbmdzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEyMSw3ICYjNDM7MTI1LDEyIEBAIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsCiAJCQkgIGtyLSZndDtoZHNfdGhyZXNoKSB8fAogCSAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLAotCQkJICBrci0mZ3Q7aGRzX3RocmVzaF9tYXgpKSkpCiYjNDM7CQkJICBrci0mZ3Q7aGRzX3RocmVzaF9tYXgpKSkgfHwKJiM0MzsJICAgICgoc3VwcG9ydGVkX3JpbmdfcGFyYW1zICZhbXA7IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgJmFtcDsmYW1wOwomIzQzOwkgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLAomIzQzOwkJCSAga3ItJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8CiYjNDM7CSAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLAomIzQzOwkJCSAga3ItJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJcmV0dXJuIDA7CkBAIC0xNDQsNiAmIzQzOzE1Myw3IEBAIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbXSA9IHsKIAlbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdCQk9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgMSksCiAJW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAogc3RhdGljIGludApAQCAtMTc3LDYgJiM0MzsxODcsMTQgQEAgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKG9wcy0mZ3Q7c3VwcG9ydGVkX3JpbmdfcGFyYW1zICZhbXA7IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLAomIzQzOwkJCQkgICAgJiMzNDtzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaXMgbm90IHN1cHBvcnRlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmICh0YltFVEhUT09MX0FfUklOR1NfQ1FFX1NJWkVdICZhbXA7JmFtcDsKIAkgICAgIShvcHMtJmd0O3N1cHBvcnRlZF9yaW5nX3BhcmFtcyAmYW1wOyBFVEhUT09MX1JJTkdfVVNFX0NRRV9TSVpFKSkgewogCQlOTF9TRVRfRVJSX01TR19BVFRSKGluZm8tJmd0O2V4dGFjaywKQEAgLTI0Niw2ICYjNDM7MjY0LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCQkgdGJbRVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl0sICZhbXA7bW9kKTsKIAlldGhubF91cGRhdGVfdTMyKCZhbXA7a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLAogCQkJIHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgJmFtcDttb2QpOwomIzQzOwlldGhubF91cGRhdGVfdTMyKCZhbXA7a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLAomIzQzOwkJCSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sICZhbXA7bW9kKTsKIAlpZiAoIW1vZCkKIAkJcmV0dXJuIDA7CiAKQEAgLTI4MSw2ICYjNDM7MzAxLDkgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1RYXTsKIAllbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggJmd0OyBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KQogCQllcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTsKJiM0MzsJZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICZndDsKJiM0MzsJCSBrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKQomIzQzOwkJZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07CiAJZWxzZQogCQllcnJfYXR0ciA9IE5VTEw7CiAJaWYgKGVycl9hdHRyKSB7CkBAIC0zMDIsNiAmIzQzOzMyNSw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJcmV0ID0gZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7c2V0X3JpbmdwYXJhbShkZXYsICZhbXA7cmluZ3BhcmFtLAogCQkJCQkgICAgICAmYW1wO2tlcm5lbF9yaW5ncGFyYW0sIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJZGV2LSZndDtwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0ga2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOwomIzQzOwogCXJldHVybiByZXQgJmx0OyAwID8gcmV0IDogMTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jCmluZGV4IDdjYWUwODJhOTg0NzIxLi4zNjAwNmY2OWE4NzUzNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnEuYwpAQCAtMzk5LDYgJiM0MzszOTksMTEgQEAgc3RhdGljIHN0cnVjdCBmcV9mbG93ICpmcV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgIFJFQURfT05DRShzay0mZ3Q7c2tfcGFjaW5nX3N0YXR1cykgIT0gU0tfUEFDSU5HX0ZRKQogCQkJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtzay0mZ3Q7c2tfcGFjaW5nX3N0YXR1cywKIAkJCQkJICBTS19QQUNJTkdfRlEpOwomIzQzOwomIzQzOwkJaWYgKHEtJmd0O29mZmxvYWRfaG9yaXpvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZnFfc2tiX2NiKHNrYiktJmd0O3RpbWVfdG9fc2VuZCAmbHQ7PSBub3cpCiYjNDM7CQkJc2tiLSZndDt0c3RhbXAgPSAwOwomIzQzOwogCQlyZXR1cm4gJmFtcDtxLSZndDtpbnRlcm5hbDsKIAl9CiAKQEAgLTcwNyw2ICYjNDM7NzEyLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKQogCXN0cnVjdCBmcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCBmcV9wZXJiYW5kX2Zsb3dzICpwYmFuZDsKIAlzdHJ1Y3QgZnFfZmxvd19oZWFkICpoZWFkOwomIzQzOwl1NjQgdGltZV9uZXh0X3BhY2tldDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBmcV9mbG93ICpmOwogCXVuc2lnbmVkIGxvbmcgcmF0ZTsKQEAgLTcyMSw3ICYjNDM7NzI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKQogCWlmIChza2IpIHsKIAkJcS0mZ3Q7aW50ZXJuYWwucWxlbi0tOwogCQlmcV9kZXF1ZXVlX3NrYihzY2gsICZhbXA7cS0mZ3Q7aW50ZXJuYWwsIHNrYik7Ci0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIHNrYjsKIAl9CiAKIAlub3cgPSBrdGltZV9nZXRfbnMoKTsKQEAgLTc1OCw4ICYjNDM7NzY0LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKQogCiAJc2tiID0gZnFfcGVlayhmKTsKIAlpZiAoc2tiKSB7Ci0JCXU2NCB0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS0mZ3Q7dGltZV90b19zZW5kLAotCQkJCQkgICAgIGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQpOwomIzQzOwkJdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktJmd0O3RpbWVfdG9fc2VuZCwKJiM0MzsJCQkJCSBmLSZndDt0aW1lX25leHRfcGFja2V0KTsKIAogCQlpZiAobm93ICYjNDM7IHEtJmd0O29mZmxvYWRfaG9yaXpvbiAmbHQ7IHRpbWVfbmV4dF9wYWNrZXQpIHsKIAkJCWhlYWQtJmd0O2ZpcnN0ID0gZi0mZ3Q7bmV4dDsKQEAgLTgyOCwxMSAmIzQzOzgzNCwxNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiAJCSAqIGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQgd2FzIHNldCB3aGVuIHByaW9yIHBhY2tldCB3YXMgc2VudCwKIAkJICogYW5kIGN1cnJlbnQgdGltZSAoQG5vdykgY2FuIGJlIHRvbyBsYXRlIGJ5IHRlbnMgb2YgdXMuCiAJCSAqLwotCQlpZiAoZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCkKJiM0MzsJCWlmIChmLSZndDt0aW1lX25leHRfcGFja2V0ICZhbXA7JmFtcDsgZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCAmbHQ7IG5vdykKIAkJCWxlbiAtPSBtaW4obGVuLzIsIG5vdyAtIGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQpOwogCQlmLSZndDt0aW1lX25leHRfcGFja2V0ID0gbm93ICYjNDM7IGxlbjsKIAl9CiYjNDM7CiBvdXQ6CiYjNDM7CWlmIChxLSZndDtvZmZsb2FkX2hvcml6b24gJmFtcDsmYW1wOyB0aW1lX25leHRfcGFja2V0ICZsdDs9IG5vdykKJiM0MzsJCXNrYi0mZ3Q7dHN0YW1wID0gMDsKJiM0MzsKIAlyZXR1cm4gc2tiOwogfQogCkBAIC0xMTc5LDcgJiM0MzsxMTg5LDggQEAgc3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKIAkJdTY0IG9mZmxvYWRfaG9yaXpvbiA9ICh1NjQpTlNFQ19QRVJfVVNFQyAqCiAJCQkJICAgICAgbmxhX2dldF91MzIodGJbVENBX0ZRX09GRkxPQURfSE9SSVpPTl0pOwogCi0JCWlmIChvZmZsb2FkX2hvcml6b24gJmx0Oz0gcWRpc2NfZGV2KHNjaCktJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB7CiYjNDM7CQlpZiAob2ZmbG9hZF9ob3Jpem9uICZsdDs9CiYjNDM7CQkgICAgKHU2NClxZGlzY19kZXYoc2NoKS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbiAqIE5TRUNfUEVSX1VTRUMpIHsKIAkJCVdSSVRFX09OQ0UocS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uLCBvZmZsb2FkX2hvcml6b24pOwogCQl9IGVsc2UgewogCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtpbnZhbGlkIG9mZmxvYWRfaG9yaXpvbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc2V0dGluZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI0NzhlNjg0ODQ2YTE2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc2V0dGluZ3MKQEAgLTAsMCAmIzQzOzEgQEAKJiM0Mzt0aW1lb3V0PTI0MApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuYwppbmRleCA1NWEzODZmM2QxYjkwZi4uNmU2NGJhYTRjNjBkZDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jCkBAIC00Miw4ICYjNDM7NDIsMTAgQEAgc3RhdGljIGJvb2wJY2ZnX21hY2hpbmVfc2xvdzsKIHN0YXRpYyB1aW50NjRfdAljZmdfc3RhcnRfdGltZV9uczsKIHN0YXRpYyBpbnQJY2ZnX21hcms7CiBzdGF0aWMgYm9vbAljZmdfcng7CiYjNDM7c3RhdGljIGJvb2wJY2ZnX3ZlcmlmeV9od19vZmZsb2FkOwogCiBzdGF0aWMgdWludDY0X3QgZ2xvYl90c3RhcnQ7CiYjNDM7c3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0X3JlYWw7CiBzdGF0aWMgdWludDY0X3QgdGRlbGl2ZXJfbWF4OwogCiBzdGF0aWMgaW50IGVycm9yczsKQEAgLTE1OCwxOCAmIzQzOzE2MCw3MCBAQCBzdGF0aWMgdm9pZCBkb19yZWN2X3ZlcmlmeV9lbXB0eShpbnQgZmRyKQogCQllcnJvcigxLCAwLCAmIzM0O3JlY3Y6IG5vdCBlbXB0eSBhcyBleHBlY3RlZCAoJWQsICVkKSYjMzQ7LCByZXQsIGVycm5vKTsKIH0KIAotc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdCkKJiM0MztzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVyciwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgcGF5bG9hZF9jaGFyKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKJiM0MzsJaW50NjRfdCB0c3RhbXAgPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKGVyci0mZ3Q7ZWVfZXJybm8pIHsKJiM0MzsJY2FzZSBFQ0FOQ0VMRUQ6CiYjNDM7CQlpZiAoZXJyLSZndDtlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX01JU1NFRCkKJiM0MzsJCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxuJiMzNDssCiYjNDM7CQkJICAgICAgZXJyLSZndDtlZV9jb2RlKTsKJiM0MzsJCXJlYXNvbiA9ICYjMzQ7bWlzc2VkIHR4dGltZSYjMzQ7OwomIzQzOwlicmVhazsKJiM0MzsJY2FzZSBFSU5WQUw6CiYjNDM7CQlpZiAoZXJyLSZndDtlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX0lOVkFMSURfUEFSQU0pCiYjNDM7CQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVyci0mZ3Q7ZWVfY29kZSk7CiYjNDM7CQlyZWFzb24gPSAmIzM0O2ludmFsaWQgdHh0aW1lJiMzNDs7CiYjNDM7CWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxuJiMzNDssCiYjNDM7CQkgICAgICBlcnItJmd0O2VlX2Vycm5vLCBlcnItJmd0O2VlX2NvZGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRzdGFtcCA9ICgoaW50NjRfdCllcnItJmd0O2VlX2RhdGEpICZsdDsmbHQ7IDMyIHwgZXJyLSZndDtlZV9pbmZvOwomIzQzOwl0c3RhbXAgLT0gKGludDY0X3QpZ2xvYl90c3RhcnQ7CiYjNDM7CXRzdGFtcCAvPSAxMDAwICogMTAwMDsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7c2VuZDogcGt0ICVjIGF0ICUmIzM0OyBQUklkNjQgJiMzNDttcyBkcm9wcGVkOiAlc1xuJiMzNDssCiYjNDM7CQlwYXlsb2FkX2NoYXIsIHRzdGFtcCwgcmVhc29uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLAomIzQzOwkJCQkJICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyAqdHNzKQomIzQzO3sKJiM0MzsJaW50NjRfdCB0czsKJiM0MzsKJiM0MzsJdHMgPSB0c3MtJmd0O3RzWzBdLnR2X3NlYzsKJiM0MzsJdHMgKj0gMTAwMFVMTCAqIDEwMDAgKiAxMDAwOwomIzQzOwl0cyAmIzQzOz0gdHNzLSZndDt0c1swXS50dl9uc2VjOwomIzQzOwl0cyAtPSBnbG9iX3RzdGFydF9yZWFsOwomIzQzOwl0cyAvPSAxMDAwOwomIzQzOwomIzQzOwlpZiAodHMgJmd0OyBjZmdfdmFyaWFuY2VfdXMpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O3N3IGRlbGF5ICUmIzM0OyBQUklkNjQgJiMzNDt1cyBleGNlZWRzIGJvdW5kc1xuJiMzNDssIHRzKTsKJiM0MzsJCWlmICghY2ZnX21hY2hpbmVfc2xvdykKJiM0MzsJCQllcnJvcnMmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZShpbnQgZmR0KQogewogCWNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIpKSAmIzQzOwomIzQzOwkJICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZykpICYjNDM7CiAJCSAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpXSA9IHswfTsKIAljaGFyIGRhdGFbc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MzsKIAkJICBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsgMV07CiYjNDM7CXN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3M7CiAJc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnI7CiAJaW50IHJldCwgbnVtX3RzdGFtcCA9IDA7CiAJc3RydWN0IG1zZ2hkciBtc2cgPSB7MH07CiAJc3RydWN0IGlvdmVjIGlvdiA9IHswfTsKIAlzdHJ1Y3QgY21zZ2hkciAqY207Ci0JaW50NjRfdCB0c3RhbXAgPSAwOwogCiAJaW92Lmlvdl9iYXNlID0gZGF0YTsKIAlpb3YuaW92X2xlbiA9IHNpemVvZihkYXRhKTsKQEAgLTE4MSw4ICYjNDM7MjM1LDYgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdCkKIAltc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7CiAKIAl3aGlsZSAoMSkgewotCQljb25zdCBjaGFyICpyZWFzb24gPSBOVUxMOwotCiAJCXJldCA9IHJlY3Ztc2coZmR0LCAmYW1wO21zZywgTVNHX0VSUlFVRVVFKTsKIAkJaWYgKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVBR0FJTikKIAkJCWJyZWFrOwpAQCAtMTkyLDQyICYjNDM7MjQ0LDMyIEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpCiAJCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiBmbGFncyAweCV4XG4mIzM0OywgbXNnLm1zZ19mbGFncyk7CiAKIAkJY20gPSBDTVNHX0ZJUlNUSERSKCZhbXA7bXNnKTsKJiM0MzsJCXRzcyA9IE5VTEw7CiYjNDM7CiYjNDM7CQlpZiAoY20tJmd0O2Ntc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY20tJmd0O2Ntc2dfdHlwZSA9PSBTQ01fVElNRVNUQU1QSU5HKSB7CiYjNDM7CQkJdHNzID0gKHZvaWQgKilDTVNHX0RBVEEoY20pOwomIzQzOwkJCWNtID0gQ01TR19OWFRIRFIoJmFtcDttc2csIGNtKTsKJiM0MzsJCQlpZiAoIWNtKQomIzQzOwkJCQllcnJvcigxLCAwLCAmIzM0O3RpbWVzdGFtcCBtaXNzaW5nIGlwIGVyclxuJiMzNDspOwomIzQzOwkJfQomIzQzOwogCQlpZiAoY20tJmd0O2Ntc2dfbGV2ZWwgIT0gY2ZnX2VycnFfbGV2ZWwgfHwKIAkJICAgIGNtLSZndDtjbXNnX3R5cGUgIT0gY2ZnX2VycnFfdHlwZSkKIAkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IHR5cGUgMHgleC4weCV4XG4mIzM0OywKIAkJCQkgICAgY20tJmd0O2Ntc2dfbGV2ZWwsIGNtLSZndDtjbXNnX3R5cGUpOwogCiAJCWVyciA9IChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY20pOwotCQlpZiAoZXJyLSZndDtlZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1RYVElNRSkKJiM0MzsJCWlmIChlcnItJmd0O2VlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVFhUSU1FKQomIzQzOwkJCW51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChlcnIsCiYjNDM7CQkJCQkJCSAgICAgICBkYXRhW3JldCAtIDFdKTsKJiM0MzsJCWVsc2UgaWYgKGVyci0mZ3Q7ZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgJmFtcDsmYW1wOyB0c3MpCiYjNDM7CQkJZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoZXJyLCB0c3MpOwomIzQzOwkJZWxzZQogCQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogb3JpZ2luIDB4JXhcbiYjMzQ7LCBlcnItJmd0O2VlX29yaWdpbik7CiAKLQkJc3dpdGNoIChlcnItJmd0O2VlX2Vycm5vKSB7Ci0JCWNhc2UgRUNBTkNFTEVEOgotCQkJaWYgKGVyci0mZ3Q7ZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpCi0JCQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcbiYjMzQ7LAotCQkJCSAgICAgIGVyci0mZ3Q7ZWVfY29kZSk7Ci0JCQlyZWFzb24gPSAmIzM0O21pc3NlZCB0eHRpbWUmIzM0OzsKLQkJYnJlYWs7Ci0JCWNhc2UgRUlOVkFMOgotCQkJaWYgKGVyci0mZ3Q7ZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKQotCQkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XG4mIzM0OywKLQkJCQkgICAgICBlcnItJmd0O2VlX2NvZGUpOwotCQkJcmVhc29uID0gJiMzNDtpbnZhbGlkIHR4dGltZSYjMzQ7OwotCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcbiYjMzQ7LAotCQkJICAgICAgZXJyLSZndDtlZV9lcnJubywgZXJyLSZndDtlZV9jb2RlKTsKLQkJfQotCi0JCXRzdGFtcCA9ICgoaW50NjRfdCkgZXJyLSZndDtlZV9kYXRhKSAmbHQ7Jmx0OyAzMiB8IGVyci0mZ3Q7ZWVfaW5mbzsKLQkJdHN0YW1wIC09IChpbnQ2NF90KSBnbG9iX3RzdGFydDsKLQkJdHN0YW1wIC89IDEwMDAgKiAxMDAwOwotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtzZW5kOiBwa3QgJWMgYXQgJSYjMzQ7IFBSSWQ2NCAmIzM0O21zIGRyb3BwZWQ6ICVzXG4mIzM0OywKLQkJCWRhdGFbcmV0IC0gMV0sIHRzdGFtcCwgcmVhc29uKTsKLQogCQltc2cubXNnX2ZsYWdzID0gMDsKIAkJbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpOwotCQludW1fdHN0YW1wJiM0MzsmIzQzOzsKIAl9CiAKIAlyZXR1cm4gbnVtX3RzdGFtcDsKQEAgLTI0NSwxMiAmIzQzOzI4NywxMyBAQCBzdGF0aWMgdm9pZCByZWN2X2VycnF1ZXVlX21zZ3MoaW50IGZkdCkKIAkJCWVycm9yKDEsIGVycm5vLCAmIzM0O3BvbGwmIzM0Oyk7CiAKIAkJaWYgKHJldCAmYW1wOyZhbXA7IChwZmQucmV2ZW50cyAmYW1wOyBQT0xMRVJSKSkKLQkJCW51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChmZHQpOwomIzQzOwkJCW51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWUoZmR0KTsKIAogCQlpZiAobnVtX3RzdGFtcCA9PSBjZmdfbnVtX3BrdCkKIAkJCWJyZWFrOwogCi0JfSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgJmx0OyB0ZGVsaXZlcl9tYXgpOwomIzQzOwl9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSAmbHQ7CiYjNDM7CQkgdGRlbGl2ZXJfbWF4ICYjNDM7IChjZmdfdmFyaWFuY2VfdXMgKiAxMDAwKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YXJ0X3RpbWVfd2FpdCh2b2lkKQpAQCAtMjk1LDYgJiM0MzszMzgsMTggQEAgc3RhdGljIHZvaWQgc2V0c29ja29wdF90eHRpbWUoaW50IGZkKQogCQllcnJvcigxLCAwLCAmIzM0O2dldHNvY2tvcHQgdHh0aW1lOiBtaXNtYXRjaCYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoaW50IGZkKQomIzQzO3sKJiM0MzsJaW50IHZhbCA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfAomIzQzOwkJICBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIHwKJiM0MzsJCSAgU09GX1RJTUVTVEFNUElOR19PUFRfSUQgfAomIzQzOwkJICBTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsCiYjNDM7CQkgICAgICAgJmFtcDt2YWwsIHNpemVvZih2YWwpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NldHNvY2tvcHQgdGltZXN0YW1waW5nJiMzNDspOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbikKIHsKIAlpbnQgZmQ7CkBAIC0zMDgsNiAmIzQzOzM2Myw5IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbikKIAogCXNldHNvY2tvcHRfdHh0aW1lKGZkKTsKIAomIzQzOwlpZiAoY2ZnX3ZlcmlmeV9od19vZmZsb2FkKQomIzQzOwkJc2V0c29ja29wdF90eHRpbWVzdGFtcGluZyhmZCk7CiYjNDM7CiAJaWYgKGNmZ19tYXJrICZhbXA7JmFtcDsKIAkgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgJmFtcDtjZmdfbWFyaywgc2l6ZW9mKGNmZ19tYXJrKSkpCiAJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NldHNvY2tvcHQgbWFyayYjMzQ7KTsKQEAgLTMxNyw3ICYjNDM7Mzc1LDcgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKQogCiBzdGF0aWMgaW50IHNldHVwX3J4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pCiB7Ci0Jc3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gMTAwICogMTAwMCB9OwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSA2MDAgKiAxMDAwIH07CiAJaW50IGZkOwogCiAJZmQgPSBzb2NrZXQoYWRkci0mZ3Q7c2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTsKQEAgLTM0OCw2ICYjNDM7NDA2LDcgQEAgc3RhdGljIHZvaWQgZG9fdGVzdF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKQogCiAJc3RhcnRfdGltZV93YWl0KCk7CiAJZ2xvYl90c3RhcnQgPSBnZXR0aW1lX25zKGNmZ19jbG9ja2lkKTsKJiM0MzsJZ2xvYl90c3RhcnRfcmVhbCA9IGdldHRpbWVfbnMoQ0xPQ0tfUkVBTFRJTUUpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGNmZ19udW1fcGt0OyBpJiM0MzsmIzQzOykKIAkJZG9fc2VuZF9vbmUoZmR0LCAmYW1wO2NmZ19idWZbaV0pOwpAQCAtNDQwLDEwICYjNDM7NDk5LDExIEBAIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCQkJJiMzNDsgIC02ICAgICAgICAgICAgb25seSBJUHY2XG4mIzM0OwogCQkJJiMzNDsgIC1jICZsdDtjbG9jayZndDsgICAgbW9ub3RvbmljIG9yIHRhaSAoZGVmYXVsdClcbiYjMzQ7CiAJCQkmIzM0OyAgLUQgJmx0O2FkZHImZ3Q7ICAgICBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzIChzZXJ2ZXIpXG4mIzM0OwotCQkJJiMzNDsgIC1TICZsdDthZGRyJmd0OyAgICAgc291cmNlIElQIGFkZHJlc3MgKGNsaWVudClcbiYjMzQ7CiYjNDM7CQkJJiMzNDsgIC1oICAgICAgICAgICAgdmVyaWZ5IGhhcmR3YXJlIG9mZmxvYWQgKHR4KVxuJiMzNDsKJiM0MzsJCQkmIzM0OyAgLW0gJmx0O21hcmsmZ3Q7ICAgICBzb2NrZXQgbWFya1xuJiMzNDsKIAkJCSYjMzQ7ICAtciAgICAgICAgICAgIHJ1biByeCBtb2RlXG4mIzM0OwomIzQzOwkJCSYjMzQ7ICAtUyAmbHQ7YWRkciZndDsgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXG4mIzM0OwogCQkJJiMzNDsgIC10ICZsdDtuc2VjJmd0OyAgICAgc3RhcnQgdGltZSAoVVRDIG5hbm9zZWNvbmRzKVxuJiMzNDsKLQkJCSYjMzQ7ICAtbSAmbHQ7bWFyayZndDsgICAgIHNvY2tldCBtYXJrXG4mIzM0OwogCQkJJiMzNDtcbiYjMzQ7LAogCQkJcHJvZ25hbWUpOwogCWV4aXQoMSk7CkBAIC00NTUsNyAmIzQzOzUxNSw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWludCBkb21haW4gPSBQRl9VTlNQRUM7CiAJaW50IGM7CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDs0NmM6UzpEOnJ0Om06JiMzNDspKSAhPSAtMSkgewomIzQzOwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDs0NmM6RDpobTpyUzp0OiYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChjKSB7CiAJCWNhc2UgJiMzOTs0JiMzOTs6CiAJCQlpZiAoZG9tYWluICE9IFBGX1VOU1BFQykKQEAgLTQ4MiwyMSAmIzQzOzU0MiwyNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWVsc2UKIAkJCQllcnJvcigxLCAwLCAmIzM0O3Vua25vd24gY2xvY2sgaWQgJXMmIzM0Oywgb3B0YXJnKTsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7UyYjMzk7OgotCQkJc2FkZHIgPSBvcHRhcmc7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O0QmIzM5OzoKIAkJCWRhZGRyID0gb3B0YXJnOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7aCYjMzk7OgomIzQzOwkJCWNmZ192ZXJpZnlfaHdfb2ZmbG9hZCA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7bSYjMzk7OgomIzQzOwkJCWNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtyJiMzOTs6CiAJCQljZmdfcnggPSB0cnVlOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7UyYjMzk7OgomIzQzOwkJCXNhZGRyID0gb3B0YXJnOwomIzQzOwkJCWJyZWFrOwogCQljYXNlICYjMzk7dCYjMzk7OgogCQkJY2ZnX3N0YXJ0X3RpbWVfbnMgPSBzdHJ0b2xsKG9wdGFyZywgTlVMTCwgMCk7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O20mIzM5OzoKLQkJCWNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7Ci0JCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXVzYWdlKGFyZ3ZbMF0pOwogCQl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHkKaW5kZXggYWRmNmM4NDhkNmQ4MGYuLjdiNzVhMzNmNWM0M2Y4IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5CkBAIC0xMiwxMCAmIzQzOzEyLDEzIEBAIGltcG9ydCB0aW1lCiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF92YXJpYW50cwogZnJvbSBsaWIucHkgaW1wb3J0IEtzZnROYW1lZFZhcmlhbnQsIEtzZnRTa2lwRXgKIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgYmtnLCBjbWQsIGRlZmVyLCB0YwomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBFdGh0b29sRmFtaWx5LCBObEVycm9yCiAKIAogZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKToKICAgICAmIzM0OyYjMzQ7JiMzNDtNYWluIGZ1bmN0aW9uLiBSdW4gc29fdHh0aW1lIGFzIHNlbmRlciBhbmQgcmVjZWl2ZXIuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKQomIzQzOwogICAgIHNsb3dfbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCYjMzk7S1NGVF9NQUNISU5FX1NMT1cmIzM5OykKIAogICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgJiMzNDtiaW5fcmVtb3RlJiMzNDspOgpAQCAtMzgsNiAmIzQzOzQxLDM0IEBAIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6CiAgICAgICAgIGNtZChjbWRfdHgpCiAKIAomIzQzO2RlZiBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O0NvbmZpZ3VyZSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBldGhubCA9IEV0aHRvb2xGYW1pbHkoKQomIzQzOwomIzQzOyAgICB0cnk6CiYjNDM7ICAgICAgICByaW5ncyA9IGV0aG5sLnJpbmdzX2dldCh7JiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fX0pCiYjNDM7ICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7cmluZy1nZXQgbm90IHN1cHBvcnRlZCBieSBkZXZpY2UmIzM5OykgZnJvbSBlCiYjNDM7CiYjNDM7ICAgIGlmICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7IG5vdCBpbiByaW5ncyBvciBcCiYjNDM7ICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgmIzM5OyBub3QgaW4gcmluZ3M6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7cGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSYjMzk7KQomIzQzOwomIzQzOyAgICBpZiByaW5nc1smIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JiMzOTtdICZsdDsgNTBfMDAwOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3BhY2luZyBvZmZsb2FkIG1heCBob3Jpem9uIHRvbyBzbWFsbCYjMzk7KQomIzQzOwomIzQzOyAgICBjdXJfaG9yaXpvbiA9IHJpbmdzWyYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7XQomIzQzOyAgICBuZXdfaG9yaXpvbiA9IDUwXzAwMAomIzQzOyAgICBldGhubC5yaW5nc19zZXQoewomIzQzOyAgICAgICAgJiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fSwKJiM0MzsgICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7OiBuZXdfaG9yaXpvbiwKJiM0MzsgICAgfSkKJiM0MzsgICAgZGVmZXIoZXRobmwucmluZ3Nfc2V0LCB7CiYjNDM7ICAgICAgICAmIzM5O2hlYWRlciYjMzk7OiB7JiMzOTtkZXYtaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9LAomIzQzOyAgICAgICAgJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJiMzOTs6IGN1cl9ob3Jpem9uCiYjNDM7ICAgIH0pCiYjNDM7CiYjNDM7CiBkZWYgX3FkaXNjX3NldHVwKGlmbmFtZSwgcWRpc2MsIG9wdGFyZ3M9JiMzNDsmIzM0Oyk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UmVwbGFjZSByb290IHFkaXNjLiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBhZnRlciB0aGUgdGVzdC4KIApAQCAtNTYsNiAmIzQzOzg3LDcgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6CiAgICAgICAgICAgICBbJiMzNDtvbmVfcGt0JiMzNDssICYjMzQ7YSwxMCYjMzQ7LCAmIzM0O2EsMTAmIzM0O10sCiAgICAgICAgICAgICBbJiMzNDtpbl9vcmRlciYjMzQ7LCAmIzM0O2EsMTAsYiwyMCYjMzQ7LCAmIzM0O2EsMTAsYiwyMCYjMzQ7XSwKICAgICAgICAgICAgIFsmIzM0O3JldmVyc2Vfb3JkZXImIzM0OywgJiMzNDthLDIwLGIsMTAmIzM0OywgJiMzNDtiLDEwLGEsMjAmIzM0O10sCiYjNDM7ICAgICAgICAgICAgWyYjMzQ7YmV5b25kX2h3X2hvcml6b24mIzM0OywgJiMzNDthLDcwJiMzNDssICYjMzQ7YSw3MCYjMzQ7XSwKICAgICAgICAgXToKICAgICAgICAgICAgIG5hbWUgPSBmJiMzNDt2e2lwdmVyfV97dGVzdGNhc2VbMF19JiMzNDsKICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQobmFtZSwgaXB2ZXIsIHRlc3RjYXNlWzFdLCB0ZXN0Y2FzZVsyXSkKQEAgLTY0LDE1ICYjNDM7OTYsNDIgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6CiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKQogZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8oY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgKGZxKSB0ZXN0cy4mIzM0OyYjMzQ7JiMzNDsKLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcikKICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgJiMzNDtmcSYjMzQ7KQogICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgJiMzNDttb25vJiMzNDssIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKQogCiAKJiM0MztAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKQomIzQzO2RlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyBmcSB0ZXN0cywgd2l0aCBvZmZsb2FkIGhvcml6b24uJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKQomIzQzOwomIzQzOyAgICBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZykKJiM0MzsgICAgdHJ5OgomIzQzOyAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsICYjMzQ7ZnEmIzM0OywgJiMzNDtvZmZsb2FkX2hvcml6b24gNTBtcyYjMzQ7KQomIzQzOyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bmV0ZGV2IGRvZXMgbm90IHN1cHBvcnQgb2ZmbG9hZC4gc2tpcHBpbmcmIzM0OykgZnJvbSBlCiYjNDM7CiYjNDM7ICAgICMgRXhwZWN0IGFsbCB0ZXN0cyB0byB1c2Ugb25seSBodyBwYWNpbmcsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbi4KJiM0MzsgICAgaHdfb25seSA9ICYjMzQ7LWgmIzM0OyBpZiBhcmdzX3R4ICE9ICYjMzQ7YSw3MCYjMzQ7IGVsc2UgJiMzNDsmIzM0OwomIzQzOyAgICB0ZXN0X3NvX3R4dGltZShjZmcsICYjMzQ7bW9ubyYjMzQ7LCBpcHZlciwgZiYjMzQ7e2h3X29ubHl9IHthcmdzX3R4fSYjMzQ7LCBhcmdzX3J4LCBUcnVlKQomIzQzOwomIzQzOwomIzQzO0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpCiYjNDM7ZGVmIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyB0ZXN0cywgd2l0aG91dCBmcSBwYWNpbmcgc3cgYmFja3VwLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBjZmcucmVxdWlyZV9uc2ltKG5zaW1fdGVzdD1GYWxzZSkKJiM0MzsKJiM0MzsgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpCiYjNDM7ICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCAmIzM0O3BmaWZvX2Zhc3QmIzM0OykKJiM0MzsKJiM0MzsgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHBhc3MsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbiB3aXRob3V0IHN3IGZhbGxiYWNrLgomIzQzOyAgICBleHBlY3RfcGFzcyA9IG5vdCBhcmdzX3R4ID09ICYjMzQ7YSw3MCYjMzQ7CiYjNDM7ICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgJiMzNDttb25vJiMzNDssIGlwdmVyLCBmJiMzNDstaCB7YXJnc190eH0mIzM0OywgYXJnc19yeCwgZXhwZWN0X3Bhc3MpCiYjNDM7CiYjNDM7CiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKQogZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaShjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KToKICAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIGZxIHRlc3RzLCBidXQgcGFzcyBDTE9DS19UQUkgdG8gdGVzdCBjb252ZXJzaW9uLiYjMzQ7JiMzNDsmIzM0OwotICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKQogICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCAmIzM0O2ZxJiMzNDspCiAgICAgdGVzdF9zb190eHRpbWUoY2ZnLCAmIzM0O3RhaSYjMzQ7LCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSkKIApAQCAtOTUsNyAmIzQzOzE1NCw2IEBAIGRlZiBfdGVzdF92YXJpYW50c19ldGYoKToKIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2V0ZigpKQogZGVmIHRlc3Rfc29fdHh0aW1lX2V0ZihjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3RfZmFpbCk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBldGYgdGVzdHMuJiMzNDsmIzM0OyYjMzQ7Ci0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpCiAgICAgdHJ5OgogICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgJiMzNDtldGYmIzM0OywgJiMzNDtjbG9ja2lkIENMT0NLX1RBSSBkZWx0YSA0MDAwMDAmIzM0OykKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CkBAIC0xMDgsNyAmIzQzOzE2NiwxMyBAQCBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6CiAgICAgJiMzNDsmIzM0OyYjMzQ7Qm9pbGVycGxhdGUga3NmdCBtYWluLiYjMzQ7JiMzNDsmIzM0OwogICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzoKICAgICAgICAga3NmdF9ydW4oCi0gICAgICAgICAgICBbdGVzdF9zb190eHRpbWVfZnFfbW9ubywgdGVzdF9zb190eHRpbWVfZnFfdGFpLCB0ZXN0X3NvX3R4dGltZV9ldGZdLAomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ubywKJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odywKJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfcGZpZm9mYXN0X21vbm9faHcsCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwKJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZXRmLAomIzQzOyAgICAgICAgICAgIF0sCiAgICAgICAgICAgICBhcmdzPShjZmcsKSwKICAgICAgICAgKQogICAgIGtzZnRfZXhpdCgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjI5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIE5ldyBOZXR3b3JrIEtlcm5lbCBGZWF0dXJlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBuZXcga2VybmVsIGVudHJ5IHBvaW50cyBvciBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4KCk15IGluaXRpYWwgc2NhbiByZXZlYWxzIHNvbWUgaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9uczogdGhlIGludHJvZHVjdGlvbiBvZiBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIGBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYXMgYGV0aHRvb2xgIHJpbmcgcGFyYW1ldGVycy4gVGhlIGBpZHBmYCBkcml2ZXIgaXMgYmVpbmcgdXBkYXRlZCB0byBzdXBwb3J0IHRoZSBgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OYCBvcHRpb24uIFBsdXMsIGBwa3RnZW5gIGlzIGdldHRpbmcgc3VwcG9ydCBmb3IgYFNPX1RYVElNRWAsIHdoaWNoIGluY2x1ZGVzIGEgYHR4dGltZV9kZWxheWAgYW5kIGB0eHRpbWVfY2xvY2tpZGAuIEFuZCBmaW5hbGx5LCBgc2NoX2ZxYCBpcyBiZWluZyBtb2RpZmllZCB0byBjb25zaWRlciBgcS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uYC4KClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgaXMgdGhpcyBzdHVmZiBldmVuICpyZWFjaGFibGUqPyBBcmUgdGhlcmUgZW50cnkgcG9pbnRzIHRoYXQgd2UgY2FuIGRpcmVjdGx5IGV4cGxvaXQ/IFRoZSBgcGt0Z2VuYCBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgdGhlIG5ldyBmaWVsZHMgaW4gYHBrdGdlbl9pZl93cml0ZWAgbG9vayBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHByb2NmcyBpbnRlcmZhY2UsIGAvcHJvYy9uZXQvcGt0Z2VuLypgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGBldGh0b29sYCBjaGFuZ2VzLCBhZGRpbmcgYEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OYCB0byBuZXRsaW5rLCBhbHNvIHNlZW0gc3RyYWlnaHRmb3J3YXJkLiBBbmQgdGhlIGBzY2hfZnFgIG1vZGlmaWNhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgY2hlY2sgb2YgYG9mZmxvYWRfaG9yaXpvbmAsIGxvb2sgbGlrZSB0aGV5IGFyZSB0cmlnZ2VyZWQgdmlhIGBxZGlzY19kZXYoc2NoKS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbmAuCgpOb3csIGhvdyBhcmUgdGhlc2UgdGhpbmdzIGN1cnJlbnRseSBmdXp6ZWQsIGlmIGF0IGFsbD8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSB0b3VjaCBgL3Byb2MvbmV0L3BrdGdlbi9gLCBidXQgaXQmIzM5O3MgKnBvc3NpYmxlKiBpZiB0aGVyZSBhcmUgZGVzY3JpcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LiBUaGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZGVmaW5pdGVseSBhIHRhcmdldC4gQW5kIHRoZSBgc2NoX2ZxYCBxZGlzYyBpcyBnZW5lcmFsbHkgZnV6emVkIHRocm91Z2ggdGhlIGB0Y2AgbmV0bGluayBpbnRlcmZhY2UuCgpMZXQmIzM5O3MgY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYC4gWWVzLCB0aHJvdWdoIHRoZSBgZXRodG9vbGAgbmV0bGluaywgYEVUSFRPT0xfTVNHX1JJTkdTX1NFVGAuIEFuZCB0aGUgYHNjaF9mcWAgY2hhbmdlcyBhcmUgYWNjZXNzZWQgdmlhIGBSVE1fTkVXUURJU0NgIHdpdGggYFRDQV9LSU5EYCA9ICYjMzQ7ZnEmIzM0Oy4KCk9rYXksIHRpbWUgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSB0aGUgcHJpbWFyeSBmdXp6aW5nIHRhcmdldHMuIEZvciBgZXRodG9vbGAsIEkmIzM5O20gdGhpbmtpbmcgYGV0aG5sX3NldF9yaW5nc2AsIGByaW5nc19maWxsX3JlcGx5YCwgYW5kIGByaW5nc19wcmVwYXJlX2RhdGFgLiBGb3IgYHNjaF9mcWAsIGRlZmluaXRlbHkgYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYW5kIGBmcV9jbGFzc2lmeWAuIEFuZCBmb3IgYHBrdGdlbmAsIHRoZSByZWxldmFudCBvbmVzIGFyZSBgcGt0Z2VuX2lmX3dyaXRlYCBhbmQgYHBrdGdlbl94bWl0YC4KCkZpbmFsbHksIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IGBDT05GSUdfTkVUX1NDSF9GUWAgaXMgZXNzZW50aWFsIGZvciBlbmFibGluZyB0aGUgYHNjaF9mcWAgY29kZS4gU2ltaWxhcmx5LCBgQ09ORklHX05FVF9QS1RHRU5gIGZvciBgcGt0Z2VuYC4gQW5kIHdlJiMzOTtsbCBuZWVkIGBDT05GSUdfSURQRmAgZm9yIHRoZSBJbnRlbCBJUFUgZHJpdmVyLCBidXQgaXQgbWlnaHQgbm90IGJlIHJlYWNoYWJsZS4gSSYjMzk7bSBsZXNzIGNvbmNlcm5lZCB3aXRoIHRoZSBkcml2ZXIgaXRzZWxmLCB1bmxlc3MgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgdmV0aC90dW4vZXRjLiBUaGUgY29yZSBjaGFuZ2VzIGluIGBzY2hfZnFgLCBgcGt0Z2VuYCwgYW5kIGBldGh0b29sYCBhcmUgdGhlIHJlYWwgdGFyZ2V0cyBoZXJlLgoKSSYjMzk7bGwgcnVuIHNvbWUgY29kZSBzZWFyY2hlcyB0byB2ZXJpZnkgZXZlcnl0aGluZywgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZxX2NoYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxLmM9MTA1OD1zdGF0aWMgaW50IGZxX2xvYWRfcHJpb21hcChzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3OS1cbm5ldC9zY2hlZC9zY2hfZnEuYzoxMDgwOnN0YXRpYyBpbnQgZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA4MS1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jPTEyMzI9c3RhdGljIGludCBmcV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jLTEyNzAtXHRpZiAob3B0KVxubmV0L3NjaGVkL3NjaF9mcS5jOjEyNzE6XHRcdGVyciA9IGZxX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMjcyLVx0ZWxzZVxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYz0xMzg4PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzk3LVx0LmRlc3Ryb3lcdD1cdGZxX2Rlc3Ryb3ksXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTM5ODpcdC5jaGFuZ2VcdFx0PVx0ZnFfY2hhbmdlLFxubmV0L3NjaGVkL3NjaF9mcS5jLTEzOTktXHQuZHVtcFx0XHQ9XHRmcV9kdW1wLFxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmM9Mzc0PXN0YXRpYyB2b2lkIHFmcV9kZWFjdF9ybV9mcm9tX2FnZyhzdHJ1Y3QgcWZxX3NjaGVkICpxLCBzdHJ1Y3QgcWZxX2NsYXNzICpjbClcbi0tXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTM4Mi0vKiBNb3ZlIGNsYXNzIHRvIGEgbmV3IGFnZ3JlZ2F0ZSwgbWF0Y2hpbmcgdGhlIG5ldyBjbGFzcyB3ZWlnaHQgYW5kL29yIGxtYXggKi9cbm5ldC9zY2hlZC9zY2hfcWZxLmM6MzgzOnN0YXRpYyBpbnQgcWZxX2NoYW5nZV9hZ2coc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZnFfY2xhc3MgKmNsLCB1MzIgd2VpZ2h0LFxubmV0L3NjaGVkL3NjaF9xZnEuYy0zODQtXHRcdFx0ICAgdTMyIGxtYXgpXG4tLVxubmV0L3NjaGVkL3NjaF9xZnEuYy00MDUtXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjQwNjpzdGF0aWMgaW50IHFmcV9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTQwNy1cdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnLFxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmM9MTEwMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmMtMTE2Ni1cbm5ldC9zY2hlZC9zY2hfcWZxLmM6MTE2NzpcdC8qIElmIGxtYXggaXMgbG93ZXJlZCwgdGhyb3VnaCBxZnFfY2hhbmdlX2NsYXNzLCBmb3IgYSBjbGFzc1xubmV0L3NjaGVkL3NjaF9xZnEuYy0xMTY4LVx0ICogb3duaW5nIHBlbmRpbmcgcGFja2V0cyB3aXRoIGxhcmdlciBzaXplIHRoYW4gdGhlIG5ldyB2YWx1ZVxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmM9MTIyNz1zdGF0aWMgaW50IHFmcV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmMtMTI0Ny1cdFx0XHQgY2wtXHUwMDNlYWdnLVx1MDAzZWxtYXgsIGxlbiwgY2wtXHUwMDNlY29tbW9uLmNsYXNzaWQpO1xubmV0L3NjaGVkL3NjaF9xZnEuYzoxMjQ4Olx0XHRlcnIgPSBxZnFfY2hhbmdlX2FnZyhzY2gsIGNsLCBjbC1cdTAwM2VhZ2ctXHUwMDNlY2xhc3Nfd2VpZ2h0LCBsZW4pO1xubmV0L3NjaGVkL3NjaF9xZnEuYy0xMjQ5LVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L3NjaGVkL3NjaF9xZnEuYz0xNTEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHFmcV9jbGFzc19vcHMgPSB7XG5uZXQvc2NoZWQvc2NoX3FmcS5jOjE1MTQ6XHQuY2hhbmdlXHRcdD0gcWZxX2NoYW5nZV9jbGFzcyxcbm5ldC9zY2hlZC9zY2hfcWZxLmMtMTUxNS1cdC5kZWxldGVcdFx0PSBxZnFfZGVsZXRlX2NsYXNzLFxuLS1cbm5ldC9zY2hlZC9zY2hfc2ZxLmM9NjA0PXN0YXRpYyB2b2lkIHNmcV9wZXJ0dXJiYXRpb24oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L3NjaGVkL3NjaF9zZnEuYy02MjEtXHQvKiBxLVx1MDAzZXBlcnR1cmJfcGVyaW9kIGNhbiBjaGFuZ2UgdW5kZXIgdXMgZnJvbVxubmV0L3NjaGVkL3NjaF9zZnEuYzo2MjI6XHQgKiBzZnFfY2hhbmdlKCkgYW5kIHNmcV9kZXN0cm95KCkuXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYyMy1cdCAqL1xuLS1cbm5ldC9zY2hlZC9zY2hfc2ZxLmMtNjI5LVxubmV0L3NjaGVkL3NjaF9zZnEuYzo2MzA6c3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYzMS1cdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfc2ZxLmM9Nzc3PXN0YXRpYyBpbnQgc2ZxX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbi0tXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTgwNi1cdGlmIChvcHQpIHtcbm5ldC9zY2hlZC9zY2hfc2ZxLmM6ODA3Olx0XHRpbnQgZXJyID0gc2ZxX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfc2ZxLmMtODA4LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzU4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkNoZWNraW5nIFJlYWNoYWJpbGl0eSBpbiBgc2NoX2ZxLmNgKioKCkFscmlnaHQsIHNvIHRoZSBtb2RpZmljYXRpb25zIGluIGBzY2hfZnEuY2AgYXJlIHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFsd2F5czogYXJlIHRoZXNlIGNoYW5nZXMgZXZlbiAqcmVsZXZhbnQqIHRvIG15IGN1cnJlbnQgY29uZmlndXJhdGlvbj8gQXJlIHRoZXkgYWN0aXZlPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhleSYjMzk7cmUgcmVhY2hhYmxlIGNvZGUuCgpUaGVyZWZvcmUsIEkmIzM5O20gaW1tZWRpYXRlbHkgZ29pbmcgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJJiMzOTtsbCBjaGVjayBgQ09ORklHX05FVF9TQ0hfRlFgIGFuZCBgQ09ORklHX05FVF9QS1RHRU5gLiBUaG9zZSB3aWxsIGJlIHRoZSBrZXkuIElmIGVpdGhlciwgb3IgYm90aCwgb2YgdGhvc2UgYXJlIGRpc2FibGVkLCBJIGNhbiBwcm9iYWJseSBpZ25vcmUgdGhlc2UgY2hhbmdlcyBmb3Igbm93LCBhdCBsZWFzdCBpbiB0aGUgY29udGV4dCBvZiBteSBjdXJyZW50IGJ1aWxkLiBJZiB0aGV5IGFyZSBlbmFibGVkLCB0aGVuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gY29uY2VybmVkIHdpdGguIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAgaW4gZXZhbHVhdGluZyBhbnkgY29kZSBtb2RpZmljYXRpb247IGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0ZRJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz0zMjI9Y29uZmlnIE5FVF9TQ0hfUElFXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzMzLVxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzM1LVx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODgwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBhY2tldCBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRoaXM6IGdpdmVuIHRoZSBjb250ZXh0IOKAkyBJIGFzc3VtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3IgZGVidWdnaW5nIOKAkyBJJiMzOTttIGdvaW5nIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gcGFja2V0IGdlbmVyYXRpb24sIHNwZWNpZmljYWxseSBgQ09ORklHX05FVF9QS1RHRU5gLiBJIHN1c3BlY3QgdGhhdCB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaXMgY3VycmVudGx5IHNldCwgZW5hYmxlZCwgb3IgZGlzYWJsZWQsIGlzIGNydWNpYWwgZm9yIHdoYXRldmVyIGludmVzdGlnYXRpb24gSSYjMzk7bSB1bmRlcnRha2luZy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgYSBsb3Qgb2YgbmV0d29yayB0ZXN0aW5nIGFuZCB0cmFmZmljIHNoYXBpbmcgc2NlbmFyaW9zLCBzbyBpdCYjMzk7cyBhIHZlcnkgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLiBXZeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdGF0ZSBvZiB0aGlzIHBhcmFtZXRlciBvbiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIEtub3dpbmcgd2hhdCBgQ09ORklHX05FVF9QS1RHRU5gIGFsbG93cyBhbmQgZGlzYWJsZXMgaXMgYSBrZXkgYXNwZWN0IG9mIGFueSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfUEtUR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM4ND1tZW51IFwmIzM0O05ldHdvcmsgdGVzdGluZ1wmIzM0O1xubmV0L0tjb25maWctMzg1LVxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTc2CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFByaW9yaXRpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBgc2NoX2ZxYCwgYHBrdGdlbmAsIGFuZCB0aGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBpcywgYW5kIHRoYXQmIzM5O3Mgd2hhdCB3ZSB3YW50IHRvIHRhcmdldCBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLgoKSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYGZxX2NsYXNzaWZ5YCwgYHBrdGdlbl9pZl93cml0ZWAsIGBwa3RnZW5feG1pdGAsIGBldGhubF9zZXRfcmluZ3NgLCBhbmQgYHJpbmdzX2ZpbGxfcmVwbHlgIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uIGFuZCBrZWVwaW5nIGluIG1pbmQgdGhlIG5lZWQgdG8gYXZvaWQgc2tld2luZyB0ZXN0IGRpc3RyaWJ1dGlvbnMgYnkgZm9jdXNpbmcgb24gZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIEkmIzM5O20gZ29pbmcgdG8gcmVmaW5lIHRoYXQgbGlzdC4gSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gZnVuY3Rpb25zIGNhbGxlZCBmb3IgZXZlcnkgc2luZ2xlIHBhY2tldCwgc28gSSYjMzk7bGwgZXhjbHVkZSBgZnFfZGVxdWV1ZWAgYW5kIGBmcV9jbGFzc2lmeWAuIEkmIzM5O2xsIGFsc28gYmUgYSBiaXQgbW9yZSBzZWxlY3RpdmUgYWJvdXQgYHBrdGdlbl94bWl0YC4KCk15IHJldmlzZWQgbGlzdCB0byBwcmlvcml0aXplIHdpbGwgYmU6CgoqICAgYGZxX2NoYW5nZWAKKiAgIGBldGhubF9zZXRfcmluZ3NgCiogICBgcGt0Z2VuX2lmX3dyaXRlYAoqICAgYHBrdGdlbl94bWl0YAoqICAgYHJpbmdzX2ZpbGxfcmVwbHlgCiogICBgcmluZ3NfcHJlcGFyZV9kYXRhYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gaW5jbHVkaW5nIGBwa3RnZW5feG1pdGAgYW5kIGBwa3RnZW5faWZfd3JpdGVgIG5vdywgYWx0aG91Z2ggYHBrdGdlbl94bWl0YCBpcyB0aGUgbWFpbiBsb29wIG9mIHBrdGdlbiwgaXQmIzM5O3Mgc3RpbGwgZ29vZCB0byBmdXp6LgoKV2UmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgYE5FVF9TQ0hfRlFgIGFuZCBgTkVUX1BLVEdFTmAuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnbGFuY2luZyBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQsIGxpa2UgYENPTkZJR19JRFBGYCwgYWx0aG91Z2ggZ2l2ZW4gdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcyBvZiB0aGF0IGRyaXZlciwgaXQmIzM5O3MgcHJvYmFibHkgbm90IGEgaGlnaCBwcmlvcml0eSBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElEUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc6NDpjb25maWcgSURQRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZz0xNz1pZiBJRFBGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc6MTk6Y29uZmlnIElEUEZfU0lOR0xFUVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTIwLVx0Ym9vbCBcJiMzNDtpZHBmIHNpbmdsZXEgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5OQoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA1ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBnb2luZyB0byBleGNsdWRlIGBJRFBGYCwgc2luY2UgaXQmIzM5O3MgYSBoYXJkd2FyZSBkcml2ZXIsIGFuZCB3ZSBnZW5lcmFsbHkgZG9uJiMzOTt0IGZ1enogdGhvc2UgdW5sZXNzIHdlJiMzOTt2ZSBnb3QgZW11bGF0ZWQgaGFyZHdhcmUuIEhvd2V2ZXIsIGBORVRfU0NIX0ZRYCBhbmQgYE5FVF9QS1RHRU5gIGFyZSBkZWZpbml0ZWx5IHNvZnR3YXJlIGZlYXR1cmVzIHJpcGUgZm9yIGZ1enppbmcuCgpMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGhlcmUmIzM5O3MgdGhlIGxhbmRzY2FwZTogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxgLCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0YCwgdGhlIGBpZHBmYCBkcml2ZXIgZmlsZXMsIGEgZmV3IGBpbmNsdWRlYCBmaWxlcyBsaWtlIGBldGh0b29sLmhgIGFuZCBgbmV0ZGV2aWNlLmhgLCB0aGUgYHVhcGlgIGBldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhgLCBhbmQgdGhlbiB0aGUgbWVhdCBvZiBpdDogYG5ldC9jb3JlL3BrdGdlbi5jYCwgYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgdGhlIGBldGh0b29sYCBkaXJlY3RvcnkgKGBjb21tb24uY2AsIGBuZXRsaW5rLmhgLCBgcmluZ3MuY2ApLCBgbmV0L3NjaGVkL3NjaF9mcS5jYCwgYW5kIHNvbWUgc2VsZnRlc3RzLgoKVGhlIG1vc3QgY3JpdGljYWwgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBuZXQvY29yZS9wa3RnZW4uY2AsIGBuZXQvZXRodG9vbC9yaW5ncy5jYCwgYG5ldC9zY2hlZC9zY2hfZnEuY2AsIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFuZCB0aG9zZSBhcmUgdGhlIGFyZWFzIEkmIzM5O20gbW9zdCBpbnRlcmVzdGVkIGluIHRhcmdldGluZy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgZXRobmxfc2V0X3JpbmdzYCwgYHJpbmdzX2ZpbGxfcmVwbHlgLCBgZnFfY2hhbmdlYCwgYW5kIGBwa3RnZW5faWZfd3JpdGVgLiBJJiMzOTttIGV4Y2x1ZGluZyBgZnFfZGVxdWV1ZWAgYW5kIGBmcV9jbGFzc2lmeWAgYmVjYXVzZSB0aG9zZSBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBmdXp6aW5nIHRoZW0gaXMgcHJvYmFibHkgbm90IHRoZSBiZXN0IHVzZSBvZiByZXNvdXJjZXMuCgpUaGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgd2lsbCBiZSBgTkVUX1NDSF9GUWAgYW5kIGBORVRfUEtUR0VOYC4KCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyLCBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAsIGFuZCBtb2RpZmllcyBgc2NoX2ZxYCB0byB1c2UgaXQsIGFsb25nIHdpdGggdGhlIGBTT19UWFRJTUVgIHN1cHBvcnQgYWRkZWQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggbWVhbnMgdGhleSBhcmUgYWxsIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4KCkxldCYjMzk7cyB0cmlnZ2VyIGEgYHNldC1yZXN1bHRzYCB0byBnZXQgdGhpcyBmdXp6ZXIgZ29pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX0ZRJiMzNDssCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldGhubF9zZXRfcmluZ3MmIzM0OywKICAgICYjMzQ7cmluZ3NfZmlsbF9yZXBseSYjMzQ7LAogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCByaW5nIHBhcmFtZXRlciBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIG1vZGlmaWVzIGBzY2hfZnFgIHRvIHVzZSBpdC4gSXQgYWxzbyBhZGRzIGBTT19UWFRJTUVgIHN1cHBvcnQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbmV0d29ya2luZyBsb2dpYywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgcGFja2V0IGdlbmVyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3NldF9yaW5ncyYjMzQ7LAogICAgJiMzNDtyaW5nc19maWxsX3JlcGx5JiMzNDssCiAgICAmIzM0O2ZxX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhbmQgbW9kaWZpZXMgYHNjaF9mcWAgdG8gdXNlIGl0LiBJdCBhbHNvIGFkZHMgYFNPX1RYVElNRWAgc3VwcG9ydCB0byBgcGt0Z2VuYC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjUzOjA0LjMzNTE4NzMyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjgxMjQ4MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfRlFcIixcbiAgICBcIk5FVF9QS1RHRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9zZXRfcmluZ3NcIixcbiAgICBcInJpbmdzX2ZpbGxfcmVwbHlcIixcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhbmQgbW9kaWZpZXMgYHNjaF9mcWAgdG8gdXNlIGl0LiBJdCBhbHNvIGFkZHMgYFNPX1RYVElNRWAgc3VwcG9ydCB0byBgcGt0Z2VuYC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MDQuMzM1MTk2NzE5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMxOTI2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNTFmZDgyZGMzYjNlNDhjZTdlNTljZTg5NzA3MTczZmUwYTQxZDI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDIxOjUzOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuaW5kZXggNWRkNGQxYjVkOTRiYmIuLjQ4ZjQzZGRhMmU2ZTVlIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuQEAgLTQ0OCw2ICs0NDgsMTIgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBoZHMtdGhyZXNoLW1heFxcbiAgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcXG4rICAgICAgICB0eXBlOiB1MzJcXG4gXFxuICAgLVxcbiAgICAgbmFtZTogbW0tc3RhdFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcXG5pbmRleCA1MTJmNmQ2ZmEzZDhmOC4uM2I5Y2UxYzZlMTA1NzggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XFxuQEAgLTE4Myw3ICsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcXG4gc3RydWN0IGRwbGxfcGluKiAgICAgICAgICAgICAgICAgICAgZHBsbF9waW5cXG4gc3RydWN0IGhsaXN0X2hlYWQgICAgICAgICAgICAgICAgICAgcGFnZV9wb29sc1xcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcXG4tdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b25cXG4rdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjaW5nX29mZmxvYWRfaG9yaXpvblxcbit1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxcbiBzdHJ1Y3RfbmFwaV9jb25maWcqICAgICAgICAgICAgICAgICBuYXBpX2NvbmZpZ1xcbiB1bnNpZ25lZF9sb25nICAgICAgICAgICAgICAgICAgICAgICBncm9fZmx1c2hfdGltZW91dFxcbiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2RlZmVyX2hhcmRfaXJxc1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xcbmluZGV4IGJiOTlkOWU3YzY1ZDUxLi41ZGRmMzQ3OTI3ZGMzZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xcbkBAIC0xODAxLDcgKzE4MDEsOCBAQCBzdGF0aWMgdm9pZCBpZHBmX2dldF90c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsXFxuLVxcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQsXFxuK1xcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQgfFxcbitcXHRcXHRcXHRcXHQgIEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcXG4gXFx0LmdldF9tc2dsZXZlbFxcdFxcdD0gaWRwZl9nZXRfbXNnbGV2ZWwsXFxuIFxcdC5zZXRfbXNnbGV2ZWxcXHRcXHQ9IGlkcGZfc2V0X21zZ2xldmVsLFxcbiBcXHQuZ2V0X2xpbmtcXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xcbmluZGV4IGNmOTY2ZmU2Yzc1OWNlLi5kZTQxNzBjMmFhM2JhMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcXG5AQCAtODg4LDYgKzg4OCwxMSBAQCBzdGF0aWMgaW50IGlkcGZfY2ZnX25ldGRldihzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIFxcdG5ldGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSB2cG9ydC1cXHUwMDNlbWF4X210dTtcXG4gXFxuK1xcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVxcdTAwM2VkZmx0X3F2X3JzcmMudHhxX21vZGVsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlkcGZfaXNfY2FwX2VuYShhZGFwdGVyLCBJRFBGX09USEVSX0NBUFMsXFxuK1xcdFxcdFxcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxcbitcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gMTI4MDAwO1xcbitcXG4gXFx0ZGZsdF9mZWF0dXJlcyA9IE5FVElGX0ZfU0dcXHR8XFxuIFxcdFxcdFxcdE5FVElGX0ZfSElHSERNQTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjFjY2ZhZWIzNTE5MzVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuQEAgLTEsNiArMSw4IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gLyogQ29weXJpZ2h0IChDKSAyMDIzIEludGVsIENvcnBvcmF0aW9uICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0cG9sbC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcImlkcGYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlkcGZfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpZHBmX3ZpcnRjaG5sLmhcXFwiXFxuQEAgLTI0MDgsOSArMjQxMCwxMyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcyxcXG4gXFx0XFx0XFx0XFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxcbiB7XFxuLVxcdCoodTMyICopXFx1MDAyNmRlc2MtXFx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLVxcdTAwM2VkdHlwZSB8IHRkX2NtZCk7XFxuK1xcdCooX19sZTMyICopXFx1MDAyNmRlc2MtXFx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9IGNwdV90b19sZTMyKCh1OCkocGFyYW1zLVxcdTAwM2VkdHlwZSB8IHRkX2NtZCkpO1xcbiBcXHRkZXNjLVxcdTAwM2VmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7XFxuIFxcdGRlc2MtXFx1MDAzZWZsb3cucXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KHBhcmFtcy1cXHUwMDNlY29tcGxfdGFnKTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzBdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF07XFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzFdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzJdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl07XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0zMDExLDYgKzMwMTcsNTkgQEAgc3RhdGljIGJvb2wgaWRwZl90eF9zcGxpdHFfbmVlZF9yZShzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSlcXG4gXFx0cmV0dXJuIGdhcCBcXHUwMDNlPSBJRFBGX1RYX1NQTElUUV9SRV9NSU5fR0FQO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp0eF9xLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXFxuK3tcXG4rXFx0Y29uc3QgaW50IHRzX2dyYW5fcG93MiA9IDk7XFxuK1xcdHU2NCB0cywgbm93O1xcbitcXG4rXFx0LyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi9cXG4rXFx0aWYgKG5ldHBvbGxfdHhfcnVubmluZyhza2ItXFx1MDAzZWRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN3aXRjaCAoc2tiLVxcdTAwM2V0c3RhbXBfdHlwZSkge1xcbitcXHRjYXNlIFNLQl9DTE9DS19SRUFMVElNRTpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9hZGQoc2tiLVxcdTAwM2V0c3RhbXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0tCX0NMT0NLX01PTk9UT05JQzpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9tb25vX3RvX2FueShza2ItXFx1MDAzZXRzdGFtcCwgVEtfT0ZGU19UQUkpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0tCX0NMT0NLX1RBSTpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhza2ItXFx1MDAzZXRzdGFtcCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0bm93ID0ga3RpbWVfZ2V0X2Nsb2NrdGFpX25zKCk7XFxuK1xcdGlmICh0cyBcXHUwMDNjIG5vdylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogYmV5b25kIG9mZmxvYWQgaG9yaXpvbj8gc2V0IG92ZXJmbG93IGJpdCBvbmx5ICovXFxuK1xcdGlmICh0cyBcXHUwMDNlIG5vdyArICgodTY0KXNrYi1cXHUwMDNlZGV2LVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICogTlNFQ19QRVJfVVNFQykpIHtcXG4rXFx0XFx0dHhfcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAxIFxcdTAwM2NcXHUwMDNjIDc7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0dHMgXFx1MDAzZVxcdTAwM2U9IHRzX2dyYW5fcG93MjtcXG4rXFxuK1xcdC8qIDAgaXMgdmFsaWQgMjRiIHRpbWVzdGFtcCwgYnV0IGFsc28gbWVhbnMgZmllbGQgdW5zZXQuXFxuK1xcdCAqIEFkZCA1MTIgbnMgKHRzX2dyYW5fcG93MikgdG8gYXZvaWQgdGhpcyBjYXNlXFxuK1xcdCAqL1xcbitcXHRpZiAoKHRzIFxcdTAwMjYgMHg3ZmZmZmYpID09IDApIHtcXG4rXFx0XFx0dHhfcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF0gPSAxO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHR4X3BhcmFtcy1cXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgXFx1MDAyNiAweGZmO1xcbitcXHR0eF9wYXJhbXMtXFx1MDAzZW9mZmxvYWQuZGVzY190c1sxXSA9ICh0cyBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdHR4X3BhcmFtcy1cXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDdmKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGlkcGZfdHhfc3BsaXRxX2ZyYW1lIC0gU2VuZHMgYnVmZmVyIG9uIFR4IHJpbmcgdXNpbmcgZmxleCBkZXNjcmlwdG9yc1xcbiAgKiBAc2tiOiBzZW5kIGJ1ZmZlclxcbkBAIC0zMDk3LDYgKzMxNTYsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRcXHR0eF9wYXJhbXMuZHR5cGUgPSBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEU7XFxuIFxcdFxcdHR4X3BhcmFtcy5lb3BfY21kID0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9FT1A7XFxuK1xcbitcXHRcXHRpZiAoc2tiLVxcdTAwM2V0c3RhbXAgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pXFxuK1xcdFxcdFxcdGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUodHhfcSwgc2tiLCBcXHUwMDI2dHhfcGFyYW1zKTtcXG4rXFxuIFxcdFxcdC8qIFNldCB0aGUgUkUgYml0IHRvIHBlcmlvZGljYWxseSBcXFwiY2xlYW5cXFwiIHRoZSBkZXNjcmlwdG9yIHJpbmcuXFxuIFxcdFxcdCAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0XFxuIFxcdFxcdCAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5pbmRleCA0YmU1YjNiNmQzZWQyYi4uODY1NDA4YjU3YjBkNTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5AQCAtMTYxLDYgKzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHtcXG4gICogQHRzb19zZWdzOiBOdW1iZXIgb2Ygc2VnbWVudHMgdG8gYmUgc2VudFxcbiAgKiBAdHNvX2hkcl9sZW46IExlbmd0aCBvZiBoZWFkZXJzIHRvIGJlIGR1cGxpY2F0ZWRcXG4gICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3JcXG4rICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcFxcbiAgKi9cXG4gc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xcbiBcXHR1MzIgdHhfZmxhZ3M7XFxuQEAgLTE3NCw2ICsxNzUsNyBAQCBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7XFxuIFxcdHUxNiB0c29faGRyX2xlbjtcXG4gXFxuIFxcdHUxNiB0ZF9jbWQ7XFxuK1xcdHU4IGRlc2NfdHNbM107XFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXFxuQEAgLTg1LDYgKzg1LDggQEAgZW51bSB7XFxuICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlclxcbiAgKiBAaGRzX3RocmVzaDogUGFja2V0IHNpemUgdGhyZXNob2xkIGZvciBoZWFkZXIgZGF0YSBzcGxpdCAoSERTKVxcbiAgKiBAaGRzX3RocmVzaF9tYXg6IE1heGltdW0gc3VwcG9ydGVkIHNldHRpbmcgZm9yIEBoZHNfdGhyZXNob2xkXFxuKyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcXG4rICogQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjXFxuICAqXFxuICAqL1xcbiBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG5AQCAtOTcsNiArOTksOCBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG4gXFx0dTMyXFx0dHhfcHVzaF9idWZfbWF4X2xlbjtcXG4gXFx0dTMyXFx0aGRzX3RocmVzaDtcXG4gXFx0dTMyXFx0aGRzX3RocmVzaF9tYXg7XFxuK1xcdHUzMlxcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XFxuK1xcdHUzMlxcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTEwOCw2ICsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG4gICogQEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOOiBjYXB0dXJlIGZvciBzZXR0aW5nIHR4X3B1c2hfYnVmX2xlblxcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVDogY2FwdHVyZSBmb3Igc2V0dGluZyB0Y3BfZGF0YV9zcGxpdFxcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2hcXG4rICogQEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTjogY2FwdHVyZSBmb3Igc2V0dGluZyBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uXFxuICAqL1xcbiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xcbiBcXHRFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU5cXHRcXHQ9IEJJVCgwKSxcXG5AQCAtMTE3LDYgKzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XFxuIFxcdEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOXFx0PSBCSVQoNCksXFxuIFxcdEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVRcXHRcXHQ9IEJJVCg1KSxcXG4gXFx0RVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSU1xcdFxcdD0gQklUKDYpLFxcbitcXHRFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05cXHQ9IEJJVCg3KSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgX19FVEhfUlNTX0hBU0hfQklUKGJpdClcXHQoKHUzMikxIFxcdTAwM2NcXHUwMDNjIChiaXQpKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xcbiAgKlxcdEBkcGxsX3BpbjogUG9pbnRlciB0byB0aGUgU3luY0Ugc291cmNlIHBpbiBvZiBhIERQTEwgc3Vic3lzdGVtLFxcbiAgKlxcdFxcdCAgIHdoZXJlIHRoZSBjbG9jayBpcyByZWNvdmVyZWQuXFxuICAqXFxuLSAqXFx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggRURUIG9mZmxvYWQgaG9yaXpvbiBpbiBuc2VjLlxcbisgKlxcdEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBhY3RpdmUgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxcbisgKlxcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cXG4gICpcXHRAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSVxcbiAgKlxcdFxcdCAgICAgIHNldHRpbmdzLlxcbiAgKlxcdEBudW1fbmFwaV9jb25maWdzOlxcdG51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cyxcXG5AQCAtMjU1Miw3ICsyNTUzLDggQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiBcXHQvKiogQGlycV9tb2RlcjogZGltIHBhcmFtZXRlcnMgdXNlZCBpZiBJU19FTkFCTEVEKENPTkZJR19ESU1MSUIpLiAqL1xcbiBcXHRzdHJ1Y3QgZGltX2lycV9tb2RlclxcdCppcnFfbW9kZXI7XFxuIFxcbi1cXHR1NjRcXHRcXHRcXHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0dTMyXFx0XFx0XFx0cGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0dTMyXFx0XFx0XFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XFxuIFxcdHN0cnVjdCBuYXBpX2NvbmZpZ1xcdCpuYXBpX2NvbmZpZztcXG4gXFx0dTMyXFx0XFx0XFx0bnVtX25hcGlfY29uZmlncztcXG4gXFx0dTMyXFx0XFx0XFx0bmFwaV9kZWZlcl9oYXJkX2lycXM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuQEAgLTE5Myw2ICsxOTMsOCBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVgsXFxuIFxcdEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxcbiBcXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXFxuK1xcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxcbitcXHRFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVgsXFxuIFxcbiBcXHRfX0VUSFRPT0xfQV9SSU5HU19DTlQsXFxuIFxcdEVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSlcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xcbmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xcbisrKyBiL25ldC9jb3JlL3BrdGdlbi5jXFxuQEAgLTIwMSw2ICsyMDEsNyBAQFxcbiBcXHRwZihTVklEX1JORClcXHRcXHQvKiBSYW5kb20gU1ZMQU4gSUQgKi9cXHRcXHRcXHRcXFxcXFxuIFxcdHBmKE5PREUpXFx0XFx0LyogTm9kZSBtZW1vcnkgYWxsb2MqL1xcdFxcdFxcdFxcXFxcXG4gXFx0cGYoU0hBUkVEKVxcdFxcdC8qIFNoYXJlZCBTS0IgKi9cXHRcXHRcXHRcXFxcXFxuK1xcdHBmKFRYVElNRSlcXHRcXHQvKiBTT19UWFRJTUUgc3VwcG9ydCAqL1xcdFxcdFxcdFxcXFxcXG4gXFxuICNkZWZpbmUgcGYoZmxhZylcXHRcXHRmbGFnIyNfU0hJRlQsXFxuIGVudW0gcGt0X2ZsYWdzIHtcXG5AQCAtMjkxLDYgKzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1NjQgZGVsYXk7XFx0XFx0LyogbmFuby1zZWNvbmRzICovXFxuIFxcbitcXHQvKiBUWFRJTUUgc3VwcG9ydCAqL1xcbitcXHR1NjQgdHh0aW1lX2RlbGF5O1xcdC8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi9cXG4rXFx0Y2xvY2tpZF90IHR4dGltZV9jbG9ja2lkOyAvKiBjbG9ja2lkIGZvciBTT19UWFRJTUUgKi9cXG4rXFxuIFxcdF9fdTY0IGNvdW50O1xcdFxcdC8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovXFxuIFxcdF9fdTY0IHNvZmFyO1xcdFxcdC8qIEhvdyBtYW55IHBrdHMgd2UndmUgc2VudCBzbyBmYXIgKi9cXG4gXFx0X191NjQgdHhfYnl0ZXM7XFx0XFx0LyogSG93IG1hbnkgYnl0ZXMgd2UndmUgdHJhbnNtaXR0ZWQgKi9cXG5AQCAtNjY2LDYgKzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiBcXHRpZiAocGt0X2Rldi1cXHUwMDNlbm9kZSBcXHUwMDNlPSAwKVxcbiBcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiAgICAgbm9kZTogJWRcXFxcblxcXCIsIHBrdF9kZXYtXFx1MDAzZW5vZGUpO1xcbiBcXG4rXFx0aWYgKHBrdF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRl9UWFRJTUUpIHtcXG4rXFx0XFx0Y2xvY2tpZF90IGNsb2NraWQgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xcbitcXG4rXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIgICAgIHR4dGltZV9kZWxheTogJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXkpO1xcbitcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiAgICAgdHh0aW1lX2Nsb2NraWQ6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBjbG9ja2lkID09IENMT0NLX01PTk9UT05JQyA/IFxcXCJtb25vdG9uaWNcXFwiIDpcXG4rXFx0XFx0XFx0ICAgY2xvY2tpZCA9PSBDTE9DS19SRUFMVElNRSA/IFxcXCJyZWFsdGltZVxcXCIgOlxcbitcXHRcXHRcXHQgICBjbG9ja2lkID09IENMT0NLX1RBSSA/IFxcXCJ0YWlcXFwiIDogXFxcInVua25vd25cXFwiKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHBrdF9kZXYtXFx1MDAzZXhtaXRfbW9kZSA9PSBNX05FVElGX1JFQ0VJVkUpXFxuIFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIiAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXFxcXG5cXFwiKTtcXG4gXFx0ZWxzZSBpZiAocGt0X2Rldi1cXHUwMDNleG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVClcXG5AQCAtMTE0MSw2ICsxMTU3LDUwIEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi1cXHUwMDNlZGVsYXkpO1xcbiBcXHRcXHRyZXR1cm4gY291bnQ7XFxuIFxcdH1cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInR4dGltZV9kZWxheVxcXCIpKSB7XFxuK1xcdFxcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcXG4rXFx0XFx0bGVuID0gbnVtX2FyZyhcXHUwMDI2dXNlcl9idWZmZXJbaV0sIG1heCwgXFx1MDAyNnZhbHVlKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBsZW47XFxuK1xcbitcXHRcXHQvKiBpbiBxdWV1ZV94bWl0IG1vZGUgZnEgbWF5IGNsZWFyIHRzdGFtcCwgZG8gbm90IHJldXNlIHNrYiAqL1xcbitcXHRcXHRpZiAodmFsdWUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBrdF9kZXYtXFx1MDAzZWNsb25lX3NrYiBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpO1xcbitcXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIk9LOiB0eHRpbWVfZGVsYXk9JWxsdVxcXCIsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpdmFsdWUpO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdH1cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInR4dGltZV9jbG9ja2lkXFxcIikpIHtcXG4rXFx0XFx0Y2hhciBjbG9ja3N0clszMl07XFxuK1xcdFxcdGNsb2NraWRfdCBjbGs7XFxuK1xcbitcXHRcXHRtZW1zZXQoY2xvY2tzdHIsIDAsIHNpemVvZihjbG9ja3N0cikpO1xcbitcXHRcXHRtYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7XFxuK1xcdFxcdGxlbiA9IHN0cm5fbGVuKFxcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4KTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBsZW47XFxuK1xcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoY2xvY2tzdHIsIFxcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbGVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRcXHRpZiAoIXN0cmNtcChjbG9ja3N0ciwgXFxcIm1vbm90b25pY1xcXCIpKSB7XFxuK1xcdFxcdFxcdGNsayA9IENMT0NLX01PTk9UT05JQztcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcXFwicmVhbHRpbWVcXFwiKSkge1xcbitcXHRcXHRcXHRjbGsgPSBDTE9DS19SRUFMVElNRTtcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcXFwidGFpXFxcIikpIHtcXG4rXFx0XFx0XFx0Y2xrID0gQ0xPQ0tfVEFJO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIkVSUk9SOiB1bmtub3duIGNsb2NraWQgJyVzJ1xcXCIsXFxuK1xcdFxcdFxcdFxcdGNsb2Nrc3RyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHNwcmludGYocGdfcmVzdWx0LCBcXFwiT0s6IHR4dGltZV9jbG9ja2lkPSVzXFxcIiwgY2xvY2tzdHIpO1xcbitcXHRcXHRXUklURV9PTkNFKHBrdF9kZXYtXFx1MDAzZXR4dGltZV9jbG9ja2lkLCBjbGspO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdH1cXG4gXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInJhdGVcXFwiKSkge1xcbiBcXHRcXHRtYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7XFxuIFxcdFxcdGxlbiA9IG51bV9hcmcoXFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFxcdTAwMjZ2YWx1ZSk7XFxuQEAgLTEyMzgsNiArMTI5OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0aWYgKHZhbHVlIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAocGt0X2Rldi1cXHUwMDNlbl9pbWl4X2VudHJpZXMgXFx1MDAzZSAwIHx8XFxuIFxcdFxcdFxcdFxcdCAgIShwa3RfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEZfU0hBUkVEKSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRpZiAodmFsdWUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdHBrdF9kZXYtXFx1MDAzZWNsb25lX3NrYiA9IHZhbHVlO1xcbiBcXG5AQCAtMjMyMSw2ICsyMzgzLDIxIEBAIHN0YXRpYyB2b2lkIHBrdGdlbl9zZXR1cF9pbmplY3Qoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIH1cXG4gXFxuIFxcbitzdGF0aWMga3RpbWVfdCBrdGltZV9nZXRfY2xvY2soY2xvY2tpZF90IGNsb2NraWQpXFxuK3tcXG4rXFx0c3dpdGNoIChjbG9ja2lkKSB7XFxuK1xcdGNhc2UgQ0xPQ0tfUkVBTFRJTUU6XFxuK1xcdFxcdHJldHVybiBrdGltZV9nZXRfcmVhbCgpO1xcbitcXHRjYXNlIENMT0NLX01PTk9UT05JQzpcXG4rXFx0XFx0cmV0dXJuIGt0aW1lX2dldCgpO1xcbitcXHRjYXNlIENMT0NLX1RBSTpcXG4rXFx0XFx0cmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybiBrdGltZV9nZXQoKTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpXFxuIHtcXG4gXFx0a3RpbWVfdCBzdGFydF90aW1lLCBlbmRfdGltZTtcXG5AQCAtMzUxMCw3ICszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFxuIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiB7XFxuLVxcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNiBGX1NIQVJFRCk7XFxuK1xcdHUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKGZsYWdzIFxcdTAwMjYgRl9TSEFSRUQpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtXFx1MDAzZW9kZXY7XFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gXFx0dW5zaWduZWQgaW50IGJ1cnN0ID0gMTtcXG5AQCAtMzU0NSw2ICszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIFxcdC8qIElmIG5vIHNrYiBvciBjbG9uZSBjb3VudCBleGhhdXN0ZWQgdGhlbiBnZXQgbmV3IG9uZSAqL1xcbiBcXHRpZiAoIXBrdF9kZXYtXFx1MDAzZXNrYiB8fCAocGt0X2Rldi1cXHUwMDNlbGFzdF9vayBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICArK3BrdF9kZXYtXFx1MDAzZWNsb25lX2NvdW50IFxcdTAwM2U9IGNsb25lX3NrYikpIHtcXG4rXFx0XFx0dTY0IHR4dGltZV9kZWxheTtcXG4rXFxuIFxcdFxcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xcbiBcXHRcXHRrZnJlZV9za2IocGt0X2Rldi1cXHUwMDNlc2tiKTtcXG4gXFxuQEAgLTM1NTcsNiArMzYzNywxNiBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFx0XFx0fVxcbiBcXHRcXHRwa3RfZGV2LVxcdTAwM2VsYXN0X3BrdF9zaXplID0gcGt0X2Rldi1cXHUwMDNlc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdHBrdF9kZXYtXFx1MDAzZWNsb25lX2NvdW50ID0gMDtcXHQvKiByZXNldCBjb3VudGVyICovXFxuK1xcbitcXHRcXHR0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2RlbGF5KTtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRl9UWFRJTUUgXFx1MDAyNlxcdTAwMjYgdHh0aW1lX2RlbGF5KSB7XFxuK1xcdFxcdFxcdGNsb2NraWRfdCBjbGsgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xcbitcXHRcXHRcXHRrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdHh0aW1lX2RlbGF5KTtcXG4rXFxuK1xcdFxcdFxcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtXFx1MDAzZXNrYiwgdHh0aW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY2xrKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocGt0X2Rldi1cXHUwMDNlZGVsYXkgXFx1MDAyNlxcdTAwMjYgcGt0X2Rldi1cXHUwMDNlbGFzdF9vaylcXG5AQCAtMzg2OSw2ICszOTU5LDcgQEAgc3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxcbiBcXHRwa3RfZGV2LVxcdTAwM2VidXJzdCA9IDE7XFxuIFxcdHBrdF9kZXYtXFx1MDAzZW5vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdHBrdF9kZXYtXFx1MDAzZWZsYWdzID0gRl9TSEFSRUQ7XFx0LyogU0tCIHNoYXJlZCBieSBkZWZhdWx0ICovXFxuK1xcdHBrdF9kZXYtXFx1MDAzZXR4dGltZV9jbG9ja2lkID0gQ0xPQ0tfTU9OT1RPTklDO1xcbiBcXG4gXFx0ZXJyID0gcGt0Z2VuX3NldHVwX2Rldih0LVxcdTAwM2VuZXQsIHBrdF9kZXYsIGlmbmFtZSk7XFxuIFxcdGlmIChlcnIpXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG5pbmRleCAzMWM2NWE1NDVhMTA3Yy4uMmM3YTI0NWM1ZmZjMmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC0yMTU1LDcgKzIxNTUsNyBAQCBzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9UU09fTUFYX1NFR1MsXFxuIFxcdFxcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZXRzb19tYXhfc2VncykpIHx8XFxuIFxcdCAgICBubGFfcHV0X3VpbnQoc2tiLCBJRkxBX01BWF9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxcbi1cXHRcXHRcXHQgUkVBRF9PTkNFKGRldi1cXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fFxcbitcXHRcXHRcXHQgKHU2NClSRUFEX09OQ0UoZGV2LVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fFxcbiAjaWZkZWYgQ09ORklHX1JQU1xcbiBcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsXFxuIFxcdFxcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZW51bV9yeF9xdWV1ZXMpKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uYyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXFxuaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjVjMjMyM2FhYTAyYjZiIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5jXFxuKysrIGIvbmV0L2V0aHRvb2wvY29tbW9uLmNcXG5AQCAtOTU0LDYgKzk1NCw5IEBAIHZvaWQgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHQvKiBEcml2ZXIgZ2l2ZXMgdXMgY3VycmVudCBzdGF0ZSwgd2Ugd2FudCB0byByZXR1cm4gY3VycmVudCBjb25maWcgKi9cXG4gXFx0a3BhcmFtLVxcdTAwM2V0Y3BfZGF0YV9zcGxpdCA9IGRldi1cXHUwMDNlY2ZnLVxcdTAwM2VoZHNfY29uZmlnO1xcbiBcXHRrcGFyYW0tXFx1MDAzZWhkc190aHJlc2ggPSBkZXYtXFx1MDAzZWNmZy1cXHUwMDNlaGRzX3RocmVzaDtcXG4rXFxuK1xcdGtwYXJhbS1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0a3BhcmFtLVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi1cXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGV0aHRvb2xfaW5pdF90c2luZm8oc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbmluZGV4IDNlOTY5YTA3MGY5ZmU0Li5hZTdiNjUxYzY1OGY3NCAxMDA2NDRcXG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcXG4rKysgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcXG5AQCAtNDk0LDcgKzQ5NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9mZWF0dXJlc19zZXRfcG9saWN5W0VUSFRPT0xfQV9GRUFUVVJFU19XQU5UXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3NfZ2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0hFQURFUiArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19GTEFHUyArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3NfZ2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfSEVBREVSICsgMV07XFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCArIDFdO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0hFQURFUiArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfc2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfQ09NQklORURfQ09VTlQgKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NvYWxlc2NlX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NPQUxFU0NFX0hFQURFUiArIDFdO1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9yaW5ncy5jIGIvbmV0L2V0aHRvb2wvcmluZ3MuY1xcbmluZGV4IDkwNTRjODljNWQ3YmIyLi41MjE1ODU3MmZlMTBjMCAxMDA2NDRcXG4tLS0gYS9uZXQvZXRodG9vbC9yaW5ncy5jXFxuKysrIGIvbmV0L2V0aHRvb2wvcmluZ3MuY1xcbkBAIC00Miw2ICs0Miw4IEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuIFxcbiBcXHRkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnRjcF9kYXRhX3NwbGl0ID0gZGV2LVxcdTAwM2VjZmctXFx1MDAzZWhkc19jb25maWc7XFxuIFxcdGRhdGEtXFx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cXHUwMDNlY2ZnLVxcdTAwM2VoZHNfdGhyZXNoO1xcbitcXHRkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b24gPSBkZXYtXFx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b247XFxuK1xcdGRhdGEtXFx1MDAzZWtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSBkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xcbiBcXG4gXFx0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3JpbmdwYXJhbShkZXYsIFxcdTAwMjZkYXRhLVxcdTAwM2VyaW5ncGFyYW0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbkBAIC02OSw3ICs3MSw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbiBcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovXFxuIFxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIF9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYICovXFxuIFxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXFxuLVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cXG4rXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXFx0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYICovXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbkBAIC0xMjEsNyArMTI1LDEyIEBAIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxcbiBcXHRcXHRcXHQgIGtyLVxcdTAwM2VoZHNfdGhyZXNoKSB8fFxcbiBcXHQgICAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCxcXG4tXFx0XFx0XFx0ICBrci1cXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXFxuK1xcdFxcdFxcdCAga3ItXFx1MDAzZWhkc190aHJlc2hfbWF4KSkpIHx8XFxuK1xcdCAgICAoKHN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcXG4rXFx0XFx0XFx0ICBrci1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgfHxcXG4rXFx0ICAgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVgsXFxuK1xcdFxcdFxcdCAga3ItXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxcbiBcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE0NCw2ICsxNTMsNyBAQCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W10gPSB7XFxuIFxcdFtFVEhUT09MX0FfUklOR1NfUlhfUFVTSF1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgMSksXFxuIFxcdFtFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gXFx0W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4rXFx0W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnRcXG5AQCAtMTc3LDYgKzE4NywxNCBAQCBldGhubF9zZXRfcmluZ3NfdmFsaWRhdGUoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhKG9wcy1cXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFxcdTAwMjYgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OKSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgIHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0YltFVEhUT09MX0FfUklOR1NfQ1FFX1NJWkVdIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKG9wcy1cXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFxcdTAwMjYgRVRIVE9PTF9SSU5HX1VTRV9DUUVfU0laRSkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssXFxuQEAgLTI0Niw2ICsyNjQsOCBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0XFx0IHRiW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dLCBcXHUwMDI2bW9kKTtcXG4gXFx0ZXRobmxfdXBkYXRlX3UzMihcXHUwMDI2a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLFxcbiBcXHRcXHRcXHQgdGJbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdLCBcXHUwMDI2bW9kKTtcXG4rXFx0ZXRobmxfdXBkYXRlX3UzMihcXHUwMDI2a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLFxcbitcXHRcXHRcXHQgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLCBcXHUwMDI2bW9kKTtcXG4gXFx0aWYgKCFtb2QpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMjgxLDYgKzMwMSw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19UWF07XFxuIFxcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCBcXHUwMDNlIGtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaF9tYXgpXFxuIFxcdFxcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdO1xcbitcXHRlbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b24gXFx1MDAzZVxcbitcXHRcXHQga2VybmVsX3JpbmdwYXJhbS5tYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbilcXG4rXFx0XFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZXJyX2F0dHIgPSBOVUxMO1xcbiBcXHRpZiAoZXJyX2F0dHIpIHtcXG5AQCAtMzAyLDYgKzMyNSw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0cmV0ID0gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlc2V0X3JpbmdwYXJhbShkZXYsIFxcdTAwMjZyaW5ncGFyYW0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0ZGV2LVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0ga2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xcbitcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyByZXQgOiAxO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxLmMgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcXG5pbmRleCA3Y2FlMDgyYTk4NDcyMS4uMzYwMDZmNjlhODc1MzYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9mcS5jXFxuQEAgLTM5OSw2ICszOTksMTEgQEAgc3RhdGljIHN0cnVjdCBmcV9mbG93ICpmcV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICAgIFJFQURfT05DRShzay1cXHUwMDNlc2tfcGFjaW5nX3N0YXR1cykgIT0gU0tfUEFDSU5HX0ZRKVxcbiBcXHRcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2c2stXFx1MDAzZXNrX3BhY2luZ19zdGF0dXMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgU0tfUEFDSU5HX0ZRKTtcXG4rXFxuK1xcdFxcdGlmIChxLVxcdTAwM2VvZmZsb2FkX2hvcml6b24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGZxX3NrYl9jYihza2IpLVxcdTAwM2V0aW1lX3RvX3NlbmQgXFx1MDAzYz0gbm93KVxcbitcXHRcXHRcXHRza2ItXFx1MDAzZXRzdGFtcCA9IDA7XFxuK1xcbiBcXHRcXHRyZXR1cm4gXFx1MDAyNnEtXFx1MDAzZWludGVybmFsO1xcbiBcXHR9XFxuIFxcbkBAIC03MDcsNiArNzEyLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiBcXHRzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gXFx0c3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kO1xcbiBcXHRzdHJ1Y3QgZnFfZmxvd19oZWFkICpoZWFkO1xcbitcXHR1NjQgdGltZV9uZXh0X3BhY2tldDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0c3RydWN0IGZxX2Zsb3cgKmY7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcXG5AQCAtNzIxLDcgKzcyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gXFx0aWYgKHNrYikge1xcbiBcXHRcXHRxLVxcdTAwM2VpbnRlcm5hbC5xbGVuLS07XFxuIFxcdFxcdGZxX2RlcXVldWVfc2tiKHNjaCwgXFx1MDAyNnEtXFx1MDAzZWludGVybmFsLCBza2IpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0cmV0dXJuIHNrYjtcXG4gXFx0fVxcbiBcXG4gXFx0bm93ID0ga3RpbWVfZ2V0X25zKCk7XFxuQEAgLTc1OCw4ICs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuIFxcbiBcXHRza2IgPSBmcV9wZWVrKGYpO1xcbiBcXHRpZiAoc2tiKSB7XFxuLVxcdFxcdHU2NCB0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cXHUwMDNldGltZV90b19zZW5kLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xcbitcXHRcXHR0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cXHUwMDNldGltZV90b19zZW5kLFxcbitcXHRcXHRcXHRcXHRcXHQgZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XFxuIFxcbiBcXHRcXHRpZiAobm93ICsgcS1cXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFxcdTAwM2MgdGltZV9uZXh0X3BhY2tldCkge1xcbiBcXHRcXHRcXHRoZWFkLVxcdTAwM2VmaXJzdCA9IGYtXFx1MDAzZW5leHQ7XFxuQEAgLTgyOCwxMSArODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gXFx0XFx0ICogZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCB3YXMgc2V0IHdoZW4gcHJpb3IgcGFja2V0IHdhcyBzZW50LFxcbiBcXHRcXHQgKiBhbmQgY3VycmVudCB0aW1lIChAbm93KSBjYW4gYmUgdG9vIGxhdGUgYnkgdGVucyBvZiB1cy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChmLVxcdTAwM2V0aW1lX25leHRfcGFja2V0KVxcbitcXHRcXHRpZiAoZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCBcXHUwMDI2XFx1MDAyNiBmLVxcdTAwM2V0aW1lX25leHRfcGFja2V0IFxcdTAwM2Mgbm93KVxcbiBcXHRcXHRcXHRsZW4gLT0gbWluKGxlbi8yLCBub3cgLSBmLVxcdTAwM2V0aW1lX25leHRfcGFja2V0KTtcXG4gXFx0XFx0Zi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCA9IG5vdyArIGxlbjtcXG4gXFx0fVxcbitcXG4gb3V0OlxcbitcXHRpZiAocS1cXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFxcdTAwMjZcXHUwMDI2IHRpbWVfbmV4dF9wYWNrZXQgXFx1MDAzYz0gbm93KVxcbitcXHRcXHRza2ItXFx1MDAzZXRzdGFtcCA9IDA7XFxuK1xcbiBcXHRyZXR1cm4gc2tiO1xcbiB9XFxuIFxcbkBAIC0xMTc5LDcgKzExODksOCBAQCBzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbiBcXHRcXHR1NjQgb2ZmbG9hZF9ob3Jpem9uID0gKHU2NClOU0VDX1BFUl9VU0VDICpcXG4gXFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF91MzIodGJbVENBX0ZRX09GRkxPQURfSE9SSVpPTl0pO1xcbiBcXG4tXFx0XFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcXHUwMDNjPSBxZGlzY19kZXYoc2NoKS1cXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHtcXG4rXFx0XFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcXHUwMDNjPVxcbitcXHRcXHQgICAgKHU2NClxZGlzY19kZXYoc2NoKS1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbiAqIE5TRUNfUEVSX1VTRUMpIHtcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VvZmZsb2FkX2hvcml6b24sIG9mZmxvYWRfaG9yaXpvbik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJpbnZhbGlkIG9mZmxvYWRfaG9yaXpvblxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zZXR0aW5ncyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjQ3OGU2ODQ4NDZhMTZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc2V0dGluZ3NcXG5AQCAtMCwwICsxIEBAXFxuK3RpbWVvdXQ9MjQwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcXG5pbmRleCA1NWEzODZmM2QxYjkwZi4uNmU2NGJhYTRjNjBkZDkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xcbkBAIC00Miw4ICs0MiwxMCBAQCBzdGF0aWMgYm9vbFxcdGNmZ19tYWNoaW5lX3Nsb3c7XFxuIHN0YXRpYyB1aW50NjRfdFxcdGNmZ19zdGFydF90aW1lX25zO1xcbiBzdGF0aWMgaW50XFx0Y2ZnX21hcms7XFxuIHN0YXRpYyBib29sXFx0Y2ZnX3J4O1xcbitzdGF0aWMgYm9vbFxcdGNmZ192ZXJpZnlfaHdfb2ZmbG9hZDtcXG4gXFxuIHN0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydDtcXG4rc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0X3JlYWw7XFxuIHN0YXRpYyB1aW50NjRfdCB0ZGVsaXZlcl9tYXg7XFxuIFxcbiBzdGF0aWMgaW50IGVycm9ycztcXG5AQCAtMTU4LDE4ICsxNjAsNzAgQEAgc3RhdGljIHZvaWQgZG9fcmVjdl92ZXJpZnlfZW1wdHkoaW50IGZkcilcXG4gXFx0XFx0ZXJyb3IoMSwgMCwgXFxcInJlY3Y6IG5vdCBlbXB0eSBhcyBleHBlY3RlZCAoJWQsICVkKVxcXCIsIHJldCwgZXJybm8pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxcbitzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycixcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgcGF5bG9hZF9jaGFyKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7XFxuK1xcdGludDY0X3QgdHN0YW1wID0gMDtcXG4rXFxuK1xcdHN3aXRjaCAoZXJyLVxcdTAwM2VlZV9lcnJubykge1xcbitcXHRjYXNlIEVDQU5DRUxFRDpcXG4rXFx0XFx0aWYgKGVyci1cXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXFxuK1xcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVyci1cXHUwMDNlZWVfY29kZSk7XFxuK1xcdFxcdHJlYXNvbiA9IFxcXCJtaXNzZWQgdHh0aW1lXFxcIjtcXG4rXFx0YnJlYWs7XFxuK1xcdGNhc2UgRUlOVkFMOlxcbitcXHRcXHRpZiAoZXJyLVxcdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX0lOVkFMSURfUEFSQU0pXFxuK1xcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVyci1cXHUwMDNlZWVfY29kZSk7XFxuK1xcdFxcdHJlYXNvbiA9IFxcXCJpbnZhbGlkIHR4dGltZVxcXCI7XFxuK1xcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgIGVyci1cXHUwMDNlZWVfZXJybm8sIGVyci1cXHUwMDNlZWVfY29kZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHRzdGFtcCA9ICgoaW50NjRfdCllcnItXFx1MDAzZWVlX2RhdGEpIFxcdTAwM2NcXHUwMDNjIDMyIHwgZXJyLVxcdTAwM2VlZV9pbmZvO1xcbitcXHR0c3RhbXAgLT0gKGludDY0X3QpZ2xvYl90c3RhcnQ7XFxuK1xcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJzZW5kOiBwa3QgJWMgYXQgJVxcXCIgUFJJZDY0IFxcXCJtcyBkcm9wcGVkOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0cGF5bG9hZF9jaGFyLCB0c3RhbXAsIHJlYXNvbik7XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcylcXG4re1xcbitcXHRpbnQ2NF90IHRzO1xcbitcXG4rXFx0dHMgPSB0c3MtXFx1MDAzZXRzWzBdLnR2X3NlYztcXG4rXFx0dHMgKj0gMTAwMFVMTCAqIDEwMDAgKiAxMDAwO1xcbitcXHR0cyArPSB0c3MtXFx1MDAzZXRzWzBdLnR2X25zZWM7XFxuK1xcdHRzIC09IGdsb2JfdHN0YXJ0X3JlYWw7XFxuK1xcdHRzIC89IDEwMDA7XFxuK1xcbitcXHRpZiAodHMgXFx1MDAzZSBjZmdfdmFyaWFuY2VfdXMpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJzdyBkZWxheSAlXFxcIiBQUklkNjQgXFxcInVzIGV4Y2VlZHMgYm91bmRzXFxcXG5cXFwiLCB0cyk7XFxuK1xcdFxcdGlmICghY2ZnX21hY2hpbmVfc2xvdylcXG4rXFx0XFx0XFx0ZXJyb3JzKys7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlKGludCBmZHQpXFxuIHtcXG4gXFx0Y2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VycikpICtcXG4rXFx0XFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZykpICtcXG4gXFx0XFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSldID0gezB9O1xcbiBcXHRjaGFyIGRhdGFbc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArXFxuIFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgMV07XFxuK1xcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3M7XFxuIFxcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyO1xcbiBcXHRpbnQgcmV0LCBudW1fdHN0YW1wID0gMDtcXG4gXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7MH07XFxuIFxcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7MH07XFxuIFxcdHN0cnVjdCBjbXNnaGRyICpjbTtcXG4tXFx0aW50NjRfdCB0c3RhbXAgPSAwO1xcbiBcXG4gXFx0aW92Lmlvdl9iYXNlID0gZGF0YTtcXG4gXFx0aW92Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7XFxuQEAgLTE4MSw4ICsyMzUsNiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxcbiBcXHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XFxuIFxcbiBcXHR3aGlsZSAoMSkge1xcbi1cXHRcXHRjb25zdCBjaGFyICpyZWFzb24gPSBOVUxMO1xcbi1cXG4gXFx0XFx0cmV0ID0gcmVjdm1zZyhmZHQsIFxcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XFxuIFxcdFxcdGlmIChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUFHQUlOKVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMTkyLDQyICsyNDQsMzIgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcXG4gXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiBmbGFncyAweCV4XFxcXG5cXFwiLCBtc2cubXNnX2ZsYWdzKTtcXG4gXFxuIFxcdFxcdGNtID0gQ01TR19GSVJTVEhEUihcXHUwMDI2bXNnKTtcXG4rXFx0XFx0dHNzID0gTlVMTDtcXG4rXFxuK1xcdFxcdGlmIChjbS1cXHUwMDNlY21zZ19sZXZlbCA9PSBTT0xfU09DS0VUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjbS1cXHUwMDNlY21zZ190eXBlID09IFNDTV9USU1FU1RBTVBJTkcpIHtcXG4rXFx0XFx0XFx0dHNzID0gKHZvaWQgKilDTVNHX0RBVEEoY20pO1xcbitcXHRcXHRcXHRjbSA9IENNU0dfTlhUSERSKFxcdTAwMjZtc2csIGNtKTtcXG4rXFx0XFx0XFx0aWYgKCFjbSlcXG4rXFx0XFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcInRpbWVzdGFtcCBtaXNzaW5nIGlwIGVyclxcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGlmIChjbS1cXHUwMDNlY21zZ19sZXZlbCAhPSBjZmdfZXJycV9sZXZlbCB8fFxcbiBcXHRcXHQgICAgY20tXFx1MDAzZWNtc2dfdHlwZSAhPSBjZmdfZXJycV90eXBlKVxcbiBcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IHR5cGUgMHgleC4weCV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgY20tXFx1MDAzZWNtc2dfbGV2ZWwsIGNtLVxcdTAwM2VjbXNnX3R5cGUpO1xcbiBcXG4gXFx0XFx0ZXJyID0gKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbSk7XFxuLVxcdFxcdGlmIChlcnItXFx1MDAzZWVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fVFhUSU1FKVxcbitcXHRcXHRpZiAoZXJyLVxcdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RYVElNRSlcXG4rXFx0XFx0XFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZGF0YVtyZXQgLSAxXSk7XFxuK1xcdFxcdGVsc2UgaWYgKGVyci1cXHUwMDNlZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgXFx1MDAyNlxcdTAwMjYgdHNzKVxcbitcXHRcXHRcXHRkb19yZWN2X2VycnF1ZXVlX3RpbWVzdGFtcGluZyhlcnIsIHRzcyk7XFxuK1xcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiBvcmlnaW4gMHgleFxcXFxuXFxcIiwgZXJyLVxcdTAwM2VlZV9vcmlnaW4pO1xcbiBcXG4tXFx0XFx0c3dpdGNoIChlcnItXFx1MDAzZWVlX2Vycm5vKSB7XFxuLVxcdFxcdGNhc2UgRUNBTkNFTEVEOlxcbi1cXHRcXHRcXHRpZiAoZXJyLVxcdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX01JU1NFRClcXG4tXFx0XFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4tXFx0XFx0XFx0cmVhc29uID0gXFxcIm1pc3NlZCB0eHRpbWVcXFwiO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBFSU5WQUw6XFxuLVxcdFxcdFxcdGlmIChlcnItXFx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcXG4tXFx0XFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4tXFx0XFx0XFx0cmVhc29uID0gXFxcImludmFsaWQgdHh0aW1lXFxcIjtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9lcnJubywgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0dHN0YW1wID0gKChpbnQ2NF90KSBlcnItXFx1MDAzZWVlX2RhdGEpIFxcdTAwM2NcXHUwMDNjIDMyIHwgZXJyLVxcdTAwM2VlZV9pbmZvO1xcbi1cXHRcXHR0c3RhbXAgLT0gKGludDY0X3QpIGdsb2JfdHN0YXJ0O1xcbi1cXHRcXHR0c3RhbXAgLz0gMTAwMCAqIDEwMDA7XFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwic2VuZDogcGt0ICVjIGF0ICVcXFwiIFBSSWQ2NCBcXFwibXMgZHJvcHBlZDogJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdGRhdGFbcmV0IC0gMV0sIHRzdGFtcCwgcmVhc29uKTtcXG4tXFxuIFxcdFxcdG1zZy5tc2dfZmxhZ3MgPSAwO1xcbiBcXHRcXHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XFxuLVxcdFxcdG51bV90c3RhbXArKztcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIG51bV90c3RhbXA7XFxuQEAgLTI0NSwxMiArMjg3LDEzIEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJycXVldWVfbXNncyhpbnQgZmR0KVxcbiBcXHRcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInBvbGxcXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgKHBmZC5yZXZlbnRzIFxcdTAwMjYgUE9MTEVSUikpXFxuLVxcdFxcdFxcdG51bV90c3RhbXAgKz0gZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGZkdCk7XFxuK1xcdFxcdFxcdG51bV90c3RhbXAgKz0gZG9fcmVjdl9lcnJxdWV1ZShmZHQpO1xcbiBcXG4gXFx0XFx0aWYgKG51bV90c3RhbXAgPT0gY2ZnX251bV9wa3QpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0fSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgXFx1MDAzYyB0ZGVsaXZlcl9tYXgpO1xcbitcXHR9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSBcXHUwMDNjXFxuK1xcdFxcdCB0ZGVsaXZlcl9tYXggKyAoY2ZnX3ZhcmlhbmNlX3VzICogMTAwMCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzdGFydF90aW1lX3dhaXQodm9pZClcXG5AQCAtMjk1LDYgKzMzOCwxOCBAQCBzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZShpbnQgZmQpXFxuIFxcdFxcdGVycm9yKDEsIDAsIFxcXCJnZXRzb2Nrb3B0IHR4dGltZTogbWlzbWF0Y2hcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgc2V0c29ja29wdF90eHRpbWVzdGFtcGluZyhpbnQgZmQpXFxuK3tcXG4rXFx0aW50IHZhbCA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxcbitcXHRcXHQgIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgfFxcbitcXHRcXHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEIHxcXG4rXFx0XFx0ICBTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk7XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLFxcbitcXHRcXHQgICAgICAgXFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgdGltZXN0YW1waW5nXFxcIik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4ge1xcbiBcXHRpbnQgZmQ7XFxuQEAgLTMwOCw2ICszNjMsOSBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXFxuIFxcbiBcXHRzZXRzb2Nrb3B0X3R4dGltZShmZCk7XFxuIFxcbitcXHRpZiAoY2ZnX3ZlcmlmeV9od19vZmZsb2FkKVxcbitcXHRcXHRzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGZkKTtcXG4rXFxuIFxcdGlmIChjZmdfbWFyayBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgXFx1MDAyNmNmZ19tYXJrLCBzaXplb2YoY2ZnX21hcmspKSlcXG4gXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzZXRzb2Nrb3B0IG1hcmtcXFwiKTtcXG5AQCAtMzE3LDcgKzM3NSw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4gXFxuIHN0YXRpYyBpbnQgc2V0dXBfcngoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4ge1xcbi1cXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSAxMDAgKiAxMDAwIH07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDYwMCAqIDEwMDAgfTtcXG4gXFx0aW50IGZkO1xcbiBcXG4gXFx0ZmQgPSBzb2NrZXQoYWRkci1cXHUwMDNlc2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTtcXG5AQCAtMzQ4LDYgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX3Rlc3RfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4gXFxuIFxcdHN0YXJ0X3RpbWVfd2FpdCgpO1xcbiBcXHRnbG9iX3RzdGFydCA9IGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpO1xcbitcXHRnbG9iX3RzdGFydF9yZWFsID0gZ2V0dGltZV9ucyhDTE9DS19SRUFMVElNRSk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2ZnX251bV9wa3Q7IGkrKylcXG4gXFx0XFx0ZG9fc2VuZF9vbmUoZmR0LCBcXHUwMDI2Y2ZnX2J1ZltpXSk7XFxuQEAgLTQ0MCwxMCArNDk5LDExIEBAIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKVxcbiBcXHRcXHRcXHRcXFwiICAtNiAgICAgICAgICAgIG9ubHkgSVB2NlxcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICAtYyBcXHUwMDNjY2xvY2tcXHUwMDNlICAgIG1vbm90b25pYyBvciB0YWkgKGRlZmF1bHQpXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgIC1EIFxcdTAwM2NhZGRyXFx1MDAzZSAgICAgZGVzdGluYXRpb24gSVAgYWRkcmVzcyAoc2VydmVyKVxcXFxuXFxcIlxcbi1cXHRcXHRcXHRcXFwiICAtUyBcXHUwMDNjYWRkclxcdTAwM2UgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXFxcXG5cXFwiXFxuK1xcdFxcdFxcdFxcXCIgIC1oICAgICAgICAgICAgdmVyaWZ5IGhhcmR3YXJlIG9mZmxvYWQgKHR4KVxcXFxuXFxcIlxcbitcXHRcXHRcXHRcXFwiICAtbSBcXHUwMDNjbWFya1xcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgIC1yICAgICAgICAgICAgcnVuIHJ4IG1vZGVcXFxcblxcXCJcXG4rXFx0XFx0XFx0XFxcIiAgLVMgXFx1MDAzY2FkZHJcXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICAtdCBcXHUwMDNjbnNlY1xcdTAwM2UgICAgIHN0YXJ0IHRpbWUgKFVUQyBuYW5vc2Vjb25kcylcXFxcblxcXCJcXG4tXFx0XFx0XFx0XFxcIiAgLW0gXFx1MDAzY21hcmtcXHUwMDNlICAgICBzb2NrZXQgbWFya1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRwcm9nbmFtZSk7XFxuIFxcdGV4aXQoMSk7XFxuQEAgLTQ1NSw3ICs1MTUsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0aW50IGRvbWFpbiA9IFBGX1VOU1BFQztcXG4gXFx0aW50IGM7XFxuIFxcbi1cXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIjQ2YzpTOkQ6cnQ6bTpcXFwiKSkgIT0gLTEpIHtcXG4rXFx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCI0NmM6RDpobTpyUzp0OlxcXCIpKSAhPSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKGMpIHtcXG4gXFx0XFx0Y2FzZSAnNCc6XFxuIFxcdFxcdFxcdGlmIChkb21haW4gIT0gUEZfVU5TUEVDKVxcbkBAIC00ODIsMjEgKzU0MiwyNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwidW5rbm93biBjbG9jayBpZCAlc1xcXCIsIG9wdGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdTJzpcXG4tXFx0XFx0XFx0c2FkZHIgPSBvcHRhcmc7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdEJzpcXG4gXFx0XFx0XFx0ZGFkZHIgPSBvcHRhcmc7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdoJzpcXG4rXFx0XFx0XFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ20nOlxcbitcXHRcXHRcXHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAncic6XFxuIFxcdFxcdFxcdGNmZ19yeCA9IHRydWU7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdTJzpcXG4rXFx0XFx0XFx0c2FkZHIgPSBvcHRhcmc7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICd0JzpcXG4gXFx0XFx0XFx0Y2ZnX3N0YXJ0X3RpbWVfbnMgPSBzdHJ0b2xsKG9wdGFyZywgTlVMTCwgMCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdtJzpcXG4tXFx0XFx0XFx0Y2ZnX21hcmsgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdHVzYWdlKGFyZ3ZbMF0pO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxcbmluZGV4IGFkZjZjODQ4ZDZkODBmLi43Yjc1YTMzZjVjNDNmOCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcXG5AQCAtMTIsMTAgKzEyLDEzIEBAIGltcG9ydCB0aW1lXFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X3ZhcmlhbnRzXFxuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBLc2Z0U2tpcEV4XFxuIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgYmtnLCBjbWQsIGRlZmVyLCB0Y1xcbitmcm9tIGxpYi5weSBpbXBvcnQgRXRodG9vbEZhbWlseSwgTmxFcnJvclxcbiBcXG4gXFxuIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6XFxuICAgICBcXFwiXFxcIlxcXCJNYWluIGZ1bmN0aW9uLiBSdW4gc29fdHh0aW1lIGFzIHNlbmRlciBhbmQgcmVjZWl2ZXIuXFxcIlxcXCJcXFwiXFxuKyAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcXG4rXFxuICAgICBzbG93X21hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgnS1NGVF9NQUNISU5FX1NMT1cnKVxcbiBcXG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXFxcImJpbl9yZW1vdGVcXFwiKTpcXG5AQCAtMzgsNiArNDEsMzQgQEAgZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKTpcXG4gICAgICAgICBjbWQoY21kX3R4KVxcbiBcXG4gXFxuK2RlZiBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCJDb25maWd1cmUgcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi5cXFwiXFxcIlxcXCJcXG4rICAgIGV0aG5sID0gRXRodG9vbEZhbWlseSgpXFxuK1xcbisgICAgdHJ5OlxcbisgICAgICAgIHJpbmdzID0gZXRobmwucmluZ3NfZ2V0KHsnaGVhZGVyJzogeydkZXYtaW5kZXgnOiBjZmcuaWZpbmRleH19KVxcbisgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdyaW5nLWdldCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZScpIGZyb20gZVxcbitcXG4rICAgIGlmICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJyBub3QgaW4gcmluZ3Mgb3IgXFxcXFxcbisgICAgICAgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JyBub3QgaW4gcmluZ3M6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgncGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZScpXFxuK1xcbisgICAgaWYgcmluZ3NbJ3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4J10gXFx1MDAzYyA1MF8wMDA6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgncGFjaW5nIG9mZmxvYWQgbWF4IGhvcml6b24gdG9vIHNtYWxsJylcXG4rXFxuKyAgICBjdXJfaG9yaXpvbiA9IHJpbmdzWydwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJ11cXG4rICAgIG5ld19ob3Jpem9uID0gNTBfMDAwXFxuKyAgICBldGhubC5yaW5nc19zZXQoe1xcbisgICAgICAgICdoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fSxcXG4rICAgICAgICAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbic6IG5ld19ob3Jpem9uLFxcbisgICAgfSlcXG4rICAgIGRlZmVyKGV0aG5sLnJpbmdzX3NldCwge1xcbisgICAgICAgICdoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fSxcXG4rICAgICAgICAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbic6IGN1cl9ob3Jpem9uXFxuKyAgICB9KVxcbitcXG4rXFxuIGRlZiBfcWRpc2Nfc2V0dXAoaWZuYW1lLCBxZGlzYywgb3B0YXJncz1cXFwiXFxcIik6XFxuICAgICBcXFwiXFxcIlxcXCJSZXBsYWNlIHJvb3QgcWRpc2MuIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGFmdGVyIHRoZSB0ZXN0LlxcbiBcXG5AQCAtNTYsNiArODcsNyBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZnEoKTpcXG4gICAgICAgICAgICAgW1xcXCJvbmVfcGt0XFxcIiwgXFxcImEsMTBcXFwiLCBcXFwiYSwxMFxcXCJdLFxcbiAgICAgICAgICAgICBbXFxcImluX29yZGVyXFxcIiwgXFxcImEsMTAsYiwyMFxcXCIsIFxcXCJhLDEwLGIsMjBcXFwiXSxcXG4gICAgICAgICAgICAgW1xcXCJyZXZlcnNlX29yZGVyXFxcIiwgXFxcImEsMjAsYiwxMFxcXCIsIFxcXCJiLDEwLGEsMjBcXFwiXSxcXG4rICAgICAgICAgICAgW1xcXCJiZXlvbmRfaHdfaG9yaXpvblxcXCIsIFxcXCJhLDcwXFxcIiwgXFxcImEsNzBcXFwiXSxcXG4gICAgICAgICBdOlxcbiAgICAgICAgICAgICBuYW1lID0gZlxcXCJ2e2lwdmVyfV97dGVzdGNhc2VbMF19XFxcIlxcbiAgICAgICAgICAgICB5aWVsZCBLc2Z0TmFtZWRWYXJpYW50KG5hbWUsIGlwdmVyLCB0ZXN0Y2FzZVsxXSwgdGVzdGNhc2VbMl0pXFxuQEAgLTY0LDE1ICs5Niw0MiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZnEoKTpcXG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8oY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyAoZnEpIHRlc3RzLlxcXCJcXFwiXFxcIlxcbi0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXFxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXFxcImZxXFxcIilcXG4gICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXFxcIm1vbm9cXFwiLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSlcXG4gXFxuIFxcbitAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxcbitkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcXG4rICAgIFxcXCJcXFwiXFxcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIGZxIHRlc3RzLCB3aXRoIG9mZmxvYWQgaG9yaXpvbi5cXFwiXFxcIlxcXCJcXG4rICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxcbitcXG4rICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxcbisgICAgdHJ5OlxcbisgICAgICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcXFwiZnFcXFwiLCBcXFwib2ZmbG9hZF9ob3Jpem9uIDUwbXNcXFwiKVxcbisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcIm5ldGRldiBkb2VzIG5vdCBzdXBwb3J0IG9mZmxvYWQuIHNraXBwaW5nXFxcIikgZnJvbSBlXFxuK1xcbisgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHVzZSBvbmx5IGh3IHBhY2luZywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uLlxcbisgICAgaHdfb25seSA9IFxcXCItaFxcXCIgaWYgYXJnc190eCAhPSBcXFwiYSw3MFxcXCIgZWxzZSBcXFwiXFxcIlxcbisgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcXFwibW9ub1xcXCIsIGlwdmVyLCBmXFxcIntod19vbmx5fSB7YXJnc190eH1cXFwiLCBhcmdzX3J4LCBUcnVlKVxcbitcXG4rXFxuK0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXFxuK2RlZiB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcXG4rICAgIFxcXCJcXFwiXFxcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIHRlc3RzLCB3aXRob3V0IGZxIHBhY2luZyBzdyBiYWNrdXAuXFxcIlxcXCJcXFwiXFxuKyAgICBjZmcucmVxdWlyZV9uc2ltKG5zaW1fdGVzdD1GYWxzZSlcXG4rXFxuKyAgICBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZylcXG4rICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcXFwicGZpZm9fZmFzdFxcXCIpXFxuK1xcbisgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHBhc3MsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbiB3aXRob3V0IHN3IGZhbGxiYWNrLlxcbisgICAgZXhwZWN0X3Bhc3MgPSBub3QgYXJnc190eCA9PSBcXFwiYSw3MFxcXCJcXG4rICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXFxcIm1vbm9cXFwiLCBpcHZlciwgZlxcXCItaCB7YXJnc190eH1cXFwiLCBhcmdzX3J4LCBleHBlY3RfcGFzcylcXG4rXFxuK1xcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfdGFpKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxcbiAgICAgXFxcIlxcXCJcXFwiUnVuIGFsbCB2YXJpYW50cyBvZiBmcSB0ZXN0cywgYnV0IHBhc3MgQ0xPQ0tfVEFJIHRvIHRlc3QgY29udmVyc2lvbi5cXFwiXFxcIlxcXCJcXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxcbiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFxcXCJmcVxcXCIpXFxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFxcXCJ0YWlcXFwiLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSlcXG4gXFxuQEAgLTk1LDcgKzE1NCw2IEBAIGRlZiBfdGVzdF92YXJpYW50c19ldGYoKTpcXG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZXRmKCkpXFxuIGRlZiB0ZXN0X3NvX3R4dGltZV9ldGYoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X2ZhaWwpOlxcbiAgICAgXFxcIlxcXCJcXFwiUnVuIGFsbCB2YXJpYW50cyBvZiBldGYgdGVzdHMuXFxcIlxcXCJcXFwiXFxuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcXG4gICAgIHRyeTpcXG4gICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXFxcImV0ZlxcXCIsIFxcXCJjbG9ja2lkIENMT0NLX1RBSSBkZWx0YSA0MDAwMDBcXFwiKVxcbiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOlxcbkBAIC0xMDgsNyArMTY2LDEzIEBAIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIFxcXCJcXFwiXFxcIkJvaWxlcnBsYXRlIGtzZnQgbWFpbi5cXFwiXFxcIlxcXCJcXG4gICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcXG4gICAgICAgICBrc2Z0X3J1bihcXG4tICAgICAgICAgICAgW3Rlc3Rfc29fdHh0aW1lX2ZxX21vbm8sIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwgdGVzdF9zb190eHRpbWVfZXRmXSxcXG4rICAgICAgICAgICAgW1xcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ubyxcXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcsXFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyxcXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSxcXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2V0ZixcXG4rICAgICAgICAgICAgXSxcXG4gICAgICAgICAgICAgYXJncz0oY2ZnLCksXFxuICAgICAgICAgKVxcbiAgICAga3NmdF9leGl0KClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MDUuMzA5MzU2MjkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTU3MDcwNjU5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9GUVwiLFxuICAgIFwiTkVUX1BLVEdFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3NldF9yaW5nc1wiLFxuICAgIFwicmluZ3NfZmlsbF9yZXBseVwiLFxuICAgIFwiZnFfY2hhbmdlXCIsXG4gICAgXCJwa3RnZW5faWZfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgcmluZyBwYXJhbWV0ZXIgYHBhY2luZ19vZmZsb2FkX2hvcml6b25gIGFuZCBtb2RpZmllcyBgc2NoX2ZxYCB0byB1c2UgaXQuIEl0IGFsc28gYWRkcyBgU09fVFhUSU1FYCBzdXBwb3J0IHRvIGBwa3RnZW5gLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIG5ldGxpbmsgaW50ZXJmYWNlcywgYW5kIHBhY2tldCBnZW5lcmF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA1MWZkODJkYzNiM2U0OGNlN2U1OWNlODk3MDcxNzNmZTBhNDFkMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMTo1MzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uNDhmNDNkZGEyZTZlNWUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5AQCAtNDQ4LDYgKzQ0OCwxMiBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBoZHMtdGhyZXNoLW1heFxuICAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcbisgICAgICAgIHR5cGU6IHUzMlxuIFxuICAgLVxuICAgICBuYW1lOiBtbS1zdGF0XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XG5pbmRleCA1MTJmNmQ2ZmEzZDhmOC4uM2I5Y2UxYzZlMTA1NzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdFxuQEAgLTE4Myw3ICsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcbiBzdHJ1Y3QgZHBsbF9waW4qICAgICAgICAgICAgICAgICAgICBkcGxsX3BpblxuIHN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIHBhZ2VfcG9vbHNcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcbi11NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuK3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2luZ19vZmZsb2FkX2hvcml6b25cbit1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuIHN0cnVjdF9uYXBpX2NvbmZpZyogICAgICAgICAgICAgICAgIG5hcGlfY29uZmlnXG4gdW5zaWduZWRfbG9uZyAgICAgICAgICAgICAgICAgICAgICAgZ3JvX2ZsdXNoX3RpbWVvdXRcbiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2RlZmVyX2hhcmRfaXJxc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG5pbmRleCBiYjk5ZDllN2M2NWQ1MS4uNWRkZjM0NzkyN2RjM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG5AQCAtMTgwMSw3ICsxODAxLDggQEAgc3RhdGljIHZvaWQgaWRwZl9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbi1cdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCxcbitcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCB8XG4rXHRcdFx0XHQgIEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbiBcdC5nZXRfbXNnbGV2ZWxcdFx0PSBpZHBmX2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSBpZHBmX3NldF9tc2dsZXZlbCxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG5pbmRleCBjZjk2NmZlNmM3NTljZS4uZGU0MTcwYzJhYTNiYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuQEAgLTg4OCw2ICs4ODgsMTEgQEAgc3RhdGljIGludCBpZHBmX2NmZ19uZXRkZXYoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIFx0bmV0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbiBcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gdnBvcnQtXHUwMDNlbWF4X210dTtcbiBcbitcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVx1MDAzZWRmbHRfcXZfcnNyYy50eHFfbW9kZWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpZHBmX2lzX2NhcF9lbmEoYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuK1x0XHRcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxuK1x0XHRuZXRkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSAxMjgwMDA7XG4rXG4gXHRkZmx0X2ZlYXR1cmVzID0gTkVUSUZfRl9TR1x0fFxuIFx0XHRcdE5FVElGX0ZfSElHSERNQTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjFjY2ZhZWIzNTE5MzVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTEsNiArMSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qIENvcHlyaWdodCAoQykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbiAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldHBvbGwuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwiaWRwZi5oXCJcbiAjaW5jbHVkZSBcImlkcGZfcHRwLmhcIlxuICNpbmNsdWRlIFwiaWRwZl92aXJ0Y2hubC5oXCJcbkBAIC0yNDA4LDkgKzI0MTAsMTMgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsXG4gXHRcdFx0XHQgICAgc3RydWN0IGlkcGZfdHhfc3BsaXRxX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxuIHtcbi1cdCoodTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSAodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCk7XG4rXHQqKF9fbGUzMiAqKVx1MDAyNmRlc2MtXHUwMDNlZmxvdy5xdzEuY21kX2R0eXBlID0gY3B1X3RvX2xlMzIoKHU4KShwYXJhbXMtXHUwMDNlZHR5cGUgfCB0ZF9jbWQpKTtcbiBcdGRlc2MtXHUwMDNlZmxvdy5xdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNigodTE2KXNpemUpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtXHUwMDNlY29tcGxfdGFnKTtcbitcbitcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMF0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdO1xuK1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1sxXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XG4rXHRkZXNjLVx1MDAzZWZsb3cucXcxLnRzWzJdID0gcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXTtcbiB9XG4gXG4gLyoqXG5AQCAtMzAxMSw2ICszMDE3LDU5IEBAIHN0YXRpYyBib29sIGlkcGZfdHhfc3BsaXRxX25lZWRfcmUoc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EpXG4gXHRyZXR1cm4gZ2FwIFx1MDAzZT0gSURQRl9UWF9TUExJVFFfUkVfTUlOX0dBUDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZShjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXG4re1xuK1x0Y29uc3QgaW50IHRzX2dyYW5fcG93MiA9IDk7XG4rXHR1NjQgdHMsIG5vdztcbitcbitcdC8qIFNraXAgaWYgbmV0cG9sbDogbm90IG5lZWRlZCBhbmQgbm90IHNhZmUgdG8gY2FsbCBrdGltZSBoZWxwZXJzICovXG4rXHRpZiAobmV0cG9sbF90eF9ydW5uaW5nKHNrYi1cdTAwM2VkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzd2l0Y2ggKHNrYi1cdTAwM2V0c3RhbXBfdHlwZSkge1xuK1x0Y2FzZSBTS0JfQ0xPQ0tfUkVBTFRJTUU6XG4rXHRcdHRzID0ga3RpbWVfdG9fbnMoa3RpbWVfYWRkKHNrYi1cdTAwM2V0c3RhbXAsXG4rXHRcdFx0XHRcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtXG4rXHRcdFx0XHRcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNLQl9DTE9DS19NT05PVE9OSUM6XG4rXHRcdHRzID0ga3RpbWVfdG9fbnMoa3RpbWVfbW9ub190b19hbnkoc2tiLVx1MDAzZXRzdGFtcCwgVEtfT0ZGU19UQUkpKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNLQl9DTE9DS19UQUk6XG4rXHRcdHRzID0ga3RpbWVfdG9fbnMoc2tiLVx1MDAzZXRzdGFtcCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRub3cgPSBrdGltZV9nZXRfY2xvY2t0YWlfbnMoKTtcbitcdGlmICh0cyBcdTAwM2Mgbm93KVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBiZXlvbmQgb2ZmbG9hZCBob3Jpem9uPyBzZXQgb3ZlcmZsb3cgYml0IG9ubHkgKi9cbitcdGlmICh0cyBcdTAwM2Ugbm93ICsgKCh1NjQpc2tiLVx1MDAzZWRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICogTlNFQ19QRVJfVVNFQykpIHtcbitcdFx0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXSA9IDEgXHUwMDNjXHUwMDNjIDc7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHRzIFx1MDAzZVx1MDAzZT0gdHNfZ3Jhbl9wb3cyO1xuK1xuK1x0LyogMCBpcyB2YWxpZCAyNGIgdGltZXN0YW1wLCBidXQgYWxzbyBtZWFucyBmaWVsZCB1bnNldC5cbitcdCAqIEFkZCA1MTIgbnMgKHRzX2dyYW5fcG93MikgdG8gYXZvaWQgdGhpcyBjYXNlXG4rXHQgKi9cbitcdGlmICgodHMgXHUwMDI2IDB4N2ZmZmZmKSA9PSAwKSB7XG4rXHRcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF0gPSAxO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgXHUwMDI2IDB4ZmY7XG4rXHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzFdID0gKHRzIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbitcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAoKHRzIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4N2YpO1xuK31cbitcbiAvKipcbiAgKiBpZHBmX3R4X3NwbGl0cV9mcmFtZSAtIFNlbmRzIGJ1ZmZlciBvbiBUeCByaW5nIHVzaW5nIGZsZXggZGVzY3JpcHRvcnNcbiAgKiBAc2tiOiBzZW5kIGJ1ZmZlclxuQEAgLTMwOTcsNiArMzE1NiwxMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaWRwZl90eF9zcGxpdHFfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdFx0dHhfcGFyYW1zLmR0eXBlID0gSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFO1xuIFx0XHR0eF9wYXJhbXMuZW9wX2NtZCA9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QO1xuK1xuK1x0XHRpZiAoc2tiLVx1MDAzZXRzdGFtcCBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKVxuK1x0XHRcdGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUodHhfcSwgc2tiLCBcdTAwMjZ0eF9wYXJhbXMpO1xuK1xuIFx0XHQvKiBTZXQgdGhlIFJFIGJpdCB0byBwZXJpb2RpY2FsbHkgXCJjbGVhblwiIHRoZSBkZXNjcmlwdG9yIHJpbmcuXG4gXHRcdCAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0XG4gXHRcdCAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuaW5kZXggNGJlNWIzYjZkM2VkMmIuLjg2NTQwOGI1N2IwZDU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuQEAgLTE2MSw2ICsxNjEsNyBAQCB1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyB7XG4gICogQHRzb19zZWdzOiBOdW1iZXIgb2Ygc2VnbWVudHMgdG8gYmUgc2VudFxuICAqIEB0c29faGRyX2xlbjogTGVuZ3RoIG9mIGhlYWRlcnMgdG8gYmUgZHVwbGljYXRlZFxuICAqIEB0ZF9jbWQ6IENvbW1hbmQgZmllbGQgdG8gYmUgaW5zZXJ0ZWQgaW50byBkZXNjcmlwdG9yXG4rICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcFxuICAqL1xuIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHtcbiBcdHUzMiB0eF9mbGFncztcbkBAIC0xNzQsNiArMTc1LDcgQEAgc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xuIFx0dTE2IHRzb19oZHJfbGVuO1xuIFxuIFx0dTE2IHRkX2NtZDtcbitcdHU4IGRlc2NfdHNbM107XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5pbmRleCA1ZDQ5MWE5ODI2NWVmOS4uYWRlZWJiZjUzZGFkZWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbkBAIC04NSw2ICs4NSw4IEBAIGVudW0ge1xuICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlclxuICAqIEBoZHNfdGhyZXNoOiBQYWNrZXQgc2l6ZSB0aHJlc2hvbGQgZm9yIGhlYWRlciBkYXRhIHNwbGl0IChIRFMpXG4gICogQGhkc190aHJlc2hfbWF4OiBNYXhpbXVtIHN1cHBvcnRlZCBzZXR0aW5nIGZvciBAaGRzX3RocmVzaG9sZFxuKyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcbisgKiBAbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b246IG1heCBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcbiAgKlxuICAqL1xuIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0ge1xuQEAgLTk3LDYgKzk5LDggQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7XG4gXHR1MzJcdHR4X3B1c2hfYnVmX21heF9sZW47XG4gXHR1MzJcdGhkc190aHJlc2g7XG4gXHR1MzJcdGhkc190aHJlc2hfbWF4O1xuK1x0dTMyXHRwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuK1x0dTMyXHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiB9O1xuIFxuIC8qKlxuQEAgLTEwOCw2ICsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UWF9QVVNIX0JVRl9MRU46IGNhcHR1cmUgZm9yIHNldHRpbmcgdHhfcHVzaF9idWZfbGVuXG4gICogQEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQ6IGNhcHR1cmUgZm9yIHNldHRpbmcgdGNwX2RhdGFfc3BsaXRcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2hcbisgKiBARVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OOiBjYXB0dXJlIGZvciBzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b25cbiAgKi9cbiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xuIFx0RVRIVE9PTF9SSU5HX1VTRV9SWF9CVUZfTEVOXHRcdD0gQklUKDApLFxuQEAgLTExNyw2ICsxMjIsNyBAQCBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xuIFx0RVRIVE9PTF9SSU5HX1VTRV9UWF9QVVNIX0JVRl9MRU5cdD0gQklUKDQpLFxuIFx0RVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVFx0XHQ9IEJJVCg1KSxcbiBcdEVUSFRPT0xfUklOR19VU0VfSERTX1RIUlNcdFx0PSBCSVQoNiksXG4rXHRFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05cdD0gQklUKDcpLFxuIH07XG4gXG4gI2RlZmluZSBfX0VUSF9SU1NfSEFTSF9CSVQoYml0KVx0KCh1MzIpMSBcdTAwM2NcdTAwM2MgKGJpdCkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRAZHBsbF9waW46IFBvaW50ZXIgdG8gdGhlIFN5bmNFIHNvdXJjZSBwaW4gb2YgYSBEUExMIHN1YnN5c3RlbSxcbiAgKlx0XHQgICB3aGVyZSB0aGUgY2xvY2sgaXMgcmVjb3ZlcmVkLlxuICAqXG4tICpcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IEVEVCBvZmZsb2FkIGhvcml6b24gaW4gbnNlYy5cbisgKlx0QHBhY2luZ19vZmZsb2FkX2hvcml6b246IGFjdGl2ZSBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIGluIHVzZWMuXG4rICpcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cbiAgKlx0QG5hcGlfY29uZmlnOiBBbiBhcnJheSBvZiBuYXBpX2NvbmZpZyBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgcGVyLU5BUElcbiAgKlx0XHQgICAgICBzZXR0aW5ncy5cbiAgKlx0QG51bV9uYXBpX2NvbmZpZ3M6XHRudW1iZXIgb2YgYWxsb2NhdGVkIE5BUEkgY29uZmlnIHN0cnVjdHMsXG5AQCAtMjU1Miw3ICsyNTUzLDggQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xuIFx0LyoqIEBpcnFfbW9kZXI6IGRpbSBwYXJhbWV0ZXJzIHVzZWQgaWYgSVNfRU5BQkxFRChDT05GSUdfRElNTElCKS4gKi9cbiBcdHN0cnVjdCBkaW1faXJxX21vZGVyXHQqaXJxX21vZGVyO1xuIFxuLVx0dTY0XHRcdFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHR1MzJcdFx0XHRwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuK1x0dTMyXHRcdFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gXHRzdHJ1Y3QgbmFwaV9jb25maWdcdCpuYXBpX2NvbmZpZztcbiBcdHUzMlx0XHRcdG51bV9uYXBpX2NvbmZpZ3M7XG4gXHR1MzJcdFx0XHRuYXBpX2RlZmVyX2hhcmRfaXJxcztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuQEAgLTE5Myw2ICsxOTMsOCBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYLFxuIFx0RVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsXG4gXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXG4rXHRFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbitcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCxcbiBcbiBcdF9fRVRIVE9PTF9BX1JJTkdTX0NOVCxcbiBcdEVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jXG5pbmRleCA1YjRkZDA0ZDYxMjQ3Ni4uNzg5N2U0MjIwNTEzMDAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xuKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbkBAIC0yMDEsNiArMjAxLDcgQEBcbiBcdHBmKFNWSURfUk5EKVx0XHQvKiBSYW5kb20gU1ZMQU4gSUQgKi9cdFx0XHRcXFxuIFx0cGYoTk9ERSlcdFx0LyogTm9kZSBtZW1vcnkgYWxsb2MqL1x0XHRcdFxcXG4gXHRwZihTSEFSRUQpXHRcdC8qIFNoYXJlZCBTS0IgKi9cdFx0XHRcXFxuK1x0cGYoVFhUSU1FKVx0XHQvKiBTT19UWFRJTUUgc3VwcG9ydCAqL1x0XHRcdFxcXG4gXG4gI2RlZmluZSBwZihmbGFnKVx0XHRmbGFnIyNfU0hJRlQsXG4gZW51bSBwa3RfZmxhZ3Mge1xuQEAgLTI5MSw2ICsyOTIsMTAgQEAgc3RydWN0IHBrdGdlbl9kZXYge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHR1NjQgZGVsYXk7XHRcdC8qIG5hbm8tc2Vjb25kcyAqL1xuIFxuK1x0LyogVFhUSU1FIHN1cHBvcnQgKi9cbitcdHU2NCB0eHRpbWVfZGVsYXk7XHQvKiB0cmFuc21pdCB0aW1lIGRlbGF5IGluIG5zICovXG4rXHRjbG9ja2lkX3QgdHh0aW1lX2Nsb2NraWQ7IC8qIGNsb2NraWQgZm9yIFNPX1RYVElNRSAqL1xuK1xuIFx0X191NjQgY291bnQ7XHRcdC8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovXG4gXHRfX3U2NCBzb2ZhcjtcdFx0LyogSG93IG1hbnkgcGt0cyB3ZSd2ZSBzZW50IHNvIGZhciAqL1xuIFx0X191NjQgdHhfYnl0ZXM7XHRcdC8qIEhvdyBtYW55IGJ5dGVzIHdlJ3ZlIHRyYW5zbWl0dGVkICovXG5AQCAtNjY2LDYgKzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFx0aWYgKHBrdF9kZXYtXHUwMDNlbm9kZSBcdTAwM2U9IDApXG4gXHRcdHNlcV9wcmludGYoc2VxLCBcIiAgICAgbm9kZTogJWRcXG5cIiwgcGt0X2Rldi1cdTAwM2Vub2RlKTtcbiBcbitcdGlmIChwa3RfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBGX1RYVElNRSkge1xuK1x0XHRjbG9ja2lkX3QgY2xvY2tpZCA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkKTtcbitcbitcdFx0c2VxX3ByaW50ZihzZXEsIFwiICAgICB0eHRpbWVfZGVsYXk6ICVsbHVcXG5cIixcbitcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KTtcbitcdFx0c2VxX3ByaW50ZihzZXEsIFwiICAgICB0eHRpbWVfY2xvY2tpZDogJXNcXG5cIixcbitcdFx0XHQgICBjbG9ja2lkID09IENMT0NLX01PTk9UT05JQyA/IFwibW9ub3RvbmljXCIgOlxuK1x0XHRcdCAgIGNsb2NraWQgPT0gQ0xPQ0tfUkVBTFRJTUUgPyBcInJlYWx0aW1lXCIgOlxuK1x0XHRcdCAgIGNsb2NraWQgPT0gQ0xPQ0tfVEFJID8gXCJ0YWlcIiA6IFwidW5rbm93blwiKTtcbitcdH1cbitcbiBcdGlmIChwa3RfZGV2LVx1MDAzZXhtaXRfbW9kZSA9PSBNX05FVElGX1JFQ0VJVkUpXG4gXHRcdHNlcV9wdXRzKHNlcSwgXCIgICAgIHhtaXRfbW9kZTogbmV0aWZfcmVjZWl2ZVxcblwiKTtcbiBcdGVsc2UgaWYgKHBrdF9kZXYtXHUwMDNleG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVClcbkBAIC0xMTQxLDYgKzExNTcsNTAgQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtXHUwMDNlZGVsYXkpO1xuIFx0XHRyZXR1cm4gY291bnQ7XG4gXHR9XG4rXHRpZiAoIXN0cmNtcChuYW1lLCBcInR4dGltZV9kZWxheVwiKSkge1xuK1x0XHRtYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7XG4rXHRcdGxlbiA9IG51bV9hcmcoXHUwMDI2dXNlcl9idWZmZXJbaV0sIG1heCwgXHUwMDI2dmFsdWUpO1xuK1x0XHRpZiAobGVuIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBsZW47XG4rXG4rXHRcdC8qIGluIHF1ZXVlX3htaXQgbW9kZSBmcSBtYXkgY2xlYXIgdHN0YW1wLCBkbyBub3QgcmV1c2Ugc2tiICovXG4rXHRcdGlmICh2YWx1ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcGt0X2Rldi1cdTAwM2VjbG9uZV9za2IgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFdSSVRFX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpO1xuK1x0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCJPSzogdHh0aW1lX2RlbGF5PSVsbHVcIixcbitcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlKTtcbitcdFx0cmV0dXJuIGNvdW50O1xuK1x0fVxuK1x0aWYgKCFzdHJjbXAobmFtZSwgXCJ0eHRpbWVfY2xvY2tpZFwiKSkge1xuK1x0XHRjaGFyIGNsb2Nrc3RyWzMyXTtcbitcdFx0Y2xvY2tpZF90IGNsaztcbitcbitcdFx0bWVtc2V0KGNsb2Nrc3RyLCAwLCBzaXplb2YoY2xvY2tzdHIpKTtcbitcdFx0bWF4ID0gbWluKHNpemVvZihjbG9ja3N0cikgLSAxLCBjb3VudCAtIGkpO1xuK1x0XHRsZW4gPSBzdHJuX2xlbihcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4KTtcbitcdFx0aWYgKGxlbiBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gbGVuO1xuK1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoY2xvY2tzdHIsIFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBsZW4pKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0XHRpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCJtb25vdG9uaWNcIikpIHtcbitcdFx0XHRjbGsgPSBDTE9DS19NT05PVE9OSUM7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCJyZWFsdGltZVwiKSkge1xuK1x0XHRcdGNsayA9IENMT0NLX1JFQUxUSU1FO1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJjbXAoY2xvY2tzdHIsIFwidGFpXCIpKSB7XG4rXHRcdFx0Y2xrID0gQ0xPQ0tfVEFJO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHNwcmludGYocGdfcmVzdWx0LCBcIkVSUk9SOiB1bmtub3duIGNsb2NraWQgJyVzJ1wiLFxuK1x0XHRcdFx0Y2xvY2tzdHIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdHNwcmludGYocGdfcmVzdWx0LCBcIk9LOiB0eHRpbWVfY2xvY2tpZD0lc1wiLCBjbG9ja3N0cik7XG4rXHRcdFdSSVRFX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCwgY2xrKTtcbitcdFx0cmV0dXJuIGNvdW50O1xuK1x0fVxuIFx0aWYgKCFzdHJjbXAobmFtZSwgXCJyYXRlXCIpKSB7XG4gXHRcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcbiBcdFx0bGVuID0gbnVtX2FyZyhcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4LCBcdTAwMjZ2YWx1ZSk7XG5AQCAtMTIzOCw2ICsxMjk4LDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRpZiAodmFsdWUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IChwa3RfZGV2LVx1MDAzZW5faW1peF9lbnRyaWVzIFx1MDAzZSAwIHx8XG4gXHRcdFx0XHQgICEocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgRl9TSEFSRUQpKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0aWYgKHZhbHVlIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXkpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiA9IHZhbHVlO1xuIFxuQEAgLTIzMjEsNiArMjM4MywyMSBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fc2V0dXBfaW5qZWN0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIH1cbiBcbiBcbitzdGF0aWMga3RpbWVfdCBrdGltZV9nZXRfY2xvY2soY2xvY2tpZF90IGNsb2NraWQpXG4re1xuK1x0c3dpdGNoIChjbG9ja2lkKSB7XG4rXHRjYXNlIENMT0NLX1JFQUxUSU1FOlxuK1x0XHRyZXR1cm4ga3RpbWVfZ2V0X3JlYWwoKTtcbitcdGNhc2UgQ0xPQ0tfTU9OT1RPTklDOlxuK1x0XHRyZXR1cm4ga3RpbWVfZ2V0KCk7XG4rXHRjYXNlIENMT0NLX1RBSTpcbitcdFx0cmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRyZXR1cm4ga3RpbWVfZ2V0KCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNwaW4oc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGt0aW1lX3Qgc3Bpbl91bnRpbClcbiB7XG4gXHRrdGltZV90IHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xuQEAgLTM1MTAsNyArMzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHBrdGdlbl93YWl0X2Zvcl9za2Ioc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXG4gc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4ge1xuLVx0Ym9vbCBza2Jfc2hhcmVkID0gISEoUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNlZmxhZ3MpIFx1MDAyNiBGX1NIQVJFRCk7XG4rXHR1MzIgZmxhZ3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VmbGFncyk7XG4rXHRib29sIHNrYl9zaGFyZWQgPSAhIShmbGFncyBcdTAwMjYgRl9TSEFSRUQpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBwa3RfZGV2LVx1MDAzZW9kZXY7XG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gXHR1bnNpZ25lZCBpbnQgYnVyc3QgPSAxO1xuQEAgLTM1NDUsNiArMzYyMyw4IEBAIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0LyogSWYgbm8gc2tiIG9yIGNsb25lIGNvdW50IGV4aGF1c3RlZCB0aGVuIGdldCBuZXcgb25lICovXG4gXHRpZiAoIXBrdF9kZXYtXHUwMDNlc2tiIHx8IChwa3RfZGV2LVx1MDAzZWxhc3Rfb2sgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgKytwa3RfZGV2LVx1MDAzZWNsb25lX2NvdW50IFx1MDAzZT0gY2xvbmVfc2tiKSkge1xuK1x0XHR1NjQgdHh0aW1lX2RlbGF5O1xuK1xuIFx0XHQvKiBidWlsZCBhIG5ldyBwa3QgKi9cbiBcdFx0a2ZyZWVfc2tiKHBrdF9kZXYtXHUwMDNlc2tiKTtcbiBcbkBAIC0zNTU3LDYgKzM2MzcsMTYgQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdH1cbiBcdFx0cGt0X2Rldi1cdTAwM2VsYXN0X3BrdF9zaXplID0gcGt0X2Rldi1cdTAwM2Vza2ItXHUwMDNlbGVuO1xuIFx0XHRwa3RfZGV2LVx1MDAzZWNsb25lX2NvdW50ID0gMDtcdC8qIHJlc2V0IGNvdW50ZXIgKi9cbitcbitcdFx0dHh0aW1lX2RlbGF5ID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KTtcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBGX1RYVElNRSBcdTAwMjZcdTAwMjYgdHh0aW1lX2RlbGF5KSB7XG4rXHRcdFx0Y2xvY2tpZF90IGNsayA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkKTtcbitcdFx0XHRrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSxcbitcdFx0XHRcdFx0XHQgICAgICB0eHRpbWVfZGVsYXkpO1xuK1xuK1x0XHRcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtXHUwMDNlc2tiLCB0eHRpbWUsXG4rXHRcdFx0XHRcdFx0XHQgY2xrKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKHBrdF9kZXYtXHUwMDNlZGVsYXkgXHUwMDI2XHUwMDI2IHBrdF9kZXYtXHUwMDNlbGFzdF9vaylcbkBAIC0zODY5LDYgKzM5NTksNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9hZGRfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyICppZm5hbWUpXG4gXHRwa3RfZGV2LVx1MDAzZWJ1cnN0ID0gMTtcbiBcdHBrdF9kZXYtXHUwMDNlbm9kZSA9IE5VTUFfTk9fTk9ERTtcbiBcdHBrdF9kZXYtXHUwMDNlZmxhZ3MgPSBGX1NIQVJFRDtcdC8qIFNLQiBzaGFyZWQgYnkgZGVmYXVsdCAqL1xuK1x0cGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCA9IENMT0NLX01PTk9UT05JQztcbiBcbiBcdGVyciA9IHBrdGdlbl9zZXR1cF9kZXYodC1cdTAwM2VuZXQsIHBrdF9kZXYsIGlmbmFtZSk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDMxYzY1YTU0NWExMDdjLi4yYzdhMjQ1YzVmZmMyZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTIxNTUsNyArMjE1NSw3IEBAIHN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9UU09fTUFYX1NFR1MsXG4gXHRcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2V0c29fbWF4X3NlZ3MpKSB8fFxuIFx0ICAgIG5sYV9wdXRfdWludChza2IsIElGTEFfTUFYX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sXG4tXHRcdFx0IFJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fFxuK1x0XHRcdCAodTY0KVJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pICogTlNFQ19QRVJfVVNFQykgfHxcbiAjaWZkZWYgQ09ORklHX1JQU1xuIFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fUlhfUVVFVUVTLFxuIFx0XHRcdFJFQURfT05DRShkZXYtXHUwMDNlbnVtX3J4X3F1ZXVlcykpIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmMgYi9uZXQvZXRodG9vbC9jb21tb24uY1xuaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjVjMjMyM2FhYTAyYjZiIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmNcbisrKyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXG5AQCAtOTU0LDYgKzk1NCw5IEBAIHZvaWQgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0LyogRHJpdmVyIGdpdmVzIHVzIGN1cnJlbnQgc3RhdGUsIHdlIHdhbnQgdG8gcmV0dXJuIGN1cnJlbnQgY29uZmlnICovXG4gXHRrcGFyYW0tXHUwMDNldGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRrcGFyYW0tXHUwMDNlaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbitcbitcdGtwYXJhbS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHRrcGFyYW0tXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSBkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGV0aHRvb2xfaW5pdF90c2luZm8oc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5pbmRleCAzZTk2OWEwNzBmOWZlNC4uYWU3YjY1MWM2NThmNzQgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ5NCw3ICs0OTQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfZmVhdHVyZXNfc2V0X3BvbGljeVtFVEhUT09MX0FfRkVBVFVSRVNfV0FOVFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3NfZ2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0hFQURFUiArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0ZMQUdTICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hFQURFUiArIDFdO1xuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCArIDFdO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jaGFubmVsc19nZXRfcG9saWN5W0VUSFRPT0xfQV9DSEFOTkVMU19IRUFERVIgKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfc2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfQ09NQklORURfQ09VTlQgKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY29hbGVzY2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ09BTEVTQ0VfSEVBREVSICsgMV07XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcmluZ3MuYyBiL25ldC9ldGh0b29sL3JpbmdzLmNcbmluZGV4IDkwNTRjODljNWQ3YmIyLi41MjE1ODU3MmZlMTBjMCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL3JpbmdzLmNcbisrKyBiL25ldC9ldGh0b29sL3JpbmdzLmNcbkBAIC00Miw2ICs0Miw4IEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4gXG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbitcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSBkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3JpbmdwYXJhbShkZXYsIFx1MDAyNmRhdGEtXHUwMDNlcmluZ3BhcmFtLFxuIFx0XHRcdFx0XHRcdTAwMjZkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXHUwMDNlZXh0YWNrKTtcbkBAIC02OSw3ICs3MSw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovXG4gXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYICovXG4gXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXG4tXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYICovXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEyMSw3ICsxMjUsMTIgQEAgc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaCkgfHxcbiBcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuLVx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXG4rXHRcdFx0ICBrci1cdTAwM2VoZHNfdGhyZXNoX21heCkpKSB8fFxuK1x0ICAgICgoc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbitcdFx0XHQgIGtyLVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8XG4rXHQgICAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCxcbitcdFx0XHQgIGtyLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0LDYgKzE1Myw3IEBAIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbXSA9IHtcbiBcdFtFVEhUT09MX0FfUklOR1NfUlhfUFVTSF1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIDEpLFxuIFx0W0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gXHRbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnRcbkBAIC0xNzcsNiArMTg3LDE0IEBAIGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4rXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEob3BzLVx1MDAzZXN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcdTAwMjYgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OKSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0ICAgIHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSxcbitcdFx0XHRcdCAgICBcInNldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX0NRRV9TSVpFXSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKG9wcy1cdTAwM2VzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfQ1FFX1NJWkUpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssXG5AQCAtMjQ2LDYgKzI2NCw4IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRcdCB0YltFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXSwgXHUwMDI2bW9kKTtcbiBcdGV0aG5sX3VwZGF0ZV91MzIoXHUwMDI2a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLFxuIFx0XHRcdCB0YltFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF0sIFx1MDAyNm1vZCk7XG4rXHRldGhubF91cGRhdGVfdTMyKFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcbitcdFx0XHQgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLCBcdTAwMjZtb2QpO1xuIFx0aWYgKCFtb2QpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTI4MSw2ICszMDEsOSBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfVFhdO1xuIFx0ZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoIFx1MDAzZSBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KVxuIFx0XHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTtcbitcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiBcdTAwM2VcbitcdFx0IGtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pXG4rXHRcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dO1xuIFx0ZWxzZVxuIFx0XHRlcnJfYXR0ciA9IE5VTEw7XG4gXHRpZiAoZXJyX2F0dHIpIHtcbkBAIC0zMDIsNiArMzI1LDkgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRyZXQgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3JpbmdwYXJhbShkZXYsIFx1MDAyNnJpbmdwYXJhbSxcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2a2VybmVsX3JpbmdwYXJhbSwgaW5mby1cdTAwM2VleHRhY2spO1xuK1x0aWYgKCFyZXQpXG4rXHRcdGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0ga2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuK1xuIFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnEuYyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuaW5kZXggN2NhZTA4MmE5ODQ3MjEuLjM2MDA2ZjY5YTg3NTM2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC0zOTksNiArMzk5LDExIEBAIHN0YXRpYyBzdHJ1Y3QgZnFfZmxvdyAqZnFfY2xhc3NpZnkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcGFjaW5nX3N0YXR1cykgIT0gU0tfUEFDSU5HX0ZRKVxuIFx0XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNrLVx1MDAzZXNrX3BhY2luZ19zdGF0dXMsXG4gXHRcdFx0XHRcdCAgU0tfUEFDSU5HX0ZRKTtcbitcbitcdFx0aWYgKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZnFfc2tiX2NiKHNrYiktXHUwMDNldGltZV90b19zZW5kIFx1MDAzYz0gbm93KVxuK1x0XHRcdHNrYi1cdTAwM2V0c3RhbXAgPSAwO1xuK1xuIFx0XHRyZXR1cm4gXHUwMDI2cS1cdTAwM2VpbnRlcm5hbDtcbiBcdH1cbiBcbkBAIC03MDcsNiArNzEyLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIFx0c3RydWN0IGZxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gXHRzdHJ1Y3QgZnFfcGVyYmFuZF9mbG93cyAqcGJhbmQ7XG4gXHRzdHJ1Y3QgZnFfZmxvd19oZWFkICpoZWFkO1xuK1x0dTY0IHRpbWVfbmV4dF9wYWNrZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IGZxX2Zsb3cgKmY7XG4gXHR1bnNpZ25lZCBsb25nIHJhdGU7XG5AQCAtNzIxLDcgKzcyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdGlmIChza2IpIHtcbiBcdFx0cS1cdTAwM2VpbnRlcm5hbC5xbGVuLS07XG4gXHRcdGZxX2RlcXVldWVfc2tiKHNjaCwgXHUwMDI2cS1cdTAwM2VpbnRlcm5hbCwgc2tiKTtcbi1cdFx0Z290byBvdXQ7XG4rXHRcdHJldHVybiBza2I7XG4gXHR9XG4gXG4gXHRub3cgPSBrdGltZV9nZXRfbnMoKTtcbkBAIC03NTgsOCArNzY0LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIFxuIFx0c2tiID0gZnFfcGVlayhmKTtcbiBcdGlmIChza2IpIHtcbi1cdFx0dTY0IHRpbWVfbmV4dF9wYWNrZXQgPSBtYXhfdCh1NjQsIGZxX3NrYl9jYihza2IpLVx1MDAzZXRpbWVfdG9fc2VuZCxcbi1cdFx0XHRcdFx0ICAgICBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xuK1x0XHR0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cdTAwM2V0aW1lX3RvX3NlbmQsXG4rXHRcdFx0XHRcdCBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xuIFxuIFx0XHRpZiAobm93ICsgcS1cdTAwM2VvZmZsb2FkX2hvcml6b24gXHUwMDNjIHRpbWVfbmV4dF9wYWNrZXQpIHtcbiBcdFx0XHRoZWFkLVx1MDAzZWZpcnN0ID0gZi1cdTAwM2VuZXh0O1xuQEAgLTgyOCwxMSArODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdFx0ICogZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IHdhcyBzZXQgd2hlbiBwcmlvciBwYWNrZXQgd2FzIHNlbnQsXG4gXHRcdCAqIGFuZCBjdXJyZW50IHRpbWUgKEBub3cpIGNhbiBiZSB0b28gbGF0ZSBieSB0ZW5zIG9mIHVzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGYtXHUwMDNldGltZV9uZXh0X3BhY2tldClcbitcdFx0aWYgKGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCBcdTAwMjZcdTAwMjYgZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IFx1MDAzYyBub3cpXG4gXHRcdFx0bGVuIC09IG1pbihsZW4vMiwgbm93IC0gZi1cdTAwM2V0aW1lX25leHRfcGFja2V0KTtcbiBcdFx0Zi1cdTAwM2V0aW1lX25leHRfcGFja2V0ID0gbm93ICsgbGVuO1xuIFx0fVxuK1xuIG91dDpcbitcdGlmIChxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcdTAwMjZcdTAwMjYgdGltZV9uZXh0X3BhY2tldCBcdTAwM2M9IG5vdylcbitcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IDA7XG4rXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbkBAIC0xMTc5LDcgKzExODksOCBAQCBzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0XHR1NjQgb2ZmbG9hZF9ob3Jpem9uID0gKHU2NClOU0VDX1BFUl9VU0VDICpcbiBcdFx0XHRcdCAgICAgIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9PRkZMT0FEX0hPUklaT05dKTtcbiBcbi1cdFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcdTAwM2M9IHFkaXNjX2RldihzY2gpLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB7XG4rXHRcdGlmIChvZmZsb2FkX2hvcml6b24gXHUwMDNjPVxuK1x0XHQgICAgKHU2NClxZGlzY19kZXYoc2NoKS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICogTlNFQ19QRVJfVVNFQykge1xuIFx0XHRcdFdSSVRFX09OQ0UocS1cdTAwM2VvZmZsb2FkX2hvcml6b24sIG9mZmxvYWRfaG9yaXpvbik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJpbnZhbGlkIG9mZmxvYWRfaG9yaXpvblwiKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zZXR0aW5ncyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI0NzhlNjg0ODQ2YTE2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zZXR0aW5nc1xuQEAgLTAsMCArMSBAQFxuK3RpbWVvdXQ9MjQwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xuaW5kZXggNTVhMzg2ZjNkMWI5MGYuLjZlNjRiYWE0YzYwZGQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXG5AQCAtNDIsOCArNDIsMTAgQEAgc3RhdGljIGJvb2xcdGNmZ19tYWNoaW5lX3Nsb3c7XG4gc3RhdGljIHVpbnQ2NF90XHRjZmdfc3RhcnRfdGltZV9ucztcbiBzdGF0aWMgaW50XHRjZmdfbWFyaztcbiBzdGF0aWMgYm9vbFx0Y2ZnX3J4O1xuK3N0YXRpYyBib29sXHRjZmdfdmVyaWZ5X2h3X29mZmxvYWQ7XG4gXG4gc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0O1xuK3N0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydF9yZWFsO1xuIHN0YXRpYyB1aW50NjRfdCB0ZGVsaXZlcl9tYXg7XG4gXG4gc3RhdGljIGludCBlcnJvcnM7XG5AQCAtMTU4LDE4ICsxNjAsNzAgQEAgc3RhdGljIHZvaWQgZG9fcmVjdl92ZXJpZnlfZW1wdHkoaW50IGZkcilcbiBcdFx0ZXJyb3IoMSwgMCwgXCJyZWN2OiBub3QgZW1wdHkgYXMgZXhwZWN0ZWQgKCVkLCAlZClcIiwgcmV0LCBlcnJubyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXG4rc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsXG4rXHRcdFx0XHQgICAgY29uc3QgY2hhciBwYXlsb2FkX2NoYXIpXG4re1xuK1x0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcbitcdGludDY0X3QgdHN0YW1wID0gMDtcbitcbitcdHN3aXRjaCAoZXJyLVx1MDAzZWVlX2Vycm5vKSB7XG4rXHRjYXNlIEVDQU5DRUxFRDpcbitcdFx0aWYgKGVyci1cdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX01JU1NFRClcbitcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcblwiLFxuK1x0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbitcdFx0cmVhc29uID0gXCJtaXNzZWQgdHh0aW1lXCI7XG4rXHRicmVhaztcbitcdGNhc2UgRUlOVkFMOlxuK1x0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcbitcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcblwiLFxuK1x0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbitcdFx0cmVhc29uID0gXCJpbnZhbGlkIHR4dGltZVwiO1xuK1x0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiBlcnJubyAldSBjb2RlICV1XFxuXCIsXG4rXHRcdCAgICAgIGVyci1cdTAwM2VlZV9lcnJubywgZXJyLVx1MDAzZWVlX2NvZGUpO1xuK1x0fVxuK1xuK1x0dHN0YW1wID0gKChpbnQ2NF90KWVyci1cdTAwM2VlZV9kYXRhKSBcdTAwM2NcdTAwM2MgMzIgfCBlcnItXHUwMDNlZWVfaW5mbztcbitcdHRzdGFtcCAtPSAoaW50NjRfdClnbG9iX3RzdGFydDtcbitcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcbitcdGZwcmludGYoc3RkZXJyLCBcInNlbmQ6IHBrdCAlYyBhdCAlXCIgUFJJZDY0IFwibXMgZHJvcHBlZDogJXNcXG5cIixcbitcdFx0cGF5bG9hZF9jaGFyLCB0c3RhbXAsIHJlYXNvbik7XG4rXG4rXHRyZXR1cm4gMTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsXG4rXHRcdFx0XHRcdCAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcylcbit7XG4rXHRpbnQ2NF90IHRzO1xuK1xuK1x0dHMgPSB0c3MtXHUwMDNldHNbMF0udHZfc2VjO1xuK1x0dHMgKj0gMTAwMFVMTCAqIDEwMDAgKiAxMDAwO1xuK1x0dHMgKz0gdHNzLVx1MDAzZXRzWzBdLnR2X25zZWM7XG4rXHR0cyAtPSBnbG9iX3RzdGFydF9yZWFsO1xuK1x0dHMgLz0gMTAwMDtcbitcbitcdGlmICh0cyBcdTAwM2UgY2ZnX3ZhcmlhbmNlX3VzKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcInN3IGRlbGF5ICVcIiBQUklkNjQgXCJ1cyBleGNlZWRzIGJvdW5kc1xcblwiLCB0cyk7XG4rXHRcdGlmICghY2ZnX21hY2hpbmVfc2xvdylcbitcdFx0XHRlcnJvcnMrKztcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlKGludCBmZHQpXG4ge1xuIFx0Y2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VycikpICtcbitcdFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZykpICtcbiBcdFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSldID0gezB9O1xuIFx0Y2hhciBkYXRhW3NpemVvZihzdHJ1Y3QgZXRoaGRyKSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xuIFx0XHQgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIDFdO1xuK1x0c3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcztcbiBcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyO1xuIFx0aW50IHJldCwgbnVtX3RzdGFtcCA9IDA7XG4gXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHswfTtcbiBcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7MH07XG4gXHRzdHJ1Y3QgY21zZ2hkciAqY207XG4tXHRpbnQ2NF90IHRzdGFtcCA9IDA7XG4gXG4gXHRpb3YuaW92X2Jhc2UgPSBkYXRhO1xuIFx0aW92Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7XG5AQCAtMTgxLDggKzIzNSw2IEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXG4gXHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XG4gXG4gXHR3aGlsZSAoMSkge1xuLVx0XHRjb25zdCBjaGFyICpyZWFzb24gPSBOVUxMO1xuLVxuIFx0XHRyZXQgPSByZWN2bXNnKGZkdCwgXHUwMDI2bXNnLCBNU0dfRVJSUVVFVUUpO1xuIFx0XHRpZiAocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQUdBSU4pXG4gXHRcdFx0YnJlYWs7XG5AQCAtMTkyLDQyICsyNDQsMzIgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcbiBcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiBmbGFncyAweCV4XFxuXCIsIG1zZy5tc2dfZmxhZ3MpO1xuIFxuIFx0XHRjbSA9IENNU0dfRklSU1RIRFIoXHUwMDI2bXNnKTtcbitcdFx0dHNzID0gTlVMTDtcbitcbitcdFx0aWYgKGNtLVx1MDAzZWNtc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGNtLVx1MDAzZWNtc2dfdHlwZSA9PSBTQ01fVElNRVNUQU1QSU5HKSB7XG4rXHRcdFx0dHNzID0gKHZvaWQgKilDTVNHX0RBVEEoY20pO1xuK1x0XHRcdGNtID0gQ01TR19OWFRIRFIoXHUwMDI2bXNnLCBjbSk7XG4rXHRcdFx0aWYgKCFjbSlcbitcdFx0XHRcdGVycm9yKDEsIDAsIFwidGltZXN0YW1wIG1pc3NpbmcgaXAgZXJyXFxuXCIpO1xuK1x0XHR9XG4rXG4gXHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsICE9IGNmZ19lcnJxX2xldmVsIHx8XG4gXHRcdCAgICBjbS1cdTAwM2VjbXNnX3R5cGUgIT0gY2ZnX2VycnFfdHlwZSlcbiBcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB0eXBlIDB4JXguMHgleFxcblwiLFxuIFx0XHRcdFx0ICAgIGNtLVx1MDAzZWNtc2dfbGV2ZWwsIGNtLVx1MDAzZWNtc2dfdHlwZSk7XG4gXG4gXHRcdGVyciA9IChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY20pO1xuLVx0XHRpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fVFhUSU1FKVxuK1x0XHRpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVFhUSU1FKVxuK1x0XHRcdG51bV90c3RhbXAgKz0gZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGVycixcbitcdFx0XHRcdFx0XHRcdCAgICAgICBkYXRhW3JldCAtIDFdKTtcbitcdFx0ZWxzZSBpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HIFx1MDAyNlx1MDAyNiB0c3MpXG4rXHRcdFx0ZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoZXJyLCB0c3MpO1xuK1x0XHRlbHNlXG4gXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogb3JpZ2luIDB4JXhcXG5cIiwgZXJyLVx1MDAzZWVlX29yaWdpbik7XG4gXG4tXHRcdHN3aXRjaCAoZXJyLVx1MDAzZWVlX2Vycm5vKSB7XG4tXHRcdGNhc2UgRUNBTkNFTEVEOlxuLVx0XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXG4tXHRcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcblwiLFxuLVx0XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHRcdHJlYXNvbiA9IFwibWlzc2VkIHR4dGltZVwiO1xuLVx0XHRicmVhaztcbi1cdFx0Y2FzZSBFSU5WQUw6XG4tXHRcdFx0aWYgKGVyci1cdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX0lOVkFMSURfUEFSQU0pXG4tXHRcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcblwiLFxuLVx0XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHRcdHJlYXNvbiA9IFwiaW52YWxpZCB0eHRpbWVcIjtcbi1cdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcblwiLFxuLVx0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9lcnJubywgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHR9XG4tXG4tXHRcdHRzdGFtcCA9ICgoaW50NjRfdCkgZXJyLVx1MDAzZWVlX2RhdGEpIFx1MDAzY1x1MDAzYyAzMiB8IGVyci1cdTAwM2VlZV9pbmZvO1xuLVx0XHR0c3RhbXAgLT0gKGludDY0X3QpIGdsb2JfdHN0YXJ0O1xuLVx0XHR0c3RhbXAgLz0gMTAwMCAqIDEwMDA7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcInNlbmQ6IHBrdCAlYyBhdCAlXCIgUFJJZDY0IFwibXMgZHJvcHBlZDogJXNcXG5cIixcbi1cdFx0XHRkYXRhW3JldCAtIDFdLCB0c3RhbXAsIHJlYXNvbik7XG4tXG4gXHRcdG1zZy5tc2dfZmxhZ3MgPSAwO1xuIFx0XHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XG4tXHRcdG51bV90c3RhbXArKztcbiBcdH1cbiBcbiBcdHJldHVybiBudW1fdHN0YW1wO1xuQEAgLTI0NSwxMiArMjg3LDEzIEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJycXVldWVfbXNncyhpbnQgZmR0KVxuIFx0XHRcdGVycm9yKDEsIGVycm5vLCBcInBvbGxcIik7XG4gXG4gXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IChwZmQucmV2ZW50cyBcdTAwMjYgUE9MTEVSUikpXG4tXHRcdFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZmR0KTtcbitcdFx0XHRudW1fdHN0YW1wICs9IGRvX3JlY3ZfZXJycXVldWUoZmR0KTtcbiBcbiBcdFx0aWYgKG51bV90c3RhbXAgPT0gY2ZnX251bV9wa3QpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHR9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSBcdTAwM2MgdGRlbGl2ZXJfbWF4KTtcbitcdH0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpIFx1MDAzY1xuK1x0XHQgdGRlbGl2ZXJfbWF4ICsgKGNmZ192YXJpYW5jZV91cyAqIDEwMDApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc3RhcnRfdGltZV93YWl0KHZvaWQpXG5AQCAtMjk1LDYgKzMzOCwxOCBAQCBzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZShpbnQgZmQpXG4gXHRcdGVycm9yKDEsIDAsIFwiZ2V0c29ja29wdCB0eHRpbWU6IG1pc21hdGNoXCIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGludCBmZClcbit7XG4rXHRpbnQgdmFsID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XG4rXHRcdCAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSB8XG4rXHRcdCAgU09GX1RJTUVTVEFNUElOR19PUFRfSUQgfFxuK1x0XHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX1RTT05MWTtcbitcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsXG4rXHRcdCAgICAgICBcdTAwMjZ2YWwsIHNpemVvZih2YWwpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwic2V0c29ja29wdCB0aW1lc3RhbXBpbmdcIik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiB7XG4gXHRpbnQgZmQ7XG5AQCAtMzA4LDYgKzM2Myw5IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiBcbiBcdHNldHNvY2tvcHRfdHh0aW1lKGZkKTtcbiBcbitcdGlmIChjZmdfdmVyaWZ5X2h3X29mZmxvYWQpXG4rXHRcdHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoZmQpO1xuK1xuIFx0aWYgKGNmZ19tYXJrIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX01BUkssIFx1MDAyNmNmZ19tYXJrLCBzaXplb2YoY2ZnX21hcmspKSlcbiBcdFx0ZXJyb3IoMSwgZXJybm8sIFwic2V0c29ja29wdCBtYXJrXCIpO1xuQEAgLTMxNyw3ICszNzUsNyBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4gXG4gc3RhdGljIGludCBzZXR1cF9yeChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIHtcbi1cdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDEwMCAqIDEwMDAgfTtcbitcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDYwMCAqIDEwMDAgfTtcbiBcdGludCBmZDtcbiBcbiBcdGZkID0gc29ja2V0KGFkZHItXHUwMDNlc2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTtcbkBAIC0zNDgsNiArNDA2LDcgQEAgc3RhdGljIHZvaWQgZG9fdGVzdF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIFx0c3RhcnRfdGltZV93YWl0KCk7XG4gXHRnbG9iX3RzdGFydCA9IGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpO1xuK1x0Z2xvYl90c3RhcnRfcmVhbCA9IGdldHRpbWVfbnMoQ0xPQ0tfUkVBTFRJTUUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2ZnX251bV9wa3Q7IGkrKylcbiBcdFx0ZG9fc2VuZF9vbmUoZmR0LCBcdTAwMjZjZmdfYnVmW2ldKTtcbkBAIC00NDAsMTAgKzQ5OSwxMSBAQCBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSlcbiBcdFx0XHRcIiAgLTYgICAgICAgICAgICBvbmx5IElQdjZcXG5cIlxuIFx0XHRcdFwiICAtYyBcdTAwM2NjbG9ja1x1MDAzZSAgICBtb25vdG9uaWMgb3IgdGFpIChkZWZhdWx0KVxcblwiXG4gXHRcdFx0XCIgIC1EIFx1MDAzY2FkZHJcdTAwM2UgICAgIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MgKHNlcnZlcilcXG5cIlxuLVx0XHRcdFwiICAtUyBcdTAwM2NhZGRyXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcblwiXG4rXHRcdFx0XCIgIC1oICAgICAgICAgICAgdmVyaWZ5IGhhcmR3YXJlIG9mZmxvYWQgKHR4KVxcblwiXG4rXHRcdFx0XCIgIC1tIFx1MDAzY21hcmtcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxuXCJcbiBcdFx0XHRcIiAgLXIgICAgICAgICAgICBydW4gcnggbW9kZVxcblwiXG4rXHRcdFx0XCIgIC1TIFx1MDAzY2FkZHJcdTAwM2UgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXFxuXCJcbiBcdFx0XHRcIiAgLXQgXHUwMDNjbnNlY1x1MDAzZSAgICAgc3RhcnQgdGltZSAoVVRDIG5hbm9zZWNvbmRzKVxcblwiXG4tXHRcdFx0XCIgIC1tIFx1MDAzY21hcmtcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxuXCJcbiBcdFx0XHRcIlxcblwiLFxuIFx0XHRcdHByb2duYW1lKTtcbiBcdGV4aXQoMSk7XG5AQCAtNDU1LDcgKzUxNSw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aW50IGRvbWFpbiA9IFBGX1VOU1BFQztcbiBcdGludCBjO1xuIFxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwiNDZjOlM6RDpydDptOlwiKSkgIT0gLTEpIHtcbitcdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcIjQ2YzpEOmhtOnJTOnQ6XCIpKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKGMpIHtcbiBcdFx0Y2FzZSAnNCc6XG4gXHRcdFx0aWYgKGRvbWFpbiAhPSBQRl9VTlNQRUMpXG5AQCAtNDgyLDIxICs1NDIsMjQgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyb3IoMSwgMCwgXCJ1bmtub3duIGNsb2NrIGlkICVzXCIsIG9wdGFyZyk7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ1MnOlxuLVx0XHRcdHNhZGRyID0gb3B0YXJnO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICdEJzpcbiBcdFx0XHRkYWRkciA9IG9wdGFyZztcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnaCc6XG4rXHRcdFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnbSc6XG4rXHRcdFx0Y2ZnX21hcmsgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAncic6XG4gXHRcdFx0Y2ZnX3J4ID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnUyc6XG4rXHRcdFx0c2FkZHIgPSBvcHRhcmc7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ3QnOlxuIFx0XHRcdGNmZ19zdGFydF90aW1lX25zID0gc3RydG9sbChvcHRhcmcsIE5VTEwsIDApO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdtJzpcbi1cdFx0XHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XG5pbmRleCBhZGY2Yzg0OGQ2ZDgwZi4uN2I3NWEzM2Y1YzQzZjggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxuQEAgLTEyLDEwICsxMiwxMyBAQCBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X3ZhcmlhbnRzXG4gZnJvbSBsaWIucHkgaW1wb3J0IEtzZnROYW1lZFZhcmlhbnQsIEtzZnRTa2lwRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIGJrZywgY21kLCBkZWZlciwgdGNcbitmcm9tIGxpYi5weSBpbXBvcnQgRXRodG9vbEZhbWlseSwgTmxFcnJvclxuIFxuIFxuIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6XG4gICAgIFwiXCJcIk1haW4gZnVuY3Rpb24uIFJ1biBzb190eHRpbWUgYXMgc2VuZGVyIGFuZCByZWNlaXZlci5cIlwiXCJcbisgICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG4rXG4gICAgIHNsb3dfbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCdLU0ZUX01BQ0hJTkVfU0xPVycpXG4gXG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXCJiaW5fcmVtb3RlXCIpOlxuQEAgLTM4LDYgKzQxLDM0IEBAIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6XG4gICAgICAgICBjbWQoY21kX3R4KVxuIFxuIFxuK2RlZiBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZyk6XG4rICAgIFwiXCJcIkNvbmZpZ3VyZSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLlwiXCJcIlxuKyAgICBldGhubCA9IEV0aHRvb2xGYW1pbHkoKVxuK1xuKyAgICB0cnk6XG4rICAgICAgICByaW5ncyA9IGV0aG5sLnJpbmdzX2dldCh7J2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9fSlcbisgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ3JpbmctZ2V0IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJykgZnJvbSBlXG4rXG4rICAgIGlmICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJyBub3QgaW4gcmluZ3Mgb3IgXFxcbisgICAgICAgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JyBub3QgaW4gcmluZ3M6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJylcbitcbisgICAgaWYgcmluZ3NbJ3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4J10gXHUwMDNjIDUwXzAwMDpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ3BhY2luZyBvZmZsb2FkIG1heCBob3Jpem9uIHRvbyBzbWFsbCcpXG4rXG4rICAgIGN1cl9ob3Jpem9uID0gcmluZ3NbJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nXVxuKyAgICBuZXdfaG9yaXpvbiA9IDUwXzAwMFxuKyAgICBldGhubC5yaW5nc19zZXQoe1xuKyAgICAgICAgJ2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9LFxuKyAgICAgICAgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nOiBuZXdfaG9yaXpvbixcbisgICAgfSlcbisgICAgZGVmZXIoZXRobmwucmluZ3Nfc2V0LCB7XG4rICAgICAgICAnaGVhZGVyJzogeydkZXYtaW5kZXgnOiBjZmcuaWZpbmRleH0sXG4rICAgICAgICAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbic6IGN1cl9ob3Jpem9uXG4rICAgIH0pXG4rXG4rXG4gZGVmIF9xZGlzY19zZXR1cChpZm5hbWUsIHFkaXNjLCBvcHRhcmdzPVwiXCIpOlxuICAgICBcIlwiXCJSZXBsYWNlIHJvb3QgcWRpc2MuIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGFmdGVyIHRoZSB0ZXN0LlxuIFxuQEAgLTU2LDYgKzg3LDcgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6XG4gICAgICAgICAgICAgW1wib25lX3BrdFwiLCBcImEsMTBcIiwgXCJhLDEwXCJdLFxuICAgICAgICAgICAgIFtcImluX29yZGVyXCIsIFwiYSwxMCxiLDIwXCIsIFwiYSwxMCxiLDIwXCJdLFxuICAgICAgICAgICAgIFtcInJldmVyc2Vfb3JkZXJcIiwgXCJhLDIwLGIsMTBcIiwgXCJiLDEwLGEsMjBcIl0sXG4rICAgICAgICAgICAgW1wiYmV5b25kX2h3X2hvcml6b25cIiwgXCJhLDcwXCIsIFwiYSw3MFwiXSxcbiAgICAgICAgIF06XG4gICAgICAgICAgICAgbmFtZSA9IGZcInZ7aXB2ZXJ9X3t0ZXN0Y2FzZVswXX1cIlxuICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQobmFtZSwgaXB2ZXIsIHRlc3RjYXNlWzFdLCB0ZXN0Y2FzZVsyXSlcbkBAIC02NCwxNSArOTYsNDIgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6XG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ubyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcbiAgICAgXCJcIlwiUnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgKGZxKSB0ZXN0cy5cIlwiXCJcbi0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG4gICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcImZxXCIpXG4gICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCJtb25vXCIsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxuIFxuIFxuK0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4rZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4rICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIGZxIHRlc3RzLCB3aXRoIG9mZmxvYWQgaG9yaXpvbi5cIlwiXCJcbisgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpXG4rXG4rICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxuKyAgICB0cnk6XG4rICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCJmcVwiLCBcIm9mZmxvYWRfaG9yaXpvbiA1MG1zXCIpXG4rICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJuZXRkZXYgZG9lcyBub3Qgc3VwcG9ydCBvZmZsb2FkLiBza2lwcGluZ1wiKSBmcm9tIGVcbitcbisgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHVzZSBvbmx5IGh3IHBhY2luZywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uLlxuKyAgICBod19vbmx5ID0gXCItaFwiIGlmIGFyZ3NfdHggIT0gXCJhLDcwXCIgZWxzZSBcIlwiXG4rICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCJtb25vXCIsIGlwdmVyLCBmXCJ7aHdfb25seX0ge2FyZ3NfdHh9XCIsIGFyZ3NfcngsIFRydWUpXG4rXG4rXG4rQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbitkZWYgdGVzdF9zb190eHRpbWVfcGZpZm9mYXN0X21vbm9faHcoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4rICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIHRlc3RzLCB3aXRob3V0IGZxIHBhY2luZyBzdyBiYWNrdXAuXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxuK1xuKyAgICBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZylcbisgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwicGZpZm9fZmFzdFwiKVxuK1xuKyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gcGFzcywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uIHdpdGhvdXQgc3cgZmFsbGJhY2suXG4rICAgIGV4cGVjdF9wYXNzID0gbm90IGFyZ3NfdHggPT0gXCJhLDcwXCJcbisgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcIm1vbm9cIiwgaXB2ZXIsIGZcIi1oIHthcmdzX3R4fVwiLCBhcmdzX3J4LCBleHBlY3RfcGFzcylcbitcbitcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV90YWkoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4gICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgZnEgdGVzdHMsIGJ1dCBwYXNzIENMT0NLX1RBSSB0byB0ZXN0IGNvbnZlcnNpb24uXCJcIlwiXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCJmcVwiKVxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwidGFpXCIsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxuIFxuQEAgLTk1LDcgKzE1NCw2IEBAIGRlZiBfdGVzdF92YXJpYW50c19ldGYoKTpcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19ldGYoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZXRmKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9mYWlsKTpcbiAgICAgXCJcIlwiUnVuIGFsbCB2YXJpYW50cyBvZiBldGYgdGVzdHMuXCJcIlwiXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICB0cnk6XG4gICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCJldGZcIiwgXCJjbG9ja2lkIENMT0NLX1RBSSBkZWx0YSA0MDAwMDBcIilcbiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOlxuQEAgLTEwOCw3ICsxNjYsMTMgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIkJvaWxlcnBsYXRlIGtzZnQgbWFpbi5cIlwiXCJcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuICAgICAgICAga3NmdF9ydW4oXG4tICAgICAgICAgICAgW3Rlc3Rfc29fdHh0aW1lX2ZxX21vbm8sIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwgdGVzdF9zb190eHRpbWVfZXRmXSxcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8sXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcsXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3LFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV90YWksXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2V0ZixcbisgICAgICAgICAgICBdLFxuICAgICAgICAgICAgIGFyZ3M9KGNmZywpLFxuICAgICAgICAgKVxuICAgICBrc2Z0X2V4aXQoKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MDUuMzA5MzU4OTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0MDAxNjMwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgTmV3IE5ldHdvcmsgS2VybmVsIEZlYXR1cmVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBuZXcga2VybmVsIGVudHJ5IHBvaW50cyBvciBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgaW5pdGlhbCBzY2FuIHJldmVhbHMgc29tZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zOiB0aGUgaW50cm9kdWN0aW9uIG9mIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhbmQgYG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhcyBgZXRodG9vbGAgcmluZyBwYXJhbWV0ZXJzLiBUaGUgYGlkcGZgIGRyaXZlciBpcyBiZWluZyB1cGRhdGVkIHRvIHN1cHBvcnQgdGhlIGBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05gIG9wdGlvbi4gUGx1cywgYHBrdGdlbmAgaXMgZ2V0dGluZyBzdXBwb3J0IGZvciBgU09fVFhUSU1FYCwgd2hpY2ggaW5jbHVkZXMgYSBgdHh0aW1lX2RlbGF5YCBhbmQgYHR4dGltZV9jbG9ja2lkYC4gQW5kIGZpbmFsbHksIGBzY2hfZnFgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGNvbnNpZGVyIGBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbmAuXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBpcyB0aGlzIHN0dWZmIGV2ZW4gKnJlYWNoYWJsZSo/IEFyZSB0aGVyZSBlbnRyeSBwb2ludHMgdGhhdCB3ZSBjYW4gZGlyZWN0bHkgZXhwbG9pdD8gVGhlIGBwa3RnZW5gIGNoYW5nZXMgYXJlIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyB0aGUgbmV3IGZpZWxkcyBpbiBgcGt0Z2VuX2lmX3dyaXRlYCBsb29rIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgcHJvY2ZzIGludGVyZmFjZSwgYC9wcm9jL25ldC9wa3RnZW4vKmAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBgZXRodG9vbGAgY2hhbmdlcywgYWRkaW5nIGBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTmAgdG8gbmV0bGluaywgYWxzbyBzZWVtIHN0cmFpZ2h0Zm9yd2FyZC4gQW5kIHRoZSBgc2NoX2ZxYCBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGNoZWNrIG9mIGBvZmZsb2FkX2hvcml6b25gLCBsb29rIGxpa2UgdGhleSBhcmUgdHJpZ2dlcmVkIHZpYSBgcWRpc2NfZGV2KHNjaCktXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAuXG5cbk5vdywgaG93IGFyZSB0aGVzZSB0aGluZ3MgY3VycmVudGx5IGZ1enplZCwgaWYgYXQgYWxsPyBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgdG91Y2ggYC9wcm9jL25ldC9wa3RnZW4vYCwgYnV0IGl0J3MgKnBvc3NpYmxlKiBpZiB0aGVyZSBhcmUgZGVzY3JpcHRpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQuIFRoZSBgZXRodG9vbGAgbmV0bGluayBpbnRlcmZhY2UsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBkZWZpbml0ZWx5IGEgdGFyZ2V0LiBBbmQgdGhlIGBzY2hfZnFgIHFkaXNjIGlzIGdlbmVyYWxseSBmdXp6ZWQgdGhyb3VnaCB0aGUgYHRjYCBuZXRsaW5rIGludGVyZmFjZS5cblxuTGV0J3MgY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYC4gWWVzLCB0aHJvdWdoIHRoZSBgZXRodG9vbGAgbmV0bGluaywgYEVUSFRPT0xfTVNHX1JJTkdTX1NFVGAuIEFuZCB0aGUgYHNjaF9mcWAgY2hhbmdlcyBhcmUgYWNjZXNzZWQgdmlhIGBSVE1fTkVXUURJU0NgIHdpdGggYFRDQV9LSU5EYCA9IFwiZnFcIi5cblxuT2theSwgdGltZSB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cy4gRm9yIGBldGh0b29sYCwgSSdtIHRoaW5raW5nIGBldGhubF9zZXRfcmluZ3NgLCBgcmluZ3NfZmlsbF9yZXBseWAsIGFuZCBgcmluZ3NfcHJlcGFyZV9kYXRhYC4gRm9yIGBzY2hfZnFgLCBkZWZpbml0ZWx5IGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGFuZCBgZnFfY2xhc3NpZnlgLiBBbmQgZm9yIGBwa3RnZW5gLCB0aGUgcmVsZXZhbnQgb25lcyBhcmUgYHBrdGdlbl9pZl93cml0ZWAgYW5kIGBwa3RnZW5feG1pdGAuXG5cbkZpbmFsbHksIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IGBDT05GSUdfTkVUX1NDSF9GUWAgaXMgZXNzZW50aWFsIGZvciBlbmFibGluZyB0aGUgYHNjaF9mcWAgY29kZS4gU2ltaWxhcmx5LCBgQ09ORklHX05FVF9QS1RHRU5gIGZvciBgcGt0Z2VuYC4gQW5kIHdlJ2xsIG5lZWQgYENPTkZJR19JRFBGYCBmb3IgdGhlIEludGVsIElQVSBkcml2ZXIsIGJ1dCBpdCBtaWdodCBub3QgYmUgcmVhY2hhYmxlLiBJJ20gbGVzcyBjb25jZXJuZWQgd2l0aCB0aGUgZHJpdmVyIGl0c2VsZiwgdW5sZXNzIGl0J3Mgc29tZXRoaW5nIGxpa2UgdmV0aC90dW4vZXRjLiBUaGUgY29yZSBjaGFuZ2VzIGluIGBzY2hfZnFgLCBgcGt0Z2VuYCwgYW5kIGBldGh0b29sYCBhcmUgdGhlIHJlYWwgdGFyZ2V0cyBoZXJlLlxuXG5JJ2xsIHJ1biBzb21lIGNvZGUgc2VhcmNoZXMgdG8gdmVyaWZ5IGV2ZXJ5dGhpbmcsIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYyOSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjUzOjE1LjcwOTUyNTQzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI2NTM0NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZxX2NoYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2ZxLmM9MTA1OD1zdGF0aWMgaW50IGZxX2xvYWRfcHJpb21hcChzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMDc5LVxcbm5ldC9zY2hlZC9zY2hfZnEuYzoxMDgwOnN0YXRpYyBpbnQgZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9mcS5jLTEwODEtXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM9MTIzMj1zdGF0aWMgaW50IGZxX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMjcwLVxcdGlmIChvcHQpXFxubmV0L3NjaGVkL3NjaF9mcS5jOjEyNzE6XFx0XFx0ZXJyID0gZnFfY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMjcyLVxcdGVsc2VcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYz0xMzg4PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTEzOTctXFx0LmRlc3Ryb3lcXHQ9XFx0ZnFfZGVzdHJveSxcXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTM5ODpcXHQuY2hhbmdlXFx0XFx0PVxcdGZxX2NoYW5nZSxcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTM5OS1cXHQuZHVtcFxcdFxcdD1cXHRmcV9kdW1wLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYz0zNzQ9c3RhdGljIHZvaWQgcWZxX2RlYWN0X3JtX2Zyb21fYWdnKHN0cnVjdCBxZnFfc2NoZWQgKnEsIHN0cnVjdCBxZnFfY2xhc3MgKmNsKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYy0zODItLyogTW92ZSBjbGFzcyB0byBhIG5ldyBhZ2dyZWdhdGUsIG1hdGNoaW5nIHRoZSBuZXcgY2xhc3Mgd2VpZ2h0IGFuZC9vciBsbWF4ICovXFxubmV0L3NjaGVkL3NjaF9xZnEuYzozODM6c3RhdGljIGludCBxZnFfY2hhbmdlX2FnZyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFmcV9jbGFzcyAqY2wsIHUzMiB3ZWlnaHQsXFxubmV0L3NjaGVkL3NjaF9xZnEuYy0zODQtXFx0XFx0XFx0ICAgdTMyIGxtYXgpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTQwNS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjQwNjpzdGF0aWMgaW50IHFmcV9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxubmV0L3NjaGVkL3NjaF9xZnEuYy00MDctXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHVuc2lnbmVkIGxvbmcgKmFyZyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcWZxLmM9MTEwMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYy0xMTY2LVxcbm5ldC9zY2hlZC9zY2hfcWZxLmM6MTE2NzpcXHQvKiBJZiBsbWF4IGlzIGxvd2VyZWQsIHRocm91Z2ggcWZxX2NoYW5nZV9jbGFzcywgZm9yIGEgY2xhc3NcXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTExNjgtXFx0ICogb3duaW5nIHBlbmRpbmcgcGFja2V0cyB3aXRoIGxhcmdlciBzaXplIHRoYW4gdGhlIG5ldyB2YWx1ZVxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYz0xMjI3PXN0YXRpYyBpbnQgcWZxX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTEyNDctXFx0XFx0XFx0IGNsLVxcdTAwM2VhZ2ctXFx1MDAzZWxtYXgsIGxlbiwgY2wtXFx1MDAzZWNvbW1vbi5jbGFzc2lkKTtcXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjEyNDg6XFx0XFx0ZXJyID0gcWZxX2NoYW5nZV9hZ2coc2NoLCBjbCwgY2wtXFx1MDAzZWFnZy1cXHUwMDNlY2xhc3Nfd2VpZ2h0LCBsZW4pO1xcbm5ldC9zY2hlZC9zY2hfcWZxLmMtMTI0OS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jPTE1MTM9c3RhdGljIGNvbnN0IHN0cnVjdCBRZGlzY19jbGFzc19vcHMgcWZxX2NsYXNzX29wcyA9IHtcXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjE1MTQ6XFx0LmNoYW5nZVxcdFxcdD0gcWZxX2NoYW5nZV9jbGFzcyxcXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTE1MTUtXFx0LmRlbGV0ZVxcdFxcdD0gcWZxX2RlbGV0ZV9jbGFzcyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfc2ZxLmM9NjA0PXN0YXRpYyB2b2lkIHNmcV9wZXJ0dXJiYXRpb24oc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYyMS1cXHQvKiBxLVxcdTAwM2VwZXJ0dXJiX3BlcmlvZCBjYW4gY2hhbmdlIHVuZGVyIHVzIGZyb21cXG5uZXQvc2NoZWQvc2NoX3NmcS5jOjYyMjpcXHQgKiBzZnFfY2hhbmdlKCkgYW5kIHNmcV9kZXN0cm95KCkuXFxubmV0L3NjaGVkL3NjaF9zZnEuYy02MjMtXFx0ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYyOS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jOjYzMDpzdGF0aWMgaW50IHNmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYzMS1cXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jPTc3Nz1zdGF0aWMgaW50IHNmcV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTgwNi1cXHRpZiAob3B0KSB7XFxubmV0L3NjaGVkL3NjaF9zZnEuYzo4MDc6XFx0XFx0aW50IGVyciA9IHNmcV9jaGFuZ2Uoc2NoLCBvcHQsIGV4dGFjayk7XFxubmV0L3NjaGVkL3NjaF9zZnEuYy04MDgtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MjEuMjM2MDcxNDExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3NzczOTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkNoZWNraW5nIFJlYWNoYWJpbGl0eSBpbiBgc2NoX2ZxLmNgKipcblxuQWxyaWdodCwgc28gdGhlIG1vZGlmaWNhdGlvbnMgaW4gYHNjaF9mcS5jYCBhcmUgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kLCBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgYWx3YXlzOiBhcmUgdGhlc2UgY2hhbmdlcyBldmVuICpyZWxldmFudCogdG8gbXkgY3VycmVudCBjb25maWd1cmF0aW9uPyBBcmUgdGhleSBhY3RpdmU/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGV5J3JlIHJlYWNoYWJsZSBjb2RlLlxuXG5UaGVyZWZvcmUsIEknbSBpbW1lZGlhdGVseSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEknbGwgY2hlY2sgYENPTkZJR19ORVRfU0NIX0ZRYCBhbmQgYENPTkZJR19ORVRfUEtUR0VOYC4gVGhvc2Ugd2lsbCBiZSB0aGUga2V5LiBJZiBlaXRoZXIsIG9yIGJvdGgsIG9mIHRob3NlIGFyZSBkaXNhYmxlZCwgSSBjYW4gcHJvYmFibHkgaWdub3JlIHRoZXNlIGNoYW5nZXMgZm9yIG5vdywgYXQgbGVhc3QgaW4gdGhlIGNvbnRleHQgb2YgbXkgY3VycmVudCBidWlsZC4gSWYgdGhleSBhcmUgZW5hYmxlZCwgdGhlbiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IEknbSBjb25jZXJuZWQgd2l0aC4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGEgZnVuZGFtZW50YWwgZmlyc3Qgc3RlcCBpbiBldmFsdWF0aW5nIGFueSBjb2RlIG1vZGlmaWNhdGlvbjsgaXQncyB0aGUgZ2F0ZWtlZXBlciBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTo1MzoyNi4yMTM4MTM3NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMTEwMTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9GUVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0yNjY9Y29uZmlnIE5FVF9TQ0hfQ09ERUxcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cXG5uZXQvc2NoZWQvS2NvbmZpZzoyNzc6Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIkZhaXIgUXVldWUgQ29udHJvbGxlZCBEZWxheSBBUU0gKEZRX0NPREVMKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTI4OD1jb25maWcgTkVUX1NDSF9DQUtFXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXFxubmV0L3NjaGVkL0tjb25maWc6Mjk5OmNvbmZpZyBORVRfU0NIX0ZRXFxubmV0L3NjaGVkL0tjb25maWctMzAwLVxcdHRyaXN0YXRlIFxcXCJGYWlyIFF1ZXVlXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9MzIyPWNvbmZpZyBORVRfU0NIX1BJRVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMzMzLVxcbm5ldC9zY2hlZC9LY29uZmlnOjMzNDpjb25maWcgTkVUX1NDSF9GUV9QSUVcXG5uZXQvc2NoZWQvS2NvbmZpZy0zMzUtXFx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTo1MzozMC43MzQ5MzU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTEzMzc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBhY2tldCBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0aGlzOiBnaXZlbiB0aGUgY29udGV4dCDigJMgSSBhc3N1bWUgd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3IgZGVidWdnaW5nIOKAkyBJJ20gZ29pbmcgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBwYWNrZXQgZ2VuZXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfTkVUX1BLVEdFTmAuIEkgc3VzcGVjdCB0aGF0IHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBjdXJyZW50bHkgc2V0LCBlbmFibGVkLCBvciBkaXNhYmxlZCwgaXMgY3J1Y2lhbCBmb3Igd2hhdGV2ZXIgaW52ZXN0aWdhdGlvbiBJJ20gdW5kZXJ0YWtpbmcuIEl0J3MgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgYSBsb3Qgb2YgbmV0d29yayB0ZXN0aW5nIGFuZCB0cmFmZmljIHNoYXBpbmcgc2NlbmFyaW9zLCBzbyBpdCdzIGEgdmVyeSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIFdl4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHN0YXRlIG9mIHRoaXMgcGFyYW1ldGVyIG9uIHRoZSBzeXN0ZW0gYXMgYSB3aG9sZS4gS25vd2luZyB3aGF0IGBDT05GSUdfTkVUX1BLVEdFTmAgYWxsb3dzIGFuZCBkaXNhYmxlcyBpcyBhIGtleSBhc3BlY3Qgb2YgYW55IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODgwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MzQuMzY0MDczNjQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDc2MTgwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9QS1RHRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mzg0PW1lbnUgXFxcIk5ldHdvcmsgdGVzdGluZ1xcXCJcXG5uZXQvS2NvbmZpZy0zODUtXFxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXFxubmV0L0tjb25maWctMzg3LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MzkuODcxNjk3MTc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5OTY0MDg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBgc2NoX2ZxYCwgYHBrdGdlbmAsIGFuZCB0aGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLCBhbmQgdGhhdCdzIHdoYXQgd2Ugd2FudCB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy5cblxuSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYGZxX2NsYXNzaWZ5YCwgYHBrdGdlbl9pZl93cml0ZWAsIGBwa3RnZW5feG1pdGAsIGBldGhubF9zZXRfcmluZ3NgLCBhbmQgYHJpbmdzX2ZpbGxfcmVwbHlgIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uIGFuZCBrZWVwaW5nIGluIG1pbmQgdGhlIG5lZWQgdG8gYXZvaWQgc2tld2luZyB0ZXN0IGRpc3RyaWJ1dGlvbnMgYnkgZm9jdXNpbmcgb24gZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIEknbSBnb2luZyB0byByZWZpbmUgdGhhdCBsaXN0LiBJIGRvbid0IHdhbnQgdG8gZ2V0IGJvZ2dlZCBkb3duIGluIGZ1bmN0aW9ucyBjYWxsZWQgZm9yIGV2ZXJ5IHNpbmdsZSBwYWNrZXQsIHNvIEknbGwgZXhjbHVkZSBgZnFfZGVxdWV1ZWAgYW5kIGBmcV9jbGFzc2lmeWAuIEknbGwgYWxzbyBiZSBhIGJpdCBtb3JlIHNlbGVjdGl2ZSBhYm91dCBgcGt0Z2VuX3htaXRgLlxuXG5NeSByZXZpc2VkIGxpc3QgdG8gcHJpb3JpdGl6ZSB3aWxsIGJlOlxuXG4qICAgYGZxX2NoYW5nZWBcbiogICBgZXRobmxfc2V0X3JpbmdzYFxuKiAgIGBwa3RnZW5faWZfd3JpdGVgXG4qICAgYHBrdGdlbl94bWl0YFxuKiAgIGByaW5nc19maWxsX3JlcGx5YFxuKiAgIGByaW5nc19wcmVwYXJlX2RhdGFgXG5cbkknbSBjb25maWRlbnQgaW4gaW5jbHVkaW5nIGBwa3RnZW5feG1pdGAgYW5kIGBwa3RnZW5faWZfd3JpdGVgIG5vdywgYWx0aG91Z2ggYHBrdGdlbl94bWl0YCBpcyB0aGUgbWFpbiBsb29wIG9mIHBrdGdlbiwgaXQncyBzdGlsbCBnb29kIHRvIGZ1enouXG5cbldlJ3ZlIGdvdCB0byBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgYE5FVF9TQ0hfRlFgIGFuZCBgTkVUX1BLVEdFTmAuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdsYW5jaW5nIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIHJlbGV2YW50LCBsaWtlIGBDT05GSUdfSURQRmAsIGFsdGhvdWdoIGdpdmVuIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCBkcml2ZXIsIGl0J3MgcHJvYmFibHkgbm90IGEgaGlnaCBwcmlvcml0eSBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNzYsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6NDcuNDcxMzQwODk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM1NjcwNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRFBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0zLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzo0OmNvbmZpZyBJRFBGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnPTE3PWlmIElEUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnOjE5OmNvbmZpZyBJRFBGX1NJTkdMRVFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiaWRwZiBzaW5nbGVxIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjUzOjUyLjYwNzAyMDQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjcwMjQ4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEknbSBnb2luZyB0byBleGNsdWRlIGBJRFBGYCwgc2luY2UgaXQncyBhIGhhcmR3YXJlIGRyaXZlciwgYW5kIHdlIGdlbmVyYWxseSBkb24ndCBmdXp6IHRob3NlIHVubGVzcyB3ZSd2ZSBnb3QgZW11bGF0ZWQgaGFyZHdhcmUuIEhvd2V2ZXIsIGBORVRfU0NIX0ZRYCBhbmQgYE5FVF9QS1RHRU5gIGFyZSBkZWZpbml0ZWx5IHNvZnR3YXJlIGZlYXR1cmVzIHJpcGUgZm9yIGZ1enppbmcuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgaGVyZSdzIHRoZSBsYW5kc2NhcGU6IGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sYCwgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdGAsIHRoZSBgaWRwZmAgZHJpdmVyIGZpbGVzLCBhIGZldyBgaW5jbHVkZWAgZmlsZXMgbGlrZSBgZXRodG9vbC5oYCBhbmQgYG5ldGRldmljZS5oYCwgdGhlIGB1YXBpYCBgZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oYCwgYW5kIHRoZW4gdGhlIG1lYXQgb2YgaXQ6IGBuZXQvY29yZS9wa3RnZW4uY2AsIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHRoZSBgZXRodG9vbGAgZGlyZWN0b3J5IChgY29tbW9uLmNgLCBgbmV0bGluay5oYCwgYHJpbmdzLmNgKSwgYG5ldC9zY2hlZC9zY2hfZnEuY2AsIGFuZCBzb21lIHNlbGZ0ZXN0cy5cblxuVGhlIG1vc3QgY3JpdGljYWwgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBuZXQvY29yZS9wa3RnZW4uY2AsIGBuZXQvZXRodG9vbC9yaW5ncy5jYCwgYG5ldC9zY2hlZC9zY2hfZnEuY2AsIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFuZCB0aG9zZSBhcmUgdGhlIGFyZWFzIEknbSBtb3N0IGludGVyZXN0ZWQgaW4gdGFyZ2V0aW5nLlxuXG5TcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgZXRobmxfc2V0X3JpbmdzYCwgYHJpbmdzX2ZpbGxfcmVwbHlgLCBgZnFfY2hhbmdlYCwgYW5kIGBwa3RnZW5faWZfd3JpdGVgLiBJJ20gZXhjbHVkaW5nIGBmcV9kZXF1ZXVlYCBhbmQgYGZxX2NsYXNzaWZ5YCBiZWNhdXNlIHRob3NlIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIGZ1enppbmcgdGhlbSBpcyBwcm9iYWJseSBub3QgdGhlIGJlc3QgdXNlIG9mIHJlc291cmNlcy5cblxuVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHdpbGwgYmUgYE5FVF9TQ0hfRlFgIGFuZCBgTkVUX1BLVEdFTmAuXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyLCBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAsIGFuZCBtb2RpZmllcyBgc2NoX2ZxYCB0byB1c2UgaXQsIGFsb25nIHdpdGggdGhlIGBTT19UWFRJTUVgIHN1cHBvcnQgYWRkZWQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggbWVhbnMgdGhleSBhcmUgYWxsIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cblxuTGV0J3MgdHJpZ2dlciBhIGBzZXQtcmVzdWx0c2AgdG8gZ2V0IHRoaXMgZnV6emVyIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI5OSwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTQ6MDAuODM0MDUwMTE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMzY2NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXRobmxfc2V0X3JpbmdzXCIsXG4gICAgXCJyaW5nc19maWxsX3JlcGx5XCIsXG4gICAgXCJmcV9jaGFuZ2VcIixcbiAgICBcInBrdGdlbl9pZl93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCByaW5nIHBhcmFtZXRlciBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIG1vZGlmaWVzIGBzY2hfZnFgIHRvIHVzZSBpdC4gSXQgYWxzbyBhZGRzIGBTT19UWFRJTUVgIHN1cHBvcnQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbmV0d29ya2luZyBsb2dpYywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgcGFja2V0IGdlbmVyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9GUVwiLFxuICAgIFwiTkVUX1BLVEdFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3NldF9yaW5nc1wiLFxuICAgIFwicmluZ3NfZmlsbF9yZXBseVwiLFxuICAgIFwiZnFfY2hhbmdlXCIsXG4gICAgXCJwa3RnZW5faWZfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgcmluZyBwYXJhbWV0ZXIgYHBhY2luZ19vZmZsb2FkX2hvcml6b25gIGFuZCBtb2RpZmllcyBgc2NoX2ZxYCB0byB1c2UgaXQuIEl0IGFsc28gYWRkcyBgU09fVFhUSU1FYCBzdXBwb3J0IHRvIGBwa3RnZW5gLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIG5ldGxpbmsgaW50ZXJmYWNlcywgYW5kIHBhY2tldCBnZW5lcmF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sd67[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 21:35:30 +0000 UTC FinishedAt: 2026-07-23 21:54:02 +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": "92f0217f8afd8c96288a5e88263d1a15cf98ceec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_FQ", "NET_PKTGEN" ], "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": "92f0217f8afd8c96288a5e88263d1a15cf98ceec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_FQ", "NET_PKTGEN" ], "series_id": "3442606c-8dfe-43e1-9f7c-fb0f966dd68e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ethnl_set_rings", "rings_fill_reply", "fq_change", "pktgen_if_write" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3NldF9yaW5ncyYjMzQ7LAogICAgJiMzNDtyaW5nc19maWxsX3JlcGx5JiMzNDssCiAgICAmIzM0O2ZxX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhbmQgbW9kaWZpZXMgYHNjaF9mcWAgdG8gdXNlIGl0LiBJdCBhbHNvIGFkZHMgYFNPX1RYVElNRWAgc3VwcG9ydCB0byBgcGt0Z2VuYC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA1MWZkODJkYzNiM2U0OGNlN2U1OWNlODk3MDcxNzNmZTBhNDFkMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMTo1MzowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuaW5kZXggNWRkNGQxYjVkOTRiYmIuLjQ4ZjQzZGRhMmU2ZTVlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTQ0OCw2ICYjNDM7NDQ4LDEyIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGhkcy10aHJlc2gtbWF4XG4gICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHBhY2luZy1vZmZsb2FkLWhvcml6b25cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHBhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4XG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4gXG4gICAtXG4gICAgIG5hbWU6IG1tLXN0YXRcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcbmluZGV4IDUxMmY2ZDZmYTNkOGY4Li4zYjljZTFjNmUxMDU3OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XG5AQCAtMTgzLDcgJiM0MzsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcbiBzdHJ1Y3QgZHBsbF9waW4qICAgICAgICAgICAgICAgICAgICBkcGxsX3BpblxuIHN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIHBhZ2VfcG9vbHNcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcbi11NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuJiM0Mzt1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uXG4mIzQzO3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uXG4gc3RydWN0X25hcGlfY29uZmlnKiAgICAgICAgICAgICAgICAgbmFwaV9jb25maWdcbiB1bnNpZ25lZF9sb25nICAgICAgICAgICAgICAgICAgICAgICBncm9fZmx1c2hfdGltZW91dFxuIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcGlfZGVmZXJfaGFyZF9pcnFzXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmNcbmluZGV4IGJiOTlkOWU3YzY1ZDUxLi41ZGRmMzQ3OTI3ZGMzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmNcbkBAIC0xODAxLDcgJiM0MzsxODAxLDggQEAgc3RhdGljIHZvaWQgaWRwZl9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbi1cdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCxcbiYjNDM7XHQuc3VwcG9ydGVkX3JpbmdfcGFyYW1zXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQgfFxuJiM0MztcdFx0XHRcdCAgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxuIFx0LmdldF9tc2dsZXZlbFx0XHQ9IGlkcGZfZ2V0X21zZ2xldmVsLFxuIFx0LnNldF9tc2dsZXZlbFx0XHQ9IGlkcGZfc2V0X21zZ2xldmVsLFxuIFx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbmluZGV4IGNmOTY2ZmU2Yzc1OWNlLi5kZTQxNzBjMmFhM2JhMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG5AQCAtODg4LDYgJiM0Mzs4ODgsMTEgQEAgc3RhdGljIGludCBpZHBmX2NmZ19uZXRkZXYoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIFx0bmV0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbiBcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gdnBvcnQtXHUwMDNlbWF4X210dTtcbiBcbiYjNDM7XHRpZiAoaWRwZl9pc19xdWV1ZV9tb2RlbF9zcGxpdCh2cG9ydC1cdTAwM2VkZmx0X3F2X3JzcmMudHhxX21vZGVsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlkcGZfaXNfY2FwX2VuYShhZGFwdGVyLCBJRFBGX09USEVSX0NBUFMsXG4mIzQzO1x0XHRcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxuJiM0MztcdFx0bmV0ZGV2LVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gMTI4MDAwO1xuJiM0MztcbiBcdGRmbHRfZmVhdHVyZXMgPSBORVRJRl9GX1NHXHR8XG4gXHRcdFx0TkVUSUZfRl9ISUdIRE1BO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5pbmRleCA1NjZiMDhjYTNhNmNiMS4uMWNjZmFlYjM1MTkzNWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5AQCAtMSw2ICYjNDM7MSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qIENvcHlyaWdodCAoQykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRwb2xsLmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXCYjMzQ7aWRwZi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWRwZl9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2lkcGZfdmlydGNobmwuaFwmIzM0O1xuQEAgLTI0MDgsOSAmIzQzOzI0MTAsMTMgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsXG4gXHRcdFx0XHQgICAgc3RydWN0IGlkcGZfdHhfc3BsaXRxX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxuIHtcbi1cdCoodTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSAodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCk7XG4mIzQzO1x0KihfX2xlMzIgKilcdTAwMjZkZXNjLVx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9IGNwdV90b19sZTMyKCh1OCkocGFyYW1zLVx1MDAzZWR0eXBlIHwgdGRfY21kKSk7XG4gXHRkZXNjLVx1MDAzZWZsb3cucXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoKHUxNilzaXplKTtcbiBcdGRlc2MtXHUwMDNlZmxvdy5xdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYocGFyYW1zLVx1MDAzZWNvbXBsX3RhZyk7XG4mIzQzO1xuJiM0MztcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMF0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdO1xuJiM0MztcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMV0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzFdO1xuJiM0MztcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMl0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdO1xuIH1cbiBcbiAvKipcbkBAIC0zMDExLDYgJiM0MzszMDE3LDU5IEBAIHN0YXRpYyBib29sIGlkcGZfdHhfc3BsaXRxX25lZWRfcmUoc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EpXG4gXHRyZXR1cm4gZ2FwIFx1MDAzZT0gSURQRl9UWF9TUExJVFFfUkVfTUlOX0dBUDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBpbnQgdHNfZ3Jhbl9wb3cyID0gOTtcbiYjNDM7XHR1NjQgdHMsIG5vdztcbiYjNDM7XG4mIzQzO1x0LyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi9cbiYjNDM7XHRpZiAobmV0cG9sbF90eF9ydW5uaW5nKHNrYi1cdTAwM2VkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNrYi1cdTAwM2V0c3RhbXBfdHlwZSkge1xuJiM0MztcdGNhc2UgU0tCX0NMT0NLX1JFQUxUSU1FOlxuJiM0MztcdFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9hZGQoc2tiLVx1MDAzZXRzdGFtcCxcbiYjNDM7XHRcdFx0XHRcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtXG4mIzQzO1x0XHRcdFx0XHQgICBrdGltZV9tb25vX3RvX2FueSgwLCBUS19PRkZTX1JFQUwpKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNLQl9DTE9DS19NT05PVE9OSUM6XG4mIzQzO1x0XHR0cyA9IGt0aW1lX3RvX25zKGt0aW1lX21vbm9fdG9fYW55KHNrYi1cdTAwM2V0c3RhbXAsIFRLX09GRlNfVEFJKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNLQl9DTE9DS19UQUk6XG4mIzQzO1x0XHR0cyA9IGt0aW1lX3RvX25zKHNrYi1cdTAwM2V0c3RhbXApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFdBUk5fT05fT05DRSgxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5vdyA9IGt0aW1lX2dldF9jbG9ja3RhaV9ucygpO1xuJiM0MztcdGlmICh0cyBcdTAwM2Mgbm93KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBiZXlvbmQgb2ZmbG9hZCBob3Jpem9uPyBzZXQgb3ZlcmZsb3cgYml0IG9ubHkgKi9cbiYjNDM7XHRpZiAodHMgXHUwMDNlIG5vdyAmIzQzOyAoKHU2NClza2ItXHUwMDNlZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24gKiBOU0VDX1BFUl9VU0VDKSkge1xuJiM0MztcdFx0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXSA9IDEgXHUwMDNjXHUwMDNjIDc7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0cyBcdTAwM2VcdTAwM2U9IHRzX2dyYW5fcG93MjtcbiYjNDM7XG4mIzQzO1x0LyogMCBpcyB2YWxpZCAyNGIgdGltZXN0YW1wLCBidXQgYWxzbyBtZWFucyBmaWVsZCB1bnNldC5cbiYjNDM7XHQgKiBBZGQgNTEyIG5zICh0c19ncmFuX3BvdzIpIHRvIGF2b2lkIHRoaXMgY2FzZVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgodHMgXHUwMDI2IDB4N2ZmZmZmKSA9PSAwKSB7XG4mIzQzO1x0XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gMTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF0gPSB0cyBcdTAwMjYgMHhmZjtcbiYjNDM7XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzFdID0gKHRzIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbiYjNDM7XHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDdmKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpZHBmX3R4X3NwbGl0cV9mcmFtZSAtIFNlbmRzIGJ1ZmZlciBvbiBUeCByaW5nIHVzaW5nIGZsZXggZGVzY3JpcHRvcnNcbiAgKiBAc2tiOiBzZW5kIGJ1ZmZlclxuQEAgLTMwOTcsNiAmIzQzOzMxNTYsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRcdHR4X3BhcmFtcy5kdHlwZSA9IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRTtcbiBcdFx0dHhfcGFyYW1zLmVvcF9jbWQgPSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2tiLVx1MDAzZXRzdGFtcCBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKVxuJiM0MztcdFx0XHRpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKHR4X3EsIHNrYiwgXHUwMDI2dHhfcGFyYW1zKTtcbiYjNDM7XG4gXHRcdC8qIFNldCB0aGUgUkUgYml0IHRvIHBlcmlvZGljYWxseSBcJiMzNDtjbGVhblwmIzM0OyB0aGUgZGVzY3JpcHRvciByaW5nLlxuIFx0XHQgKiBNSU5fR0FQIGlzIHNldCB0byBNSU5fUklORyBzaXplIHRvIGVuc3VyZSBpdCB3aWxsIGJlIHNldCBhdFxuIFx0XHQgKiBsZWFzdCBvbmNlIGVhY2ggdGltZSBhcm91bmQgdGhlIHJpbmcuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbmluZGV4IDRiZTViM2I2ZDNlZDJiLi44NjU0MDhiNTdiMGQ1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcbkBAIC0xNjEsNiAmIzQzOzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHtcbiAgKiBAdHNvX3NlZ3M6IE51bWJlciBvZiBzZWdtZW50cyB0byBiZSBzZW50XG4gICogQHRzb19oZHJfbGVuOiBMZW5ndGggb2YgaGVhZGVycyB0byBiZSBkdXBsaWNhdGVkXG4gICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3JcbiYjNDM7ICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcFxuICAqL1xuIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHtcbiBcdHUzMiB0eF9mbGFncztcbkBAIC0xNzQsNiAmIzQzOzE3NSw3IEBAIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHtcbiBcdHUxNiB0c29faGRyX2xlbjtcbiBcbiBcdHUxNiB0ZF9jbWQ7XG4mIzQzO1x0dTggZGVzY190c1szXTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTg1LDYgJiM0Mzs4NSw4IEBAIGVudW0ge1xuICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlclxuICAqIEBoZHNfdGhyZXNoOiBQYWNrZXQgc2l6ZSB0aHJlc2hvbGQgZm9yIGhlYWRlciBkYXRhIHNwbGl0IChIRFMpXG4gICogQGhkc190aHJlc2hfbWF4OiBNYXhpbXVtIHN1cHBvcnRlZCBzZXR0aW5nIGZvciBAaGRzX3RocmVzaG9sZFxuJiM0MzsgKiBAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjXG4mIzQzOyAqIEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gdmFsdWUgaW4gdXNlY1xuICAqXG4gICovXG4gc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7XG5AQCAtOTcsNiAmIzQzOzk5LDggQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7XG4gXHR1MzJcdHR4X3B1c2hfYnVmX21heF9sZW47XG4gXHR1MzJcdGhkc190aHJlc2g7XG4gXHR1MzJcdGhkc190aHJlc2hfbWF4O1xuJiM0MztcdHUzMlx0cGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiYjNDM7XHR1MzJcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuIH07XG4gXG4gLyoqXG5AQCAtMTA4LDYgJiM0MzsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UWF9QVVNIX0JVRl9MRU46IGNhcHR1cmUgZm9yIHNldHRpbmcgdHhfcHVzaF9idWZfbGVuXG4gICogQEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQ6IGNhcHR1cmUgZm9yIHNldHRpbmcgdGNwX2RhdGFfc3BsaXRcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2hcbiYjNDM7ICogQEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTjogY2FwdHVyZSBmb3Igc2V0dGluZyBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uXG4gICovXG4gZW51bSBldGh0b29sX3N1cHBvcnRlZF9yaW5nX3BhcmFtIHtcbiBcdEVUSFRPT0xfUklOR19VU0VfUlhfQlVGX0xFTlx0XHQ9IEJJVCgwKSxcbkBAIC0xMTcsNiAmIzQzOzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XG4gXHRFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTlx0PSBCSVQoNCksXG4gXHRFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElUXHRcdD0gQklUKDUpLFxuIFx0RVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSU1x0XHQ9IEJJVCg2KSxcbiYjNDM7XHRFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05cdD0gQklUKDcpLFxuIH07XG4gXG4gI2RlZmluZSBfX0VUSF9SU1NfSEFTSF9CSVQoYml0KVx0KCh1MzIpMSBcdTAwM2NcdTAwM2MgKGJpdCkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0yMTI5LDcgJiM0MzsyMTI5LDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbiAgKlx0QGRwbGxfcGluOiBQb2ludGVyIHRvIHRoZSBTeW5jRSBzb3VyY2UgcGluIG9mIGEgRFBMTCBzdWJzeXN0ZW0sXG4gICpcdFx0ICAgd2hlcmUgdGhlIGNsb2NrIGlzIHJlY292ZXJlZC5cbiAgKlxuLSAqXHRAbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b246IG1heCBFRFQgb2ZmbG9hZCBob3Jpem9uIGluIG5zZWMuXG4mIzQzOyAqXHRAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogYWN0aXZlIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cbiYjNDM7ICpcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cbiAgKlx0QG5hcGlfY29uZmlnOiBBbiBhcnJheSBvZiBuYXBpX2NvbmZpZyBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgcGVyLU5BUElcbiAgKlx0XHQgICAgICBzZXR0aW5ncy5cbiAgKlx0QG51bV9uYXBpX2NvbmZpZ3M6XHRudW1iZXIgb2YgYWxsb2NhdGVkIE5BUEkgY29uZmlnIHN0cnVjdHMsXG5AQCAtMjU1Miw3ICYjNDM7MjU1Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiBcdC8qKiBAaXJxX21vZGVyOiBkaW0gcGFyYW1ldGVycyB1c2VkIGlmIElTX0VOQUJMRUQoQ09ORklHX0RJTUxJQikuICovXG4gXHRzdHJ1Y3QgZGltX2lycV9tb2Rlclx0KmlycV9tb2RlcjtcbiBcbi1cdHU2NFx0XHRcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuJiM0MztcdHUzMlx0XHRcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XG4mIzQzO1x0dTMyXHRcdFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gXHRzdHJ1Y3QgbmFwaV9jb25maWdcdCpuYXBpX2NvbmZpZztcbiBcdHUzMlx0XHRcdG51bV9uYXBpX2NvbmZpZ3M7XG4gXHR1MzJcdFx0XHRuYXBpX2RlZmVyX2hhcmRfaXJxcztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuQEAgLTE5Myw2ICYjNDM7MTkzLDggQEAgZW51bSB7XG4gXHRFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOX01BWCxcbiBcdEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0RVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuJiM0MztcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxuJiM0MztcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCxcbiBcbiBcdF9fRVRIVE9PTF9BX1JJTkdTX0NOVCxcbiBcdEVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jXG5pbmRleCA1YjRkZDA0ZDYxMjQ3Ni4uNzg5N2U0MjIwNTEzMDAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmNcbkBAIC0yMDEsNiAmIzQzOzIwMSw3IEBAXG4gXHRwZihTVklEX1JORClcdFx0LyogUmFuZG9tIFNWTEFOIElEICovXHRcdFx0XFxcbiBcdHBmKE5PREUpXHRcdC8qIE5vZGUgbWVtb3J5IGFsbG9jKi9cdFx0XHRcXFxuIFx0cGYoU0hBUkVEKVx0XHQvKiBTaGFyZWQgU0tCICovXHRcdFx0XFxcbiYjNDM7XHRwZihUWFRJTUUpXHRcdC8qIFNPX1RYVElNRSBzdXBwb3J0ICovXHRcdFx0XFxcbiBcbiAjZGVmaW5lIHBmKGZsYWcpXHRcdGZsYWcjI19TSElGVCxcbiBlbnVtIHBrdF9mbGFncyB7XG5AQCAtMjkxLDYgJiM0MzsyOTIsMTAgQEAgc3RydWN0IHBrdGdlbl9kZXYge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHR1NjQgZGVsYXk7XHRcdC8qIG5hbm8tc2Vjb25kcyAqL1xuIFxuJiM0MztcdC8qIFRYVElNRSBzdXBwb3J0ICovXG4mIzQzO1x0dTY0IHR4dGltZV9kZWxheTtcdC8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi9cbiYjNDM7XHRjbG9ja2lkX3QgdHh0aW1lX2Nsb2NraWQ7IC8qIGNsb2NraWQgZm9yIFNPX1RYVElNRSAqL1xuJiM0MztcbiBcdF9fdTY0IGNvdW50O1x0XHQvKiBEZWZhdWx0IE5vIHBhY2tldHMgdG8gc2VuZCAqL1xuIFx0X191NjQgc29mYXI7XHRcdC8qIEhvdyBtYW55IHBrdHMgd2UmIzM5O3ZlIHNlbnQgc28gZmFyICovXG4gXHRfX3U2NCB0eF9ieXRlcztcdFx0LyogSG93IG1hbnkgYnl0ZXMgd2UmIzM5O3ZlIHRyYW5zbWl0dGVkICovXG5AQCAtNjY2LDYgJiM0Mzs2NzEsMTcgQEAgc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiBcdGlmIChwa3RfZGV2LVx1MDAzZW5vZGUgXHUwMDNlPSAwKVxuIFx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7ICAgICBub2RlOiAlZFxcblwmIzM0OywgcGt0X2Rldi1cdTAwM2Vub2RlKTtcbiBcbiYjNDM7XHRpZiAocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgRl9UWFRJTUUpIHtcbiYjNDM7XHRcdGNsb2NraWRfdCBjbG9ja2lkID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xuJiM0MztcbiYjNDM7XHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDsgICAgIHR4dGltZV9kZWxheTogJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSk7XG4mIzQzO1x0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7ICAgICB0eHRpbWVfY2xvY2tpZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGNsb2NraWQgPT0gQ0xPQ0tfTU9OT1RPTklDID8gXCYjMzQ7bW9ub3RvbmljXCYjMzQ7IDpcbiYjNDM7XHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19SRUFMVElNRSA/IFwmIzM0O3JlYWx0aW1lXCYjMzQ7IDpcbiYjNDM7XHRcdFx0ICAgY2xvY2tpZCA9PSBDTE9DS19UQUkgPyBcJiMzNDt0YWlcJiMzNDsgOiBcJiMzNDt1bmtub3duXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHBrdF9kZXYtXHUwMDNleG1pdF9tb2RlID09IE1fTkVUSUZfUkVDRUlWRSlcbiBcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDsgICAgIHhtaXRfbW9kZTogbmV0aWZfcmVjZWl2ZVxcblwmIzM0Oyk7XG4gXHRlbHNlIGlmIChwa3RfZGV2LVx1MDAzZXhtaXRfbW9kZSA9PSBNX1FVRVVFX1hNSVQpXG5AQCAtMTE0MSw2ICYjNDM7MTE1Nyw1MCBAQCBzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi1cdTAwM2VkZWxheSk7XG4gXHRcdHJldHVybiBjb3VudDtcbiBcdH1cbiYjNDM7XHRpZiAoIXN0cmNtcChuYW1lLCBcJiMzNDt0eHRpbWVfZGVsYXlcJiMzNDspKSB7XG4mIzQzO1x0XHRtYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7XG4mIzQzO1x0XHRsZW4gPSBudW1fYXJnKFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFx1MDAyNnZhbHVlKTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBsZW47XG4mIzQzO1xuJiM0MztcdFx0LyogaW4gcXVldWVfeG1pdCBtb2RlIGZxIG1heSBjbGVhciB0c3RhbXAsIGRvIG5vdCByZXVzZSBza2IgKi9cbiYjNDM7XHRcdGlmICh2YWx1ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcGt0X2Rldi1cdTAwM2VjbG9uZV9za2IgXHUwMDNlIDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpO1xuJiM0MztcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O09LOiB0eHRpbWVfZGVsYXk9JWxsdVwmIzM0OyxcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZyl2YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghc3RyY21wKG5hbWUsIFwmIzM0O3R4dGltZV9jbG9ja2lkXCYjMzQ7KSkge1xuJiM0MztcdFx0Y2hhciBjbG9ja3N0clszMl07XG4mIzQzO1x0XHRjbG9ja2lkX3QgY2xrO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChjbG9ja3N0ciwgMCwgc2l6ZW9mKGNsb2Nrc3RyKSk7XG4mIzQzO1x0XHRtYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7XG4mIzQzO1x0XHRsZW4gPSBzdHJuX2xlbihcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4KTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBsZW47XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGNsb2Nrc3RyLCBcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbGVuKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzdHJjbXAoY2xvY2tzdHIsIFwmIzM0O21vbm90b25pY1wmIzM0OykpIHtcbiYjNDM7XHRcdFx0Y2xrID0gQ0xPQ0tfTU9OT1RPTklDO1xuJiM0MztcdFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcJiMzNDtyZWFsdGltZVwmIzM0OykpIHtcbiYjNDM7XHRcdFx0Y2xrID0gQ0xPQ0tfUkVBTFRJTUU7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjbXAoY2xvY2tzdHIsIFwmIzM0O3RhaVwmIzM0OykpIHtcbiYjNDM7XHRcdFx0Y2xrID0gQ0xPQ0tfVEFJO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O0VSUk9SOiB1bmtub3duIGNsb2NraWQgJiMzOTslcyYjMzk7XCYjMzQ7LFxuJiM0MztcdFx0XHRcdGNsb2Nrc3RyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c3ByaW50ZihwZ19yZXN1bHQsIFwmIzM0O09LOiB0eHRpbWVfY2xvY2tpZD0lc1wmIzM0OywgY2xvY2tzdHIpO1xuJiM0MztcdFx0V1JJVEVfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkLCBjbGspO1xuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdH1cbiBcdGlmICghc3RyY21wKG5hbWUsIFwmIzM0O3JhdGVcJiMzNDspKSB7XG4gXHRcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcbiBcdFx0bGVuID0gbnVtX2FyZyhcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4LCBcdTAwMjZ2YWx1ZSk7XG5AQCAtMTIzOCw2ICYjNDM7MTI5OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0aWYgKHZhbHVlIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiAocGt0X2Rldi1cdTAwM2VuX2ltaXhfZW50cmllcyBcdTAwM2UgMCB8fFxuIFx0XHRcdFx0ICAhKHBrdF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZfU0hBUkVEKSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAodmFsdWUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9kZWxheSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiA9IHZhbHVlO1xuIFxuQEAgLTIzMjEsNiAmIzQzOzIzODMsMjEgQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiB9XG4gXG4gXG4mIzQzO3N0YXRpYyBrdGltZV90IGt0aW1lX2dldF9jbG9jayhjbG9ja2lkX3QgY2xvY2tpZClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoY2xvY2tpZCkge1xuJiM0MztcdGNhc2UgQ0xPQ0tfUkVBTFRJTUU6XG4mIzQzO1x0XHRyZXR1cm4ga3RpbWVfZ2V0X3JlYWwoKTtcbiYjNDM7XHRjYXNlIENMT0NLX01PTk9UT05JQzpcbiYjNDM7XHRcdHJldHVybiBrdGltZV9nZXQoKTtcbiYjNDM7XHRjYXNlIENMT0NLX1RBSTpcbiYjNDM7XHRcdHJldHVybiBrdGltZV9nZXRfY2xvY2t0YWkoKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdFx0cmV0dXJuIGt0aW1lX2dldCgpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpXG4ge1xuIFx0a3RpbWVfdCBzdGFydF90aW1lLCBlbmRfdGltZTtcbkBAIC0zNTEwLDcgJiM0MzszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiBcbiBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcbiB7XG4tXHRib29sIHNrYl9zaGFyZWQgPSAhIShSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VmbGFncykgXHUwMDI2IEZfU0hBUkVEKTtcbiYjNDM7XHR1MzIgZmxhZ3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Ym9vbCBza2Jfc2hhcmVkID0gISEoZmxhZ3MgXHUwMDI2IEZfU0hBUkVEKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2ID0gcGt0X2Rldi1cdTAwM2VvZGV2O1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0dW5zaWduZWQgaW50IGJ1cnN0ID0gMTtcbkBAIC0zNTQ1LDYgJiM0MzszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHQvKiBJZiBubyBza2Igb3IgY2xvbmUgY291bnQgZXhoYXVzdGVkIHRoZW4gZ2V0IG5ldyBvbmUgKi9cbiBcdGlmICghcGt0X2Rldi1cdTAwM2Vza2IgfHwgKHBrdF9kZXYtXHUwMDNlbGFzdF9vayBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICAmIzQzOyYjNDM7cGt0X2Rldi1cdTAwM2VjbG9uZV9jb3VudCBcdTAwM2U9IGNsb25lX3NrYikpIHtcbiYjNDM7XHRcdHU2NCB0eHRpbWVfZGVsYXk7XG4mIzQzO1xuIFx0XHQvKiBidWlsZCBhIG5ldyBwa3QgKi9cbiBcdFx0a2ZyZWVfc2tiKHBrdF9kZXYtXHUwMDNlc2tiKTtcbiBcbkBAIC0zNTU3LDYgJiM0MzszNjM3LDE2IEBAIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0XHR9XG4gXHRcdHBrdF9kZXYtXHUwMDNlbGFzdF9wa3Rfc2l6ZSA9IHBrdF9kZXYtXHUwMDNlc2tiLVx1MDAzZWxlbjtcbiBcdFx0cGt0X2Rldi1cdTAwM2VjbG9uZV9jb3VudCA9IDA7XHQvKiByZXNldCBjb3VudGVyICovXG4mIzQzO1xuJiM0MztcdFx0dHh0aW1lX2RlbGF5ID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KTtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgRl9UWFRJTUUgXHUwMDI2XHUwMDI2IHR4dGltZV9kZWxheSkge1xuJiM0MztcdFx0XHRjbG9ja2lkX3QgY2xrID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xuJiM0MztcdFx0XHRrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgdHh0aW1lX2RlbGF5KTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtXHUwMDNlc2tiLCB0eHRpbWUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IGNsayk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAocGt0X2Rldi1cdTAwM2VkZWxheSBcdTAwMjZcdTAwMjYgcGt0X2Rldi1cdTAwM2VsYXN0X29rKVxuQEAgLTM4NjksNiAmIzQzOzM5NTksNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9hZGRfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyICppZm5hbWUpXG4gXHRwa3RfZGV2LVx1MDAzZWJ1cnN0ID0gMTtcbiBcdHBrdF9kZXYtXHUwMDNlbm9kZSA9IE5VTUFfTk9fTk9ERTtcbiBcdHBrdF9kZXYtXHUwMDNlZmxhZ3MgPSBGX1NIQVJFRDtcdC8qIFNLQiBzaGFyZWQgYnkgZGVmYXVsdCAqL1xuJiM0MztcdHBrdF9kZXYtXHUwMDNldHh0aW1lX2Nsb2NraWQgPSBDTE9DS19NT05PVE9OSUM7XG4gXG4gXHRlcnIgPSBwa3RnZW5fc2V0dXBfZGV2KHQtXHUwMDNlbmV0LCBwa3RfZGV2LCBpZm5hbWUpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCAzMWM2NWE1NDVhMTA3Yy4uMmM3YTI0NWM1ZmZjMmUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC0yMTU1LDcgJiM0MzsyMTU1LDcgQEAgc3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX1RTT19NQVhfU0VHUyxcbiBcdFx0XHRSRUFEX09OQ0UoZGV2LVx1MDAzZXRzb19tYXhfc2VncykpIHx8XG4gXHQgICAgbmxhX3B1dF91aW50KHNrYiwgSUZMQV9NQVhfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbi1cdFx0XHQgUkVBRF9PTkNFKGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikpIHx8XG4mIzQzO1x0XHRcdCAodTY0KVJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pICogTlNFQ19QRVJfVVNFQykgfHxcbiAjaWZkZWYgQ09ORklHX1JQU1xuIFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fUlhfUVVFVUVTLFxuIFx0XHRcdFJFQURfT05DRShkZXYtXHUwMDNlbnVtX3J4X3F1ZXVlcykpIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmMgYi9uZXQvZXRodG9vbC9jb21tb24uY1xuaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjVjMjMyM2FhYTAyYjZiIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXG5AQCAtOTU0LDYgJiM0Mzs5NTQsOSBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdC8qIERyaXZlciBnaXZlcyB1cyBjdXJyZW50IHN0YXRlLCB3ZSB3YW50IHRvIHJldHVybiBjdXJyZW50IGNvbmZpZyAqL1xuIFx0a3BhcmFtLVx1MDAzZXRjcF9kYXRhX3NwbGl0ID0gZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfY29uZmlnO1xuIFx0a3BhcmFtLVx1MDAzZWhkc190aHJlc2ggPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc190aHJlc2g7XG4mIzQzO1xuJiM0MztcdGtwYXJhbS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b247XG4mIzQzO1x0a3BhcmFtLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBldGh0b29sX2luaXRfdHNpbmZvKHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuaW5kZXggM2U5NjlhMDcwZjlmZTQuLmFlN2I2NTFjNjU4Zjc0IDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbkBAIC00OTQsNyAmIzQzOzQ5NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9mZWF0dXJlc19zZXRfcG9saWN5W0VUSFRPT0xfQV9GRUFUVVJFU19XQU5UXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3ByaXZmbGFnc19nZXRfcG9saWN5W0VUSFRPT0xfQV9QUklWRkxBR1NfSEVBREVSICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0ZMQUdTICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19nZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRUFERVIgJiM0MzsgMV07XG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYICYjNDM7IDFdO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0hFQURFUiAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfc2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfQ09NQklORURfQ09VTlQgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NvYWxlc2NlX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NPQUxFU0NFX0hFQURFUiAmIzQzOyAxXTtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9yaW5ncy5jIGIvbmV0L2V0aHRvb2wvcmluZ3MuY1xuaW5kZXggOTA1NGM4OWM1ZDdiYjIuLjUyMTU4NTcyZmUxMGMwIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvcmluZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcmluZ3MuY1xuQEAgLTQyLDYgJiM0Mzs0Miw4IEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4gXG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbiYjNDM7XHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuJiM0MztcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS5tYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiBcbiBcdGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfcmluZ3BhcmFtKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VyaW5ncGFyYW0sXG4gXHRcdFx0XHRcdFx1MDAyNmRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbSwgaW5mby1cdTAwM2VleHRhY2spO1xuQEAgLTY5LDcgJiM0Mzs3MSw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTiAqL1xuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVggKi9cbiBcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXG4tXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBfUklOR1NfSERTX1RIUkVTSF9NQVggKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTiAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XHQvKiBfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggKi9cbiB9XG4gXG4gc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTIxLDcgJiM0MzsxMjUsMTIgQEAgc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaCkgfHxcbiBcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuLVx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXG4mIzQzO1x0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkgfHxcbiYjNDM7XHQgICAgKChzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbiYjNDM7XHRcdFx0ICBrci1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB8fFxuJiM0MztcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLFxuJiM0MztcdFx0XHQgIGtyLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0LDYgJiM0MzsxNTMsNyBAQCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W10gPSB7XG4gXHRbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCAxKSxcbiBcdFtFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIFx0W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIH07XG4gXG4gc3RhdGljIGludFxuQEAgLTE3Nyw2ICYjNDM7MTg3LDE0IEBAIGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShvcHMtXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3NldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRiW0VUSFRPT0xfQV9SSU5HU19DUUVfU0laRV0gXHUwMDI2XHUwMDI2XG4gXHQgICAgIShvcHMtXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX0NRRV9TSVpFKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuQEAgLTI0Niw2ICYjNDM7MjY0LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dLCBcdTAwMjZtb2QpO1xuIFx0ZXRobmxfdXBkYXRlX3UzMihcdTAwMjZrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2gsXG4gXHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgXHUwMDI2bW9kKTtcbiYjNDM7XHRldGhubF91cGRhdGVfdTMyKFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcbiYjNDM7XHRcdFx0IHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSwgXHUwMDI2bW9kKTtcbiBcdGlmICghbW9kKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yODEsNiAmIzQzOzMwMSw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19UWF07XG4gXHRlbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggXHUwMDNlIGtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaF9tYXgpXG4gXHRcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdO1xuJiM0MztcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiBcdTAwM2VcbiYjNDM7XHRcdCBrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKVxuJiM0MztcdFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07XG4gXHRlbHNlXG4gXHRcdGVycl9hdHRyID0gTlVMTDtcbiBcdGlmIChlcnJfYXR0cikge1xuQEAgLTMwMiw2ICYjNDM7MzI1LDkgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRyZXQgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3JpbmdwYXJhbShkZXYsIFx1MDAyNnJpbmdwYXJhbSxcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2a2VybmVsX3JpbmdwYXJhbSwgaW5mby1cdTAwM2VleHRhY2spO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0ZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24gPSBrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b247XG4mIzQzO1xuIFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnEuYyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuaW5kZXggN2NhZTA4MmE5ODQ3MjEuLjM2MDA2ZjY5YTg3NTM2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC0zOTksNiAmIzQzOzM5OSwxMSBAQCBzdGF0aWMgc3RydWN0IGZxX2Zsb3cgKmZxX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3BhY2luZ19zdGF0dXMpICE9IFNLX1BBQ0lOR19GUSlcbiBcdFx0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzay1cdTAwM2Vza19wYWNpbmdfc3RhdHVzLFxuIFx0XHRcdFx0XHQgIFNLX1BBQ0lOR19GUSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGZxX3NrYl9jYihza2IpLVx1MDAzZXRpbWVfdG9fc2VuZCBcdTAwM2M9IG5vdylcbiYjNDM7XHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IDA7XG4mIzQzO1xuIFx0XHRyZXR1cm4gXHUwMDI2cS1cdTAwM2VpbnRlcm5hbDtcbiBcdH1cbiBcbkBAIC03MDcsNiAmIzQzOzcxMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdHN0cnVjdCBmcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIFx0c3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kO1xuIFx0c3RydWN0IGZxX2Zsb3dfaGVhZCAqaGVhZDtcbiYjNDM7XHR1NjQgdGltZV9uZXh0X3BhY2tldDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZnFfZmxvdyAqZjtcbiBcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcbkBAIC03MjEsNyAmIzQzOzcyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdGlmIChza2IpIHtcbiBcdFx0cS1cdTAwM2VpbnRlcm5hbC5xbGVuLS07XG4gXHRcdGZxX2RlcXVldWVfc2tiKHNjaCwgXHUwMDI2cS1cdTAwM2VpbnRlcm5hbCwgc2tiKTtcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuIFx0fVxuIFxuIFx0bm93ID0ga3RpbWVfZ2V0X25zKCk7XG5AQCAtNzU4LDggJiM0Mzs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gXG4gXHRza2IgPSBmcV9wZWVrKGYpO1xuIFx0aWYgKHNrYikge1xuLVx0XHR1NjQgdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktXHUwMDNldGltZV90b19zZW5kLFxuLVx0XHRcdFx0XHQgICAgIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4mIzQzO1x0XHR0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cdTAwM2V0aW1lX3RvX3NlbmQsXG4mIzQzO1x0XHRcdFx0XHQgZi1cdTAwM2V0aW1lX25leHRfcGFja2V0KTtcbiBcbiBcdFx0aWYgKG5vdyAmIzQzOyBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcdTAwM2MgdGltZV9uZXh0X3BhY2tldCkge1xuIFx0XHRcdGhlYWQtXHUwMDNlZmlyc3QgPSBmLVx1MDAzZW5leHQ7XG5AQCAtODI4LDExICYjNDM7ODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdFx0ICogZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IHdhcyBzZXQgd2hlbiBwcmlvciBwYWNrZXQgd2FzIHNlbnQsXG4gXHRcdCAqIGFuZCBjdXJyZW50IHRpbWUgKEBub3cpIGNhbiBiZSB0b28gbGF0ZSBieSB0ZW5zIG9mIHVzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGYtXHUwMDNldGltZV9uZXh0X3BhY2tldClcbiYjNDM7XHRcdGlmIChmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQgXHUwMDI2XHUwMDI2IGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCBcdTAwM2Mgbm93KVxuIFx0XHRcdGxlbiAtPSBtaW4obGVuLzIsIG5vdyAtIGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XG4gXHRcdGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCA9IG5vdyAmIzQzOyBsZW47XG4gXHR9XG4mIzQzO1xuIG91dDpcbiYjNDM7XHRpZiAocS1cdTAwM2VvZmZsb2FkX2hvcml6b24gXHUwMDI2XHUwMDI2IHRpbWVfbmV4dF9wYWNrZXQgXHUwMDNjPSBub3cpXG4mIzQzO1x0XHRza2ItXHUwMDNldHN0YW1wID0gMDtcbiYjNDM7XG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbkBAIC0xMTc5LDcgJiM0MzsxMTg5LDggQEAgc3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbiBcdFx0dTY0IG9mZmxvYWRfaG9yaXpvbiA9ICh1NjQpTlNFQ19QRVJfVVNFQyAqXG4gXHRcdFx0XHQgICAgICBubGFfZ2V0X3UzMih0YltUQ0FfRlFfT0ZGTE9BRF9IT1JJWk9OXSk7XG4gXG4tXHRcdGlmIChvZmZsb2FkX2hvcml6b24gXHUwMDNjPSBxZGlzY19kZXYoc2NoKS1cdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikge1xuJiM0MztcdFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcdTAwM2M9XG4mIzQzO1x0XHQgICAgKHU2NClxZGlzY19kZXYoc2NoKS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICogTlNFQ19QRVJfVVNFQykge1xuIFx0XHRcdFdSSVRFX09OQ0UocS1cdTAwM2VvZmZsb2FkX2hvcml6b24sIG9mZmxvYWRfaG9yaXpvbik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7aW52YWxpZCBvZmZsb2FkX2hvcml6b25cJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc2V0dGluZ3Ncbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjQ3OGU2ODQ4NDZhMTZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0Mzt0aW1lb3V0PTI0MFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcbmluZGV4IDU1YTM4NmYzZDFiOTBmLi42ZTY0YmFhNGM2MGRkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xuQEAgLTQyLDggJiM0Mzs0MiwxMCBAQCBzdGF0aWMgYm9vbFx0Y2ZnX21hY2hpbmVfc2xvdztcbiBzdGF0aWMgdWludDY0X3RcdGNmZ19zdGFydF90aW1lX25zO1xuIHN0YXRpYyBpbnRcdGNmZ19tYXJrO1xuIHN0YXRpYyBib29sXHRjZmdfcng7XG4mIzQzO3N0YXRpYyBib29sXHRjZmdfdmVyaWZ5X2h3X29mZmxvYWQ7XG4gXG4gc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0O1xuJiM0MztzdGF0aWMgdWludDY0X3QgZ2xvYl90c3RhcnRfcmVhbDtcbiBzdGF0aWMgdWludDY0X3QgdGRlbGl2ZXJfbWF4O1xuIFxuIHN0YXRpYyBpbnQgZXJyb3JzO1xuQEAgLTE1OCwxOCAmIzQzOzE2MCw3MCBAQCBzdGF0aWMgdm9pZCBkb19yZWN2X3ZlcmlmeV9lbXB0eShpbnQgZmRyKVxuIFx0XHRlcnJvcigxLCAwLCBcJiMzNDtyZWN2OiBub3QgZW1wdHkgYXMgZXhwZWN0ZWQgKCVkLCAlZClcJiMzNDssIHJldCwgZXJybm8pO1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuJiM0MztzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciBwYXlsb2FkX2NoYXIpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpyZWFzb24gPSBOVUxMO1xuJiM0MztcdGludDY0X3QgdHN0YW1wID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChlcnItXHUwMDNlZWVfZXJybm8pIHtcbiYjNDM7XHRjYXNlIEVDQU5DRUxFRDpcbiYjNDM7XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXG4mIzQzO1x0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuJiM0MztcdFx0cmVhc29uID0gXCYjMzQ7bWlzc2VkIHR4dGltZVwmIzM0OztcbiYjNDM7XHRicmVhaztcbiYjNDM7XHRjYXNlIEVJTlZBTDpcbiYjNDM7XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKVxuJiM0MztcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbiYjNDM7XHRcdHJlYXNvbiA9IFwmIzM0O2ludmFsaWQgdHh0aW1lXCYjMzQ7O1xuJiM0MztcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIGVyci1cdTAwM2VlZV9lcnJubywgZXJyLVx1MDAzZWVlX2NvZGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHN0YW1wID0gKChpbnQ2NF90KWVyci1cdTAwM2VlZV9kYXRhKSBcdTAwM2NcdTAwM2MgMzIgfCBlcnItXHUwMDNlZWVfaW5mbztcbiYjNDM7XHR0c3RhbXAgLT0gKGludDY0X3QpZ2xvYl90c3RhcnQ7XG4mIzQzO1x0dHN0YW1wIC89IDEwMDAgKiAxMDAwO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtzZW5kOiBwa3QgJWMgYXQgJVwmIzM0OyBQUklkNjQgXCYjMzQ7bXMgZHJvcHBlZDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRwYXlsb2FkX2NoYXIsIHRzdGFtcCwgcmVhc29uKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyAqdHNzKVxuJiM0Mzt7XG4mIzQzO1x0aW50NjRfdCB0cztcbiYjNDM7XG4mIzQzO1x0dHMgPSB0c3MtXHUwMDNldHNbMF0udHZfc2VjO1xuJiM0MztcdHRzICo9IDEwMDBVTEwgKiAxMDAwICogMTAwMDtcbiYjNDM7XHR0cyAmIzQzOz0gdHNzLVx1MDAzZXRzWzBdLnR2X25zZWM7XG4mIzQzO1x0dHMgLT0gZ2xvYl90c3RhcnRfcmVhbDtcbiYjNDM7XHR0cyAvPSAxMDAwO1xuJiM0MztcbiYjNDM7XHRpZiAodHMgXHUwMDNlIGNmZ192YXJpYW5jZV91cykge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3N3IGRlbGF5ICVcJiMzNDsgUFJJZDY0IFwmIzM0O3VzIGV4Y2VlZHMgYm91bmRzXFxuXCYjMzQ7LCB0cyk7XG4mIzQzO1x0XHRpZiAoIWNmZ19tYWNoaW5lX3Nsb3cpXG4mIzQzO1x0XHRcdGVycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWUoaW50IGZkdClcbiB7XG4gXHRjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSkgJiM0MztcbiYjNDM7XHRcdCAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjbV90aW1lc3RhbXBpbmcpKSAmIzQzO1xuIFx0XHQgICAgIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKV0gPSB7MH07XG4gXHRjaGFyIGRhdGFbc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MztcbiBcdFx0ICBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsgMV07XG4mIzQzO1x0c3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcztcbiBcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyO1xuIFx0aW50IHJldCwgbnVtX3RzdGFtcCA9IDA7XG4gXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHswfTtcbiBcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7MH07XG4gXHRzdHJ1Y3QgY21zZ2hkciAqY207XG4tXHRpbnQ2NF90IHRzdGFtcCA9IDA7XG4gXG4gXHRpb3YuaW92X2Jhc2UgPSBkYXRhO1xuIFx0aW92Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7XG5AQCAtMTgxLDggJiM0MzsyMzUsNiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuIFx0bXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpO1xuIFxuIFx0d2hpbGUgKDEpIHtcbi1cdFx0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcbi1cbiBcdFx0cmV0ID0gcmVjdm1zZyhmZHQsIFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcbiBcdFx0aWYgKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUFHQUlOKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTE5Miw0MiAmIzQzOzI0NCwzMiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxuIFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiBmbGFncyAweCV4XFxuXCYjMzQ7LCBtc2cubXNnX2ZsYWdzKTtcbiBcbiBcdFx0Y20gPSBDTVNHX0ZJUlNUSERSKFx1MDAyNm1zZyk7XG4mIzQzO1x0XHR0c3MgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsID09IFNPTF9TT0NLRVQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY20tXHUwMDNlY21zZ190eXBlID09IFNDTV9USU1FU1RBTVBJTkcpIHtcbiYjNDM7XHRcdFx0dHNzID0gKHZvaWQgKilDTVNHX0RBVEEoY20pO1xuJiM0MztcdFx0XHRjbSA9IENNU0dfTlhUSERSKFx1MDAyNm1zZywgY20pO1xuJiM0MztcdFx0XHRpZiAoIWNtKVxuJiM0MztcdFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O3RpbWVzdGFtcCBtaXNzaW5nIGlwIGVyclxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBjZmdfZXJycV9sZXZlbCB8fFxuIFx0XHQgICAgY20tXHUwMDNlY21zZ190eXBlICE9IGNmZ19lcnJxX3R5cGUpXG4gXHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IHR5cGUgMHgleC4weCV4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIGNtLVx1MDAzZWNtc2dfbGV2ZWwsIGNtLVx1MDAzZWNtc2dfdHlwZSk7XG4gXG4gXHRcdGVyciA9IChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY20pO1xuLVx0XHRpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fVFhUSU1FKVxuJiM0MztcdFx0aWYgKGVyci1cdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RYVElNRSlcbiYjNDM7XHRcdFx0bnVtX3RzdGFtcCAmIzQzOz0gZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGVycixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgZGF0YVtyZXQgLSAxXSk7XG4mIzQzO1x0XHRlbHNlIGlmIChlcnItXHUwMDNlZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgXHUwMDI2XHUwMDI2IHRzcylcbiYjNDM7XHRcdFx0ZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoZXJyLCB0c3MpO1xuJiM0MztcdFx0ZWxzZVxuIFx0XHRcdGVycm9yKDEsIDAsIFwmIzM0O2VycnF1ZXVlOiBvcmlnaW4gMHgleFxcblwmIzM0OywgZXJyLVx1MDAzZWVlX29yaWdpbik7XG4gXG4tXHRcdHN3aXRjaCAoZXJyLVx1MDAzZWVlX2Vycm5vKSB7XG4tXHRcdGNhc2UgRUNBTkNFTEVEOlxuLVx0XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXG4tXHRcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgICBlcnItXHUwMDNlZWVfY29kZSk7XG4tXHRcdFx0cmVhc29uID0gXCYjMzQ7bWlzc2VkIHR4dGltZVwmIzM0Oztcbi1cdFx0YnJlYWs7XG4tXHRcdGNhc2UgRUlOVkFMOlxuLVx0XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKVxuLVx0XHRcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7ZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHRcdHJlYXNvbiA9IFwmIzM0O2ludmFsaWQgdHh0aW1lXCYjMzQ7O1xuLVx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRlcnJvcigxLCAwLCBcJiMzNDtlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICBlcnItXHUwMDNlZWVfZXJybm8sIGVyci1cdTAwM2VlZV9jb2RlKTtcbi1cdFx0fVxuLVxuLVx0XHR0c3RhbXAgPSAoKGludDY0X3QpIGVyci1cdTAwM2VlZV9kYXRhKSBcdTAwM2NcdTAwM2MgMzIgfCBlcnItXHUwMDNlZWVfaW5mbztcbi1cdFx0dHN0YW1wIC09IChpbnQ2NF90KSBnbG9iX3RzdGFydDtcbi1cdFx0dHN0YW1wIC89IDEwMDAgKiAxMDAwO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7c2VuZDogcGt0ICVjIGF0ICVcJiMzNDsgUFJJZDY0IFwmIzM0O21zIGRyb3BwZWQ6ICVzXFxuXCYjMzQ7LFxuLVx0XHRcdGRhdGFbcmV0IC0gMV0sIHRzdGFtcCwgcmVhc29uKTtcbi1cbiBcdFx0bXNnLm1zZ19mbGFncyA9IDA7XG4gXHRcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTtcbi1cdFx0bnVtX3RzdGFtcCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHRyZXR1cm4gbnVtX3RzdGFtcDtcbkBAIC0yNDUsMTIgJiM0MzsyODcsMTMgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJxdWV1ZV9tc2dzKGludCBmZHQpXG4gXHRcdFx0ZXJyb3IoMSwgZXJybm8sIFwmIzM0O3BvbGxcJiMzNDspO1xuIFxuIFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAocGZkLnJldmVudHMgXHUwMDI2IFBPTExFUlIpKVxuLVx0XHRcdG51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChmZHQpO1xuJiM0MztcdFx0XHRudW1fdHN0YW1wICYjNDM7PSBkb19yZWN2X2VycnF1ZXVlKGZkdCk7XG4gXG4gXHRcdGlmIChudW1fdHN0YW1wID09IGNmZ19udW1fcGt0KVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0fSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgXHUwMDNjIHRkZWxpdmVyX21heCk7XG4mIzQzO1x0fSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgXHUwMDNjXG4mIzQzO1x0XHQgdGRlbGl2ZXJfbWF4ICYjNDM7IChjZmdfdmFyaWFuY2VfdXMgKiAxMDAwKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHN0YXJ0X3RpbWVfd2FpdCh2b2lkKVxuQEAgLTI5NSw2ICYjNDM7MzM4LDE4IEBAIHN0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lKGludCBmZClcbiBcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7Z2V0c29ja29wdCB0eHRpbWU6IG1pc21hdGNoXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbCA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxuJiM0MztcdFx0ICBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIHxcbiYjNDM7XHRcdCAgU09GX1RJTUVTVEFNUElOR19PUFRfSUQgfFxuJiM0MztcdFx0ICBTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsXG4mIzQzO1x0XHQgICAgICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSkpXG4mIzQzO1x0XHRlcnJvcigxLCBlcnJubywgXCYjMzQ7c2V0c29ja29wdCB0aW1lc3RhbXBpbmdcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiB7XG4gXHRpbnQgZmQ7XG5AQCAtMzA4LDYgJiM0MzszNjMsOSBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4gXG4gXHRzZXRzb2Nrb3B0X3R4dGltZShmZCk7XG4gXG4mIzQzO1x0aWYgKGNmZ192ZXJpZnlfaHdfb2ZmbG9hZClcbiYjNDM7XHRcdHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoZmQpO1xuJiM0MztcbiBcdGlmIChjZmdfbWFyayBcdTAwMjZcdTAwMjZcbiBcdCAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19NQVJLLCBcdTAwMjZjZmdfbWFyaywgc2l6ZW9mKGNmZ19tYXJrKSkpXG4gXHRcdGVycm9yKDEsIGVycm5vLCBcJiMzNDtzZXRzb2Nrb3B0IG1hcmtcJiMzNDspO1xuQEAgLTMxNyw3ICYjNDM7Mzc1LDcgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIHN0YXRpYyBpbnQgc2V0dXBfcngoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiB7XG4tXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSAxMDAgKiAxMDAwIH07XG4mIzQzO1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gNjAwICogMTAwMCB9O1xuIFx0aW50IGZkO1xuIFxuIFx0ZmQgPSBzb2NrZXQoYWRkci1cdTAwM2VzYV9mYW1pbHksIFNPQ0tfREdSQU0sIDApO1xuQEAgLTM0OCw2ICYjNDM7NDA2LDcgQEAgc3RhdGljIHZvaWQgZG9fdGVzdF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIFx0c3RhcnRfdGltZV93YWl0KCk7XG4gXHRnbG9iX3RzdGFydCA9IGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpO1xuJiM0MztcdGdsb2JfdHN0YXJ0X3JlYWwgPSBnZXR0aW1lX25zKENMT0NLX1JFQUxUSU1FKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNmZ19udW1fcGt0OyBpJiM0MzsmIzQzOylcbiBcdFx0ZG9fc2VuZF9vbmUoZmR0LCBcdTAwMjZjZmdfYnVmW2ldKTtcbkBAIC00NDAsMTAgJiM0Mzs0OTksMTEgQEAgc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpXG4gXHRcdFx0XCYjMzQ7ICAtNiAgICAgICAgICAgIG9ubHkgSVB2NlxcblwmIzM0O1xuIFx0XHRcdFwmIzM0OyAgLWMgXHUwMDNjY2xvY2tcdTAwM2UgICAgbW9ub3RvbmljIG9yIHRhaSAoZGVmYXVsdClcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIC1EIFx1MDAzY2FkZHJcdTAwM2UgICAgIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MgKHNlcnZlcilcXG5cJiMzNDtcbi1cdFx0XHRcJiMzNDsgIC1TIFx1MDAzY2FkZHJcdTAwM2UgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0OyAgLWggICAgICAgICAgICB2ZXJpZnkgaGFyZHdhcmUgb2ZmbG9hZCAodHgpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0OyAgLW0gXHUwMDNjbWFya1x1MDAzZSAgICAgc29ja2V0IG1hcmtcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDsgIC1yICAgICAgICAgICAgcnVuIHJ4IG1vZGVcXG5cJiMzNDtcbiYjNDM7XHRcdFx0XCYjMzQ7ICAtUyBcdTAwM2NhZGRyXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcblwmIzM0O1xuIFx0XHRcdFwmIzM0OyAgLXQgXHUwMDNjbnNlY1x1MDAzZSAgICAgc3RhcnQgdGltZSAoVVRDIG5hbm9zZWNvbmRzKVxcblwmIzM0O1xuLVx0XHRcdFwmIzM0OyAgLW0gXHUwMDNjbWFya1x1MDAzZSAgICAgc29ja2V0IG1hcmtcXG5cJiMzNDtcbiBcdFx0XHRcJiMzNDtcXG5cJiMzNDssXG4gXHRcdFx0cHJvZ25hbWUpO1xuIFx0ZXhpdCgxKTtcbkBAIC00NTUsNyAmIzQzOzUxNSw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aW50IGRvbWFpbiA9IFBGX1VOU1BFQztcbiBcdGludCBjO1xuIFxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0OzQ2YzpTOkQ6cnQ6bTpcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDs0NmM6RDpobTpyUzp0OlwmIzM0OykpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAoYykge1xuIFx0XHRjYXNlICYjMzk7NCYjMzk7OlxuIFx0XHRcdGlmIChkb21haW4gIT0gUEZfVU5TUEVDKVxuQEAgLTQ4MiwyMSAmIzQzOzU0MiwyNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnJvcigxLCAwLCBcJiMzNDt1bmtub3duIGNsb2NrIGlkICVzXCYjMzQ7LCBvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7UyYjMzk7OlxuLVx0XHRcdHNhZGRyID0gb3B0YXJnO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7RCYjMzk7OlxuIFx0XHRcdGRhZGRyID0gb3B0YXJnO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiYjNDM7XHRcdFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7bSYjMzk7OlxuJiM0MztcdFx0XHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O3ImIzM5OzpcbiBcdFx0XHRjZmdfcnggPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O1MmIzM5OzpcbiYjNDM7XHRcdFx0c2FkZHIgPSBvcHRhcmc7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7dCYjMzk7OlxuIFx0XHRcdGNmZ19zdGFydF90aW1lX25zID0gc3RydG9sbChvcHRhcmcsIE5VTEwsIDApO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7bSYjMzk7OlxuLVx0XHRcdGNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0dXNhZ2UoYXJndlswXSk7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcbmluZGV4IGFkZjZjODQ4ZDZkODBmLi43Yjc1YTMzZjVjNDNmOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XG5AQCAtMTIsMTAgJiM0MzsxMiwxMyBAQCBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X3ZhcmlhbnRzXG4gZnJvbSBsaWIucHkgaW1wb3J0IEtzZnROYW1lZFZhcmlhbnQsIEtzZnRTa2lwRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIGJrZywgY21kLCBkZWZlciwgdGNcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IEV0aHRvb2xGYW1pbHksIE5sRXJyb3JcbiBcbiBcbiBkZWYgdGVzdF9zb190eHRpbWUoY2ZnLCBjbG9ja2lkLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X3N1Y2Nlc3MpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtNYWluIGZ1bmN0aW9uLiBSdW4gc29fdHh0aW1lIGFzIHNlbmRlciBhbmQgcmVjZWl2ZXIuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiYjNDM7XG4gICAgIHNsb3dfbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCYjMzk7S1NGVF9NQUNISU5FX1NMT1cmIzM5OylcbiBcbiAgICAgaWYgbm90IGhhc2F0dHIoY2ZnLCBcJiMzNDtiaW5fcmVtb3RlXCYjMzQ7KTpcbkBAIC0zOCw2ICYjNDM7NDEsMzQgQEAgZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKTpcbiAgICAgICAgIGNtZChjbWRfdHgpXG4gXG4gXG4mIzQzO2RlZiBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtDb25maWd1cmUgcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGV0aG5sID0gRXRodG9vbEZhbWlseSgpXG4mIzQzO1xuJiM0MzsgICAgdHJ5OlxuJiM0MzsgICAgICAgIHJpbmdzID0gZXRobmwucmluZ3NfZ2V0KHsmIzM5O2hlYWRlciYjMzk7OiB7JiMzOTtkZXYtaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9fSlcbiYjNDM7ICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3JpbmctZ2V0IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJiMzOTspIGZyb20gZVxuJiM0MztcbiYjNDM7ICAgIGlmICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7IG5vdCBpbiByaW5ncyBvciBcXFxuJiM0MzsgICAgICAgJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLW1heCYjMzk7IG5vdCBpbiByaW5nczpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7cGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSYjMzk7KVxuJiM0MztcbiYjNDM7ICAgIGlmIHJpbmdzWyYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgmIzM5O10gXHUwMDNjIDUwXzAwMDpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7cGFjaW5nIG9mZmxvYWQgbWF4IGhvcml6b24gdG9vIHNtYWxsJiMzOTspXG4mIzQzO1xuJiM0MzsgICAgY3VyX2hvcml6b24gPSByaW5nc1smIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24mIzM5O11cbiYjNDM7ICAgIG5ld19ob3Jpem9uID0gNTBfMDAwXG4mIzQzOyAgICBldGhubC5yaW5nc19zZXQoe1xuJiM0MzsgICAgICAgICYjMzk7aGVhZGVyJiMzOTs6IHsmIzM5O2Rldi1pbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sXG4mIzQzOyAgICAgICAgJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJiMzOTs6IG5ld19ob3Jpem9uLFxuJiM0MzsgICAgfSlcbiYjNDM7ICAgIGRlZmVyKGV0aG5sLnJpbmdzX3NldCwge1xuJiM0MzsgICAgICAgICYjMzk7aGVhZGVyJiMzOTs6IHsmIzM5O2Rldi1pbmRleCYjMzk7OiBjZmcuaWZpbmRleH0sXG4mIzQzOyAgICAgICAgJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJiMzOTs6IGN1cl9ob3Jpem9uXG4mIzQzOyAgICB9KVxuJiM0MztcbiYjNDM7XG4gZGVmIF9xZGlzY19zZXR1cChpZm5hbWUsIHFkaXNjLCBvcHRhcmdzPVwmIzM0O1wmIzM0Oyk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1JlcGxhY2Ugcm9vdCBxZGlzYy4gUmVzdG9yZSB0aGUgb3JpZ2luYWwgYWZ0ZXIgdGhlIHRlc3QuXG4gXG5AQCAtNTYsNiAmIzQzOzg3LDcgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6XG4gICAgICAgICAgICAgW1wmIzM0O29uZV9wa3RcJiMzNDssIFwmIzM0O2EsMTBcJiMzNDssIFwmIzM0O2EsMTBcJiMzNDtdLFxuICAgICAgICAgICAgIFtcJiMzNDtpbl9vcmRlclwmIzM0OywgXCYjMzQ7YSwxMCxiLDIwXCYjMzQ7LCBcJiMzNDthLDEwLGIsMjBcJiMzNDtdLFxuICAgICAgICAgICAgIFtcJiMzNDtyZXZlcnNlX29yZGVyXCYjMzQ7LCBcJiMzNDthLDIwLGIsMTBcJiMzNDssIFwmIzM0O2IsMTAsYSwyMFwmIzM0O10sXG4mIzQzOyAgICAgICAgICAgIFtcJiMzNDtiZXlvbmRfaHdfaG9yaXpvblwmIzM0OywgXCYjMzQ7YSw3MFwmIzM0OywgXCYjMzQ7YSw3MFwmIzM0O10sXG4gICAgICAgICBdOlxuICAgICAgICAgICAgIG5hbWUgPSBmXCYjMzQ7dntpcHZlcn1fe3Rlc3RjYXNlWzBdfVwmIzM0O1xuICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQobmFtZSwgaXB2ZXIsIHRlc3RjYXNlWzFdLCB0ZXN0Y2FzZVsyXSlcbkBAIC02NCwxNSAmIzQzOzk2LDQyIEBAIGRlZiBfdGVzdF92YXJpYW50c19mcSgpOlxuIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8oY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1J1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIChmcSkgdGVzdHMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCYjMzQ7ZnFcJiMzNDspXG4gICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCYjMzQ7bW9ub1wmIzM0OywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIFRydWUpXG4gXG4gXG4mIzQzO0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4mIzQzO2RlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgZnEgdGVzdHMsIHdpdGggb2ZmbG9hZCBob3Jpem9uLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpXG4mIzQzO1xuJiM0MzsgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpXG4mIzQzOyAgICB0cnk6XG4mIzQzOyAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O2ZxXCYjMzQ7LCBcJiMzNDtvZmZsb2FkX2hvcml6b24gNTBtc1wmIzM0OylcbiYjNDM7ICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O25ldGRldiBkb2VzIG5vdCBzdXBwb3J0IG9mZmxvYWQuIHNraXBwaW5nXCYjMzQ7KSBmcm9tIGVcbiYjNDM7XG4mIzQzOyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gdXNlIG9ubHkgaHcgcGFjaW5nLCBleGNlcHQgYmV5b25kX2h3X2hvcml6b24uXG4mIzQzOyAgICBod19vbmx5ID0gXCYjMzQ7LWhcJiMzNDsgaWYgYXJnc190eCAhPSBcJiMzNDthLDcwXCYjMzQ7IGVsc2UgXCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwmIzM0O21vbm9cJiMzNDssIGlwdmVyLCBmXCYjMzQ7e2h3X29ubHl9IHthcmdzX3R4fVwmIzM0OywgYXJnc19yeCwgVHJ1ZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuJiM0MztkZWYgdGVzdF9zb190eHRpbWVfcGZpZm9mYXN0X21vbm9faHcoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyB0ZXN0cywgd2l0aG91dCBmcSBwYWNpbmcgc3cgYmFja3VwLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpXG4mIzQzO1xuJiM0MzsgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpXG4mIzQzOyAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCYjMzQ7cGZpZm9fZmFzdFwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gcGFzcywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uIHdpdGhvdXQgc3cgZmFsbGJhY2suXG4mIzQzOyAgICBleHBlY3RfcGFzcyA9IG5vdCBhcmdzX3R4ID09IFwmIzM0O2EsNzBcJiMzNDtcbiYjNDM7ICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCYjMzQ7bW9ub1wmIzM0OywgaXB2ZXIsIGZcJiMzNDstaCB7YXJnc190eH1cJiMzNDssIGFyZ3NfcngsIGV4cGVjdF9wYXNzKVxuJiM0MztcbiYjNDM7XG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfdGFpKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIGZxIHRlc3RzLCBidXQgcGFzcyBDTE9DS19UQUkgdG8gdGVzdCBjb252ZXJzaW9uLlwmIzM0O1wmIzM0O1wmIzM0O1xuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwmIzM0O2ZxXCYjMzQ7KVxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwmIzM0O3RhaVwmIzM0OywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIFRydWUpXG4gXG5AQCAtOTUsNyAmIzQzOzE1NCw2IEBAIGRlZiBfdGVzdF92YXJpYW50c19ldGYoKTpcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19ldGYoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZXRmKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9mYWlsKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBldGYgdGVzdHMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICB0cnk6XG4gICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCYjMzQ7ZXRmXCYjMzQ7LCBcJiMzNDtjbG9ja2lkIENMT0NLX1RBSSBkZWx0YSA0MDAwMDBcJiMzNDspXG4gICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbkBAIC0xMDgsNyAmIzQzOzE2NiwxMyBAQCBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7Qm9pbGVycGxhdGUga3NmdCBtYWluLlwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICB3aXRoIE5ldERydkVwRW52KF9fZmlsZV9fKSBhcyBjZmc6XG4gICAgICAgICBrc2Z0X3J1bihcbi0gICAgICAgICAgICBbdGVzdF9zb190eHRpbWVfZnFfbW9ubywgdGVzdF9zb190eHRpbWVfZnFfdGFpLCB0ZXN0X3NvX3R4dGltZV9ldGZdLFxuJiM0MzsgICAgICAgICAgICBbXG4mIzQzOyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV9tb25vLFxuJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyxcbiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3LFxuJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfdGFpLFxuJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZXRmLFxuJiM0MzsgICAgICAgICAgICBdLFxuICAgICAgICAgICAgIGFyZ3M9KGNmZywpLFxuICAgICAgICAgKVxuICAgICBrc2Z0X2V4aXQoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX0ZRJiMzNDssCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldGhubF9zZXRfcmluZ3MmIzM0OywKICAgICYjMzQ7cmluZ3NfZmlsbF9yZXBseSYjMzQ7LAogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCByaW5nIHBhcmFtZXRlciBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIG1vZGlmaWVzIGBzY2hfZnFgIHRvIHVzZSBpdC4gSXQgYWxzbyBhZGRzIGBTT19UWFRJTUVgIHN1cHBvcnQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbmV0d29ya2luZyBsb2dpYywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgcGFja2V0IGdlbmVyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1MWZkODJkYzNiM2U0OGNlN2U1OWNlODk3MDcxNzNmZTBhNDFkMjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAyMTo1MzowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCmluZGV4IDVkZDRkMWI1ZDk0YmJiLi40OGY0M2RkYTJlNmU1ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCkBAIC00NDgsNiAmIzQzOzQ0OCwxMiBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgIC0KICAgICAgICAgbmFtZTogaGRzLXRocmVzaC1tYXgKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgKJiM0MzsgICAgICAgIHR5cGU6IHUzMgogCiAgIC0KICAgICBuYW1lOiBtbS1zdGF0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QKaW5kZXggNTEyZjZkNmZhM2Q4ZjguLjNiOWNlMWM2ZTEwNTc4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0CkBAIC0xODMsNyAmIzQzOzE4Myw4IEBAIHN0cnVjdCBkZXZsaW5rX3BvcnQqICAgICAgICAgICAgICAgIGRldmxpbmtfcG9ydAogc3RydWN0IGRwbGxfcGluKiAgICAgICAgICAgICAgICAgICAgZHBsbF9waW4KIHN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIHBhZ2VfcG9vbHMKIHN0cnVjdCBkaW1faXJxX21vZGVyKiAgICAgICAgICAgICAgIGlycV9tb2RlcgotdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24KJiM0Mzt1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uCiYjNDM7dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24KIHN0cnVjdF9uYXBpX2NvbmZpZyogICAgICAgICAgICAgICAgIG5hcGlfY29uZmlnCiB1bnNpZ25lZF9sb25nICAgICAgICAgICAgICAgICAgICAgICBncm9fZmx1c2hfdGltZW91dAogdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFwaV9kZWZlcl9oYXJkX2lycXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jCmluZGV4IGJiOTlkOWU3YzY1ZDUxLi41ZGRmMzQ3OTI3ZGMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jCkBAIC0xODAxLDcgJiM0MzsxODAxLDggQEAgc3RhdGljIHZvaWQgaWRwZl9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWRwZl9ldGh0b29sX29wcyA9IHsKIAkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAogCQkJCSAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsCi0JLnN1cHBvcnRlZF9yaW5nX3BhcmFtcwk9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQsCiYjNDM7CS5zdXBwb3J0ZWRfcmluZ19wYXJhbXMJPSBFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElUIHwKJiM0MzsJCQkJICBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sCiAJLmdldF9tc2dsZXZlbAkJPSBpZHBmX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IGlkcGZfc2V0X21zZ2xldmVsLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jCmluZGV4IGNmOTY2ZmU2Yzc1OWNlLi5kZTQxNzBjMmFhM2JhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwpAQCAtODg4LDYgJiM0Mzs4ODgsMTEgQEAgc3RhdGljIGludCBpZHBmX2NmZ19uZXRkZXYoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCW5ldGRldi0mZ3Q7bWluX210dSA9IEVUSF9NSU5fTVRVOwogCW5ldGRldi0mZ3Q7bWF4X210dSA9IHZwb3J0LSZndDttYXhfbXR1OwogCiYjNDM7CWlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LSZndDtkZmx0X3F2X3JzcmMudHhxX21vZGVsKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaWRwZl9pc19jYXBfZW5hKGFkYXB0ZXIsIElEUEZfT1RIRVJfQ0FQUywKJiM0MzsJCQkgICAgVklSVENITkwyX0NBUF9TUExJVFFfUVNDSEVEKSkKJiM0MzsJCW5ldGRldi0mZ3Q7bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSAxMjgwMDA7CiYjNDM7CiAJZGZsdF9mZWF0dXJlcyA9IE5FVElGX0ZfU0cJfAogCQkJTkVUSUZfRl9ISUdIRE1BOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwppbmRleCA1NjZiMDhjYTNhNmNiMS4uMWNjZmFlYjM1MTkzNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwpAQCAtMSw2ICYjNDM7MSw4IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiAvKiBDb3B5cmlnaHQgKEMpIDIwMjMgSW50ZWwgQ29ycG9yYXRpb24gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRwb2xsLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O2lkcGYuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2lkcGZfcHRwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpZHBmX3ZpcnRjaG5sLmgmIzM0OwpAQCAtMjQwOCw5ICYjNDM7MjQxMCwxMyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYywKIAkJCQkgICAgc3RydWN0IGlkcGZfdHhfc3BsaXRxX3BhcmFtcyAqcGFyYW1zLAogCQkJCSAgICB1MTYgdGRfY21kLCB1MTYgc2l6ZSkKIHsKLQkqKHUzMiAqKSZhbXA7ZGVzYy0mZ3Q7Zmxvdy5xdzEuY21kX2R0eXBlID0gKHU4KShwYXJhbXMtJmd0O2R0eXBlIHwgdGRfY21kKTsKJiM0MzsJKihfX2xlMzIgKikmYW1wO2Rlc2MtJmd0O2Zsb3cucXcxLmNtZF9kdHlwZSA9IGNwdV90b19sZTMyKCh1OCkocGFyYW1zLSZndDtkdHlwZSB8IHRkX2NtZCkpOwogCWRlc2MtJmd0O2Zsb3cucXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoKHUxNilzaXplKTsKIAlkZXNjLSZndDtmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtJmd0O2NvbXBsX3RhZyk7CiYjNDM7CiYjNDM7CWRlc2MtJmd0O2Zsb3cucXcxLnRzWzBdID0gcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMF07CiYjNDM7CWRlc2MtJmd0O2Zsb3cucXcxLnRzWzFdID0gcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMV07CiYjNDM7CWRlc2MtJmd0O2Zsb3cucXcxLnRzWzJdID0gcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMl07CiB9CiAKIC8qKgpAQCAtMzAxMSw2ICYjNDM7MzAxNyw1OSBAQCBzdGF0aWMgYm9vbCBpZHBmX3R4X3NwbGl0cV9uZWVkX3JlKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp0eF9xKQogCXJldHVybiBnYXAgJmd0Oz0gSURQRl9UWF9TUExJVFFfUkVfTUlOX0dBUDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnR4X3BhcmFtcykKJiM0Mzt7CiYjNDM7CWNvbnN0IGludCB0c19ncmFuX3BvdzIgPSA5OwomIzQzOwl1NjQgdHMsIG5vdzsKJiM0MzsKJiM0MzsJLyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi8KJiM0MzsJaWYgKG5ldHBvbGxfdHhfcnVubmluZyhza2ItJmd0O2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN3aXRjaCAoc2tiLSZndDt0c3RhbXBfdHlwZSkgewomIzQzOwljYXNlIFNLQl9DTE9DS19SRUFMVElNRToKJiM0MzsJCXRzID0ga3RpbWVfdG9fbnMoa3RpbWVfYWRkKHNrYi0mZ3Q7dHN0YW1wLAomIzQzOwkJCQkJICAga3RpbWVfbW9ub190b19hbnkoMCwgVEtfT0ZGU19UQUkpIC0KJiM0MzsJCQkJCSAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNLQl9DTE9DS19NT05PVE9OSUM6CiYjNDM7CQl0cyA9IGt0aW1lX3RvX25zKGt0aW1lX21vbm9fdG9fYW55KHNrYi0mZ3Q7dHN0YW1wLCBUS19PRkZTX1RBSSkpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgU0tCX0NMT0NLX1RBSToKJiM0MzsJCXRzID0ga3RpbWVfdG9fbnMoc2tiLSZndDt0c3RhbXApOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJbm93ID0ga3RpbWVfZ2V0X2Nsb2NrdGFpX25zKCk7CiYjNDM7CWlmICh0cyAmbHQ7IG5vdykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogYmV5b25kIG9mZmxvYWQgaG9yaXpvbj8gc2V0IG92ZXJmbG93IGJpdCBvbmx5ICovCiYjNDM7CWlmICh0cyAmZ3Q7IG5vdyAmIzQzOyAoKHU2NClza2ItJmd0O2Rldi0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbiAqIE5TRUNfUEVSX1VTRUMpKSB7CiYjNDM7CQl0eF9wYXJhbXMtJmd0O29mZmxvYWQuZGVzY190c1syXSA9IDEgJmx0OyZsdDsgNzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl0cyAmZ3Q7Jmd0Oz0gdHNfZ3Jhbl9wb3cyOwomIzQzOwomIzQzOwkvKiAwIGlzIHZhbGlkIDI0YiB0aW1lc3RhbXAsIGJ1dCBhbHNvIG1lYW5zIGZpZWxkIHVuc2V0LgomIzQzOwkgKiBBZGQgNTEyIG5zICh0c19ncmFuX3BvdzIpIHRvIGF2b2lkIHRoaXMgY2FzZQomIzQzOwkgKi8KJiM0MzsJaWYgKCh0cyAmYW1wOyAweDdmZmZmZikgPT0gMCkgewomIzQzOwkJdHhfcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMF0gPSAxOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXR4X3BhcmFtcy0mZ3Q7b2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgJmFtcDsgMHhmZjsKJiM0MzsJdHhfcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMV0gPSAodHMgJmd0OyZndDsgOCkgJmFtcDsgMHhmZjsKJiM0MzsJdHhfcGFyYW1zLSZndDtvZmZsb2FkLmRlc2NfdHNbMl0gPSAoKHRzICZndDsmZ3Q7IDE2KSAmYW1wOyAweDdmKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGlkcGZfdHhfc3BsaXRxX2ZyYW1lIC0gU2VuZHMgYnVmZmVyIG9uIFR4IHJpbmcgdXNpbmcgZmxleCBkZXNjcmlwdG9ycwogICogQHNrYjogc2VuZCBidWZmZXIKQEAgLTMwOTcsNiAmIzQzOzMxNTYsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCiAKIAkJdHhfcGFyYW1zLmR0eXBlID0gSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFOwogCQl0eF9wYXJhbXMuZW9wX2NtZCA9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QOwomIzQzOwomIzQzOwkJaWYgKHNrYi0mZ3Q7dHN0YW1wICZhbXA7JmFtcDsgc2tiLSZndDtkZXYtJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pCiYjNDM7CQkJaWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZSh0eF9xLCBza2IsICZhbXA7dHhfcGFyYW1zKTsKJiM0MzsKIAkJLyogU2V0IHRoZSBSRSBiaXQgdG8gcGVyaW9kaWNhbGx5ICYjMzQ7Y2xlYW4mIzM0OyB0aGUgZGVzY3JpcHRvciByaW5nLgogCQkgKiBNSU5fR0FQIGlzIHNldCB0byBNSU5fUklORyBzaXplIHRvIGVuc3VyZSBpdCB3aWxsIGJlIHNldCBhdAogCQkgKiBsZWFzdCBvbmNlIGVhY2ggdGltZSBhcm91bmQgdGhlIHJpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaAppbmRleCA0YmU1YjNiNmQzZWQyYi4uODY1NDA4YjU3YjBkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaApAQCAtMTYxLDYgJiM0MzsxNjEsNyBAQCB1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyB7CiAgKiBAdHNvX3NlZ3M6IE51bWJlciBvZiBzZWdtZW50cyB0byBiZSBzZW50CiAgKiBAdHNvX2hkcl9sZW46IExlbmd0aCBvZiBoZWFkZXJzIHRvIGJlIGR1cGxpY2F0ZWQKICAqIEB0ZF9jbWQ6IENvbW1hbmQgZmllbGQgdG8gYmUgaW5zZXJ0ZWQgaW50byBkZXNjcmlwdG9yCiYjNDM7ICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcAogICovCiBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7CiAJdTMyIHR4X2ZsYWdzOwpAQCAtMTc0LDYgJiM0MzsxNzUsNyBAQCBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7CiAJdTE2IHRzb19oZHJfbGVuOwogCiAJdTE2IHRkX2NtZDsKJiM0MzsJdTggZGVzY190c1szXTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCA1ZDQ5MWE5ODI2NWVmOS4uYWRlZWJiZjUzZGFkZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC04NSw2ICYjNDM7ODUsOCBAQCBlbnVtIHsKICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlcgogICogQGhkc190aHJlc2g6IFBhY2tldCBzaXplIHRocmVzaG9sZCBmb3IgaGVhZGVyIGRhdGEgc3BsaXQgKEhEUykKICAqIEBoZHNfdGhyZXNoX21heDogTWF4aW11bSBzdXBwb3J0ZWQgc2V0dGluZyBmb3IgQGhkc190aHJlc2hvbGQKJiM0MzsgKiBAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjCiYjNDM7ICogQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjCiAgKgogICovCiBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHsKQEAgLTk3LDYgJiM0Mzs5OSw4IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gewogCXUzMgl0eF9wdXNoX2J1Zl9tYXhfbGVuOwogCXUzMgloZHNfdGhyZXNoOwogCXUzMgloZHNfdGhyZXNoX21heDsKJiM0MzsJdTMyCXBhY2luZ19vZmZsb2FkX2hvcml6b247CiYjNDM7CXUzMgltYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKIH07CiAKIC8qKgpAQCAtMTA4LDYgJiM0MzsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHsKICAqIEBFVEhUT09MX1JJTkdfVVNFX1RYX1BVU0hfQlVGX0xFTjogY2FwdHVyZSBmb3Igc2V0dGluZyB0eF9wdXNoX2J1Zl9sZW4KICAqIEBFVEhUT09MX1JJTkdfVVNFX1RDUF9EQVRBX1NQTElUOiBjYXB0dXJlIGZvciBzZXR0aW5nIHRjcF9kYXRhX3NwbGl0CiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2gKJiM0MzsgKiBARVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OOiBjYXB0dXJlIGZvciBzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b24KICAqLwogZW51bSBldGh0b29sX3N1cHBvcnRlZF9yaW5nX3BhcmFtIHsKIAlFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU4JCT0gQklUKDApLApAQCAtMTE3LDYgJiM0MzsxMjIsNyBAQCBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0gewogCUVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOCT0gQklUKDQpLAogCUVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQJCT0gQklUKDUpLAogCUVUSFRPT0xfUklOR19VU0VfSERTX1RIUlMJCT0gQklUKDYpLAomIzQzOwlFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04JPSBCSVQoNyksCiB9OwogCiAjZGVmaW5lIF9fRVRIX1JTU19IQVNIX0JJVChiaXQpCSgodTMyKTEgJmx0OyZsdDsgKGJpdCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA4ZGIyNWI3OTU3M2UzYy4uM2MyZWQ0NWI1NWRjYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMjEyOSw3ICYjNDM7MjEyOSw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKglAZHBsbF9waW46IFBvaW50ZXIgdG8gdGhlIFN5bmNFIHNvdXJjZSBwaW4gb2YgYSBEUExMIHN1YnN5c3RlbSwKICAqCQkgICB3aGVyZSB0aGUgY2xvY2sgaXMgcmVjb3ZlcmVkLgogICoKLSAqCUBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IEVEVCBvZmZsb2FkIGhvcml6b24gaW4gbnNlYy4KJiM0MzsgKglAcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogYWN0aXZlIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy4KJiM0MzsgKglAbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b246IG1heCBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIGluIHVzZWMuCiAgKglAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSQogICoJCSAgICAgIHNldHRpbmdzLgogICoJQG51bV9uYXBpX2NvbmZpZ3M6CW51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cywKQEAgLTI1NTIsNyAmIzQzOzI1NTMsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7CiAJLyoqIEBpcnFfbW9kZXI6IGRpbSBwYXJhbWV0ZXJzIHVzZWQgaWYgSVNfRU5BQkxFRChDT05GSUdfRElNTElCKS4gKi8KIAlzdHJ1Y3QgZGltX2lycV9tb2RlcgkqaXJxX21vZGVyOwogCi0JdTY0CQkJbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247CiYjNDM7CXUzMgkJCXBhY2luZ19vZmZsb2FkX2hvcml6b247CiYjNDM7CXUzMgkJCW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOwogCXN0cnVjdCBuYXBpX2NvbmZpZwkqbmFwaV9jb25maWc7CiAJdTMyCQkJbnVtX25hcGlfY29uZmlnczsKIAl1MzIJCQluYXBpX2RlZmVyX2hhcmRfaXJxczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCmluZGV4IDgxMzRiYWY3ODYwZjNjLi42ZjFhMmZhMzYxNTdkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCkBAIC0xOTMsNiAmIzQzOzE5Myw4IEBAIGVudW0gewogCUVUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYLAogCUVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILAogCUVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCwKJiM0MzsJRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sCiYjNDM7CUVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCwKIAogCV9fRVRIVE9PTF9BX1JJTkdTX0NOVCwKIAlFVEhUT09MX0FfUklOR1NfTUFYID0gKF9fRVRIVE9PTF9BX1JJTkdTX0NOVCAtIDEpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTIwMSw2ICYjNDM7MjAxLDcgQEAKIAlwZihTVklEX1JORCkJCS8qIFJhbmRvbSBTVkxBTiBJRCAqLwkJCVwKIAlwZihOT0RFKQkJLyogTm9kZSBtZW1vcnkgYWxsb2MqLwkJCVwKIAlwZihTSEFSRUQpCQkvKiBTaGFyZWQgU0tCICovCQkJXAomIzQzOwlwZihUWFRJTUUpCQkvKiBTT19UWFRJTUUgc3VwcG9ydCAqLwkJCVwKIAogI2RlZmluZSBwZihmbGFnKQkJZmxhZyMjX1NISUZULAogZW51bSBwa3RfZmxhZ3MgewpAQCAtMjkxLDYgJiM0MzsyOTIsMTAgQEAgc3RydWN0IHBrdGdlbl9kZXYgewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXU2NCBkZWxheTsJCS8qIG5hbm8tc2Vjb25kcyAqLwogCiYjNDM7CS8qIFRYVElNRSBzdXBwb3J0ICovCiYjNDM7CXU2NCB0eHRpbWVfZGVsYXk7CS8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi8KJiM0MzsJY2xvY2tpZF90IHR4dGltZV9jbG9ja2lkOyAvKiBjbG9ja2lkIGZvciBTT19UWFRJTUUgKi8KJiM0MzsKIAlfX3U2NCBjb3VudDsJCS8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovCiAJX191NjQgc29mYXI7CQkvKiBIb3cgbWFueSBwa3RzIHdlJiMzOTt2ZSBzZW50IHNvIGZhciAqLwogCV9fdTY0IHR4X2J5dGVzOwkJLyogSG93IG1hbnkgYnl0ZXMgd2UmIzM5O3ZlIHRyYW5zbWl0dGVkICovCkBAIC02NjYsNiAmIzQzOzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogCWlmIChwa3RfZGV2LSZndDtub2RlICZndDs9IDApCiAJCXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgbm9kZTogJWRcbiYjMzQ7LCBwa3RfZGV2LSZndDtub2RlKTsKIAomIzQzOwlpZiAocGt0X2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgRl9UWFRJTUUpIHsKJiM0MzsJCWNsb2NraWRfdCBjbG9ja2lkID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O3R4dGltZV9jbG9ja2lkKTsKJiM0MzsKJiM0MzsJCXNlcV9wcmludGYoc2VxLCAmIzM0OyAgICAgdHh0aW1lX2RlbGF5OiAlbGx1XG4mIzM0OywKJiM0MzsJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtJmd0O3R4dGltZV9kZWxheSk7CiYjNDM7CQlzZXFfcHJpbnRmKHNlcSwgJiMzNDsgICAgIHR4dGltZV9jbG9ja2lkOiAlc1xuJiMzNDssCiYjNDM7CQkJICAgY2xvY2tpZCA9PSBDTE9DS19NT05PVE9OSUMgPyAmIzM0O21vbm90b25pYyYjMzQ7IDoKJiM0MzsJCQkgICBjbG9ja2lkID09IENMT0NLX1JFQUxUSU1FID8gJiMzNDtyZWFsdGltZSYjMzQ7IDoKJiM0MzsJCQkgICBjbG9ja2lkID09IENMT0NLX1RBSSA/ICYjMzQ7dGFpJiMzNDsgOiAmIzM0O3Vua25vd24mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKIAlpZiAocGt0X2Rldi0mZ3Q7eG1pdF9tb2RlID09IE1fTkVUSUZfUkVDRUlWRSkKIAkJc2VxX3B1dHMoc2VxLCAmIzM0OyAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXG4mIzM0Oyk7CiAJZWxzZSBpZiAocGt0X2Rldi0mZ3Q7eG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVCkKQEAgLTExNDEsNiAmIzQzOzExNTcsNTAgQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0mZ3Q7ZGVsYXkpOwogCQlyZXR1cm4gY291bnQ7CiAJfQomIzQzOwlpZiAoIXN0cmNtcChuYW1lLCAmIzM0O3R4dGltZV9kZWxheSYjMzQ7KSkgewomIzQzOwkJbWF4ID0gbWluKDEwLCBjb3VudCAtIGkpOwomIzQzOwkJbGVuID0gbnVtX2FyZygmYW1wO3VzZXJfYnVmZmVyW2ldLCBtYXgsICZhbXA7dmFsdWUpOwomIzQzOwkJaWYgKGxlbiAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIGxlbjsKJiM0MzsKJiM0MzsJCS8qIGluIHF1ZXVlX3htaXQgbW9kZSBmcSBtYXkgY2xlYXIgdHN0YW1wLCBkbyBub3QgcmV1c2Ugc2tiICovCiYjNDM7CQlpZiAodmFsdWUgJmd0OyAwICZhbXA7JmFtcDsgcGt0X2Rldi0mZ3Q7Y2xvbmVfc2tiICZndDsgMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2RlbGF5LCAodTY0KXZhbHVlKTsKJiM0MzsJCXNwcmludGYocGdfcmVzdWx0LCAmIzM0O09LOiB0eHRpbWVfZGVsYXk9JWxsdSYjMzQ7LAomIzQzOwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdmFsdWUpOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwl9CiYjNDM7CWlmICghc3RyY21wKG5hbWUsICYjMzQ7dHh0aW1lX2Nsb2NraWQmIzM0OykpIHsKJiM0MzsJCWNoYXIgY2xvY2tzdHJbMzJdOwomIzQzOwkJY2xvY2tpZF90IGNsazsKJiM0MzsKJiM0MzsJCW1lbXNldChjbG9ja3N0ciwgMCwgc2l6ZW9mKGNsb2Nrc3RyKSk7CiYjNDM7CQltYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7CiYjNDM7CQlsZW4gPSBzdHJuX2xlbigmYW1wO3VzZXJfYnVmZmVyW2ldLCBtYXgpOwomIzQzOwkJaWYgKGxlbiAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIGxlbjsKJiM0MzsKJiM0MzsJCWlmIChjb3B5X2Zyb21fdXNlcihjbG9ja3N0ciwgJmFtcDt1c2VyX2J1ZmZlcltpXSwgbGVuKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJCWlmICghc3RyY21wKGNsb2Nrc3RyLCAmIzM0O21vbm90b25pYyYjMzQ7KSkgewomIzQzOwkJCWNsayA9IENMT0NLX01PTk9UT05JQzsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNtcChjbG9ja3N0ciwgJiMzNDtyZWFsdGltZSYjMzQ7KSkgewomIzQzOwkJCWNsayA9IENMT0NLX1JFQUxUSU1FOwomIzQzOwkJfSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCAmIzM0O3RhaSYjMzQ7KSkgewomIzQzOwkJCWNsayA9IENMT0NLX1RBSTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3ByaW50ZihwZ19yZXN1bHQsICYjMzQ7RVJST1I6IHVua25vd24gY2xvY2tpZCAmIzM5OyVzJiMzOTsmIzM0OywKJiM0MzsJCQkJY2xvY2tzdHIpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc3ByaW50ZihwZ19yZXN1bHQsICYjMzQ7T0s6IHR4dGltZV9jbG9ja2lkPSVzJiMzNDssIGNsb2Nrc3RyKTsKJiM0MzsJCVdSSVRFX09OQ0UocGt0X2Rldi0mZ3Q7dHh0aW1lX2Nsb2NraWQsIGNsayk7CiYjNDM7CQlyZXR1cm4gY291bnQ7CiYjNDM7CX0KIAlpZiAoIXN0cmNtcChuYW1lLCAmIzM0O3JhdGUmIzM0OykpIHsKIAkJbWF4ID0gbWluKDEwLCBjb3VudCAtIGkpOwogCQlsZW4gPSBudW1fYXJnKCZhbXA7dXNlcl9idWZmZXJbaV0sIG1heCwgJmFtcDt2YWx1ZSk7CkBAIC0xMjM4LDYgJiM0MzsxMjk4LDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQlpZiAodmFsdWUgJmd0OyAwICZhbXA7JmFtcDsgKHBrdF9kZXYtJmd0O25faW1peF9lbnRyaWVzICZndDsgMCB8fAogCQkJCSAgIShwa3RfZGV2LSZndDtmbGFncyAmYW1wOyBGX1NIQVJFRCkpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlpZiAodmFsdWUgJmd0OyAwICZhbXA7JmFtcDsgUkVBRF9PTkNFKHBrdF9kZXYtJmd0O3R4dGltZV9kZWxheSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJcGt0X2Rldi0mZ3Q7Y2xvbmVfc2tiID0gdmFsdWU7CiAKQEAgLTIzMjEsNiAmIzQzOzIzODMsMjEgQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIH0KIAogCiYjNDM7c3RhdGljIGt0aW1lX3Qga3RpbWVfZ2V0X2Nsb2NrKGNsb2NraWRfdCBjbG9ja2lkKQomIzQzO3sKJiM0MzsJc3dpdGNoIChjbG9ja2lkKSB7CiYjNDM7CWNhc2UgQ0xPQ0tfUkVBTFRJTUU6CiYjNDM7CQlyZXR1cm4ga3RpbWVfZ2V0X3JlYWwoKTsKJiM0MzsJY2FzZSBDTE9DS19NT05PVE9OSUM6CiYjNDM7CQlyZXR1cm4ga3RpbWVfZ2V0KCk7CiYjNDM7CWNhc2UgQ0xPQ0tfVEFJOgomIzQzOwkJcmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJV0FSTl9PTl9PTkNFKDEpOwomIzQzOwkJcmV0dXJuIGt0aW1lX2dldCgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc3BpbihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldiwga3RpbWVfdCBzcGluX3VudGlsKQogewogCWt0aW1lX3Qgc3RhcnRfdGltZSwgZW5kX3RpbWU7CkBAIC0zNTEwLDcgJiM0MzszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAogc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiB7Ci0JYm9vbCBza2Jfc2hhcmVkID0gISEoUkVBRF9PTkNFKHBrdF9kZXYtJmd0O2ZsYWdzKSAmYW1wOyBGX1NIQVJFRCk7CiYjNDM7CXUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LSZndDtmbGFncyk7CiYjNDM7CWJvb2wgc2tiX3NoYXJlZCA9ICEhKGZsYWdzICZhbXA7IEZfU0hBUkVEKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtJmd0O29kZXY7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCXVuc2lnbmVkIGludCBidXJzdCA9IDE7CkBAIC0zNTQ1LDYgJiM0MzszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiAJLyogSWYgbm8gc2tiIG9yIGNsb25lIGNvdW50IGV4aGF1c3RlZCB0aGVuIGdldCBuZXcgb25lICovCiAJaWYgKCFwa3RfZGV2LSZndDtza2IgfHwgKHBrdF9kZXYtJmd0O2xhc3Rfb2sgJmFtcDsmYW1wOwogCQkJICAgICAgJiM0MzsmIzQzO3BrdF9kZXYtJmd0O2Nsb25lX2NvdW50ICZndDs9IGNsb25lX3NrYikpIHsKJiM0MzsJCXU2NCB0eHRpbWVfZGVsYXk7CiYjNDM7CiAJCS8qIGJ1aWxkIGEgbmV3IHBrdCAqLwogCQlrZnJlZV9za2IocGt0X2Rldi0mZ3Q7c2tiKTsKIApAQCAtMzU1Nyw2ICYjNDM7MzYzNywxNiBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIAkJfQogCQlwa3RfZGV2LSZndDtsYXN0X3BrdF9zaXplID0gcGt0X2Rldi0mZ3Q7c2tiLSZndDtsZW47CiAJCXBrdF9kZXYtJmd0O2Nsb25lX2NvdW50ID0gMDsJLyogcmVzZXQgY291bnRlciAqLwomIzQzOwomIzQzOwkJdHh0aW1lX2RlbGF5ID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O3R4dGltZV9kZWxheSk7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgRl9UWFRJTUUgJmFtcDsmYW1wOyB0eHRpbWVfZGVsYXkpIHsKJiM0MzsJCQljbG9ja2lkX3QgY2xrID0gUkVBRF9PTkNFKHBrdF9kZXYtJmd0O3R4dGltZV9jbG9ja2lkKTsKJiM0MzsJCQlrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSwKJiM0MzsJCQkJCQkgICAgICB0eHRpbWVfZGVsYXkpOwomIzQzOwomIzQzOwkJCXNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtJmd0O3NrYiwgdHh0aW1lLAomIzQzOwkJCQkJCQkgY2xrKTsKJiM0MzsJCX0KIAl9CiAKIAlpZiAocGt0X2Rldi0mZ3Q7ZGVsYXkgJmFtcDsmYW1wOyBwa3RfZGV2LSZndDtsYXN0X29rKQpAQCAtMzg2OSw2ICYjNDM7Mzk1OSw3IEBAIHN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSkKIAlwa3RfZGV2LSZndDtidXJzdCA9IDE7CiAJcGt0X2Rldi0mZ3Q7bm9kZSA9IE5VTUFfTk9fTk9ERTsKIAlwa3RfZGV2LSZndDtmbGFncyA9IEZfU0hBUkVEOwkvKiBTS0Igc2hhcmVkIGJ5IGRlZmF1bHQgKi8KJiM0MzsJcGt0X2Rldi0mZ3Q7dHh0aW1lX2Nsb2NraWQgPSBDTE9DS19NT05PVE9OSUM7CiAKIAllcnIgPSBwa3RnZW5fc2V0dXBfZGV2KHQtJmd0O25ldCwgcGt0X2RldiwgaWZuYW1lKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCAzMWM2NWE1NDVhMTA3Yy4uMmM3YTI0NWM1ZmZjMmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0yMTU1LDcgJiM0MzsyMTU1LDcgQEAgc3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsCiAJICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9UU09fTUFYX1NFR1MsCiAJCQlSRUFEX09OQ0UoZGV2LSZndDt0c29fbWF4X3NlZ3MpKSB8fAogCSAgICBubGFfcHV0X3VpbnQoc2tiLCBJRkxBX01BWF9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLAotCQkJIFJFQURfT05DRShkZXYtJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkgfHwKJiM0MzsJCQkgKHU2NClSRUFEX09OQ0UoZGV2LSZndDttYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fAogI2lmZGVmIENPTkZJR19SUFMKIAkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsCiAJCQlSRUFEX09OQ0UoZGV2LSZndDtudW1fcnhfcXVldWVzKSkgfHwKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL2NvbW1vbi5jIGIvbmV0L2V0aHRvb2wvY29tbW9uLmMKaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjVjMjMyM2FhYTAyYjZiIDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9jb21tb24uYwpAQCAtOTU0LDYgJiM0Mzs5NTQsOSBAQCB2b2lkIGV0aHRvb2xfcmluZ3BhcmFtX2dldF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkvKiBEcml2ZXIgZ2l2ZXMgdXMgY3VycmVudCBzdGF0ZSwgd2Ugd2FudCB0byByZXR1cm4gY3VycmVudCBjb25maWcgKi8KIAlrcGFyYW0tJmd0O3RjcF9kYXRhX3NwbGl0ID0gZGV2LSZndDtjZmctJmd0O2hkc19jb25maWc7CiAJa3BhcmFtLSZndDtoZHNfdGhyZXNoID0gZGV2LSZndDtjZmctJmd0O2hkc190aHJlc2g7CiYjNDM7CiYjNDM7CWtwYXJhbS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKJiM0MzsJa3BhcmFtLSZndDttYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi0mZ3Q7bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247CiB9CiAKIHN0YXRpYyB2b2lkIGV0aHRvb2xfaW5pdF90c2luZm8oc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pCmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKaW5kZXggM2U5NjlhMDcwZjlmZTQuLmFlN2I2NTFjNjU4Zjc0IDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5oCkBAIC00OTQsNyAmIzQzOzQ5NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9mZWF0dXJlc19zZXRfcG9saWN5W0VUSFRPT0xfQV9GRUFUVVJFU19XQU5UCiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19IRUFERVIgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19GTEFHUyAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19nZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRUFERVIgJiM0MzsgMV07Ci1leHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVggJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0hFQURFUiAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jaGFubmVsc19zZXRfcG9saWN5W0VUSFRPT0xfQV9DSEFOTkVMU19DT01CSU5FRF9DT1VOVCAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jb2FsZXNjZV9nZXRfcG9saWN5W0VUSFRPT0xfQV9DT0FMRVNDRV9IRUFERVIgJiM0MzsgMV07CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9yaW5ncy5jIGIvbmV0L2V0aHRvb2wvcmluZ3MuYwppbmRleCA5MDU0Yzg5YzVkN2JiMi4uNTIxNTg1NzJmZTEwYzAgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL3JpbmdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcmluZ3MuYwpAQCAtNDIsNiAmIzQzOzQyLDggQEAgc3RhdGljIGludCByaW5nc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKIAogCWRhdGEtJmd0O2tlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtJmd0O2NmZy0mZ3Q7aGRzX2NvbmZpZzsKIAlkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggPSBkZXYtJmd0O2NmZy0mZ3Q7aGRzX3RocmVzaDsKJiM0MzsJZGF0YS0mZ3Q7a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LSZndDtwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOwomIzQzOwlkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LSZndDttYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjsKIAogCWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9yaW5ncGFyYW0oZGV2LCAmYW1wO2RhdGEtJmd0O3JpbmdwYXJhbSwKIAkJCQkJJmFtcDtkYXRhLSZndDtrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLSZndDtleHRhY2spOwpAQCAtNjksNyAmIzQzOzcxLDkgQEAgc3RhdGljIGludCByaW5nc19yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiAJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovCiAJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOX01BWCAqLwogCSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogX1JJTkdTX0hEU19USFJFU0ggKi8KLQkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBfUklOR1NfSERTX1RIUkVTSF9NQVgqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIF9SSU5HU19IRFNfVEhSRVNIX01BWCAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCAqLwogfQogCiBzdGF0aWMgaW50IHJpbmdzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTEyMSw3ICYjNDM7MTI1LDEyIEBAIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsCiAJCQkgIGtyLSZndDtoZHNfdGhyZXNoKSB8fAogCSAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLAotCQkJICBrci0mZ3Q7aGRzX3RocmVzaF9tYXgpKSkpCiYjNDM7CQkJICBrci0mZ3Q7aGRzX3RocmVzaF9tYXgpKSkgfHwKJiM0MzsJICAgICgoc3VwcG9ydGVkX3JpbmdfcGFyYW1zICZhbXA7IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgJmFtcDsmYW1wOwomIzQzOwkgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLAomIzQzOwkJCSAga3ItJmd0O3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8CiYjNDM7CSAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYLAomIzQzOwkJCSAga3ItJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJcmV0dXJuIDA7CkBAIC0xNDQsNiAmIzQzOzE1Myw3IEBAIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbXSA9IHsKIAlbRVRIVE9PTF9BX1JJTkdTX1JYX1BVU0hdCQk9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgMSksCiAJW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAogc3RhdGljIGludApAQCAtMTc3LDYgJiM0MzsxODcsMTQgQEAgZXRobmxfc2V0X3JpbmdzX3ZhbGlkYXRlKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKG9wcy0mZ3Q7c3VwcG9ydGVkX3JpbmdfcGFyYW1zICZhbXA7IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLAomIzQzOwkJCQkgICAgJiMzNDtzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaXMgbm90IHN1cHBvcnRlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmICh0YltFVEhUT09MX0FfUklOR1NfQ1FFX1NJWkVdICZhbXA7JmFtcDsKIAkgICAgIShvcHMtJmd0O3N1cHBvcnRlZF9yaW5nX3BhcmFtcyAmYW1wOyBFVEhUT09MX1JJTkdfVVNFX0NRRV9TSVpFKSkgewogCQlOTF9TRVRfRVJSX01TR19BVFRSKGluZm8tJmd0O2V4dGFjaywKQEAgLTI0Niw2ICYjNDM7MjY0LDggQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCQkgdGJbRVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl0sICZhbXA7bW9kKTsKIAlldGhubF91cGRhdGVfdTMyKCZhbXA7a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLAogCQkJIHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXSwgJmFtcDttb2QpOwomIzQzOwlldGhubF91cGRhdGVfdTMyKCZhbXA7a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLAomIzQzOwkJCSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl0sICZhbXA7bW9kKTsKIAlpZiAoIW1vZCkKIAkJcmV0dXJuIDA7CiAKQEAgLTI4MSw2ICYjNDM7MzAxLDkgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1RYXTsKIAllbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2ggJmd0OyBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KQogCQllcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTsKJiM0MzsJZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICZndDsKJiM0MzsJCSBrZXJuZWxfcmluZ3BhcmFtLm1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKQomIzQzOwkJZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07CiAJZWxzZQogCQllcnJfYXR0ciA9IE5VTEw7CiAJaWYgKGVycl9hdHRyKSB7CkBAIC0zMDIsNiAmIzQzOzMyNSw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJcmV0ID0gZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7c2V0X3JpbmdwYXJhbShkZXYsICZhbXA7cmluZ3BhcmFtLAogCQkJCQkgICAgICAmYW1wO2tlcm5lbF9yaW5ncGFyYW0sIGluZm8tJmd0O2V4dGFjayk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJZGV2LSZndDtwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0ga2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOwomIzQzOwogCXJldHVybiByZXQgJmx0OyAwID8gcmV0IDogMTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jCmluZGV4IDdjYWUwODJhOTg0NzIxLi4zNjAwNmY2OWE4NzUzNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnEuYwpAQCAtMzk5LDYgJiM0MzszOTksMTEgQEAgc3RhdGljIHN0cnVjdCBmcV9mbG93ICpmcV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgIFJFQURfT05DRShzay0mZ3Q7c2tfcGFjaW5nX3N0YXR1cykgIT0gU0tfUEFDSU5HX0ZRKQogCQkJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtzay0mZ3Q7c2tfcGFjaW5nX3N0YXR1cywKIAkJCQkJICBTS19QQUNJTkdfRlEpOwomIzQzOwomIzQzOwkJaWYgKHEtJmd0O29mZmxvYWRfaG9yaXpvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZnFfc2tiX2NiKHNrYiktJmd0O3RpbWVfdG9fc2VuZCAmbHQ7PSBub3cpCiYjNDM7CQkJc2tiLSZndDt0c3RhbXAgPSAwOwomIzQzOwogCQlyZXR1cm4gJmFtcDtxLSZndDtpbnRlcm5hbDsKIAl9CiAKQEAgLTcwNyw2ICYjNDM7NzEyLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKQogCXN0cnVjdCBmcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCBmcV9wZXJiYW5kX2Zsb3dzICpwYmFuZDsKIAlzdHJ1Y3QgZnFfZmxvd19oZWFkICpoZWFkOwomIzQzOwl1NjQgdGltZV9uZXh0X3BhY2tldDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBmcV9mbG93ICpmOwogCXVuc2lnbmVkIGxvbmcgcmF0ZTsKQEAgLTcyMSw3ICYjNDM7NzI3LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKQogCWlmIChza2IpIHsKIAkJcS0mZ3Q7aW50ZXJuYWwucWxlbi0tOwogCQlmcV9kZXF1ZXVlX3NrYihzY2gsICZhbXA7cS0mZ3Q7aW50ZXJuYWwsIHNrYik7Ci0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIHNrYjsKIAl9CiAKIAlub3cgPSBrdGltZV9nZXRfbnMoKTsKQEAgLTc1OCw4ICYjNDM7NzY0LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKQogCiAJc2tiID0gZnFfcGVlayhmKTsKIAlpZiAoc2tiKSB7Ci0JCXU2NCB0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS0mZ3Q7dGltZV90b19zZW5kLAotCQkJCQkgICAgIGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQpOwomIzQzOwkJdGltZV9uZXh0X3BhY2tldCA9IG1heF90KHU2NCwgZnFfc2tiX2NiKHNrYiktJmd0O3RpbWVfdG9fc2VuZCwKJiM0MzsJCQkJCSBmLSZndDt0aW1lX25leHRfcGFja2V0KTsKIAogCQlpZiAobm93ICYjNDM7IHEtJmd0O29mZmxvYWRfaG9yaXpvbiAmbHQ7IHRpbWVfbmV4dF9wYWNrZXQpIHsKIAkJCWhlYWQtJmd0O2ZpcnN0ID0gZi0mZ3Q7bmV4dDsKQEAgLTgyOCwxMSAmIzQzOzgzNCwxNSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiAJCSAqIGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQgd2FzIHNldCB3aGVuIHByaW9yIHBhY2tldCB3YXMgc2VudCwKIAkJICogYW5kIGN1cnJlbnQgdGltZSAoQG5vdykgY2FuIGJlIHRvbyBsYXRlIGJ5IHRlbnMgb2YgdXMuCiAJCSAqLwotCQlpZiAoZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCkKJiM0MzsJCWlmIChmLSZndDt0aW1lX25leHRfcGFja2V0ICZhbXA7JmFtcDsgZi0mZ3Q7dGltZV9uZXh0X3BhY2tldCAmbHQ7IG5vdykKIAkJCWxlbiAtPSBtaW4obGVuLzIsIG5vdyAtIGYtJmd0O3RpbWVfbmV4dF9wYWNrZXQpOwogCQlmLSZndDt0aW1lX25leHRfcGFja2V0ID0gbm93ICYjNDM7IGxlbjsKIAl9CiYjNDM7CiBvdXQ6CiYjNDM7CWlmIChxLSZndDtvZmZsb2FkX2hvcml6b24gJmFtcDsmYW1wOyB0aW1lX25leHRfcGFja2V0ICZsdDs9IG5vdykKJiM0MzsJCXNrYi0mZ3Q7dHN0YW1wID0gMDsKJiM0MzsKIAlyZXR1cm4gc2tiOwogfQogCkBAIC0xMTc5LDcgJiM0MzsxMTg5LDggQEAgc3RhdGljIGludCBmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKIAkJdTY0IG9mZmxvYWRfaG9yaXpvbiA9ICh1NjQpTlNFQ19QRVJfVVNFQyAqCiAJCQkJICAgICAgbmxhX2dldF91MzIodGJbVENBX0ZRX09GRkxPQURfSE9SSVpPTl0pOwogCi0JCWlmIChvZmZsb2FkX2hvcml6b24gJmx0Oz0gcWRpc2NfZGV2KHNjaCktJmd0O21heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB7CiYjNDM7CQlpZiAob2ZmbG9hZF9ob3Jpem9uICZsdDs9CiYjNDM7CQkgICAgKHU2NClxZGlzY19kZXYoc2NoKS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbiAqIE5TRUNfUEVSX1VTRUMpIHsKIAkJCVdSSVRFX09OQ0UocS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uLCBvZmZsb2FkX2hvcml6b24pOwogCQl9IGVsc2UgewogCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtpbnZhbGlkIG9mZmxvYWRfaG9yaXpvbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc2V0dGluZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI0NzhlNjg0ODQ2YTE2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc2V0dGluZ3MKQEAgLTAsMCAmIzQzOzEgQEAKJiM0Mzt0aW1lb3V0PTI0MApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuYwppbmRleCA1NWEzODZmM2QxYjkwZi4uNmU2NGJhYTRjNjBkZDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jCkBAIC00Miw4ICYjNDM7NDIsMTAgQEAgc3RhdGljIGJvb2wJY2ZnX21hY2hpbmVfc2xvdzsKIHN0YXRpYyB1aW50NjRfdAljZmdfc3RhcnRfdGltZV9uczsKIHN0YXRpYyBpbnQJY2ZnX21hcms7CiBzdGF0aWMgYm9vbAljZmdfcng7CiYjNDM7c3RhdGljIGJvb2wJY2ZnX3ZlcmlmeV9od19vZmZsb2FkOwogCiBzdGF0aWMgdWludDY0X3QgZ2xvYl90c3RhcnQ7CiYjNDM7c3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0X3JlYWw7CiBzdGF0aWMgdWludDY0X3QgdGRlbGl2ZXJfbWF4OwogCiBzdGF0aWMgaW50IGVycm9yczsKQEAgLTE1OCwxOCAmIzQzOzE2MCw3MCBAQCBzdGF0aWMgdm9pZCBkb19yZWN2X3ZlcmlmeV9lbXB0eShpbnQgZmRyKQogCQllcnJvcigxLCAwLCAmIzM0O3JlY3Y6IG5vdCBlbXB0eSBhcyBleHBlY3RlZCAoJWQsICVkKSYjMzQ7LCByZXQsIGVycm5vKTsKIH0KIAotc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdCkKJiM0MztzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVyciwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgcGF5bG9hZF9jaGFyKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKJiM0MzsJaW50NjRfdCB0c3RhbXAgPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKGVyci0mZ3Q7ZWVfZXJybm8pIHsKJiM0MzsJY2FzZSBFQ0FOQ0VMRUQ6CiYjNDM7CQlpZiAoZXJyLSZndDtlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX01JU1NFRCkKJiM0MzsJCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxuJiMzNDssCiYjNDM7CQkJICAgICAgZXJyLSZndDtlZV9jb2RlKTsKJiM0MzsJCXJlYXNvbiA9ICYjMzQ7bWlzc2VkIHR4dGltZSYjMzQ7OwomIzQzOwlicmVhazsKJiM0MzsJY2FzZSBFSU5WQUw6CiYjNDM7CQlpZiAoZXJyLSZndDtlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX0lOVkFMSURfUEFSQU0pCiYjNDM7CQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVyci0mZ3Q7ZWVfY29kZSk7CiYjNDM7CQlyZWFzb24gPSAmIzM0O2ludmFsaWQgdHh0aW1lJiMzNDs7CiYjNDM7CWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxuJiMzNDssCiYjNDM7CQkgICAgICBlcnItJmd0O2VlX2Vycm5vLCBlcnItJmd0O2VlX2NvZGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRzdGFtcCA9ICgoaW50NjRfdCllcnItJmd0O2VlX2RhdGEpICZsdDsmbHQ7IDMyIHwgZXJyLSZndDtlZV9pbmZvOwomIzQzOwl0c3RhbXAgLT0gKGludDY0X3QpZ2xvYl90c3RhcnQ7CiYjNDM7CXRzdGFtcCAvPSAxMDAwICogMTAwMDsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7c2VuZDogcGt0ICVjIGF0ICUmIzM0OyBQUklkNjQgJiMzNDttcyBkcm9wcGVkOiAlc1xuJiMzNDssCiYjNDM7CQlwYXlsb2FkX2NoYXIsIHRzdGFtcCwgcmVhc29uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRvX3JlY3ZfZXJycXVldWVfdGltZXN0YW1waW5nKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyLAomIzQzOwkJCQkJICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyAqdHNzKQomIzQzO3sKJiM0MzsJaW50NjRfdCB0czsKJiM0MzsKJiM0MzsJdHMgPSB0c3MtJmd0O3RzWzBdLnR2X3NlYzsKJiM0MzsJdHMgKj0gMTAwMFVMTCAqIDEwMDAgKiAxMDAwOwomIzQzOwl0cyAmIzQzOz0gdHNzLSZndDt0c1swXS50dl9uc2VjOwomIzQzOwl0cyAtPSBnbG9iX3RzdGFydF9yZWFsOwomIzQzOwl0cyAvPSAxMDAwOwomIzQzOwomIzQzOwlpZiAodHMgJmd0OyBjZmdfdmFyaWFuY2VfdXMpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O3N3IGRlbGF5ICUmIzM0OyBQUklkNjQgJiMzNDt1cyBleGNlZWRzIGJvdW5kc1xuJiMzNDssIHRzKTsKJiM0MzsJCWlmICghY2ZnX21hY2hpbmVfc2xvdykKJiM0MzsJCQllcnJvcnMmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZShpbnQgZmR0KQogewogCWNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIpKSAmIzQzOwomIzQzOwkJICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZykpICYjNDM7CiAJCSAgICAgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpXSA9IHswfTsKIAljaGFyIGRhdGFbc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MzsKIAkJICBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0MzsgMV07CiYjNDM7CXN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3M7CiAJc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnI7CiAJaW50IHJldCwgbnVtX3RzdGFtcCA9IDA7CiAJc3RydWN0IG1zZ2hkciBtc2cgPSB7MH07CiAJc3RydWN0IGlvdmVjIGlvdiA9IHswfTsKIAlzdHJ1Y3QgY21zZ2hkciAqY207Ci0JaW50NjRfdCB0c3RhbXAgPSAwOwogCiAJaW92Lmlvdl9iYXNlID0gZGF0YTsKIAlpb3YuaW92X2xlbiA9IHNpemVvZihkYXRhKTsKQEAgLTE4MSw4ICYjNDM7MjM1LDYgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdCkKIAltc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7CiAKIAl3aGlsZSAoMSkgewotCQljb25zdCBjaGFyICpyZWFzb24gPSBOVUxMOwotCiAJCXJldCA9IHJlY3Ztc2coZmR0LCAmYW1wO21zZywgTVNHX0VSUlFVRVVFKTsKIAkJaWYgKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVBR0FJTikKIAkJCWJyZWFrOwpAQCAtMTkyLDQyICYjNDM7MjQ0LDMyIEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpCiAJCQllcnJvcigxLCAwLCAmIzM0O2VycnF1ZXVlOiBmbGFncyAweCV4XG4mIzM0OywgbXNnLm1zZ19mbGFncyk7CiAKIAkJY20gPSBDTVNHX0ZJUlNUSERSKCZhbXA7bXNnKTsKJiM0MzsJCXRzcyA9IE5VTEw7CiYjNDM7CiYjNDM7CQlpZiAoY20tJmd0O2Ntc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY20tJmd0O2Ntc2dfdHlwZSA9PSBTQ01fVElNRVNUQU1QSU5HKSB7CiYjNDM7CQkJdHNzID0gKHZvaWQgKilDTVNHX0RBVEEoY20pOwomIzQzOwkJCWNtID0gQ01TR19OWFRIRFIoJmFtcDttc2csIGNtKTsKJiM0MzsJCQlpZiAoIWNtKQomIzQzOwkJCQllcnJvcigxLCAwLCAmIzM0O3RpbWVzdGFtcCBtaXNzaW5nIGlwIGVyclxuJiMzNDspOwomIzQzOwkJfQomIzQzOwogCQlpZiAoY20tJmd0O2Ntc2dfbGV2ZWwgIT0gY2ZnX2VycnFfbGV2ZWwgfHwKIAkJICAgIGNtLSZndDtjbXNnX3R5cGUgIT0gY2ZnX2VycnFfdHlwZSkKIAkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IHR5cGUgMHgleC4weCV4XG4mIzM0OywKIAkJCQkgICAgY20tJmd0O2Ntc2dfbGV2ZWwsIGNtLSZndDtjbXNnX3R5cGUpOwogCiAJCWVyciA9IChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY20pOwotCQlpZiAoZXJyLSZndDtlZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1RYVElNRSkKJiM0MzsJCWlmIChlcnItJmd0O2VlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVFhUSU1FKQomIzQzOwkJCW51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChlcnIsCiYjNDM7CQkJCQkJCSAgICAgICBkYXRhW3JldCAtIDFdKTsKJiM0MzsJCWVsc2UgaWYgKGVyci0mZ3Q7ZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgJmFtcDsmYW1wOyB0c3MpCiYjNDM7CQkJZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoZXJyLCB0c3MpOwomIzQzOwkJZWxzZQogCQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogb3JpZ2luIDB4JXhcbiYjMzQ7LCBlcnItJmd0O2VlX29yaWdpbik7CiAKLQkJc3dpdGNoIChlcnItJmd0O2VlX2Vycm5vKSB7Ci0JCWNhc2UgRUNBTkNFTEVEOgotCQkJaWYgKGVyci0mZ3Q7ZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpCi0JCQkJZXJyb3IoMSwgMCwgJiMzNDtlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcbiYjMzQ7LAotCQkJCSAgICAgIGVyci0mZ3Q7ZWVfY29kZSk7Ci0JCQlyZWFzb24gPSAmIzM0O21pc3NlZCB0eHRpbWUmIzM0OzsKLQkJYnJlYWs7Ci0JCWNhc2UgRUlOVkFMOgotCQkJaWYgKGVyci0mZ3Q7ZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9JTlZBTElEX1BBUkFNKQotCQkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IHVua25vd24gRUlOVkFMICV1XG4mIzM0OywKLQkJCQkgICAgICBlcnItJmd0O2VlX2NvZGUpOwotCQkJcmVhc29uID0gJiMzNDtpbnZhbGlkIHR4dGltZSYjMzQ7OwotCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycm9yKDEsIDAsICYjMzQ7ZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcbiYjMzQ7LAotCQkJICAgICAgZXJyLSZndDtlZV9lcnJubywgZXJyLSZndDtlZV9jb2RlKTsKLQkJfQotCi0JCXRzdGFtcCA9ICgoaW50NjRfdCkgZXJyLSZndDtlZV9kYXRhKSAmbHQ7Jmx0OyAzMiB8IGVyci0mZ3Q7ZWVfaW5mbzsKLQkJdHN0YW1wIC09IChpbnQ2NF90KSBnbG9iX3RzdGFydDsKLQkJdHN0YW1wIC89IDEwMDAgKiAxMDAwOwotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtzZW5kOiBwa3QgJWMgYXQgJSYjMzQ7IFBSSWQ2NCAmIzM0O21zIGRyb3BwZWQ6ICVzXG4mIzM0OywKLQkJCWRhdGFbcmV0IC0gMV0sIHRzdGFtcCwgcmVhc29uKTsKLQogCQltc2cubXNnX2ZsYWdzID0gMDsKIAkJbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2wpOwotCQludW1fdHN0YW1wJiM0MzsmIzQzOzsKIAl9CiAKIAlyZXR1cm4gbnVtX3RzdGFtcDsKQEAgLTI0NSwxMiAmIzQzOzI4NywxMyBAQCBzdGF0aWMgdm9pZCByZWN2X2VycnF1ZXVlX21zZ3MoaW50IGZkdCkKIAkJCWVycm9yKDEsIGVycm5vLCAmIzM0O3BvbGwmIzM0Oyk7CiAKIAkJaWYgKHJldCAmYW1wOyZhbXA7IChwZmQucmV2ZW50cyAmYW1wOyBQT0xMRVJSKSkKLQkJCW51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChmZHQpOwomIzQzOwkJCW51bV90c3RhbXAgJiM0Mzs9IGRvX3JlY3ZfZXJycXVldWUoZmR0KTsKIAogCQlpZiAobnVtX3RzdGFtcCA9PSBjZmdfbnVtX3BrdCkKIAkJCWJyZWFrOwogCi0JfSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgJmx0OyB0ZGVsaXZlcl9tYXgpOwomIzQzOwl9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSAmbHQ7CiYjNDM7CQkgdGRlbGl2ZXJfbWF4ICYjNDM7IChjZmdfdmFyaWFuY2VfdXMgKiAxMDAwKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YXJ0X3RpbWVfd2FpdCh2b2lkKQpAQCAtMjk1LDYgJiM0MzszMzgsMTggQEAgc3RhdGljIHZvaWQgc2V0c29ja29wdF90eHRpbWUoaW50IGZkKQogCQllcnJvcigxLCAwLCAmIzM0O2dldHNvY2tvcHQgdHh0aW1lOiBtaXNtYXRjaCYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoaW50IGZkKQomIzQzO3sKJiM0MzsJaW50IHZhbCA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfAomIzQzOwkJICBTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIHwKJiM0MzsJCSAgU09GX1RJTUVTVEFNUElOR19PUFRfSUQgfAomIzQzOwkJICBTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsCiYjNDM7CQkgICAgICAgJmFtcDt2YWwsIHNpemVvZih2YWwpKSkKJiM0MzsJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NldHNvY2tvcHQgdGltZXN0YW1waW5nJiMzNDspOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbikKIHsKIAlpbnQgZmQ7CkBAIC0zMDgsNiAmIzQzOzM2Myw5IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbikKIAogCXNldHNvY2tvcHRfdHh0aW1lKGZkKTsKIAomIzQzOwlpZiAoY2ZnX3ZlcmlmeV9od19vZmZsb2FkKQomIzQzOwkJc2V0c29ja29wdF90eHRpbWVzdGFtcGluZyhmZCk7CiYjNDM7CiAJaWYgKGNmZ19tYXJrICZhbXA7JmFtcDsKIAkgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgJmFtcDtjZmdfbWFyaywgc2l6ZW9mKGNmZ19tYXJrKSkpCiAJCWVycm9yKDEsIGVycm5vLCAmIzM0O3NldHNvY2tvcHQgbWFyayYjMzQ7KTsKQEAgLTMxNyw3ICYjNDM7Mzc1LDcgQEAgc3RhdGljIGludCBzZXR1cF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKQogCiBzdGF0aWMgaW50IHNldHVwX3J4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pCiB7Ci0Jc3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl91c2VjID0gMTAwICogMTAwMCB9OwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSA2MDAgKiAxMDAwIH07CiAJaW50IGZkOwogCiAJZmQgPSBzb2NrZXQoYWRkci0mZ3Q7c2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTsKQEAgLTM0OCw2ICYjNDM7NDA2LDcgQEAgc3RhdGljIHZvaWQgZG9fdGVzdF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKQogCiAJc3RhcnRfdGltZV93YWl0KCk7CiAJZ2xvYl90c3RhcnQgPSBnZXR0aW1lX25zKGNmZ19jbG9ja2lkKTsKJiM0MzsJZ2xvYl90c3RhcnRfcmVhbCA9IGdldHRpbWVfbnMoQ0xPQ0tfUkVBTFRJTUUpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGNmZ19udW1fcGt0OyBpJiM0MzsmIzQzOykKIAkJZG9fc2VuZF9vbmUoZmR0LCAmYW1wO2NmZ19idWZbaV0pOwpAQCAtNDQwLDEwICYjNDM7NDk5LDExIEBAIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCQkJJiMzNDsgIC02ICAgICAgICAgICAgb25seSBJUHY2XG4mIzM0OwogCQkJJiMzNDsgIC1jICZsdDtjbG9jayZndDsgICAgbW9ub3RvbmljIG9yIHRhaSAoZGVmYXVsdClcbiYjMzQ7CiAJCQkmIzM0OyAgLUQgJmx0O2FkZHImZ3Q7ICAgICBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzIChzZXJ2ZXIpXG4mIzM0OwotCQkJJiMzNDsgIC1TICZsdDthZGRyJmd0OyAgICAgc291cmNlIElQIGFkZHJlc3MgKGNsaWVudClcbiYjMzQ7CiYjNDM7CQkJJiMzNDsgIC1oICAgICAgICAgICAgdmVyaWZ5IGhhcmR3YXJlIG9mZmxvYWQgKHR4KVxuJiMzNDsKJiM0MzsJCQkmIzM0OyAgLW0gJmx0O21hcmsmZ3Q7ICAgICBzb2NrZXQgbWFya1xuJiMzNDsKIAkJCSYjMzQ7ICAtciAgICAgICAgICAgIHJ1biByeCBtb2RlXG4mIzM0OwomIzQzOwkJCSYjMzQ7ICAtUyAmbHQ7YWRkciZndDsgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXG4mIzM0OwogCQkJJiMzNDsgIC10ICZsdDtuc2VjJmd0OyAgICAgc3RhcnQgdGltZSAoVVRDIG5hbm9zZWNvbmRzKVxuJiMzNDsKLQkJCSYjMzQ7ICAtbSAmbHQ7bWFyayZndDsgICAgIHNvY2tldCBtYXJrXG4mIzM0OwogCQkJJiMzNDtcbiYjMzQ7LAogCQkJcHJvZ25hbWUpOwogCWV4aXQoMSk7CkBAIC00NTUsNyAmIzQzOzUxNSw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWludCBkb21haW4gPSBQRl9VTlNQRUM7CiAJaW50IGM7CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDs0NmM6UzpEOnJ0Om06JiMzNDspKSAhPSAtMSkgewomIzQzOwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDs0NmM6RDpobTpyUzp0OiYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChjKSB7CiAJCWNhc2UgJiMzOTs0JiMzOTs6CiAJCQlpZiAoZG9tYWluICE9IFBGX1VOU1BFQykKQEAgLTQ4MiwyMSAmIzQzOzU0MiwyNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWVsc2UKIAkJCQllcnJvcigxLCAwLCAmIzM0O3Vua25vd24gY2xvY2sgaWQgJXMmIzM0Oywgb3B0YXJnKTsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7UyYjMzk7OgotCQkJc2FkZHIgPSBvcHRhcmc7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O0QmIzM5OzoKIAkJCWRhZGRyID0gb3B0YXJnOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7aCYjMzk7OgomIzQzOwkJCWNmZ192ZXJpZnlfaHdfb2ZmbG9hZCA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7bSYjMzk7OgomIzQzOwkJCWNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtyJiMzOTs6CiAJCQljZmdfcnggPSB0cnVlOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlICYjMzk7UyYjMzk7OgomIzQzOwkJCXNhZGRyID0gb3B0YXJnOwomIzQzOwkJCWJyZWFrOwogCQljYXNlICYjMzk7dCYjMzk7OgogCQkJY2ZnX3N0YXJ0X3RpbWVfbnMgPSBzdHJ0b2xsKG9wdGFyZywgTlVMTCwgMCk7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O20mIzM5OzoKLQkJCWNmZ19tYXJrID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7Ci0JCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXVzYWdlKGFyZ3ZbMF0pOwogCQl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHkKaW5kZXggYWRmNmM4NDhkNmQ4MGYuLjdiNzVhMzNmNWM0M2Y4IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5CkBAIC0xMiwxMCAmIzQzOzEyLDEzIEBAIGltcG9ydCB0aW1lCiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF92YXJpYW50cwogZnJvbSBsaWIucHkgaW1wb3J0IEtzZnROYW1lZFZhcmlhbnQsIEtzZnRTa2lwRXgKIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgYmtnLCBjbWQsIGRlZmVyLCB0YwomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBFdGh0b29sRmFtaWx5LCBObEVycm9yCiAKIAogZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKToKICAgICAmIzM0OyYjMzQ7JiMzNDtNYWluIGZ1bmN0aW9uLiBSdW4gc29fdHh0aW1lIGFzIHNlbmRlciBhbmQgcmVjZWl2ZXIuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKQomIzQzOwogICAgIHNsb3dfbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCYjMzk7S1NGVF9NQUNISU5FX1NMT1cmIzM5OykKIAogICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgJiMzNDtiaW5fcmVtb3RlJiMzNDspOgpAQCAtMzgsNiAmIzQzOzQxLDM0IEBAIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6CiAgICAgICAgIGNtZChjbWRfdHgpCiAKIAomIzQzO2RlZiBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O0NvbmZpZ3VyZSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBldGhubCA9IEV0aHRvb2xGYW1pbHkoKQomIzQzOwomIzQzOyAgICB0cnk6CiYjNDM7ICAgICAgICByaW5ncyA9IGV0aG5sLnJpbmdzX2dldCh7JiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fX0pCiYjNDM7ICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7cmluZy1nZXQgbm90IHN1cHBvcnRlZCBieSBkZXZpY2UmIzM5OykgZnJvbSBlCiYjNDM7CiYjNDM7ICAgIGlmICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7IG5vdCBpbiByaW5ncyBvciBcCiYjNDM7ICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXgmIzM5OyBub3QgaW4gcmluZ3M6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7cGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZSYjMzk7KQomIzQzOwomIzQzOyAgICBpZiByaW5nc1smIzM5O3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JiMzOTtdICZsdDsgNTBfMDAwOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O3BhY2luZyBvZmZsb2FkIG1heCBob3Jpem9uIHRvbyBzbWFsbCYjMzk7KQomIzQzOwomIzQzOyAgICBjdXJfaG9yaXpvbiA9IHJpbmdzWyYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7XQomIzQzOyAgICBuZXdfaG9yaXpvbiA9IDUwXzAwMAomIzQzOyAgICBldGhubC5yaW5nc19zZXQoewomIzQzOyAgICAgICAgJiMzOTtoZWFkZXImIzM5OzogeyYjMzk7ZGV2LWluZGV4JiMzOTs6IGNmZy5pZmluZGV4fSwKJiM0MzsgICAgICAgICYjMzk7cGFjaW5nLW9mZmxvYWQtaG9yaXpvbiYjMzk7OiBuZXdfaG9yaXpvbiwKJiM0MzsgICAgfSkKJiM0MzsgICAgZGVmZXIoZXRobmwucmluZ3Nfc2V0LCB7CiYjNDM7ICAgICAgICAmIzM5O2hlYWRlciYjMzk7OiB7JiMzOTtkZXYtaW5kZXgmIzM5OzogY2ZnLmlmaW5kZXh9LAomIzQzOyAgICAgICAgJiMzOTtwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJiMzOTs6IGN1cl9ob3Jpem9uCiYjNDM7ICAgIH0pCiYjNDM7CiYjNDM7CiBkZWYgX3FkaXNjX3NldHVwKGlmbmFtZSwgcWRpc2MsIG9wdGFyZ3M9JiMzNDsmIzM0Oyk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UmVwbGFjZSByb290IHFkaXNjLiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBhZnRlciB0aGUgdGVzdC4KIApAQCAtNTYsNiAmIzQzOzg3LDcgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6CiAgICAgICAgICAgICBbJiMzNDtvbmVfcGt0JiMzNDssICYjMzQ7YSwxMCYjMzQ7LCAmIzM0O2EsMTAmIzM0O10sCiAgICAgICAgICAgICBbJiMzNDtpbl9vcmRlciYjMzQ7LCAmIzM0O2EsMTAsYiwyMCYjMzQ7LCAmIzM0O2EsMTAsYiwyMCYjMzQ7XSwKICAgICAgICAgICAgIFsmIzM0O3JldmVyc2Vfb3JkZXImIzM0OywgJiMzNDthLDIwLGIsMTAmIzM0OywgJiMzNDtiLDEwLGEsMjAmIzM0O10sCiYjNDM7ICAgICAgICAgICAgWyYjMzQ7YmV5b25kX2h3X2hvcml6b24mIzM0OywgJiMzNDthLDcwJiMzNDssICYjMzQ7YSw3MCYjMzQ7XSwKICAgICAgICAgXToKICAgICAgICAgICAgIG5hbWUgPSBmJiMzNDt2e2lwdmVyfV97dGVzdGNhc2VbMF19JiMzNDsKICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQobmFtZSwgaXB2ZXIsIHRlc3RjYXNlWzFdLCB0ZXN0Y2FzZVsyXSkKQEAgLTY0LDE1ICYjNDM7OTYsNDIgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6CiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKQogZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8oY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgKGZxKSB0ZXN0cy4mIzM0OyYjMzQ7JiMzNDsKLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcikKICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgJiMzNDtmcSYjMzQ7KQogICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgJiMzNDttb25vJiMzNDssIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKQogCiAKJiM0MztAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKQomIzQzO2RlZiB0ZXN0X3NvX3R4dGltZV9mcV9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyBmcSB0ZXN0cywgd2l0aCBvZmZsb2FkIGhvcml6b24uJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKQomIzQzOwomIzQzOyAgICBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZykKJiM0MzsgICAgdHJ5OgomIzQzOyAgICAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsICYjMzQ7ZnEmIzM0OywgJiMzNDtvZmZsb2FkX2hvcml6b24gNTBtcyYjMzQ7KQomIzQzOyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bmV0ZGV2IGRvZXMgbm90IHN1cHBvcnQgb2ZmbG9hZC4gc2tpcHBpbmcmIzM0OykgZnJvbSBlCiYjNDM7CiYjNDM7ICAgICMgRXhwZWN0IGFsbCB0ZXN0cyB0byB1c2Ugb25seSBodyBwYWNpbmcsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbi4KJiM0MzsgICAgaHdfb25seSA9ICYjMzQ7LWgmIzM0OyBpZiBhcmdzX3R4ICE9ICYjMzQ7YSw3MCYjMzQ7IGVsc2UgJiMzNDsmIzM0OwomIzQzOyAgICB0ZXN0X3NvX3R4dGltZShjZmcsICYjMzQ7bW9ubyYjMzQ7LCBpcHZlciwgZiYjMzQ7e2h3X29ubHl9IHthcmdzX3R4fSYjMzQ7LCBhcmdzX3J4LCBUcnVlKQomIzQzOwomIzQzOwomIzQzO0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpCiYjNDM7ZGVmIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3KGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyB0ZXN0cywgd2l0aG91dCBmcSBwYWNpbmcgc3cgYmFja3VwLiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBjZmcucmVxdWlyZV9uc2ltKG5zaW1fdGVzdD1GYWxzZSkKJiM0MzsKJiM0MzsgICAgX2Rldl9zZXR1cF9wYWNpbmdfb2ZmbG9hZChjZmcpCiYjNDM7ICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCAmIzM0O3BmaWZvX2Zhc3QmIzM0OykKJiM0MzsKJiM0MzsgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHBhc3MsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbiB3aXRob3V0IHN3IGZhbGxiYWNrLgomIzQzOyAgICBleHBlY3RfcGFzcyA9IG5vdCBhcmdzX3R4ID09ICYjMzQ7YSw3MCYjMzQ7CiYjNDM7ICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgJiMzNDttb25vJiMzNDssIGlwdmVyLCBmJiMzNDstaCB7YXJnc190eH0mIzM0OywgYXJnc19yeCwgZXhwZWN0X3Bhc3MpCiYjNDM7CiYjNDM7CiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKQogZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaShjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KToKICAgICAmIzM0OyYjMzQ7JiMzNDtSdW4gYWxsIHZhcmlhbnRzIG9mIGZxIHRlc3RzLCBidXQgcGFzcyBDTE9DS19UQUkgdG8gdGVzdCBjb252ZXJzaW9uLiYjMzQ7JiMzNDsmIzM0OwotICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKQogICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCAmIzM0O2ZxJiMzNDspCiAgICAgdGVzdF9zb190eHRpbWUoY2ZnLCAmIzM0O3RhaSYjMzQ7LCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSkKIApAQCAtOTUsNyAmIzQzOzE1NCw2IEBAIGRlZiBfdGVzdF92YXJpYW50c19ldGYoKToKIEBrc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2V0ZigpKQogZGVmIHRlc3Rfc29fdHh0aW1lX2V0ZihjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3RfZmFpbCk6CiAgICAgJiMzNDsmIzM0OyYjMzQ7UnVuIGFsbCB2YXJpYW50cyBvZiBldGYgdGVzdHMuJiMzNDsmIzM0OyYjMzQ7Ci0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpCiAgICAgdHJ5OgogICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgJiMzNDtldGYmIzM0OywgJiMzNDtjbG9ja2lkIENMT0NLX1RBSSBkZWx0YSA0MDAwMDAmIzM0OykKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CkBAIC0xMDgsNyAmIzQzOzE2NiwxMyBAQCBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6CiAgICAgJiMzNDsmIzM0OyYjMzQ7Qm9pbGVycGxhdGUga3NmdCBtYWluLiYjMzQ7JiMzNDsmIzM0OwogICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzoKICAgICAgICAga3NmdF9ydW4oCi0gICAgICAgICAgICBbdGVzdF9zb190eHRpbWVfZnFfbW9ubywgdGVzdF9zb190eHRpbWVfZnFfdGFpLCB0ZXN0X3NvX3R4dGltZV9ldGZdLAomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ubywKJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odywKJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfcGZpZm9mYXN0X21vbm9faHcsCiYjNDM7ICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwKJiM0MzsgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZXRmLAomIzQzOyAgICAgICAgICAgIF0sCiAgICAgICAgICAgICBhcmdzPShjZmcsKSwKICAgICAgICAgKQogICAgIGtzZnRfZXhpdCgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjI5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIE5ldyBOZXR3b3JrIEtlcm5lbCBGZWF0dXJlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBuZXcga2VybmVsIGVudHJ5IHBvaW50cyBvciBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4KCk15IGluaXRpYWwgc2NhbiByZXZlYWxzIHNvbWUgaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9uczogdGhlIGludHJvZHVjdGlvbiBvZiBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIGBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYXMgYGV0aHRvb2xgIHJpbmcgcGFyYW1ldGVycy4gVGhlIGBpZHBmYCBkcml2ZXIgaXMgYmVpbmcgdXBkYXRlZCB0byBzdXBwb3J0IHRoZSBgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OYCBvcHRpb24uIFBsdXMsIGBwa3RnZW5gIGlzIGdldHRpbmcgc3VwcG9ydCBmb3IgYFNPX1RYVElNRWAsIHdoaWNoIGluY2x1ZGVzIGEgYHR4dGltZV9kZWxheWAgYW5kIGB0eHRpbWVfY2xvY2tpZGAuIEFuZCBmaW5hbGx5LCBgc2NoX2ZxYCBpcyBiZWluZyBtb2RpZmllZCB0byBjb25zaWRlciBgcS0mZ3Q7b2ZmbG9hZF9ob3Jpem9uYC4KClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgaXMgdGhpcyBzdHVmZiBldmVuICpyZWFjaGFibGUqPyBBcmUgdGhlcmUgZW50cnkgcG9pbnRzIHRoYXQgd2UgY2FuIGRpcmVjdGx5IGV4cGxvaXQ/IFRoZSBgcGt0Z2VuYCBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgdGhlIG5ldyBmaWVsZHMgaW4gYHBrdGdlbl9pZl93cml0ZWAgbG9vayBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHByb2NmcyBpbnRlcmZhY2UsIGAvcHJvYy9uZXQvcGt0Z2VuLypgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGBldGh0b29sYCBjaGFuZ2VzLCBhZGRpbmcgYEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OYCB0byBuZXRsaW5rLCBhbHNvIHNlZW0gc3RyYWlnaHRmb3J3YXJkLiBBbmQgdGhlIGBzY2hfZnFgIG1vZGlmaWNhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgY2hlY2sgb2YgYG9mZmxvYWRfaG9yaXpvbmAsIGxvb2sgbGlrZSB0aGV5IGFyZSB0cmlnZ2VyZWQgdmlhIGBxZGlzY19kZXYoc2NoKS0mZ3Q7cGFjaW5nX29mZmxvYWRfaG9yaXpvbmAuCgpOb3csIGhvdyBhcmUgdGhlc2UgdGhpbmdzIGN1cnJlbnRseSBmdXp6ZWQsIGlmIGF0IGFsbD8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSB0b3VjaCBgL3Byb2MvbmV0L3BrdGdlbi9gLCBidXQgaXQmIzM5O3MgKnBvc3NpYmxlKiBpZiB0aGVyZSBhcmUgZGVzY3JpcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LiBUaGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZGVmaW5pdGVseSBhIHRhcmdldC4gQW5kIHRoZSBgc2NoX2ZxYCBxZGlzYyBpcyBnZW5lcmFsbHkgZnV6emVkIHRocm91Z2ggdGhlIGB0Y2AgbmV0bGluayBpbnRlcmZhY2UuCgpMZXQmIzM5O3MgY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYC4gWWVzLCB0aHJvdWdoIHRoZSBgZXRodG9vbGAgbmV0bGluaywgYEVUSFRPT0xfTVNHX1JJTkdTX1NFVGAuIEFuZCB0aGUgYHNjaF9mcWAgY2hhbmdlcyBhcmUgYWNjZXNzZWQgdmlhIGBSVE1fTkVXUURJU0NgIHdpdGggYFRDQV9LSU5EYCA9ICYjMzQ7ZnEmIzM0Oy4KCk9rYXksIHRpbWUgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSB0aGUgcHJpbWFyeSBmdXp6aW5nIHRhcmdldHMuIEZvciBgZXRodG9vbGAsIEkmIzM5O20gdGhpbmtpbmcgYGV0aG5sX3NldF9yaW5nc2AsIGByaW5nc19maWxsX3JlcGx5YCwgYW5kIGByaW5nc19wcmVwYXJlX2RhdGFgLiBGb3IgYHNjaF9mcWAsIGRlZmluaXRlbHkgYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYW5kIGBmcV9jbGFzc2lmeWAuIEFuZCBmb3IgYHBrdGdlbmAsIHRoZSByZWxldmFudCBvbmVzIGFyZSBgcGt0Z2VuX2lmX3dyaXRlYCBhbmQgYHBrdGdlbl94bWl0YC4KCkZpbmFsbHksIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IGBDT05GSUdfTkVUX1NDSF9GUWAgaXMgZXNzZW50aWFsIGZvciBlbmFibGluZyB0aGUgYHNjaF9mcWAgY29kZS4gU2ltaWxhcmx5LCBgQ09ORklHX05FVF9QS1RHRU5gIGZvciBgcGt0Z2VuYC4gQW5kIHdlJiMzOTtsbCBuZWVkIGBDT05GSUdfSURQRmAgZm9yIHRoZSBJbnRlbCBJUFUgZHJpdmVyLCBidXQgaXQgbWlnaHQgbm90IGJlIHJlYWNoYWJsZS4gSSYjMzk7bSBsZXNzIGNvbmNlcm5lZCB3aXRoIHRoZSBkcml2ZXIgaXRzZWxmLCB1bmxlc3MgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgdmV0aC90dW4vZXRjLiBUaGUgY29yZSBjaGFuZ2VzIGluIGBzY2hfZnFgLCBgcGt0Z2VuYCwgYW5kIGBldGh0b29sYCBhcmUgdGhlIHJlYWwgdGFyZ2V0cyBoZXJlLgoKSSYjMzk7bGwgcnVuIHNvbWUgY29kZSBzZWFyY2hlcyB0byB2ZXJpZnkgZXZlcnl0aGluZywgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZxX2NoYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxLmM9MTA1OD1zdGF0aWMgaW50IGZxX2xvYWRfcHJpb21hcChzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSxcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA3OS1cbm5ldC9zY2hlZC9zY2hfZnEuYzoxMDgwOnN0YXRpYyBpbnQgZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTA4MS1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jPTEyMzI9c3RhdGljIGludCBmcV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF9mcS5jLTEyNzAtXHRpZiAob3B0KVxubmV0L3NjaGVkL3NjaF9mcS5jOjEyNzE6XHRcdGVyciA9IGZxX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMjcyLVx0ZWxzZVxuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYz0xMzg4PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnEuYy0xMzk3LVx0LmRlc3Ryb3lcdD1cdGZxX2Rlc3Ryb3ksXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTM5ODpcdC5jaGFuZ2VcdFx0PVx0ZnFfY2hhbmdlLFxubmV0L3NjaGVkL3NjaF9mcS5jLTEzOTktXHQuZHVtcFx0XHQ9XHRmcV9kdW1wLFxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmM9Mzc0PXN0YXRpYyB2b2lkIHFmcV9kZWFjdF9ybV9mcm9tX2FnZyhzdHJ1Y3QgcWZxX3NjaGVkICpxLCBzdHJ1Y3QgcWZxX2NsYXNzICpjbClcbi0tXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTM4Mi0vKiBNb3ZlIGNsYXNzIHRvIGEgbmV3IGFnZ3JlZ2F0ZSwgbWF0Y2hpbmcgdGhlIG5ldyBjbGFzcyB3ZWlnaHQgYW5kL29yIGxtYXggKi9cbm5ldC9zY2hlZC9zY2hfcWZxLmM6MzgzOnN0YXRpYyBpbnQgcWZxX2NoYW5nZV9hZ2coc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZnFfY2xhc3MgKmNsLCB1MzIgd2VpZ2h0LFxubmV0L3NjaGVkL3NjaF9xZnEuYy0zODQtXHRcdFx0ICAgdTMyIGxtYXgpXG4tLVxubmV0L3NjaGVkL3NjaF9xZnEuYy00MDUtXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjQwNjpzdGF0aWMgaW50IHFmcV9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTQwNy1cdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnLFxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmM9MTEwMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmMtMTE2Ni1cbm5ldC9zY2hlZC9zY2hfcWZxLmM6MTE2NzpcdC8qIElmIGxtYXggaXMgbG93ZXJlZCwgdGhyb3VnaCBxZnFfY2hhbmdlX2NsYXNzLCBmb3IgYSBjbGFzc1xubmV0L3NjaGVkL3NjaF9xZnEuYy0xMTY4LVx0ICogb3duaW5nIHBlbmRpbmcgcGFja2V0cyB3aXRoIGxhcmdlciBzaXplIHRoYW4gdGhlIG5ldyB2YWx1ZVxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmM9MTIyNz1zdGF0aWMgaW50IHFmcV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfcWZxLmMtMTI0Ny1cdFx0XHQgY2wtXHUwMDNlYWdnLVx1MDAzZWxtYXgsIGxlbiwgY2wtXHUwMDNlY29tbW9uLmNsYXNzaWQpO1xubmV0L3NjaGVkL3NjaF9xZnEuYzoxMjQ4Olx0XHRlcnIgPSBxZnFfY2hhbmdlX2FnZyhzY2gsIGNsLCBjbC1cdTAwM2VhZ2ctXHUwMDNlY2xhc3Nfd2VpZ2h0LCBsZW4pO1xubmV0L3NjaGVkL3NjaF9xZnEuYy0xMjQ5LVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L3NjaGVkL3NjaF9xZnEuYz0xNTEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHFmcV9jbGFzc19vcHMgPSB7XG5uZXQvc2NoZWQvc2NoX3FmcS5jOjE1MTQ6XHQuY2hhbmdlXHRcdD0gcWZxX2NoYW5nZV9jbGFzcyxcbm5ldC9zY2hlZC9zY2hfcWZxLmMtMTUxNS1cdC5kZWxldGVcdFx0PSBxZnFfZGVsZXRlX2NsYXNzLFxuLS1cbm5ldC9zY2hlZC9zY2hfc2ZxLmM9NjA0PXN0YXRpYyB2b2lkIHNmcV9wZXJ0dXJiYXRpb24oc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L3NjaGVkL3NjaF9zZnEuYy02MjEtXHQvKiBxLVx1MDAzZXBlcnR1cmJfcGVyaW9kIGNhbiBjaGFuZ2UgdW5kZXIgdXMgZnJvbVxubmV0L3NjaGVkL3NjaF9zZnEuYzo2MjI6XHQgKiBzZnFfY2hhbmdlKCkgYW5kIHNmcV9kZXN0cm95KCkuXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYyMy1cdCAqL1xuLS1cbm5ldC9zY2hlZC9zY2hfc2ZxLmMtNjI5LVxubmV0L3NjaGVkL3NjaF9zZnEuYzo2MzA6c3RhdGljIGludCBzZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYzMS1cdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfc2ZxLmM9Nzc3PXN0YXRpYyBpbnQgc2ZxX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbi0tXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTgwNi1cdGlmIChvcHQpIHtcbm5ldC9zY2hlZC9zY2hfc2ZxLmM6ODA3Olx0XHRpbnQgZXJyID0gc2ZxX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfc2ZxLmMtODA4LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzU4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkNoZWNraW5nIFJlYWNoYWJpbGl0eSBpbiBgc2NoX2ZxLmNgKioKCkFscmlnaHQsIHNvIHRoZSBtb2RpZmljYXRpb25zIGluIGBzY2hfZnEuY2AgYXJlIHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFsd2F5czogYXJlIHRoZXNlIGNoYW5nZXMgZXZlbiAqcmVsZXZhbnQqIHRvIG15IGN1cnJlbnQgY29uZmlndXJhdGlvbj8gQXJlIHRoZXkgYWN0aXZlPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhleSYjMzk7cmUgcmVhY2hhYmxlIGNvZGUuCgpUaGVyZWZvcmUsIEkmIzM5O20gaW1tZWRpYXRlbHkgZ29pbmcgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJJiMzOTtsbCBjaGVjayBgQ09ORklHX05FVF9TQ0hfRlFgIGFuZCBgQ09ORklHX05FVF9QS1RHRU5gLiBUaG9zZSB3aWxsIGJlIHRoZSBrZXkuIElmIGVpdGhlciwgb3IgYm90aCwgb2YgdGhvc2UgYXJlIGRpc2FibGVkLCBJIGNhbiBwcm9iYWJseSBpZ25vcmUgdGhlc2UgY2hhbmdlcyBmb3Igbm93LCBhdCBsZWFzdCBpbiB0aGUgY29udGV4dCBvZiBteSBjdXJyZW50IGJ1aWxkLiBJZiB0aGV5IGFyZSBlbmFibGVkLCB0aGVuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gY29uY2VybmVkIHdpdGguIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAgaW4gZXZhbHVhdGluZyBhbnkgY29kZSBtb2RpZmljYXRpb247IGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIX0ZRJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTI2Nj1jb25maWcgTkVUX1NDSF9DT0RFTFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWc9Mjg4PWNvbmZpZyBORVRfU0NIX0NBS0Vcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXG5uZXQvc2NoZWQvS2NvbmZpZzoyOTk6Y29uZmlnIE5FVF9TQ0hfRlFcbm5ldC9zY2hlZC9LY29uZmlnLTMwMC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWVcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz0zMjI9Y29uZmlnIE5FVF9TQ0hfUElFXG4tLVxubmV0L3NjaGVkL0tjb25maWctMzMzLVxubmV0L3NjaGVkL0tjb25maWc6MzM0OmNvbmZpZyBORVRfU0NIX0ZRX1BJRVxubmV0L3NjaGVkL0tjb25maWctMzM1LVx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODgwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBhY2tldCBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRoaXM6IGdpdmVuIHRoZSBjb250ZXh0IOKAkyBJIGFzc3VtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3IgZGVidWdnaW5nIOKAkyBJJiMzOTttIGdvaW5nIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gcGFja2V0IGdlbmVyYXRpb24sIHNwZWNpZmljYWxseSBgQ09ORklHX05FVF9QS1RHRU5gLiBJIHN1c3BlY3QgdGhhdCB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaXMgY3VycmVudGx5IHNldCwgZW5hYmxlZCwgb3IgZGlzYWJsZWQsIGlzIGNydWNpYWwgZm9yIHdoYXRldmVyIGludmVzdGlnYXRpb24gSSYjMzk7bSB1bmRlcnRha2luZy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgYSBsb3Qgb2YgbmV0d29yayB0ZXN0aW5nIGFuZCB0cmFmZmljIHNoYXBpbmcgc2NlbmFyaW9zLCBzbyBpdCYjMzk7cyBhIHZlcnkgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLiBXZeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdGF0ZSBvZiB0aGlzIHBhcmFtZXRlciBvbiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIEtub3dpbmcgd2hhdCBgQ09ORklHX05FVF9QS1RHRU5gIGFsbG93cyBhbmQgZGlzYWJsZXMgaXMgYSBrZXkgYXNwZWN0IG9mIGFueSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfUEtUR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM4ND1tZW51IFwmIzM0O05ldHdvcmsgdGVzdGluZ1wmIzM0O1xubmV0L0tjb25maWctMzg1LVxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTc2CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFByaW9yaXRpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBgc2NoX2ZxYCwgYHBrdGdlbmAsIGFuZCB0aGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBpcywgYW5kIHRoYXQmIzM5O3Mgd2hhdCB3ZSB3YW50IHRvIHRhcmdldCBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLgoKSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYGZxX2NsYXNzaWZ5YCwgYHBrdGdlbl9pZl93cml0ZWAsIGBwa3RnZW5feG1pdGAsIGBldGhubF9zZXRfcmluZ3NgLCBhbmQgYHJpbmdzX2ZpbGxfcmVwbHlgIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uIGFuZCBrZWVwaW5nIGluIG1pbmQgdGhlIG5lZWQgdG8gYXZvaWQgc2tld2luZyB0ZXN0IGRpc3RyaWJ1dGlvbnMgYnkgZm9jdXNpbmcgb24gZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIEkmIzM5O20gZ29pbmcgdG8gcmVmaW5lIHRoYXQgbGlzdC4gSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gZnVuY3Rpb25zIGNhbGxlZCBmb3IgZXZlcnkgc2luZ2xlIHBhY2tldCwgc28gSSYjMzk7bGwgZXhjbHVkZSBgZnFfZGVxdWV1ZWAgYW5kIGBmcV9jbGFzc2lmeWAuIEkmIzM5O2xsIGFsc28gYmUgYSBiaXQgbW9yZSBzZWxlY3RpdmUgYWJvdXQgYHBrdGdlbl94bWl0YC4KCk15IHJldmlzZWQgbGlzdCB0byBwcmlvcml0aXplIHdpbGwgYmU6CgoqICAgYGZxX2NoYW5nZWAKKiAgIGBldGhubF9zZXRfcmluZ3NgCiogICBgcGt0Z2VuX2lmX3dyaXRlYAoqICAgYHBrdGdlbl94bWl0YAoqICAgYHJpbmdzX2ZpbGxfcmVwbHlgCiogICBgcmluZ3NfcHJlcGFyZV9kYXRhYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gaW5jbHVkaW5nIGBwa3RnZW5feG1pdGAgYW5kIGBwa3RnZW5faWZfd3JpdGVgIG5vdywgYWx0aG91Z2ggYHBrdGdlbl94bWl0YCBpcyB0aGUgbWFpbiBsb29wIG9mIHBrdGdlbiwgaXQmIzM5O3Mgc3RpbGwgZ29vZCB0byBmdXp6LgoKV2UmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgYE5FVF9TQ0hfRlFgIGFuZCBgTkVUX1BLVEdFTmAuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnbGFuY2luZyBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQsIGxpa2UgYENPTkZJR19JRFBGYCwgYWx0aG91Z2ggZ2l2ZW4gdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcyBvZiB0aGF0IGRyaXZlciwgaXQmIzM5O3MgcHJvYmFibHkgbm90IGEgaGlnaCBwcmlvcml0eSBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElEUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc6NDpjb25maWcgSURQRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZz0xNz1pZiBJRFBGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc6MTk6Y29uZmlnIElEUEZfU0lOR0xFUVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTIwLVx0Ym9vbCBcJiMzNDtpZHBmIHNpbmdsZXEgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI5OQoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA1ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBnb2luZyB0byBleGNsdWRlIGBJRFBGYCwgc2luY2UgaXQmIzM5O3MgYSBoYXJkd2FyZSBkcml2ZXIsIGFuZCB3ZSBnZW5lcmFsbHkgZG9uJiMzOTt0IGZ1enogdGhvc2UgdW5sZXNzIHdlJiMzOTt2ZSBnb3QgZW11bGF0ZWQgaGFyZHdhcmUuIEhvd2V2ZXIsIGBORVRfU0NIX0ZRYCBhbmQgYE5FVF9QS1RHRU5gIGFyZSBkZWZpbml0ZWx5IHNvZnR3YXJlIGZlYXR1cmVzIHJpcGUgZm9yIGZ1enppbmcuCgpMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGhlcmUmIzM5O3MgdGhlIGxhbmRzY2FwZTogYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxgLCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0YCwgdGhlIGBpZHBmYCBkcml2ZXIgZmlsZXMsIGEgZmV3IGBpbmNsdWRlYCBmaWxlcyBsaWtlIGBldGh0b29sLmhgIGFuZCBgbmV0ZGV2aWNlLmhgLCB0aGUgYHVhcGlgIGBldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhgLCBhbmQgdGhlbiB0aGUgbWVhdCBvZiBpdDogYG5ldC9jb3JlL3BrdGdlbi5jYCwgYG5ldC9jb3JlL3J0bmV0bGluay5jYCwgdGhlIGBldGh0b29sYCBkaXJlY3RvcnkgKGBjb21tb24uY2AsIGBuZXRsaW5rLmhgLCBgcmluZ3MuY2ApLCBgbmV0L3NjaGVkL3NjaF9mcS5jYCwgYW5kIHNvbWUgc2VsZnRlc3RzLgoKVGhlIG1vc3QgY3JpdGljYWwgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBuZXQvY29yZS9wa3RnZW4uY2AsIGBuZXQvZXRodG9vbC9yaW5ncy5jYCwgYG5ldC9zY2hlZC9zY2hfZnEuY2AsIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFuZCB0aG9zZSBhcmUgdGhlIGFyZWFzIEkmIzM5O20gbW9zdCBpbnRlcmVzdGVkIGluIHRhcmdldGluZy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgZXRobmxfc2V0X3JpbmdzYCwgYHJpbmdzX2ZpbGxfcmVwbHlgLCBgZnFfY2hhbmdlYCwgYW5kIGBwa3RnZW5faWZfd3JpdGVgLiBJJiMzOTttIGV4Y2x1ZGluZyBgZnFfZGVxdWV1ZWAgYW5kIGBmcV9jbGFzc2lmeWAgYmVjYXVzZSB0aG9zZSBhcmUgaG90LXBhdGggZnVuY3Rpb25zLCBzbyBmdXp6aW5nIHRoZW0gaXMgcHJvYmFibHkgbm90IHRoZSBiZXN0IHVzZSBvZiByZXNvdXJjZXMuCgpUaGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgd2lsbCBiZSBgTkVUX1NDSF9GUWAgYW5kIGBORVRfUEtUR0VOYC4KCk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyLCBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAsIGFuZCBtb2RpZmllcyBgc2NoX2ZxYCB0byB1c2UgaXQsIGFsb25nIHdpdGggdGhlIGBTT19UWFRJTUVgIHN1cHBvcnQgYWRkZWQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggbWVhbnMgdGhleSBhcmUgYWxsIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4KCkxldCYjMzk7cyB0cmlnZ2VyIGEgYHNldC1yZXN1bHRzYCB0byBnZXQgdGhpcyBmdXp6ZXIgZ29pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIX0ZRJiMzNDssCiAgICAmIzM0O05FVF9QS1RHRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldGhubF9zZXRfcmluZ3MmIzM0OywKICAgICYjMzQ7cmluZ3NfZmlsbF9yZXBseSYjMzQ7LAogICAgJiMzNDtmcV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cGt0Z2VuX2lmX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCByaW5nIHBhcmFtZXRlciBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIG1vZGlmaWVzIGBzY2hfZnFgIHRvIHVzZSBpdC4gSXQgYWxzbyBhZGRzIGBTT19UWFRJTUVgIHN1cHBvcnQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbmV0d29ya2luZyBsb2dpYywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgcGFja2V0IGdlbmVyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfRlEmIzM0OywKICAgICYjMzQ7TkVUX1BLVEdFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3NldF9yaW5ncyYjMzQ7LAogICAgJiMzNDtyaW5nc19maWxsX3JlcGx5JiMzNDssCiAgICAmIzM0O2ZxX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtwa3RnZW5faWZfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhbmQgbW9kaWZpZXMgYHNjaF9mcWAgdG8gdXNlIGl0LiBJdCBhbHNvIGFkZHMgYFNPX1RYVElNRWAgc3VwcG9ydCB0byBgcGt0Z2VuYC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjUzOjA0LjMzNTE4NzMyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjgxMjQ4MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfRlFcIixcbiAgICBcIk5FVF9QS1RHRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9zZXRfcmluZ3NcIixcbiAgICBcInJpbmdzX2ZpbGxfcmVwbHlcIixcbiAgICBcImZxX2NoYW5nZVwiLFxuICAgIFwicGt0Z2VuX2lmX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhbmQgbW9kaWZpZXMgYHNjaF9mcWAgdG8gdXNlIGl0LiBJdCBhbHNvIGFkZHMgYFNPX1RYVElNRWAgc3VwcG9ydCB0byBgcGt0Z2VuYC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MDQuMzM1MTk2NzE5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMxOTI2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNTFmZDgyZGMzYjNlNDhjZTdlNTljZTg5NzA3MTczZmUwYTQxZDI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDIxOjUzOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuaW5kZXggNWRkNGQxYjVkOTRiYmIuLjQ4ZjQzZGRhMmU2ZTVlIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuQEAgLTQ0OCw2ICs0NDgsMTIgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBoZHMtdGhyZXNoLW1heFxcbiAgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcXG4rICAgICAgICB0eXBlOiB1MzJcXG4gXFxuICAgLVxcbiAgICAgbmFtZTogbW0tc3RhdFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcXG5pbmRleCA1MTJmNmQ2ZmEzZDhmOC4uM2I5Y2UxYzZlMTA1NzggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XFxuQEAgLTE4Myw3ICsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcXG4gc3RydWN0IGRwbGxfcGluKiAgICAgICAgICAgICAgICAgICAgZHBsbF9waW5cXG4gc3RydWN0IGhsaXN0X2hlYWQgICAgICAgICAgICAgICAgICAgcGFnZV9wb29sc1xcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcXG4tdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b25cXG4rdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFjaW5nX29mZmxvYWRfaG9yaXpvblxcbit1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxcbiBzdHJ1Y3RfbmFwaV9jb25maWcqICAgICAgICAgICAgICAgICBuYXBpX2NvbmZpZ1xcbiB1bnNpZ25lZF9sb25nICAgICAgICAgICAgICAgICAgICAgICBncm9fZmx1c2hfdGltZW91dFxcbiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2RlZmVyX2hhcmRfaXJxc1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xcbmluZGV4IGJiOTlkOWU3YzY1ZDUxLi41ZGRmMzQ3OTI3ZGMzZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2V0aHRvb2wuY1xcbkBAIC0xODAxLDcgKzE4MDEsOCBAQCBzdGF0aWMgdm9pZCBpZHBmX2dldF90c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsXFxuLVxcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQsXFxuK1xcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcXHQ9IEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQgfFxcbitcXHRcXHRcXHRcXHQgIEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcXG4gXFx0LmdldF9tc2dsZXZlbFxcdFxcdD0gaWRwZl9nZXRfbXNnbGV2ZWwsXFxuIFxcdC5zZXRfbXNnbGV2ZWxcXHRcXHQ9IGlkcGZfc2V0X21zZ2xldmVsLFxcbiBcXHQuZ2V0X2xpbmtcXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xcbmluZGV4IGNmOTY2ZmU2Yzc1OWNlLi5kZTQxNzBjMmFhM2JhMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcXG5AQCAtODg4LDYgKzg4OCwxMSBAQCBzdGF0aWMgaW50IGlkcGZfY2ZnX25ldGRldihzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIFxcdG5ldGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSB2cG9ydC1cXHUwMDNlbWF4X210dTtcXG4gXFxuK1xcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVxcdTAwM2VkZmx0X3F2X3JzcmMudHhxX21vZGVsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlkcGZfaXNfY2FwX2VuYShhZGFwdGVyLCBJRFBGX09USEVSX0NBUFMsXFxuK1xcdFxcdFxcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxcbitcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gMTI4MDAwO1xcbitcXG4gXFx0ZGZsdF9mZWF0dXJlcyA9IE5FVElGX0ZfU0dcXHR8XFxuIFxcdFxcdFxcdE5FVElGX0ZfSElHSERNQTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjFjY2ZhZWIzNTE5MzVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXFxuQEAgLTEsNiArMSw4IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gLyogQ29weXJpZ2h0IChDKSAyMDIzIEludGVsIENvcnBvcmF0aW9uICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0cG9sbC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcImlkcGYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlkcGZfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpZHBmX3ZpcnRjaG5sLmhcXFwiXFxuQEAgLTI0MDgsOSArMjQxMCwxMyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcyxcXG4gXFx0XFx0XFx0XFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxcbiB7XFxuLVxcdCoodTMyICopXFx1MDAyNmRlc2MtXFx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLVxcdTAwM2VkdHlwZSB8IHRkX2NtZCk7XFxuK1xcdCooX19sZTMyICopXFx1MDAyNmRlc2MtXFx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9IGNwdV90b19sZTMyKCh1OCkocGFyYW1zLVxcdTAwM2VkdHlwZSB8IHRkX2NtZCkpO1xcbiBcXHRkZXNjLVxcdTAwM2VmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7XFxuIFxcdGRlc2MtXFx1MDAzZWZsb3cucXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KHBhcmFtcy1cXHUwMDNlY29tcGxfdGFnKTtcXG4rXFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzBdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF07XFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzFdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XFxuK1xcdGRlc2MtXFx1MDAzZWZsb3cucXcxLnRzWzJdID0gcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl07XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0zMDExLDYgKzMwMTcsNTkgQEAgc3RhdGljIGJvb2wgaWRwZl90eF9zcGxpdHFfbmVlZF9yZShzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSlcXG4gXFx0cmV0dXJuIGdhcCBcXHUwMDNlPSBJRFBGX1RYX1NQTElUUV9SRV9NSU5fR0FQO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBpZHBmX3R4X3NwbGl0cV9zZXRfdHh0aW1lKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp0eF9xLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXFxuK3tcXG4rXFx0Y29uc3QgaW50IHRzX2dyYW5fcG93MiA9IDk7XFxuK1xcdHU2NCB0cywgbm93O1xcbitcXG4rXFx0LyogU2tpcCBpZiBuZXRwb2xsOiBub3QgbmVlZGVkIGFuZCBub3Qgc2FmZSB0byBjYWxsIGt0aW1lIGhlbHBlcnMgKi9cXG4rXFx0aWYgKG5ldHBvbGxfdHhfcnVubmluZyhza2ItXFx1MDAzZWRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN3aXRjaCAoc2tiLVxcdTAwM2V0c3RhbXBfdHlwZSkge1xcbitcXHRjYXNlIFNLQl9DTE9DS19SRUFMVElNRTpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9hZGQoc2tiLVxcdTAwM2V0c3RhbXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0tCX0NMT0NLX01PTk9UT05JQzpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhrdGltZV9tb25vX3RvX2FueShza2ItXFx1MDAzZXRzdGFtcCwgVEtfT0ZGU19UQUkpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0tCX0NMT0NLX1RBSTpcXG4rXFx0XFx0dHMgPSBrdGltZV90b19ucyhza2ItXFx1MDAzZXRzdGFtcCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0bm93ID0ga3RpbWVfZ2V0X2Nsb2NrdGFpX25zKCk7XFxuK1xcdGlmICh0cyBcXHUwMDNjIG5vdylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogYmV5b25kIG9mZmxvYWQgaG9yaXpvbj8gc2V0IG92ZXJmbG93IGJpdCBvbmx5ICovXFxuK1xcdGlmICh0cyBcXHUwMDNlIG5vdyArICgodTY0KXNrYi1cXHUwMDNlZGV2LVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICogTlNFQ19QRVJfVVNFQykpIHtcXG4rXFx0XFx0dHhfcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAxIFxcdTAwM2NcXHUwMDNjIDc7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0dHMgXFx1MDAzZVxcdTAwM2U9IHRzX2dyYW5fcG93MjtcXG4rXFxuK1xcdC8qIDAgaXMgdmFsaWQgMjRiIHRpbWVzdGFtcCwgYnV0IGFsc28gbWVhbnMgZmllbGQgdW5zZXQuXFxuK1xcdCAqIEFkZCA1MTIgbnMgKHRzX2dyYW5fcG93MikgdG8gYXZvaWQgdGhpcyBjYXNlXFxuK1xcdCAqL1xcbitcXHRpZiAoKHRzIFxcdTAwMjYgMHg3ZmZmZmYpID09IDApIHtcXG4rXFx0XFx0dHhfcGFyYW1zLVxcdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF0gPSAxO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHR4X3BhcmFtcy1cXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgXFx1MDAyNiAweGZmO1xcbitcXHR0eF9wYXJhbXMtXFx1MDAzZW9mZmxvYWQuZGVzY190c1sxXSA9ICh0cyBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDB4ZmY7XFxuK1xcdHR4X3BhcmFtcy1cXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzJdID0gKCh0cyBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDdmKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGlkcGZfdHhfc3BsaXRxX2ZyYW1lIC0gU2VuZHMgYnVmZmVyIG9uIFR4IHJpbmcgdXNpbmcgZmxleCBkZXNjcmlwdG9yc1xcbiAgKiBAc2tiOiBzZW5kIGJ1ZmZlclxcbkBAIC0zMDk3LDYgKzMxNTYsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGlkcGZfdHhfc3BsaXRxX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRcXHR0eF9wYXJhbXMuZHR5cGUgPSBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9GTE9XX1NDSEU7XFxuIFxcdFxcdHR4X3BhcmFtcy5lb3BfY21kID0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9FT1A7XFxuK1xcbitcXHRcXHRpZiAoc2tiLVxcdTAwM2V0c3RhbXAgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pXFxuK1xcdFxcdFxcdGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUodHhfcSwgc2tiLCBcXHUwMDI2dHhfcGFyYW1zKTtcXG4rXFxuIFxcdFxcdC8qIFNldCB0aGUgUkUgYml0IHRvIHBlcmlvZGljYWxseSBcXFwiY2xlYW5cXFwiIHRoZSBkZXNjcmlwdG9yIHJpbmcuXFxuIFxcdFxcdCAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0XFxuIFxcdFxcdCAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5pbmRleCA0YmU1YjNiNmQzZWQyYi4uODY1NDA4YjU3YjBkNTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmhcXG5AQCAtMTYxLDYgKzE2MSw3IEBAIHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjIHtcXG4gICogQHRzb19zZWdzOiBOdW1iZXIgb2Ygc2VnbWVudHMgdG8gYmUgc2VudFxcbiAgKiBAdHNvX2hkcl9sZW46IExlbmd0aCBvZiBoZWFkZXJzIHRvIGJlIGR1cGxpY2F0ZWRcXG4gICogQHRkX2NtZDogQ29tbWFuZCBmaWVsZCB0byBiZSBpbnNlcnRlZCBpbnRvIGRlc2NyaXB0b3JcXG4rICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcFxcbiAgKi9cXG4gc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xcbiBcXHR1MzIgdHhfZmxhZ3M7XFxuQEAgLTE3NCw2ICsxNzUsNyBAQCBzdHJ1Y3QgaWRwZl90eF9vZmZsb2FkX3BhcmFtcyB7XFxuIFxcdHUxNiB0c29faGRyX2xlbjtcXG4gXFxuIFxcdHUxNiB0ZF9jbWQ7XFxuK1xcdHU4IGRlc2NfdHNbM107XFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbmluZGV4IDVkNDkxYTk4MjY1ZWY5Li5hZGVlYmJmNTNkYWRlYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXFxuQEAgLTg1LDYgKzg1LDggQEAgZW51bSB7XFxuICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlclxcbiAgKiBAaGRzX3RocmVzaDogUGFja2V0IHNpemUgdGhyZXNob2xkIGZvciBoZWFkZXIgZGF0YSBzcGxpdCAoSERTKVxcbiAgKiBAaGRzX3RocmVzaF9tYXg6IE1heGltdW0gc3VwcG9ydGVkIHNldHRpbmcgZm9yIEBoZHNfdGhyZXNob2xkXFxuKyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcXG4rICogQG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiB2YWx1ZSBpbiB1c2VjXFxuICAqXFxuICAqL1xcbiBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG5AQCAtOTcsNiArOTksOCBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG4gXFx0dTMyXFx0dHhfcHVzaF9idWZfbWF4X2xlbjtcXG4gXFx0dTMyXFx0aGRzX3RocmVzaDtcXG4gXFx0dTMyXFx0aGRzX3RocmVzaF9tYXg7XFxuK1xcdHUzMlxcdHBhY2luZ19vZmZsb2FkX2hvcml6b247XFxuK1xcdHUzMlxcdG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTEwOCw2ICsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcXG4gICogQEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOOiBjYXB0dXJlIGZvciBzZXR0aW5nIHR4X3B1c2hfYnVmX2xlblxcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVDogY2FwdHVyZSBmb3Igc2V0dGluZyB0Y3BfZGF0YV9zcGxpdFxcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2hcXG4rICogQEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTjogY2FwdHVyZSBmb3Igc2V0dGluZyBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uXFxuICAqL1xcbiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xcbiBcXHRFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU5cXHRcXHQ9IEJJVCgwKSxcXG5AQCAtMTE3LDYgKzEyMiw3IEBAIGVudW0gZXRodG9vbF9zdXBwb3J0ZWRfcmluZ19wYXJhbSB7XFxuIFxcdEVUSFRPT0xfUklOR19VU0VfVFhfUFVTSF9CVUZfTEVOXFx0PSBCSVQoNCksXFxuIFxcdEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVRcXHRcXHQ9IEJJVCg1KSxcXG4gXFx0RVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSU1xcdFxcdD0gQklUKDYpLFxcbitcXHRFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05cXHQ9IEJJVCg3KSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgX19FVEhfUlNTX0hBU0hfQklUKGJpdClcXHQoKHUzMikxIFxcdTAwM2NcXHUwMDNjIChiaXQpKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xcbiAgKlxcdEBkcGxsX3BpbjogUG9pbnRlciB0byB0aGUgU3luY0Ugc291cmNlIHBpbiBvZiBhIERQTEwgc3Vic3lzdGVtLFxcbiAgKlxcdFxcdCAgIHdoZXJlIHRoZSBjbG9jayBpcyByZWNvdmVyZWQuXFxuICAqXFxuLSAqXFx0QG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBtYXggRURUIG9mZmxvYWQgaG9yaXpvbiBpbiBuc2VjLlxcbisgKlxcdEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBhY3RpdmUgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpbiB1c2VjLlxcbisgKlxcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cXG4gICpcXHRAbmFwaV9jb25maWc6IEFuIGFycmF5IG9mIG5hcGlfY29uZmlnIHN0cnVjdHVyZXMgY29udGFpbmluZyBwZXItTkFQSVxcbiAgKlxcdFxcdCAgICAgIHNldHRpbmdzLlxcbiAgKlxcdEBudW1fbmFwaV9jb25maWdzOlxcdG51bWJlciBvZiBhbGxvY2F0ZWQgTkFQSSBjb25maWcgc3RydWN0cyxcXG5AQCAtMjU1Miw3ICsyNTUzLDggQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiBcXHQvKiogQGlycV9tb2RlcjogZGltIHBhcmFtZXRlcnMgdXNlZCBpZiBJU19FTkFCTEVEKENPTkZJR19ESU1MSUIpLiAqL1xcbiBcXHRzdHJ1Y3QgZGltX2lycV9tb2RlclxcdCppcnFfbW9kZXI7XFxuIFxcbi1cXHR1NjRcXHRcXHRcXHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0dTMyXFx0XFx0XFx0cGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0dTMyXFx0XFx0XFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XFxuIFxcdHN0cnVjdCBuYXBpX2NvbmZpZ1xcdCpuYXBpX2NvbmZpZztcXG4gXFx0dTMyXFx0XFx0XFx0bnVtX25hcGlfY29uZmlncztcXG4gXFx0dTMyXFx0XFx0XFx0bmFwaV9kZWZlcl9oYXJkX2lycXM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuQEAgLTE5Myw2ICsxOTMsOCBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9BX1JJTkdTX1RYX1BVU0hfQlVGX0xFTl9NQVgsXFxuIFxcdEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxcbiBcXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXFxuK1xcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxcbitcXHRFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVgsXFxuIFxcbiBcXHRfX0VUSFRPT0xfQV9SSU5HU19DTlQsXFxuIFxcdEVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSlcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uY1xcbmluZGV4IDViNGRkMDRkNjEyNDc2Li43ODk3ZTQyMjA1MTMwMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xcbisrKyBiL25ldC9jb3JlL3BrdGdlbi5jXFxuQEAgLTIwMSw2ICsyMDEsNyBAQFxcbiBcXHRwZihTVklEX1JORClcXHRcXHQvKiBSYW5kb20gU1ZMQU4gSUQgKi9cXHRcXHRcXHRcXFxcXFxuIFxcdHBmKE5PREUpXFx0XFx0LyogTm9kZSBtZW1vcnkgYWxsb2MqL1xcdFxcdFxcdFxcXFxcXG4gXFx0cGYoU0hBUkVEKVxcdFxcdC8qIFNoYXJlZCBTS0IgKi9cXHRcXHRcXHRcXFxcXFxuK1xcdHBmKFRYVElNRSlcXHRcXHQvKiBTT19UWFRJTUUgc3VwcG9ydCAqL1xcdFxcdFxcdFxcXFxcXG4gXFxuICNkZWZpbmUgcGYoZmxhZylcXHRcXHRmbGFnIyNfU0hJRlQsXFxuIGVudW0gcGt0X2ZsYWdzIHtcXG5AQCAtMjkxLDYgKzI5MiwxMCBAQCBzdHJ1Y3QgcGt0Z2VuX2RldiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1NjQgZGVsYXk7XFx0XFx0LyogbmFuby1zZWNvbmRzICovXFxuIFxcbitcXHQvKiBUWFRJTUUgc3VwcG9ydCAqL1xcbitcXHR1NjQgdHh0aW1lX2RlbGF5O1xcdC8qIHRyYW5zbWl0IHRpbWUgZGVsYXkgaW4gbnMgKi9cXG4rXFx0Y2xvY2tpZF90IHR4dGltZV9jbG9ja2lkOyAvKiBjbG9ja2lkIGZvciBTT19UWFRJTUUgKi9cXG4rXFxuIFxcdF9fdTY0IGNvdW50O1xcdFxcdC8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovXFxuIFxcdF9fdTY0IHNvZmFyO1xcdFxcdC8qIEhvdyBtYW55IHBrdHMgd2UndmUgc2VudCBzbyBmYXIgKi9cXG4gXFx0X191NjQgdHhfYnl0ZXM7XFx0XFx0LyogSG93IG1hbnkgYnl0ZXMgd2UndmUgdHJhbnNtaXR0ZWQgKi9cXG5AQCAtNjY2LDYgKzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbiBcXHRpZiAocGt0X2Rldi1cXHUwMDNlbm9kZSBcXHUwMDNlPSAwKVxcbiBcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiAgICAgbm9kZTogJWRcXFxcblxcXCIsIHBrdF9kZXYtXFx1MDAzZW5vZGUpO1xcbiBcXG4rXFx0aWYgKHBrdF9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRl9UWFRJTUUpIHtcXG4rXFx0XFx0Y2xvY2tpZF90IGNsb2NraWQgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xcbitcXG4rXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIgICAgIHR4dGltZV9kZWxheTogJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXkpO1xcbitcXHRcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIiAgICAgdHh0aW1lX2Nsb2NraWQ6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBjbG9ja2lkID09IENMT0NLX01PTk9UT05JQyA/IFxcXCJtb25vdG9uaWNcXFwiIDpcXG4rXFx0XFx0XFx0ICAgY2xvY2tpZCA9PSBDTE9DS19SRUFMVElNRSA/IFxcXCJyZWFsdGltZVxcXCIgOlxcbitcXHRcXHRcXHQgICBjbG9ja2lkID09IENMT0NLX1RBSSA/IFxcXCJ0YWlcXFwiIDogXFxcInVua25vd25cXFwiKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHBrdF9kZXYtXFx1MDAzZXhtaXRfbW9kZSA9PSBNX05FVElGX1JFQ0VJVkUpXFxuIFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIiAgICAgeG1pdF9tb2RlOiBuZXRpZl9yZWNlaXZlXFxcXG5cXFwiKTtcXG4gXFx0ZWxzZSBpZiAocGt0X2Rldi1cXHUwMDNleG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVClcXG5AQCAtMTE0MSw2ICsxMTU3LDUwIEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi1cXHUwMDNlZGVsYXkpO1xcbiBcXHRcXHRyZXR1cm4gY291bnQ7XFxuIFxcdH1cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInR4dGltZV9kZWxheVxcXCIpKSB7XFxuK1xcdFxcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcXG4rXFx0XFx0bGVuID0gbnVtX2FyZyhcXHUwMDI2dXNlcl9idWZmZXJbaV0sIG1heCwgXFx1MDAyNnZhbHVlKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBsZW47XFxuK1xcbitcXHRcXHQvKiBpbiBxdWV1ZV94bWl0IG1vZGUgZnEgbWF5IGNsZWFyIHRzdGFtcCwgZG8gbm90IHJldXNlIHNrYiAqL1xcbitcXHRcXHRpZiAodmFsdWUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHBrdF9kZXYtXFx1MDAzZWNsb25lX3NrYiBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpO1xcbitcXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIk9LOiB0eHRpbWVfZGVsYXk9JWxsdVxcXCIsXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpdmFsdWUpO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdH1cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInR4dGltZV9jbG9ja2lkXFxcIikpIHtcXG4rXFx0XFx0Y2hhciBjbG9ja3N0clszMl07XFxuK1xcdFxcdGNsb2NraWRfdCBjbGs7XFxuK1xcbitcXHRcXHRtZW1zZXQoY2xvY2tzdHIsIDAsIHNpemVvZihjbG9ja3N0cikpO1xcbitcXHRcXHRtYXggPSBtaW4oc2l6ZW9mKGNsb2Nrc3RyKSAtIDEsIGNvdW50IC0gaSk7XFxuK1xcdFxcdGxlbiA9IHN0cm5fbGVuKFxcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4KTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBsZW47XFxuK1xcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoY2xvY2tzdHIsIFxcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbGVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRcXHRpZiAoIXN0cmNtcChjbG9ja3N0ciwgXFxcIm1vbm90b25pY1xcXCIpKSB7XFxuK1xcdFxcdFxcdGNsayA9IENMT0NLX01PTk9UT05JQztcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcXFwicmVhbHRpbWVcXFwiKSkge1xcbitcXHRcXHRcXHRjbGsgPSBDTE9DS19SRUFMVElNRTtcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGNsb2Nrc3RyLCBcXFwidGFpXFxcIikpIHtcXG4rXFx0XFx0XFx0Y2xrID0gQ0xPQ0tfVEFJO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzcHJpbnRmKHBnX3Jlc3VsdCwgXFxcIkVSUk9SOiB1bmtub3duIGNsb2NraWQgJyVzJ1xcXCIsXFxuK1xcdFxcdFxcdFxcdGNsb2Nrc3RyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHNwcmludGYocGdfcmVzdWx0LCBcXFwiT0s6IHR4dGltZV9jbG9ja2lkPSVzXFxcIiwgY2xvY2tzdHIpO1xcbitcXHRcXHRXUklURV9PTkNFKHBrdF9kZXYtXFx1MDAzZXR4dGltZV9jbG9ja2lkLCBjbGspO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuK1xcdH1cXG4gXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcInJhdGVcXFwiKSkge1xcbiBcXHRcXHRtYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7XFxuIFxcdFxcdGxlbiA9IG51bV9hcmcoXFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBtYXgsIFxcdTAwMjZ2YWx1ZSk7XFxuQEAgLTEyMzgsNiArMTI5OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0aWYgKHZhbHVlIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAocGt0X2Rldi1cXHUwMDNlbl9pbWl4X2VudHJpZXMgXFx1MDAzZSAwIHx8XFxuIFxcdFxcdFxcdFxcdCAgIShwa3RfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEZfU0hBUkVEKSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRpZiAodmFsdWUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2V0eHRpbWVfZGVsYXkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdHBrdF9kZXYtXFx1MDAzZWNsb25lX3NrYiA9IHZhbHVlO1xcbiBcXG5AQCAtMjMyMSw2ICsyMzgzLDIxIEBAIHN0YXRpYyB2b2lkIHBrdGdlbl9zZXR1cF9pbmplY3Qoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIH1cXG4gXFxuIFxcbitzdGF0aWMga3RpbWVfdCBrdGltZV9nZXRfY2xvY2soY2xvY2tpZF90IGNsb2NraWQpXFxuK3tcXG4rXFx0c3dpdGNoIChjbG9ja2lkKSB7XFxuK1xcdGNhc2UgQ0xPQ0tfUkVBTFRJTUU6XFxuK1xcdFxcdHJldHVybiBrdGltZV9nZXRfcmVhbCgpO1xcbitcXHRjYXNlIENMT0NLX01PTk9UT05JQzpcXG4rXFx0XFx0cmV0dXJuIGt0aW1lX2dldCgpO1xcbitcXHRjYXNlIENMT0NLX1RBSTpcXG4rXFx0XFx0cmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdFxcdHJldHVybiBrdGltZV9nZXQoKTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpXFxuIHtcXG4gXFx0a3RpbWVfdCBzdGFydF90aW1lLCBlbmRfdGltZTtcXG5AQCAtMzUxMCw3ICszNTg3LDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3dhaXRfZm9yX3NrYihzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFxuIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxcbiB7XFxuLVxcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNiBGX1NIQVJFRCk7XFxuK1xcdHUzMiBmbGFncyA9IFJFQURfT05DRShwa3RfZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGJvb2wgc2tiX3NoYXJlZCA9ICEhKGZsYWdzIFxcdTAwMjYgRl9TSEFSRUQpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtXFx1MDAzZW9kZXY7XFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gXFx0dW5zaWduZWQgaW50IGJ1cnN0ID0gMTtcXG5AQCAtMzU0NSw2ICszNjIzLDggQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXFxuIFxcdC8qIElmIG5vIHNrYiBvciBjbG9uZSBjb3VudCBleGhhdXN0ZWQgdGhlbiBnZXQgbmV3IG9uZSAqL1xcbiBcXHRpZiAoIXBrdF9kZXYtXFx1MDAzZXNrYiB8fCAocGt0X2Rldi1cXHUwMDNlbGFzdF9vayBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICArK3BrdF9kZXYtXFx1MDAzZWNsb25lX2NvdW50IFxcdTAwM2U9IGNsb25lX3NrYikpIHtcXG4rXFx0XFx0dTY0IHR4dGltZV9kZWxheTtcXG4rXFxuIFxcdFxcdC8qIGJ1aWxkIGEgbmV3IHBrdCAqL1xcbiBcXHRcXHRrZnJlZV9za2IocGt0X2Rldi1cXHUwMDNlc2tiKTtcXG4gXFxuQEAgLTM1NTcsNiArMzYzNywxNiBAQCBzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4gXFx0XFx0fVxcbiBcXHRcXHRwa3RfZGV2LVxcdTAwM2VsYXN0X3BrdF9zaXplID0gcGt0X2Rldi1cXHUwMDNlc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdHBrdF9kZXYtXFx1MDAzZWNsb25lX2NvdW50ID0gMDtcXHQvKiByZXNldCBjb3VudGVyICovXFxuK1xcbitcXHRcXHR0eHRpbWVfZGVsYXkgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2RlbGF5KTtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRl9UWFRJTUUgXFx1MDAyNlxcdTAwMjYgdHh0aW1lX2RlbGF5KSB7XFxuK1xcdFxcdFxcdGNsb2NraWRfdCBjbGsgPSBSRUFEX09OQ0UocGt0X2Rldi1cXHUwMDNldHh0aW1lX2Nsb2NraWQpO1xcbitcXHRcXHRcXHRrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdHh0aW1lX2RlbGF5KTtcXG4rXFxuK1xcdFxcdFxcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtXFx1MDAzZXNrYiwgdHh0aW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY2xrKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAocGt0X2Rldi1cXHUwMDNlZGVsYXkgXFx1MDAyNlxcdTAwMjYgcGt0X2Rldi1cXHUwMDNlbGFzdF9vaylcXG5AQCAtMzg2OSw2ICszOTU5LDcgQEAgc3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKVxcbiBcXHRwa3RfZGV2LVxcdTAwM2VidXJzdCA9IDE7XFxuIFxcdHBrdF9kZXYtXFx1MDAzZW5vZGUgPSBOVU1BX05PX05PREU7XFxuIFxcdHBrdF9kZXYtXFx1MDAzZWZsYWdzID0gRl9TSEFSRUQ7XFx0LyogU0tCIHNoYXJlZCBieSBkZWZhdWx0ICovXFxuK1xcdHBrdF9kZXYtXFx1MDAzZXR4dGltZV9jbG9ja2lkID0gQ0xPQ0tfTU9OT1RPTklDO1xcbiBcXG4gXFx0ZXJyID0gcGt0Z2VuX3NldHVwX2Rldih0LVxcdTAwM2VuZXQsIHBrdF9kZXYsIGlmbmFtZSk7XFxuIFxcdGlmIChlcnIpXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG5pbmRleCAzMWM2NWE1NDVhMTA3Yy4uMmM3YTI0NWM1ZmZjMmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC0yMTU1LDcgKzIxNTUsNyBAQCBzdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9UU09fTUFYX1NFR1MsXFxuIFxcdFxcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZXRzb19tYXhfc2VncykpIHx8XFxuIFxcdCAgICBubGFfcHV0X3VpbnQoc2tiLCBJRkxBX01BWF9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OLFxcbi1cXHRcXHRcXHQgUkVBRF9PTkNFKGRldi1cXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fFxcbitcXHRcXHRcXHQgKHU2NClSRUFEX09OQ0UoZGV2LVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgKiBOU0VDX1BFUl9VU0VDKSB8fFxcbiAjaWZkZWYgQ09ORklHX1JQU1xcbiBcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX05VTV9SWF9RVUVVRVMsXFxuIFxcdFxcdFxcdFJFQURfT05DRShkZXYtXFx1MDAzZW51bV9yeF9xdWV1ZXMpKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uYyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXFxuaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjVjMjMyM2FhYTAyYjZiIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5jXFxuKysrIGIvbmV0L2V0aHRvb2wvY29tbW9uLmNcXG5AQCAtOTU0LDYgKzk1NCw5IEBAIHZvaWQgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHQvKiBEcml2ZXIgZ2l2ZXMgdXMgY3VycmVudCBzdGF0ZSwgd2Ugd2FudCB0byByZXR1cm4gY3VycmVudCBjb25maWcgKi9cXG4gXFx0a3BhcmFtLVxcdTAwM2V0Y3BfZGF0YV9zcGxpdCA9IGRldi1cXHUwMDNlY2ZnLVxcdTAwM2VoZHNfY29uZmlnO1xcbiBcXHRrcGFyYW0tXFx1MDAzZWhkc190aHJlc2ggPSBkZXYtXFx1MDAzZWNmZy1cXHUwMDNlaGRzX3RocmVzaDtcXG4rXFxuK1xcdGtwYXJhbS1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcXG4rXFx0a3BhcmFtLVxcdTAwM2VtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbiA9IGRldi1cXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGV0aHRvb2xfaW5pdF90c2luZm8oc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbmluZGV4IDNlOTY5YTA3MGY5ZmU0Li5hZTdiNjUxYzY1OGY3NCAxMDA2NDRcXG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcXG4rKysgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcXG5AQCAtNDk0LDcgKzQ5NCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9mZWF0dXJlc19zZXRfcG9saWN5W0VUSFRPT0xfQV9GRUFUVVJFU19XQU5UXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3NfZ2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0hFQURFUiArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcHJpdmZsYWdzX3NldF9wb2xpY3lbRVRIVE9PTF9BX1BSSVZGTEFHU19GTEFHUyArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3NfZ2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfSEVBREVSICsgMV07XFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCArIDFdO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcmluZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVggKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NoYW5uZWxzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NIQU5ORUxTX0hFQURFUiArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfc2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfQ09NQklORURfQ09VTlQgKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2NvYWxlc2NlX2dldF9wb2xpY3lbRVRIVE9PTF9BX0NPQUxFU0NFX0hFQURFUiArIDFdO1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9yaW5ncy5jIGIvbmV0L2V0aHRvb2wvcmluZ3MuY1xcbmluZGV4IDkwNTRjODljNWQ3YmIyLi41MjE1ODU3MmZlMTBjMCAxMDA2NDRcXG4tLS0gYS9uZXQvZXRodG9vbC9yaW5ncy5jXFxuKysrIGIvbmV0L2V0aHRvb2wvcmluZ3MuY1xcbkBAIC00Miw2ICs0Miw4IEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuIFxcbiBcXHRkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnRjcF9kYXRhX3NwbGl0ID0gZGV2LVxcdTAwM2VjZmctXFx1MDAzZWhkc19jb25maWc7XFxuIFxcdGRhdGEtXFx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cXHUwMDNlY2ZnLVxcdTAwM2VoZHNfdGhyZXNoO1xcbitcXHRkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b24gPSBkZXYtXFx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b247XFxuK1xcdGRhdGEtXFx1MDAzZWtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSBkZXYtXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xcbiBcXG4gXFx0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3JpbmdwYXJhbShkZXYsIFxcdTAwMjZkYXRhLVxcdTAwM2VyaW5ncGFyYW0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZkYXRhLVxcdTAwM2VrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbkBAIC02OSw3ICs3MSw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbiBcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovXFxuIFxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIF9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYICovXFxuIFxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXFxuLVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cXG4rXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXFx0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYICovXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbkBAIC0xMjEsNyArMTI1LDEyIEBAIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxcbiBcXHRcXHRcXHQgIGtyLVxcdTAwM2VoZHNfdGhyZXNoKSB8fFxcbiBcXHQgICAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCxcXG4tXFx0XFx0XFx0ICBrci1cXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXFxuK1xcdFxcdFxcdCAga3ItXFx1MDAzZWhkc190aHJlc2hfbWF4KSkpIHx8XFxuK1xcdCAgICAoKHN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcXG4rXFx0XFx0XFx0ICBrci1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbikgfHxcXG4rXFx0ICAgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl9NQVgsXFxuK1xcdFxcdFxcdCAga3ItXFx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxcbiBcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE0NCw2ICsxNTMsNyBAQCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W10gPSB7XFxuIFxcdFtFVEhUT09MX0FfUklOR1NfUlhfUFVTSF1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgMSksXFxuIFxcdFtFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gXFx0W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4rXFx0W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnRcXG5AQCAtMTc3LDYgKzE4NywxNCBAQCBldGhubF9zZXRfcmluZ3NfdmFsaWRhdGUoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhKG9wcy1cXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFxcdTAwMjYgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OKSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgIHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b24gaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0YltFVEhUT09MX0FfUklOR1NfQ1FFX1NJWkVdIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKG9wcy1cXHUwMDNlc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFxcdTAwMjYgRVRIVE9PTF9SSU5HX1VTRV9DUUVfU0laRSkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVxcdTAwM2VleHRhY2ssXFxuQEAgLTI0Niw2ICsyNjQsOCBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0XFx0IHRiW0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dLCBcXHUwMDI2bW9kKTtcXG4gXFx0ZXRobmxfdXBkYXRlX3UzMihcXHUwMDI2a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLFxcbiBcXHRcXHRcXHQgdGJbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdLCBcXHUwMDI2bW9kKTtcXG4rXFx0ZXRobmxfdXBkYXRlX3UzMihcXHUwMDI2a2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uLFxcbitcXHRcXHRcXHQgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLCBcXHUwMDI2bW9kKTtcXG4gXFx0aWYgKCFtb2QpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMjgxLDYgKzMwMSw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHRcXHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19UWF07XFxuIFxcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCBcXHUwMDNlIGtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaF9tYXgpXFxuIFxcdFxcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdO1xcbitcXHRlbHNlIGlmIChrZXJuZWxfcmluZ3BhcmFtLnBhY2luZ19vZmZsb2FkX2hvcml6b24gXFx1MDAzZVxcbitcXHRcXHQga2VybmVsX3JpbmdwYXJhbS5tYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbilcXG4rXFx0XFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl07XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZXJyX2F0dHIgPSBOVUxMO1xcbiBcXHRpZiAoZXJyX2F0dHIpIHtcXG5AQCAtMzAyLDYgKzMyNSw5IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0cmV0ID0gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlc2V0X3JpbmdwYXJhbShkZXYsIFxcdTAwMjZyaW5ncGFyYW0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZrZXJuZWxfcmluZ3BhcmFtLCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0ZGV2LVxcdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0ga2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xcbitcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyByZXQgOiAxO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxLmMgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcXG5pbmRleCA3Y2FlMDgyYTk4NDcyMS4uMzYwMDZmNjlhODc1MzYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9mcS5jXFxuQEAgLTM5OSw2ICszOTksMTEgQEAgc3RhdGljIHN0cnVjdCBmcV9mbG93ICpmcV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICAgIFJFQURfT05DRShzay1cXHUwMDNlc2tfcGFjaW5nX3N0YXR1cykgIT0gU0tfUEFDSU5HX0ZRKVxcbiBcXHRcXHRcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2c2stXFx1MDAzZXNrX3BhY2luZ19zdGF0dXMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgU0tfUEFDSU5HX0ZRKTtcXG4rXFxuK1xcdFxcdGlmIChxLVxcdTAwM2VvZmZsb2FkX2hvcml6b24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGZxX3NrYl9jYihza2IpLVxcdTAwM2V0aW1lX3RvX3NlbmQgXFx1MDAzYz0gbm93KVxcbitcXHRcXHRcXHRza2ItXFx1MDAzZXRzdGFtcCA9IDA7XFxuK1xcbiBcXHRcXHRyZXR1cm4gXFx1MDAyNnEtXFx1MDAzZWludGVybmFsO1xcbiBcXHR9XFxuIFxcbkBAIC03MDcsNiArNzEyLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiBcXHRzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gXFx0c3RydWN0IGZxX3BlcmJhbmRfZmxvd3MgKnBiYW5kO1xcbiBcXHRzdHJ1Y3QgZnFfZmxvd19oZWFkICpoZWFkO1xcbitcXHR1NjQgdGltZV9uZXh0X3BhY2tldDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0c3RydWN0IGZxX2Zsb3cgKmY7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcXG5AQCAtNzIxLDcgKzcyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gXFx0aWYgKHNrYikge1xcbiBcXHRcXHRxLVxcdTAwM2VpbnRlcm5hbC5xbGVuLS07XFxuIFxcdFxcdGZxX2RlcXVldWVfc2tiKHNjaCwgXFx1MDAyNnEtXFx1MDAzZWludGVybmFsLCBza2IpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0cmV0dXJuIHNrYjtcXG4gXFx0fVxcbiBcXG4gXFx0bm93ID0ga3RpbWVfZ2V0X25zKCk7XFxuQEAgLTc1OCw4ICs3NjQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuIFxcbiBcXHRza2IgPSBmcV9wZWVrKGYpO1xcbiBcXHRpZiAoc2tiKSB7XFxuLVxcdFxcdHU2NCB0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cXHUwMDNldGltZV90b19zZW5kLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGYtXFx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xcbitcXHRcXHR0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cXHUwMDNldGltZV90b19zZW5kLFxcbitcXHRcXHRcXHRcXHRcXHQgZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCk7XFxuIFxcbiBcXHRcXHRpZiAobm93ICsgcS1cXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFxcdTAwM2MgdGltZV9uZXh0X3BhY2tldCkge1xcbiBcXHRcXHRcXHRoZWFkLVxcdTAwM2VmaXJzdCA9IGYtXFx1MDAzZW5leHQ7XFxuQEAgLTgyOCwxMSArODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gXFx0XFx0ICogZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCB3YXMgc2V0IHdoZW4gcHJpb3IgcGFja2V0IHdhcyBzZW50LFxcbiBcXHRcXHQgKiBhbmQgY3VycmVudCB0aW1lIChAbm93KSBjYW4gYmUgdG9vIGxhdGUgYnkgdGVucyBvZiB1cy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChmLVxcdTAwM2V0aW1lX25leHRfcGFja2V0KVxcbitcXHRcXHRpZiAoZi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCBcXHUwMDI2XFx1MDAyNiBmLVxcdTAwM2V0aW1lX25leHRfcGFja2V0IFxcdTAwM2Mgbm93KVxcbiBcXHRcXHRcXHRsZW4gLT0gbWluKGxlbi8yLCBub3cgLSBmLVxcdTAwM2V0aW1lX25leHRfcGFja2V0KTtcXG4gXFx0XFx0Zi1cXHUwMDNldGltZV9uZXh0X3BhY2tldCA9IG5vdyArIGxlbjtcXG4gXFx0fVxcbitcXG4gb3V0OlxcbitcXHRpZiAocS1cXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFxcdTAwMjZcXHUwMDI2IHRpbWVfbmV4dF9wYWNrZXQgXFx1MDAzYz0gbm93KVxcbitcXHRcXHRza2ItXFx1MDAzZXRzdGFtcCA9IDA7XFxuK1xcbiBcXHRyZXR1cm4gc2tiO1xcbiB9XFxuIFxcbkBAIC0xMTc5LDcgKzExODksOCBAQCBzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbiBcXHRcXHR1NjQgb2ZmbG9hZF9ob3Jpem9uID0gKHU2NClOU0VDX1BFUl9VU0VDICpcXG4gXFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF91MzIodGJbVENBX0ZRX09GRkxPQURfSE9SSVpPTl0pO1xcbiBcXG4tXFx0XFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcXHUwMDNjPSBxZGlzY19kZXYoc2NoKS1cXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pIHtcXG4rXFx0XFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcXHUwMDNjPVxcbitcXHRcXHQgICAgKHU2NClxZGlzY19kZXYoc2NoKS1cXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbiAqIE5TRUNfUEVSX1VTRUMpIHtcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VvZmZsb2FkX2hvcml6b24sIG9mZmxvYWRfaG9yaXpvbik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJpbnZhbGlkIG9mZmxvYWRfaG9yaXpvblxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zZXR0aW5ncyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjQ3OGU2ODQ4NDZhMTZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc2V0dGluZ3NcXG5AQCAtMCwwICsxIEBAXFxuK3RpbWVvdXQ9MjQwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcXG5pbmRleCA1NWEzODZmM2QxYjkwZi4uNmU2NGJhYTRjNjBkZDkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xcbkBAIC00Miw4ICs0MiwxMCBAQCBzdGF0aWMgYm9vbFxcdGNmZ19tYWNoaW5lX3Nsb3c7XFxuIHN0YXRpYyB1aW50NjRfdFxcdGNmZ19zdGFydF90aW1lX25zO1xcbiBzdGF0aWMgaW50XFx0Y2ZnX21hcms7XFxuIHN0YXRpYyBib29sXFx0Y2ZnX3J4O1xcbitzdGF0aWMgYm9vbFxcdGNmZ192ZXJpZnlfaHdfb2ZmbG9hZDtcXG4gXFxuIHN0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydDtcXG4rc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0X3JlYWw7XFxuIHN0YXRpYyB1aW50NjRfdCB0ZGVsaXZlcl9tYXg7XFxuIFxcbiBzdGF0aWMgaW50IGVycm9ycztcXG5AQCAtMTU4LDE4ICsxNjAsNzAgQEAgc3RhdGljIHZvaWQgZG9fcmVjdl92ZXJpZnlfZW1wdHkoaW50IGZkcilcXG4gXFx0XFx0ZXJyb3IoMSwgMCwgXFxcInJlY3Y6IG5vdCBlbXB0eSBhcyBleHBlY3RlZCAoJWQsICVkKVxcXCIsIHJldCwgZXJybm8pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxcbitzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKmVycixcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgcGF5bG9hZF9jaGFyKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7XFxuK1xcdGludDY0X3QgdHN0YW1wID0gMDtcXG4rXFxuK1xcdHN3aXRjaCAoZXJyLVxcdTAwM2VlZV9lcnJubykge1xcbitcXHRjYXNlIEVDQU5DRUxFRDpcXG4rXFx0XFx0aWYgKGVyci1cXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXFxuK1xcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogdW5rbm93biBFQ0FOQ0VMRUQgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVyci1cXHUwMDNlZWVfY29kZSk7XFxuK1xcdFxcdHJlYXNvbiA9IFxcXCJtaXNzZWQgdHh0aW1lXFxcIjtcXG4rXFx0YnJlYWs7XFxuK1xcdGNhc2UgRUlOVkFMOlxcbitcXHRcXHRpZiAoZXJyLVxcdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX0lOVkFMSURfUEFSQU0pXFxuK1xcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogdW5rbm93biBFSU5WQUwgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVyci1cXHUwMDNlZWVfY29kZSk7XFxuK1xcdFxcdHJlYXNvbiA9IFxcXCJpbnZhbGlkIHR4dGltZVxcXCI7XFxuK1xcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IGVycm5vICV1IGNvZGUgJXVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgIGVyci1cXHUwMDNlZWVfZXJybm8sIGVyci1cXHUwMDNlZWVfY29kZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHRzdGFtcCA9ICgoaW50NjRfdCllcnItXFx1MDAzZWVlX2RhdGEpIFxcdTAwM2NcXHUwMDNjIDMyIHwgZXJyLVxcdTAwM2VlZV9pbmZvO1xcbitcXHR0c3RhbXAgLT0gKGludDY0X3QpZ2xvYl90c3RhcnQ7XFxuK1xcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJzZW5kOiBwa3QgJWMgYXQgJVxcXCIgUFJJZDY0IFxcXCJtcyBkcm9wcGVkOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0cGF5bG9hZF9jaGFyLCB0c3RhbXAsIHJlYXNvbik7XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcylcXG4re1xcbitcXHRpbnQ2NF90IHRzO1xcbitcXG4rXFx0dHMgPSB0c3MtXFx1MDAzZXRzWzBdLnR2X3NlYztcXG4rXFx0dHMgKj0gMTAwMFVMTCAqIDEwMDAgKiAxMDAwO1xcbitcXHR0cyArPSB0c3MtXFx1MDAzZXRzWzBdLnR2X25zZWM7XFxuK1xcdHRzIC09IGdsb2JfdHN0YXJ0X3JlYWw7XFxuK1xcdHRzIC89IDEwMDA7XFxuK1xcbitcXHRpZiAodHMgXFx1MDAzZSBjZmdfdmFyaWFuY2VfdXMpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJzdyBkZWxheSAlXFxcIiBQUklkNjQgXFxcInVzIGV4Y2VlZHMgYm91bmRzXFxcXG5cXFwiLCB0cyk7XFxuK1xcdFxcdGlmICghY2ZnX21hY2hpbmVfc2xvdylcXG4rXFx0XFx0XFx0ZXJyb3JzKys7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlKGludCBmZHQpXFxuIHtcXG4gXFx0Y2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VycikpICtcXG4rXFx0XFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZykpICtcXG4gXFx0XFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSldID0gezB9O1xcbiBcXHRjaGFyIGRhdGFbc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArXFxuIFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgMV07XFxuK1xcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nICp0c3M7XFxuIFxcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyO1xcbiBcXHRpbnQgcmV0LCBudW1fdHN0YW1wID0gMDtcXG4gXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7MH07XFxuIFxcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7MH07XFxuIFxcdHN0cnVjdCBjbXNnaGRyICpjbTtcXG4tXFx0aW50NjRfdCB0c3RhbXAgPSAwO1xcbiBcXG4gXFx0aW92Lmlvdl9iYXNlID0gZGF0YTtcXG4gXFx0aW92Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7XFxuQEAgLTE4MSw4ICsyMzUsNiBAQCBzdGF0aWMgaW50IGRvX3JlY3ZfZXJycXVldWVfdGltZW91dChpbnQgZmR0KVxcbiBcXHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XFxuIFxcbiBcXHR3aGlsZSAoMSkge1xcbi1cXHRcXHRjb25zdCBjaGFyICpyZWFzb24gPSBOVUxMO1xcbi1cXG4gXFx0XFx0cmV0ID0gcmVjdm1zZyhmZHQsIFxcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XFxuIFxcdFxcdGlmIChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUFHQUlOKVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMTkyLDQyICsyNDQsMzIgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcXG4gXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiBmbGFncyAweCV4XFxcXG5cXFwiLCBtc2cubXNnX2ZsYWdzKTtcXG4gXFxuIFxcdFxcdGNtID0gQ01TR19GSVJTVEhEUihcXHUwMDI2bXNnKTtcXG4rXFx0XFx0dHNzID0gTlVMTDtcXG4rXFxuK1xcdFxcdGlmIChjbS1cXHUwMDNlY21zZ19sZXZlbCA9PSBTT0xfU09DS0VUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjbS1cXHUwMDNlY21zZ190eXBlID09IFNDTV9USU1FU1RBTVBJTkcpIHtcXG4rXFx0XFx0XFx0dHNzID0gKHZvaWQgKilDTVNHX0RBVEEoY20pO1xcbitcXHRcXHRcXHRjbSA9IENNU0dfTlhUSERSKFxcdTAwMjZtc2csIGNtKTtcXG4rXFx0XFx0XFx0aWYgKCFjbSlcXG4rXFx0XFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcInRpbWVzdGFtcCBtaXNzaW5nIGlwIGVyclxcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGlmIChjbS1cXHUwMDNlY21zZ19sZXZlbCAhPSBjZmdfZXJycV9sZXZlbCB8fFxcbiBcXHRcXHQgICAgY20tXFx1MDAzZWNtc2dfdHlwZSAhPSBjZmdfZXJycV90eXBlKVxcbiBcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwiZXJycXVldWU6IHR5cGUgMHgleC4weCV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgY20tXFx1MDAzZWNtc2dfbGV2ZWwsIGNtLVxcdTAwM2VjbXNnX3R5cGUpO1xcbiBcXG4gXFx0XFx0ZXJyID0gKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbSk7XFxuLVxcdFxcdGlmIChlcnItXFx1MDAzZWVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fVFhUSU1FKVxcbitcXHRcXHRpZiAoZXJyLVxcdTAwM2VlZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX1RYVElNRSlcXG4rXFx0XFx0XFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZGF0YVtyZXQgLSAxXSk7XFxuK1xcdFxcdGVsc2UgaWYgKGVyci1cXHUwMDNlZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgXFx1MDAyNlxcdTAwMjYgdHNzKVxcbitcXHRcXHRcXHRkb19yZWN2X2VycnF1ZXVlX3RpbWVzdGFtcGluZyhlcnIsIHRzcyk7XFxuK1xcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiBvcmlnaW4gMHgleFxcXFxuXFxcIiwgZXJyLVxcdTAwM2VlZV9vcmlnaW4pO1xcbiBcXG4tXFx0XFx0c3dpdGNoIChlcnItXFx1MDAzZWVlX2Vycm5vKSB7XFxuLVxcdFxcdGNhc2UgRUNBTkNFTEVEOlxcbi1cXHRcXHRcXHRpZiAoZXJyLVxcdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX01JU1NFRClcXG4tXFx0XFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4tXFx0XFx0XFx0cmVhc29uID0gXFxcIm1pc3NlZCB0eHRpbWVcXFwiO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBFSU5WQUw6XFxuLVxcdFxcdFxcdGlmIChlcnItXFx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcXG4tXFx0XFx0XFx0XFx0ZXJyb3IoMSwgMCwgXFxcImVycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4tXFx0XFx0XFx0cmVhc29uID0gXFxcImludmFsaWQgdHh0aW1lXFxcIjtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGVycm9yKDEsIDAsIFxcXCJlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgZXJyLVxcdTAwM2VlZV9lcnJubywgZXJyLVxcdTAwM2VlZV9jb2RlKTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0dHN0YW1wID0gKChpbnQ2NF90KSBlcnItXFx1MDAzZWVlX2RhdGEpIFxcdTAwM2NcXHUwMDNjIDMyIHwgZXJyLVxcdTAwM2VlZV9pbmZvO1xcbi1cXHRcXHR0c3RhbXAgLT0gKGludDY0X3QpIGdsb2JfdHN0YXJ0O1xcbi1cXHRcXHR0c3RhbXAgLz0gMTAwMCAqIDEwMDA7XFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwic2VuZDogcGt0ICVjIGF0ICVcXFwiIFBSSWQ2NCBcXFwibXMgZHJvcHBlZDogJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdGRhdGFbcmV0IC0gMV0sIHRzdGFtcCwgcmVhc29uKTtcXG4tXFxuIFxcdFxcdG1zZy5tc2dfZmxhZ3MgPSAwO1xcbiBcXHRcXHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XFxuLVxcdFxcdG51bV90c3RhbXArKztcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIG51bV90c3RhbXA7XFxuQEAgLTI0NSwxMiArMjg3LDEzIEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJycXVldWVfbXNncyhpbnQgZmR0KVxcbiBcXHRcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInBvbGxcXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgKHBmZC5yZXZlbnRzIFxcdTAwMjYgUE9MTEVSUikpXFxuLVxcdFxcdFxcdG51bV90c3RhbXAgKz0gZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGZkdCk7XFxuK1xcdFxcdFxcdG51bV90c3RhbXAgKz0gZG9fcmVjdl9lcnJxdWV1ZShmZHQpO1xcbiBcXG4gXFx0XFx0aWYgKG51bV90c3RhbXAgPT0gY2ZnX251bV9wa3QpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0fSB3aGlsZSAoZ2V0dGltZV9ucyhjZmdfY2xvY2tpZCkgXFx1MDAzYyB0ZGVsaXZlcl9tYXgpO1xcbitcXHR9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSBcXHUwMDNjXFxuK1xcdFxcdCB0ZGVsaXZlcl9tYXggKyAoY2ZnX3ZhcmlhbmNlX3VzICogMTAwMCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzdGFydF90aW1lX3dhaXQodm9pZClcXG5AQCAtMjk1LDYgKzMzOCwxOCBAQCBzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZShpbnQgZmQpXFxuIFxcdFxcdGVycm9yKDEsIDAsIFxcXCJnZXRzb2Nrb3B0IHR4dGltZTogbWlzbWF0Y2hcXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgc2V0c29ja29wdF90eHRpbWVzdGFtcGluZyhpbnQgZmQpXFxuK3tcXG4rXFx0aW50IHZhbCA9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxcbitcXHRcXHQgIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgfFxcbitcXHRcXHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEIHxcXG4rXFx0XFx0ICBTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk7XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLFxcbitcXHRcXHQgICAgICAgXFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCkpKVxcbitcXHRcXHRlcnJvcigxLCBlcnJubywgXFxcInNldHNvY2tvcHQgdGltZXN0YW1waW5nXFxcIik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4ge1xcbiBcXHRpbnQgZmQ7XFxuQEAgLTMwOCw2ICszNjMsOSBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXFxuIFxcbiBcXHRzZXRzb2Nrb3B0X3R4dGltZShmZCk7XFxuIFxcbitcXHRpZiAoY2ZnX3ZlcmlmeV9od19vZmZsb2FkKVxcbitcXHRcXHRzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGZkKTtcXG4rXFxuIFxcdGlmIChjZmdfbWFyayBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgXFx1MDAyNmNmZ19tYXJrLCBzaXplb2YoY2ZnX21hcmspKSlcXG4gXFx0XFx0ZXJyb3IoMSwgZXJybm8sIFxcXCJzZXRzb2Nrb3B0IG1hcmtcXFwiKTtcXG5AQCAtMzE3LDcgKzM3NSw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4gXFxuIHN0YXRpYyBpbnQgc2V0dXBfcngoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4ge1xcbi1cXHRzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3VzZWMgPSAxMDAgKiAxMDAwIH07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDYwMCAqIDEwMDAgfTtcXG4gXFx0aW50IGZkO1xcbiBcXG4gXFx0ZmQgPSBzb2NrZXQoYWRkci1cXHUwMDNlc2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTtcXG5AQCAtMzQ4LDYgKzQwNiw3IEBAIHN0YXRpYyB2b2lkIGRvX3Rlc3RfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcXG4gXFxuIFxcdHN0YXJ0X3RpbWVfd2FpdCgpO1xcbiBcXHRnbG9iX3RzdGFydCA9IGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpO1xcbitcXHRnbG9iX3RzdGFydF9yZWFsID0gZ2V0dGltZV9ucyhDTE9DS19SRUFMVElNRSk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2ZnX251bV9wa3Q7IGkrKylcXG4gXFx0XFx0ZG9fc2VuZF9vbmUoZmR0LCBcXHUwMDI2Y2ZnX2J1ZltpXSk7XFxuQEAgLTQ0MCwxMCArNDk5LDExIEBAIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKVxcbiBcXHRcXHRcXHRcXFwiICAtNiAgICAgICAgICAgIG9ubHkgSVB2NlxcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICAtYyBcXHUwMDNjY2xvY2tcXHUwMDNlICAgIG1vbm90b25pYyBvciB0YWkgKGRlZmF1bHQpXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgIC1EIFxcdTAwM2NhZGRyXFx1MDAzZSAgICAgZGVzdGluYXRpb24gSVAgYWRkcmVzcyAoc2VydmVyKVxcXFxuXFxcIlxcbi1cXHRcXHRcXHRcXFwiICAtUyBcXHUwMDNjYWRkclxcdTAwM2UgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXFxcXG5cXFwiXFxuK1xcdFxcdFxcdFxcXCIgIC1oICAgICAgICAgICAgdmVyaWZ5IGhhcmR3YXJlIG9mZmxvYWQgKHR4KVxcXFxuXFxcIlxcbitcXHRcXHRcXHRcXFwiICAtbSBcXHUwMDNjbWFya1xcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxcXG5cXFwiXFxuIFxcdFxcdFxcdFxcXCIgIC1yICAgICAgICAgICAgcnVuIHJ4IG1vZGVcXFxcblxcXCJcXG4rXFx0XFx0XFx0XFxcIiAgLVMgXFx1MDAzY2FkZHJcXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiICAtdCBcXHUwMDNjbnNlY1xcdTAwM2UgICAgIHN0YXJ0IHRpbWUgKFVUQyBuYW5vc2Vjb25kcylcXFxcblxcXCJcXG4tXFx0XFx0XFx0XFxcIiAgLW0gXFx1MDAzY21hcmtcXHUwMDNlICAgICBzb2NrZXQgbWFya1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwiXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRwcm9nbmFtZSk7XFxuIFxcdGV4aXQoMSk7XFxuQEAgLTQ1NSw3ICs1MTUsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0aW50IGRvbWFpbiA9IFBGX1VOU1BFQztcXG4gXFx0aW50IGM7XFxuIFxcbi1cXHR3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIjQ2YzpTOkQ6cnQ6bTpcXFwiKSkgIT0gLTEpIHtcXG4rXFx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCI0NmM6RDpobTpyUzp0OlxcXCIpKSAhPSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKGMpIHtcXG4gXFx0XFx0Y2FzZSAnNCc6XFxuIFxcdFxcdFxcdGlmIChkb21haW4gIT0gUEZfVU5TUEVDKVxcbkBAIC00ODIsMjEgKzU0MiwyNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRlcnJvcigxLCAwLCBcXFwidW5rbm93biBjbG9jayBpZCAlc1xcXCIsIG9wdGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdTJzpcXG4tXFx0XFx0XFx0c2FkZHIgPSBvcHRhcmc7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdEJzpcXG4gXFx0XFx0XFx0ZGFkZHIgPSBvcHRhcmc7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdoJzpcXG4rXFx0XFx0XFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ20nOlxcbitcXHRcXHRcXHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAncic6XFxuIFxcdFxcdFxcdGNmZ19yeCA9IHRydWU7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdTJzpcXG4rXFx0XFx0XFx0c2FkZHIgPSBvcHRhcmc7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICd0JzpcXG4gXFx0XFx0XFx0Y2ZnX3N0YXJ0X3RpbWVfbnMgPSBzdHJ0b2xsKG9wdGFyZywgTlVMTCwgMCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdtJzpcXG4tXFx0XFx0XFx0Y2ZnX21hcmsgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdHVzYWdlKGFyZ3ZbMF0pO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxcbmluZGV4IGFkZjZjODQ4ZDZkODBmLi43Yjc1YTMzZjVjNDNmOCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcXG5AQCAtMTIsMTAgKzEyLDEzIEBAIGltcG9ydCB0aW1lXFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X3ZhcmlhbnRzXFxuIGZyb20gbGliLnB5IGltcG9ydCBLc2Z0TmFtZWRWYXJpYW50LCBLc2Z0U2tpcEV4XFxuIGZyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgYmtnLCBjbWQsIGRlZmVyLCB0Y1xcbitmcm9tIGxpYi5weSBpbXBvcnQgRXRodG9vbEZhbWlseSwgTmxFcnJvclxcbiBcXG4gXFxuIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6XFxuICAgICBcXFwiXFxcIlxcXCJNYWluIGZ1bmN0aW9uLiBSdW4gc29fdHh0aW1lIGFzIHNlbmRlciBhbmQgcmVjZWl2ZXIuXFxcIlxcXCJcXFwiXFxuKyAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcXG4rXFxuICAgICBzbG93X21hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgnS1NGVF9NQUNISU5FX1NMT1cnKVxcbiBcXG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXFxcImJpbl9yZW1vdGVcXFwiKTpcXG5AQCAtMzgsNiArNDEsMzQgQEAgZGVmIHRlc3Rfc29fdHh0aW1lKGNmZywgY2xvY2tpZCwgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9zdWNjZXNzKTpcXG4gICAgICAgICBjbWQoY21kX3R4KVxcbiBcXG4gXFxuK2RlZiBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCJDb25maWd1cmUgcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi5cXFwiXFxcIlxcXCJcXG4rICAgIGV0aG5sID0gRXRodG9vbEZhbWlseSgpXFxuK1xcbisgICAgdHJ5OlxcbisgICAgICAgIHJpbmdzID0gZXRobmwucmluZ3NfZ2V0KHsnaGVhZGVyJzogeydkZXYtaW5kZXgnOiBjZmcuaWZpbmRleH19KVxcbisgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdyaW5nLWdldCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZScpIGZyb20gZVxcbitcXG4rICAgIGlmICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJyBub3QgaW4gcmluZ3Mgb3IgXFxcXFxcbisgICAgICAgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JyBub3QgaW4gcmluZ3M6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgncGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZScpXFxuK1xcbisgICAgaWYgcmluZ3NbJ3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4J10gXFx1MDAzYyA1MF8wMDA6XFxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgncGFjaW5nIG9mZmxvYWQgbWF4IGhvcml6b24gdG9vIHNtYWxsJylcXG4rXFxuKyAgICBjdXJfaG9yaXpvbiA9IHJpbmdzWydwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJ11cXG4rICAgIG5ld19ob3Jpem9uID0gNTBfMDAwXFxuKyAgICBldGhubC5yaW5nc19zZXQoe1xcbisgICAgICAgICdoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fSxcXG4rICAgICAgICAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbic6IG5ld19ob3Jpem9uLFxcbisgICAgfSlcXG4rICAgIGRlZmVyKGV0aG5sLnJpbmdzX3NldCwge1xcbisgICAgICAgICdoZWFkZXInOiB7J2Rldi1pbmRleCc6IGNmZy5pZmluZGV4fSxcXG4rICAgICAgICAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbic6IGN1cl9ob3Jpem9uXFxuKyAgICB9KVxcbitcXG4rXFxuIGRlZiBfcWRpc2Nfc2V0dXAoaWZuYW1lLCBxZGlzYywgb3B0YXJncz1cXFwiXFxcIik6XFxuICAgICBcXFwiXFxcIlxcXCJSZXBsYWNlIHJvb3QgcWRpc2MuIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGFmdGVyIHRoZSB0ZXN0LlxcbiBcXG5AQCAtNTYsNiArODcsNyBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZnEoKTpcXG4gICAgICAgICAgICAgW1xcXCJvbmVfcGt0XFxcIiwgXFxcImEsMTBcXFwiLCBcXFwiYSwxMFxcXCJdLFxcbiAgICAgICAgICAgICBbXFxcImluX29yZGVyXFxcIiwgXFxcImEsMTAsYiwyMFxcXCIsIFxcXCJhLDEwLGIsMjBcXFwiXSxcXG4gICAgICAgICAgICAgW1xcXCJyZXZlcnNlX29yZGVyXFxcIiwgXFxcImEsMjAsYiwxMFxcXCIsIFxcXCJiLDEwLGEsMjBcXFwiXSxcXG4rICAgICAgICAgICAgW1xcXCJiZXlvbmRfaHdfaG9yaXpvblxcXCIsIFxcXCJhLDcwXFxcIiwgXFxcImEsNzBcXFwiXSxcXG4gICAgICAgICBdOlxcbiAgICAgICAgICAgICBuYW1lID0gZlxcXCJ2e2lwdmVyfV97dGVzdGNhc2VbMF19XFxcIlxcbiAgICAgICAgICAgICB5aWVsZCBLc2Z0TmFtZWRWYXJpYW50KG5hbWUsIGlwdmVyLCB0ZXN0Y2FzZVsxXSwgdGVzdGNhc2VbMl0pXFxuQEAgLTY0LDE1ICs5Niw0MiBAQCBkZWYgX3Rlc3RfdmFyaWFudHNfZnEoKTpcXG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcXG4gZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8oY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XFxuICAgICBcXFwiXFxcIlxcXCJSdW4gYWxsIHZhcmlhbnRzIG9mIG1vbm90b25pYyAoZnEpIHRlc3RzLlxcXCJcXFwiXFxcIlxcbi0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXFxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXFxcImZxXFxcIilcXG4gICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXFxcIm1vbm9cXFwiLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSlcXG4gXFxuIFxcbitAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxcbitkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcXG4rICAgIFxcXCJcXFwiXFxcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIGZxIHRlc3RzLCB3aXRoIG9mZmxvYWQgaG9yaXpvbi5cXFwiXFxcIlxcXCJcXG4rICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxcbitcXG4rICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxcbisgICAgdHJ5OlxcbisgICAgICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcXFwiZnFcXFwiLCBcXFwib2ZmbG9hZF9ob3Jpem9uIDUwbXNcXFwiKVxcbisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcIm5ldGRldiBkb2VzIG5vdCBzdXBwb3J0IG9mZmxvYWQuIHNraXBwaW5nXFxcIikgZnJvbSBlXFxuK1xcbisgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHVzZSBvbmx5IGh3IHBhY2luZywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uLlxcbisgICAgaHdfb25seSA9IFxcXCItaFxcXCIgaWYgYXJnc190eCAhPSBcXFwiYSw3MFxcXCIgZWxzZSBcXFwiXFxcIlxcbisgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcXFwibW9ub1xcXCIsIGlwdmVyLCBmXFxcIntod19vbmx5fSB7YXJnc190eH1cXFwiLCBhcmdzX3J4LCBUcnVlKVxcbitcXG4rXFxuK0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXFxuK2RlZiB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcXG4rICAgIFxcXCJcXFwiXFxcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIHRlc3RzLCB3aXRob3V0IGZxIHBhY2luZyBzdyBiYWNrdXAuXFxcIlxcXCJcXFwiXFxuKyAgICBjZmcucmVxdWlyZV9uc2ltKG5zaW1fdGVzdD1GYWxzZSlcXG4rXFxuKyAgICBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZylcXG4rICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcXFwicGZpZm9fZmFzdFxcXCIpXFxuK1xcbisgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHBhc3MsIGV4Y2VwdCBiZXlvbmRfaHdfaG9yaXpvbiB3aXRob3V0IHN3IGZhbGxiYWNrLlxcbisgICAgZXhwZWN0X3Bhc3MgPSBub3QgYXJnc190eCA9PSBcXFwiYSw3MFxcXCJcXG4rICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXFxcIm1vbm9cXFwiLCBpcHZlciwgZlxcXCItaCB7YXJnc190eH1cXFwiLCBhcmdzX3J4LCBleHBlY3RfcGFzcylcXG4rXFxuK1xcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfdGFpKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngpOlxcbiAgICAgXFxcIlxcXCJcXFwiUnVuIGFsbCB2YXJpYW50cyBvZiBmcSB0ZXN0cywgYnV0IHBhc3MgQ0xPQ0tfVEFJIHRvIHRlc3QgY29udmVyc2lvbi5cXFwiXFxcIlxcXCJcXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxcbiAgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFxcXCJmcVxcXCIpXFxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFxcXCJ0YWlcXFwiLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgVHJ1ZSlcXG4gXFxuQEAgLTk1LDcgKzE1NCw2IEBAIGRlZiBfdGVzdF92YXJpYW50c19ldGYoKTpcXG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZXRmKCkpXFxuIGRlZiB0ZXN0X3NvX3R4dGltZV9ldGYoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCwgZXhwZWN0X2ZhaWwpOlxcbiAgICAgXFxcIlxcXCJcXFwiUnVuIGFsbCB2YXJpYW50cyBvZiBldGYgdGVzdHMuXFxcIlxcXCJcXFwiXFxuLSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcXG4gICAgIHRyeTpcXG4gICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXFxcImV0ZlxcXCIsIFxcXCJjbG9ja2lkIENMT0NLX1RBSSBkZWx0YSA0MDAwMDBcXFwiKVxcbiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOlxcbkBAIC0xMDgsNyArMTY2LDEzIEBAIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIFxcXCJcXFwiXFxcIkJvaWxlcnBsYXRlIGtzZnQgbWFpbi5cXFwiXFxcIlxcXCJcXG4gICAgIHdpdGggTmV0RHJ2RXBFbnYoX19maWxlX18pIGFzIGNmZzpcXG4gICAgICAgICBrc2Z0X3J1bihcXG4tICAgICAgICAgICAgW3Rlc3Rfc29fdHh0aW1lX2ZxX21vbm8sIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwgdGVzdF9zb190eHRpbWVfZXRmXSxcXG4rICAgICAgICAgICAgW1xcbisgICAgICAgICAgICAgICAgdGVzdF9zb190eHRpbWVfZnFfbW9ubyxcXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcsXFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9wZmlmb2Zhc3RfbW9ub19odyxcXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSxcXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2V0ZixcXG4rICAgICAgICAgICAgXSxcXG4gICAgICAgICAgICAgYXJncz0oY2ZnLCksXFxuICAgICAgICAgKVxcbiAgICAga3NmdF9leGl0KClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MDUuMzA5MzU2MjkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTU3MDcwNjU5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9GUVwiLFxuICAgIFwiTkVUX1BLVEdFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3NldF9yaW5nc1wiLFxuICAgIFwicmluZ3NfZmlsbF9yZXBseVwiLFxuICAgIFwiZnFfY2hhbmdlXCIsXG4gICAgXCJwa3RnZW5faWZfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgcmluZyBwYXJhbWV0ZXIgYHBhY2luZ19vZmZsb2FkX2hvcml6b25gIGFuZCBtb2RpZmllcyBgc2NoX2ZxYCB0byB1c2UgaXQuIEl0IGFsc28gYWRkcyBgU09fVFhUSU1FYCBzdXBwb3J0IHRvIGBwa3RnZW5gLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIG5ldGxpbmsgaW50ZXJmYWNlcywgYW5kIHBhY2tldCBnZW5lcmF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA1MWZkODJkYzNiM2U0OGNlN2U1OWNlODk3MDcxNzNmZTBhNDFkMjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMTo1MzowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uNDhmNDNkZGEyZTZlNWUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5AQCAtNDQ4LDYgKzQ0OCwxMiBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBoZHMtdGhyZXNoLW1heFxuICAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvblxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogcGFjaW5nLW9mZmxvYWQtaG9yaXpvbi1tYXhcbisgICAgICAgIHR5cGU6IHUzMlxuIFxuICAgLVxuICAgICBuYW1lOiBtbS1zdGF0XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0XG5pbmRleCA1MTJmNmQ2ZmEzZDhmOC4uM2I5Y2UxYzZlMTA1NzggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdFxuQEAgLTE4Myw3ICsxODMsOCBAQCBzdHJ1Y3QgZGV2bGlua19wb3J0KiAgICAgICAgICAgICAgICBkZXZsaW5rX3BvcnRcbiBzdHJ1Y3QgZHBsbF9waW4qICAgICAgICAgICAgICAgICAgICBkcGxsX3BpblxuIHN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIHBhZ2VfcG9vbHNcbiBzdHJ1Y3QgZGltX2lycV9tb2RlciogICAgICAgICAgICAgICBpcnFfbW9kZXJcbi11NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuK3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2luZ19vZmZsb2FkX2hvcml6b25cbit1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvblxuIHN0cnVjdF9uYXBpX2NvbmZpZyogICAgICAgICAgICAgICAgIG5hcGlfY29uZmlnXG4gdW5zaWduZWRfbG9uZyAgICAgICAgICAgICAgICAgICAgICAgZ3JvX2ZsdXNoX3RpbWVvdXRcbiB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2RlZmVyX2hhcmRfaXJxc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG5pbmRleCBiYjk5ZDllN2M2NWQ1MS4uNWRkZjM0NzkyN2RjM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZXRodG9vbC5jXG5AQCAtMTgwMSw3ICsxODAxLDggQEAgc3RhdGljIHZvaWQgaWRwZl9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlkcGZfZXRodG9vbF9vcHMgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbi1cdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCxcbitcdC5zdXBwb3J0ZWRfcmluZ19wYXJhbXNcdD0gRVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVCB8XG4rXHRcdFx0XHQgIEVUSFRPT0xfUklOR19VU0VfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbiBcdC5nZXRfbXNnbGV2ZWxcdFx0PSBpZHBmX2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSBpZHBmX3NldF9tc2dsZXZlbCxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG5pbmRleCBjZjk2NmZlNmM3NTljZS4uZGU0MTcwYzJhYTNiYTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuQEAgLTg4OCw2ICs4ODgsMTEgQEAgc3RhdGljIGludCBpZHBmX2NmZ19uZXRkZXYoc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxuIFx0bmV0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbiBcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gdnBvcnQtXHUwMDNlbWF4X210dTtcbiBcbitcdGlmIChpZHBmX2lzX3F1ZXVlX21vZGVsX3NwbGl0KHZwb3J0LVx1MDAzZWRmbHRfcXZfcnNyYy50eHFfbW9kZWwpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpZHBmX2lzX2NhcF9lbmEoYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuK1x0XHRcdCAgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpKVxuK1x0XHRuZXRkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSAxMjgwMDA7XG4rXG4gXHRkZmx0X2ZlYXR1cmVzID0gTkVUSUZfRl9TR1x0fFxuIFx0XHRcdE5FVElGX0ZfSElHSERNQTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuaW5kZXggNTY2YjA4Y2EzYTZjYjEuLjFjY2ZhZWIzNTE5MzVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTEsNiArMSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qIENvcHlyaWdodCAoQykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbiAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldHBvbGwuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwiaWRwZi5oXCJcbiAjaW5jbHVkZSBcImlkcGZfcHRwLmhcIlxuICNpbmNsdWRlIFwiaWRwZl92aXJ0Y2hubC5oXCJcbkBAIC0yNDA4LDkgKzI0MTAsMTMgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsXG4gXHRcdFx0XHQgICAgc3RydWN0IGlkcGZfdHhfc3BsaXRxX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdFx0ICAgIHUxNiB0ZF9jbWQsIHUxNiBzaXplKVxuIHtcbi1cdCoodTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSAodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCk7XG4rXHQqKF9fbGUzMiAqKVx1MDAyNmRlc2MtXHUwMDNlZmxvdy5xdzEuY21kX2R0eXBlID0gY3B1X3RvX2xlMzIoKHU4KShwYXJhbXMtXHUwMDNlZHR5cGUgfCB0ZF9jbWQpKTtcbiBcdGRlc2MtXHUwMDNlZmxvdy5xdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNigodTE2KXNpemUpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtXHUwMDNlY29tcGxfdGFnKTtcbitcbitcdGRlc2MtXHUwMDNlZmxvdy5xdzEudHNbMF0gPSBwYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdO1xuK1x0ZGVzYy1cdTAwM2VmbG93LnF3MS50c1sxXSA9IHBhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMV07XG4rXHRkZXNjLVx1MDAzZWZsb3cucXcxLnRzWzJdID0gcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXTtcbiB9XG4gXG4gLyoqXG5AQCAtMzAxMSw2ICszMDE3LDU5IEBAIHN0YXRpYyBib29sIGlkcGZfdHhfc3BsaXRxX25lZWRfcmUoc3RydWN0IGlkcGZfdHhfcXVldWUgKnR4X3EpXG4gXHRyZXR1cm4gZ2FwIFx1MDAzZT0gSURQRl9UWF9TUExJVFFfUkVfTUlOX0dBUDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaWRwZl90eF9zcGxpdHFfc2V0X3R4dGltZShjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqdHhfcSxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICp0eF9wYXJhbXMpXG4re1xuK1x0Y29uc3QgaW50IHRzX2dyYW5fcG93MiA9IDk7XG4rXHR1NjQgdHMsIG5vdztcbitcbitcdC8qIFNraXAgaWYgbmV0cG9sbDogbm90IG5lZWRlZCBhbmQgbm90IHNhZmUgdG8gY2FsbCBrdGltZSBoZWxwZXJzICovXG4rXHRpZiAobmV0cG9sbF90eF9ydW5uaW5nKHNrYi1cdTAwM2VkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzd2l0Y2ggKHNrYi1cdTAwM2V0c3RhbXBfdHlwZSkge1xuK1x0Y2FzZSBTS0JfQ0xPQ0tfUkVBTFRJTUU6XG4rXHRcdHRzID0ga3RpbWVfdG9fbnMoa3RpbWVfYWRkKHNrYi1cdTAwM2V0c3RhbXAsXG4rXHRcdFx0XHRcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfVEFJKSAtXG4rXHRcdFx0XHRcdCAgIGt0aW1lX21vbm9fdG9fYW55KDAsIFRLX09GRlNfUkVBTCkpKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNLQl9DTE9DS19NT05PVE9OSUM6XG4rXHRcdHRzID0ga3RpbWVfdG9fbnMoa3RpbWVfbW9ub190b19hbnkoc2tiLVx1MDAzZXRzdGFtcCwgVEtfT0ZGU19UQUkpKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNLQl9DTE9DS19UQUk6XG4rXHRcdHRzID0ga3RpbWVfdG9fbnMoc2tiLVx1MDAzZXRzdGFtcCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRub3cgPSBrdGltZV9nZXRfY2xvY2t0YWlfbnMoKTtcbitcdGlmICh0cyBcdTAwM2Mgbm93KVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBiZXlvbmQgb2ZmbG9hZCBob3Jpem9uPyBzZXQgb3ZlcmZsb3cgYml0IG9ubHkgKi9cbitcdGlmICh0cyBcdTAwM2Ugbm93ICsgKCh1NjQpc2tiLVx1MDAzZWRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICogTlNFQ19QRVJfVVNFQykpIHtcbitcdFx0dHhfcGFyYW1zLVx1MDAzZW9mZmxvYWQuZGVzY190c1syXSA9IDEgXHUwMDNjXHUwMDNjIDc7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHRzIFx1MDAzZVx1MDAzZT0gdHNfZ3Jhbl9wb3cyO1xuK1xuK1x0LyogMCBpcyB2YWxpZCAyNGIgdGltZXN0YW1wLCBidXQgYWxzbyBtZWFucyBmaWVsZCB1bnNldC5cbitcdCAqIEFkZCA1MTIgbnMgKHRzX2dyYW5fcG93MikgdG8gYXZvaWQgdGhpcyBjYXNlXG4rXHQgKi9cbitcdGlmICgodHMgXHUwMDI2IDB4N2ZmZmZmKSA9PSAwKSB7XG4rXHRcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMF0gPSAxO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzBdID0gdHMgXHUwMDI2IDB4ZmY7XG4rXHR0eF9wYXJhbXMtXHUwMDNlb2ZmbG9hZC5kZXNjX3RzWzFdID0gKHRzIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZjtcbitcdHR4X3BhcmFtcy1cdTAwM2VvZmZsb2FkLmRlc2NfdHNbMl0gPSAoKHRzIFx1MDAzZVx1MDAzZSAxNikgXHUwMDI2IDB4N2YpO1xuK31cbitcbiAvKipcbiAgKiBpZHBmX3R4X3NwbGl0cV9mcmFtZSAtIFNlbmRzIGJ1ZmZlciBvbiBUeCByaW5nIHVzaW5nIGZsZXggZGVzY3JpcHRvcnNcbiAgKiBAc2tiOiBzZW5kIGJ1ZmZlclxuQEAgLTMwOTcsNiArMzE1NiwxMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaWRwZl90eF9zcGxpdHFfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdFx0dHhfcGFyYW1zLmR0eXBlID0gSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFO1xuIFx0XHR0eF9wYXJhbXMuZW9wX2NtZCA9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QO1xuK1xuK1x0XHRpZiAoc2tiLVx1MDAzZXRzdGFtcCBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKVxuK1x0XHRcdGlkcGZfdHhfc3BsaXRxX3NldF90eHRpbWUodHhfcSwgc2tiLCBcdTAwMjZ0eF9wYXJhbXMpO1xuK1xuIFx0XHQvKiBTZXQgdGhlIFJFIGJpdCB0byBwZXJpb2RpY2FsbHkgXCJjbGVhblwiIHRoZSBkZXNjcmlwdG9yIHJpbmcuXG4gXHRcdCAqIE1JTl9HQVAgaXMgc2V0IHRvIE1JTl9SSU5HIHNpemUgdG8gZW5zdXJlIGl0IHdpbGwgYmUgc2V0IGF0XG4gXHRcdCAqIGxlYXN0IG9uY2UgZWFjaCB0aW1lIGFyb3VuZCB0aGUgcmluZy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuaW5kZXggNGJlNWIzYjZkM2VkMmIuLjg2NTQwOGI1N2IwZDU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuQEAgLTE2MSw2ICsxNjEsNyBAQCB1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyB7XG4gICogQHRzb19zZWdzOiBOdW1iZXIgb2Ygc2VnbWVudHMgdG8gYmUgc2VudFxuICAqIEB0c29faGRyX2xlbjogTGVuZ3RoIG9mIGhlYWRlcnMgdG8gYmUgZHVwbGljYXRlZFxuICAqIEB0ZF9jbWQ6IENvbW1hbmQgZmllbGQgdG8gYmUgaW5zZXJ0ZWQgaW50byBkZXNjcmlwdG9yXG4rICogQGRlc2NfdHM6IEZsb3cgc2NoZWR1bGluZyBvZmZsb2FkIHRpbWVzdGFtcFxuICAqL1xuIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zIHtcbiBcdHUzMiB0eF9mbGFncztcbkBAIC0xNzQsNiArMTc1LDcgQEAgc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMge1xuIFx0dTE2IHRzb19oZHJfbGVuO1xuIFxuIFx0dTE2IHRkX2NtZDtcbitcdHU4IGRlc2NfdHNbM107XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5pbmRleCA1ZDQ5MWE5ODI2NWVmOS4uYWRlZWJiZjUzZGFkZWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbkBAIC04NSw2ICs4NSw4IEBAIGVudW0ge1xuICAqIEB0eF9wdXNoX2J1Zl9tYXhfbGVuOiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBUWCBwdXNoIGJ1ZmZlclxuICAqIEBoZHNfdGhyZXNoOiBQYWNrZXQgc2l6ZSB0aHJlc2hvbGQgZm9yIGhlYWRlciBkYXRhIHNwbGl0IChIRFMpXG4gICogQGhkc190aHJlc2hfbWF4OiBNYXhpbXVtIHN1cHBvcnRlZCBzZXR0aW5nIGZvciBAaGRzX3RocmVzaG9sZFxuKyAqIEBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uOiBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcbisgKiBAbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b246IG1heCBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIHZhbHVlIGluIHVzZWNcbiAgKlxuICAqL1xuIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0ge1xuQEAgLTk3LDYgKzk5LDggQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSB7XG4gXHR1MzJcdHR4X3B1c2hfYnVmX21heF9sZW47XG4gXHR1MzJcdGhkc190aHJlc2g7XG4gXHR1MzJcdGhkc190aHJlc2hfbWF4O1xuK1x0dTMyXHRwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuK1x0dTMyXHRtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjtcbiB9O1xuIFxuIC8qKlxuQEAgLTEwOCw2ICsxMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtIHtcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9UWF9QVVNIX0JVRl9MRU46IGNhcHR1cmUgZm9yIHNldHRpbmcgdHhfcHVzaF9idWZfbGVuXG4gICogQEVUSFRPT0xfUklOR19VU0VfVENQX0RBVEFfU1BMSVQ6IGNhcHR1cmUgZm9yIHNldHRpbmcgdGNwX2RhdGFfc3BsaXRcbiAgKiBARVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUzogY2FwdHVyZSBmb3Igc2V0dGluZyBoZWFkZXItZGF0YS1zcGxpdC10aHJlc2hcbisgKiBARVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OOiBjYXB0dXJlIGZvciBzZXR0aW5nIHBhY2luZyBvZmZsb2FkIGhvcml6b25cbiAgKi9cbiBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xuIFx0RVRIVE9PTF9SSU5HX1VTRV9SWF9CVUZfTEVOXHRcdD0gQklUKDApLFxuQEAgLTExNyw2ICsxMjIsNyBAQCBlbnVtIGV0aHRvb2xfc3VwcG9ydGVkX3JpbmdfcGFyYW0ge1xuIFx0RVRIVE9PTF9SSU5HX1VTRV9UWF9QVVNIX0JVRl9MRU5cdD0gQklUKDQpLFxuIFx0RVRIVE9PTF9SSU5HX1VTRV9UQ1BfREFUQV9TUExJVFx0XHQ9IEJJVCg1KSxcbiBcdEVUSFRPT0xfUklOR19VU0VfSERTX1RIUlNcdFx0PSBCSVQoNiksXG4rXHRFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05cdD0gQklUKDcpLFxuIH07XG4gXG4gI2RlZmluZSBfX0VUSF9SU1NfSEFTSF9CSVQoYml0KVx0KCh1MzIpMSBcdTAwM2NcdTAwM2MgKGJpdCkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zYzJlZDQ1YjU1ZGNhZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRAZHBsbF9waW46IFBvaW50ZXIgdG8gdGhlIFN5bmNFIHNvdXJjZSBwaW4gb2YgYSBEUExMIHN1YnN5c3RlbSxcbiAgKlx0XHQgICB3aGVyZSB0aGUgY2xvY2sgaXMgcmVjb3ZlcmVkLlxuICAqXG4tICpcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IEVEVCBvZmZsb2FkIGhvcml6b24gaW4gbnNlYy5cbisgKlx0QHBhY2luZ19vZmZsb2FkX2hvcml6b246IGFjdGl2ZSBwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIGluIHVzZWMuXG4rICpcdEBtYXhfcGFjaW5nX29mZmxvYWRfaG9yaXpvbjogbWF4IHBhY2luZyBvZmZsb2FkIGhvcml6b24gaW4gdXNlYy5cbiAgKlx0QG5hcGlfY29uZmlnOiBBbiBhcnJheSBvZiBuYXBpX2NvbmZpZyBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgcGVyLU5BUElcbiAgKlx0XHQgICAgICBzZXR0aW5ncy5cbiAgKlx0QG51bV9uYXBpX2NvbmZpZ3M6XHRudW1iZXIgb2YgYWxsb2NhdGVkIE5BUEkgY29uZmlnIHN0cnVjdHMsXG5AQCAtMjU1Miw3ICsyNTUzLDggQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xuIFx0LyoqIEBpcnFfbW9kZXI6IGRpbSBwYXJhbWV0ZXJzIHVzZWQgaWYgSVNfRU5BQkxFRChDT05GSUdfRElNTElCKS4gKi9cbiBcdHN0cnVjdCBkaW1faXJxX21vZGVyXHQqaXJxX21vZGVyO1xuIFxuLVx0dTY0XHRcdFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHR1MzJcdFx0XHRwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuK1x0dTMyXHRcdFx0bWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gXHRzdHJ1Y3QgbmFwaV9jb25maWdcdCpuYXBpX2NvbmZpZztcbiBcdHUzMlx0XHRcdG51bV9uYXBpX2NvbmZpZ3M7XG4gXHR1MzJcdFx0XHRuYXBpX2RlZmVyX2hhcmRfaXJxcztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmM2MuLjZmMWEyZmEzNjE1N2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuQEAgLTE5Myw2ICsxOTMsOCBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYLFxuIFx0RVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0gsXG4gXHRFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF9NQVgsXG4rXHRFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbitcdEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCxcbiBcbiBcdF9fRVRIVE9PTF9BX1JJTkdTX0NOVCxcbiBcdEVUSFRPT0xfQV9SSU5HU19NQVggPSAoX19FVEhUT09MX0FfUklOR1NfQ05UIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jXG5pbmRleCA1YjRkZDA0ZDYxMjQ3Ni4uNzg5N2U0MjIwNTEzMDAgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9wa3RnZW4uY1xuKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmNcbkBAIC0yMDEsNiArMjAxLDcgQEBcbiBcdHBmKFNWSURfUk5EKVx0XHQvKiBSYW5kb20gU1ZMQU4gSUQgKi9cdFx0XHRcXFxuIFx0cGYoTk9ERSlcdFx0LyogTm9kZSBtZW1vcnkgYWxsb2MqL1x0XHRcdFxcXG4gXHRwZihTSEFSRUQpXHRcdC8qIFNoYXJlZCBTS0IgKi9cdFx0XHRcXFxuK1x0cGYoVFhUSU1FKVx0XHQvKiBTT19UWFRJTUUgc3VwcG9ydCAqL1x0XHRcdFxcXG4gXG4gI2RlZmluZSBwZihmbGFnKVx0XHRmbGFnIyNfU0hJRlQsXG4gZW51bSBwa3RfZmxhZ3Mge1xuQEAgLTI5MSw2ICsyOTIsMTAgQEAgc3RydWN0IHBrdGdlbl9kZXYge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHR1NjQgZGVsYXk7XHRcdC8qIG5hbm8tc2Vjb25kcyAqL1xuIFxuK1x0LyogVFhUSU1FIHN1cHBvcnQgKi9cbitcdHU2NCB0eHRpbWVfZGVsYXk7XHQvKiB0cmFuc21pdCB0aW1lIGRlbGF5IGluIG5zICovXG4rXHRjbG9ja2lkX3QgdHh0aW1lX2Nsb2NraWQ7IC8qIGNsb2NraWQgZm9yIFNPX1RYVElNRSAqL1xuK1xuIFx0X191NjQgY291bnQ7XHRcdC8qIERlZmF1bHQgTm8gcGFja2V0cyB0byBzZW5kICovXG4gXHRfX3U2NCBzb2ZhcjtcdFx0LyogSG93IG1hbnkgcGt0cyB3ZSd2ZSBzZW50IHNvIGZhciAqL1xuIFx0X191NjQgdHhfYnl0ZXM7XHRcdC8qIEhvdyBtYW55IGJ5dGVzIHdlJ3ZlIHRyYW5zbWl0dGVkICovXG5AQCAtNjY2LDYgKzY3MSwxNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9pZl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuIFx0aWYgKHBrdF9kZXYtXHUwMDNlbm9kZSBcdTAwM2U9IDApXG4gXHRcdHNlcV9wcmludGYoc2VxLCBcIiAgICAgbm9kZTogJWRcXG5cIiwgcGt0X2Rldi1cdTAwM2Vub2RlKTtcbiBcbitcdGlmIChwa3RfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBGX1RYVElNRSkge1xuK1x0XHRjbG9ja2lkX3QgY2xvY2tpZCA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkKTtcbitcbitcdFx0c2VxX3ByaW50ZihzZXEsIFwiICAgICB0eHRpbWVfZGVsYXk6ICVsbHVcXG5cIixcbitcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KTtcbitcdFx0c2VxX3ByaW50ZihzZXEsIFwiICAgICB0eHRpbWVfY2xvY2tpZDogJXNcXG5cIixcbitcdFx0XHQgICBjbG9ja2lkID09IENMT0NLX01PTk9UT05JQyA/IFwibW9ub3RvbmljXCIgOlxuK1x0XHRcdCAgIGNsb2NraWQgPT0gQ0xPQ0tfUkVBTFRJTUUgPyBcInJlYWx0aW1lXCIgOlxuK1x0XHRcdCAgIGNsb2NraWQgPT0gQ0xPQ0tfVEFJID8gXCJ0YWlcIiA6IFwidW5rbm93blwiKTtcbitcdH1cbitcbiBcdGlmIChwa3RfZGV2LVx1MDAzZXhtaXRfbW9kZSA9PSBNX05FVElGX1JFQ0VJVkUpXG4gXHRcdHNlcV9wdXRzKHNlcSwgXCIgICAgIHhtaXRfbW9kZTogbmV0aWZfcmVjZWl2ZVxcblwiKTtcbiBcdGVsc2UgaWYgKHBrdF9kZXYtXHUwMDNleG1pdF9tb2RlID09IE1fUVVFVUVfWE1JVClcbkBAIC0xMTQxLDYgKzExNTcsNTAgQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdCh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtXHUwMDNlZGVsYXkpO1xuIFx0XHRyZXR1cm4gY291bnQ7XG4gXHR9XG4rXHRpZiAoIXN0cmNtcChuYW1lLCBcInR4dGltZV9kZWxheVwiKSkge1xuK1x0XHRtYXggPSBtaW4oMTAsIGNvdW50IC0gaSk7XG4rXHRcdGxlbiA9IG51bV9hcmcoXHUwMDI2dXNlcl9idWZmZXJbaV0sIG1heCwgXHUwMDI2dmFsdWUpO1xuK1x0XHRpZiAobGVuIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBsZW47XG4rXG4rXHRcdC8qIGluIHF1ZXVlX3htaXQgbW9kZSBmcSBtYXkgY2xlYXIgdHN0YW1wLCBkbyBub3QgcmV1c2Ugc2tiICovXG4rXHRcdGlmICh2YWx1ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcGt0X2Rldi1cdTAwM2VjbG9uZV9za2IgXHUwMDNlIDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFdSSVRFX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXksICh1NjQpdmFsdWUpO1xuK1x0XHRzcHJpbnRmKHBnX3Jlc3VsdCwgXCJPSzogdHh0aW1lX2RlbGF5PSVsbHVcIixcbitcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKXZhbHVlKTtcbitcdFx0cmV0dXJuIGNvdW50O1xuK1x0fVxuK1x0aWYgKCFzdHJjbXAobmFtZSwgXCJ0eHRpbWVfY2xvY2tpZFwiKSkge1xuK1x0XHRjaGFyIGNsb2Nrc3RyWzMyXTtcbitcdFx0Y2xvY2tpZF90IGNsaztcbitcbitcdFx0bWVtc2V0KGNsb2Nrc3RyLCAwLCBzaXplb2YoY2xvY2tzdHIpKTtcbitcdFx0bWF4ID0gbWluKHNpemVvZihjbG9ja3N0cikgLSAxLCBjb3VudCAtIGkpO1xuK1x0XHRsZW4gPSBzdHJuX2xlbihcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4KTtcbitcdFx0aWYgKGxlbiBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gbGVuO1xuK1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoY2xvY2tzdHIsIFx1MDAyNnVzZXJfYnVmZmVyW2ldLCBsZW4pKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0XHRpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCJtb25vdG9uaWNcIikpIHtcbitcdFx0XHRjbGsgPSBDTE9DS19NT05PVE9OSUM7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNtcChjbG9ja3N0ciwgXCJyZWFsdGltZVwiKSkge1xuK1x0XHRcdGNsayA9IENMT0NLX1JFQUxUSU1FO1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJjbXAoY2xvY2tzdHIsIFwidGFpXCIpKSB7XG4rXHRcdFx0Y2xrID0gQ0xPQ0tfVEFJO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHNwcmludGYocGdfcmVzdWx0LCBcIkVSUk9SOiB1bmtub3duIGNsb2NraWQgJyVzJ1wiLFxuK1x0XHRcdFx0Y2xvY2tzdHIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdHNwcmludGYocGdfcmVzdWx0LCBcIk9LOiB0eHRpbWVfY2xvY2tpZD0lc1wiLCBjbG9ja3N0cik7XG4rXHRcdFdSSVRFX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCwgY2xrKTtcbitcdFx0cmV0dXJuIGNvdW50O1xuK1x0fVxuIFx0aWYgKCFzdHJjbXAobmFtZSwgXCJyYXRlXCIpKSB7XG4gXHRcdG1heCA9IG1pbigxMCwgY291bnQgLSBpKTtcbiBcdFx0bGVuID0gbnVtX2FyZyhcdTAwMjZ1c2VyX2J1ZmZlcltpXSwgbWF4LCBcdTAwMjZ2YWx1ZSk7XG5AQCAtMTIzOCw2ICsxMjk4LDggQEAgc3RhdGljIHNzaXplX3QgcGt0Z2VuX2lmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRpZiAodmFsdWUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IChwa3RfZGV2LVx1MDAzZW5faW1peF9lbnRyaWVzIFx1MDAzZSAwIHx8XG4gXHRcdFx0XHQgICEocGt0X2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgRl9TSEFSRUQpKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0aWYgKHZhbHVlIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2V0eHRpbWVfZGVsYXkpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRwa3RfZGV2LVx1MDAzZWNsb25lX3NrYiA9IHZhbHVlO1xuIFxuQEAgLTIzMjEsNiArMjM4MywyMSBAQCBzdGF0aWMgdm9pZCBwa3RnZW5fc2V0dXBfaW5qZWN0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIH1cbiBcbiBcbitzdGF0aWMga3RpbWVfdCBrdGltZV9nZXRfY2xvY2soY2xvY2tpZF90IGNsb2NraWQpXG4re1xuK1x0c3dpdGNoIChjbG9ja2lkKSB7XG4rXHRjYXNlIENMT0NLX1JFQUxUSU1FOlxuK1x0XHRyZXR1cm4ga3RpbWVfZ2V0X3JlYWwoKTtcbitcdGNhc2UgQ0xPQ0tfTU9OT1RPTklDOlxuK1x0XHRyZXR1cm4ga3RpbWVfZ2V0KCk7XG4rXHRjYXNlIENMT0NLX1RBSTpcbitcdFx0cmV0dXJuIGt0aW1lX2dldF9jbG9ja3RhaSgpO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRyZXR1cm4ga3RpbWVfZ2V0KCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNwaW4oc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGt0aW1lX3Qgc3Bpbl91bnRpbClcbiB7XG4gXHRrdGltZV90IHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xuQEAgLTM1MTAsNyArMzU4Nyw4IEBAIHN0YXRpYyB2b2lkIHBrdGdlbl93YWl0X2Zvcl9za2Ioc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXG4gc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4ge1xuLVx0Ym9vbCBza2Jfc2hhcmVkID0gISEoUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNlZmxhZ3MpIFx1MDAyNiBGX1NIQVJFRCk7XG4rXHR1MzIgZmxhZ3MgPSBSRUFEX09OQ0UocGt0X2Rldi1cdTAwM2VmbGFncyk7XG4rXHRib29sIHNrYl9zaGFyZWQgPSAhIShmbGFncyBcdTAwMjYgRl9TSEFSRUQpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm9kZXYgPSBwa3RfZGV2LVx1MDAzZW9kZXY7XG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gXHR1bnNpZ25lZCBpbnQgYnVyc3QgPSAxO1xuQEAgLTM1NDUsNiArMzYyMyw4IEBAIHN0YXRpYyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KVxuIFx0LyogSWYgbm8gc2tiIG9yIGNsb25lIGNvdW50IGV4aGF1c3RlZCB0aGVuIGdldCBuZXcgb25lICovXG4gXHRpZiAoIXBrdF9kZXYtXHUwMDNlc2tiIHx8IChwa3RfZGV2LVx1MDAzZWxhc3Rfb2sgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgKytwa3RfZGV2LVx1MDAzZWNsb25lX2NvdW50IFx1MDAzZT0gY2xvbmVfc2tiKSkge1xuK1x0XHR1NjQgdHh0aW1lX2RlbGF5O1xuK1xuIFx0XHQvKiBidWlsZCBhIG5ldyBwa3QgKi9cbiBcdFx0a2ZyZWVfc2tiKHBrdF9kZXYtXHUwMDNlc2tiKTtcbiBcbkBAIC0zNTU3LDYgKzM2MzcsMTYgQEAgc3RhdGljIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpXG4gXHRcdH1cbiBcdFx0cGt0X2Rldi1cdTAwM2VsYXN0X3BrdF9zaXplID0gcGt0X2Rldi1cdTAwM2Vza2ItXHUwMDNlbGVuO1xuIFx0XHRwa3RfZGV2LVx1MDAzZWNsb25lX2NvdW50ID0gMDtcdC8qIHJlc2V0IGNvdW50ZXIgKi9cbitcbitcdFx0dHh0aW1lX2RlbGF5ID0gUkVBRF9PTkNFKHBrdF9kZXYtXHUwMDNldHh0aW1lX2RlbGF5KTtcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBGX1RYVElNRSBcdTAwMjZcdTAwMjYgdHh0aW1lX2RlbGF5KSB7XG4rXHRcdFx0Y2xvY2tpZF90IGNsayA9IFJFQURfT05DRShwa3RfZGV2LVx1MDAzZXR4dGltZV9jbG9ja2lkKTtcbitcdFx0XHRrdGltZV90IHR4dGltZSA9IGt0aW1lX2FkZF9ucyhrdGltZV9nZXRfY2xvY2soY2xrKSxcbitcdFx0XHRcdFx0XHQgICAgICB0eHRpbWVfZGVsYXkpO1xuK1xuK1x0XHRcdHNrYl9zZXRfZGVsaXZlcnlfdHlwZV9ieV9jbG9ja2lkKHBrdF9kZXYtXHUwMDNlc2tiLCB0eHRpbWUsXG4rXHRcdFx0XHRcdFx0XHQgY2xrKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKHBrdF9kZXYtXHUwMDNlZGVsYXkgXHUwMDI2XHUwMDI2IHBrdF9kZXYtXHUwMDNlbGFzdF9vaylcbkBAIC0zODY5LDYgKzM5NTksNyBAQCBzdGF0aWMgaW50IHBrdGdlbl9hZGRfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyICppZm5hbWUpXG4gXHRwa3RfZGV2LVx1MDAzZWJ1cnN0ID0gMTtcbiBcdHBrdF9kZXYtXHUwMDNlbm9kZSA9IE5VTUFfTk9fTk9ERTtcbiBcdHBrdF9kZXYtXHUwMDNlZmxhZ3MgPSBGX1NIQVJFRDtcdC8qIFNLQiBzaGFyZWQgYnkgZGVmYXVsdCAqL1xuK1x0cGt0X2Rldi1cdTAwM2V0eHRpbWVfY2xvY2tpZCA9IENMT0NLX01PTk9UT05JQztcbiBcbiBcdGVyciA9IHBrdGdlbl9zZXR1cF9kZXYodC1cdTAwM2VuZXQsIHBrdF9kZXYsIGlmbmFtZSk7XG4gXHRpZiAoZXJyKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDMxYzY1YTU0NWExMDdjLi4yYzdhMjQ1YzVmZmMyZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xuQEAgLTIxNTUsNyArMjE1NSw3IEBAIHN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9UU09fTUFYX1NFR1MsXG4gXHRcdFx0UkVBRF9PTkNFKGRldi1cdTAwM2V0c29fbWF4X3NlZ3MpKSB8fFxuIFx0ICAgIG5sYV9wdXRfdWludChza2IsIElGTEFfTUFYX1BBQ0lOR19PRkZMT0FEX0hPUklaT04sXG4tXHRcdFx0IFJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pKSB8fFxuK1x0XHRcdCAodTY0KVJFQURfT05DRShkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pICogTlNFQ19QRVJfVVNFQykgfHxcbiAjaWZkZWYgQ09ORklHX1JQU1xuIFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fUlhfUVVFVUVTLFxuIFx0XHRcdFJFQURfT05DRShkZXYtXHUwMDNlbnVtX3J4X3F1ZXVlcykpIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmMgYi9uZXQvZXRodG9vbC9jb21tb24uY1xuaW5kZXggMjNkYjQwNjE4ZmVkMTQuLjVjMjMyM2FhYTAyYjZiIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmNcbisrKyBiL25ldC9ldGh0b29sL2NvbW1vbi5jXG5AQCAtOTU0LDYgKzk1NCw5IEBAIHZvaWQgZXRodG9vbF9yaW5ncGFyYW1fZ2V0X2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0LyogRHJpdmVyIGdpdmVzIHVzIGN1cnJlbnQgc3RhdGUsIHdlIHdhbnQgdG8gcmV0dXJuIGN1cnJlbnQgY29uZmlnICovXG4gXHRrcGFyYW0tXHUwMDNldGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRrcGFyYW0tXHUwMDNlaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbitcbitcdGtwYXJhbS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHRrcGFyYW0tXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSBkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGV0aHRvb2xfaW5pdF90c2luZm8oc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5pbmRleCAzZTk2OWEwNzBmOWZlNC4uYWU3YjY1MWM2NThmNzQgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ5NCw3ICs0OTQsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfZmVhdHVyZXNfc2V0X3BvbGljeVtFVEhUT09MX0FfRkVBVFVSRVNfV0FOVFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3NfZ2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0hFQURFUiArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wcml2ZmxhZ3Nfc2V0X3BvbGljeVtFVEhUT09MX0FfUFJJVkZMQUdTX0ZMQUdTICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX2dldF9wb2xpY3lbRVRIVE9PTF9BX1JJTkdTX0hFQURFUiArIDFdO1xuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIX01BWCArIDFdO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9yaW5nc19zZXRfcG9saWN5W0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9jaGFubmVsc19nZXRfcG9saWN5W0VUSFRPT0xfQV9DSEFOTkVMU19IRUFERVIgKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY2hhbm5lbHNfc2V0X3BvbGljeVtFVEhUT09MX0FfQ0hBTk5FTFNfQ09NQklORURfQ09VTlQgKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfY29hbGVzY2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfQ09BTEVTQ0VfSEVBREVSICsgMV07XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcmluZ3MuYyBiL25ldC9ldGh0b29sL3JpbmdzLmNcbmluZGV4IDkwNTRjODljNWQ3YmIyLi41MjE1ODU3MmZlMTBjMCAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL3JpbmdzLmNcbisrKyBiL25ldC9ldGh0b29sL3JpbmdzLmNcbkBAIC00Miw2ICs0Miw4IEBAIHN0YXRpYyBpbnQgcmluZ3NfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4gXG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0udGNwX2RhdGFfc3BsaXQgPSBkZXYtXHUwMDNlY2ZnLVx1MDAzZWhkc19jb25maWc7XG4gXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0uaGRzX3RocmVzaCA9IGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX3RocmVzaDtcbitcdGRhdGEtXHUwMDNla2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0gZGV2LVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b247XG4rXHRkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24gPSBkZXYtXHUwMDNlbWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b247XG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3JpbmdwYXJhbShkZXYsIFx1MDAyNmRhdGEtXHUwMDNlcmluZ3BhcmFtLFxuIFx0XHRcdFx0XHRcdTAwMjZkYXRhLVx1MDAzZWtlcm5lbF9yaW5ncGFyYW0sIGluZm8tXHUwMDNlZXh0YWNrKTtcbkBAIC02OSw3ICs3MSw5IEBAIHN0YXRpYyBpbnQgcmluZ3NfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuIFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBfUklOR1NfVFhfUFVTSF9CVUZfTEVOICovXG4gXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19UWF9QVVNIX0JVRl9MRU5fTUFYICovXG4gXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19IRFNfVEhSRVNIICovXG4tXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1x0LyogX1JJTkdTX0hEU19USFJFU0hfTUFYICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIF9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05fTUFYICovXG4gfVxuIFxuIHN0YXRpYyBpbnQgcmluZ3NfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEyMSw3ICsxMjUsMTIgQEAgc3RhdGljIGludCByaW5nc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNILFxuIFx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaCkgfHxcbiBcdCAgICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hfTUFYLFxuLVx0XHRcdCAga3ItXHUwMDNlaGRzX3RocmVzaF9tYXgpKSkpXG4rXHRcdFx0ICBrci1cdTAwM2VoZHNfdGhyZXNoX21heCkpKSB8fFxuK1x0ICAgICgoc3VwcG9ydGVkX3JpbmdfcGFyYW1zIFx1MDAyNiBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT04pIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTixcbitcdFx0XHQgIGtyLVx1MDAzZXBhY2luZ19vZmZsb2FkX2hvcml6b24pIHx8XG4rXHQgICAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OX01BWCxcbitcdFx0XHQgIGtyLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSkpKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0LDYgKzE1Myw3IEBAIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3JpbmdzX3NldF9wb2xpY3lbXSA9IHtcbiBcdFtFVEhUT09MX0FfUklOR1NfUlhfUFVTSF1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIDEpLFxuIFx0W0VUSFRPT0xfQV9SSU5HU19UWF9QVVNIX0JVRl9MRU5dXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gXHRbRVRIVE9PTF9BX1JJTkdTX0hEU19USFJFU0hdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiB9O1xuIFxuIHN0YXRpYyBpbnRcbkBAIC0xNzcsNiArMTg3LDE0IEBAIGV0aG5sX3NldF9yaW5nc192YWxpZGF0ZShzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4rXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEob3BzLVx1MDAzZXN1cHBvcnRlZF9yaW5nX3BhcmFtcyBcdTAwMjYgRVRIVE9PTF9SSU5HX1VTRV9QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OKSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0ICAgIHRiW0VUSFRPT0xfQV9SSU5HU19QQUNJTkdfT0ZGTE9BRF9IT1JJWk9OXSxcbitcdFx0XHRcdCAgICBcInNldHRpbmcgcGFjaW5nIG9mZmxvYWQgaG9yaXpvbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRpZiAodGJbRVRIVE9PTF9BX1JJTkdTX0NRRV9TSVpFXSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKG9wcy1cdTAwM2VzdXBwb3J0ZWRfcmluZ19wYXJhbXMgXHUwMDI2IEVUSFRPT0xfUklOR19VU0VfQ1FFX1NJWkUpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssXG5AQCAtMjQ2LDYgKzI2NCw4IEBAIGV0aG5sX3NldF9yaW5ncyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRcdCB0YltFVEhUT09MX0FfUklOR1NfVFhfUFVTSF9CVUZfTEVOXSwgXHUwMDI2bW9kKTtcbiBcdGV0aG5sX3VwZGF0ZV91MzIoXHUwMDI2a2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoLFxuIFx0XHRcdCB0YltFVEhUT09MX0FfUklOR1NfSERTX1RIUkVTSF0sIFx1MDAyNm1vZCk7XG4rXHRldGhubF91cGRhdGVfdTMyKFx1MDAyNmtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbixcbitcdFx0XHQgdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dLCBcdTAwMjZtb2QpO1xuIFx0aWYgKCFtb2QpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTI4MSw2ICszMDEsOSBAQCBldGhubF9zZXRfcmluZ3Moc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0ZXJyX2F0dHIgPSB0YltFVEhUT09MX0FfUklOR1NfVFhdO1xuIFx0ZWxzZSBpZiAoa2VybmVsX3JpbmdwYXJhbS5oZHNfdGhyZXNoIFx1MDAzZSBrZXJuZWxfcmluZ3BhcmFtLmhkc190aHJlc2hfbWF4KVxuIFx0XHRlcnJfYXR0ciA9IHRiW0VUSFRPT0xfQV9SSU5HU19IRFNfVEhSRVNIXTtcbitcdGVsc2UgaWYgKGtlcm5lbF9yaW5ncGFyYW0ucGFjaW5nX29mZmxvYWRfaG9yaXpvbiBcdTAwM2VcbitcdFx0IGtlcm5lbF9yaW5ncGFyYW0ubWF4X3BhY2luZ19vZmZsb2FkX2hvcml6b24pXG4rXHRcdGVycl9hdHRyID0gdGJbRVRIVE9PTF9BX1JJTkdTX1BBQ0lOR19PRkZMT0FEX0hPUklaT05dO1xuIFx0ZWxzZVxuIFx0XHRlcnJfYXR0ciA9IE5VTEw7XG4gXHRpZiAoZXJyX2F0dHIpIHtcbkBAIC0zMDIsNiArMzI1LDkgQEAgZXRobmxfc2V0X3JpbmdzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gXHRyZXQgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3JpbmdwYXJhbShkZXYsIFx1MDAyNnJpbmdwYXJhbSxcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2a2VybmVsX3JpbmdwYXJhbSwgaW5mby1cdTAwM2VleHRhY2spO1xuK1x0aWYgKCFyZXQpXG4rXHRcdGRldi1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uID0ga2VybmVsX3JpbmdwYXJhbS5wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uO1xuK1xuIFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnEuYyBiL25ldC9zY2hlZC9zY2hfZnEuY1xuaW5kZXggN2NhZTA4MmE5ODQ3MjEuLjM2MDA2ZjY5YTg3NTM2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2ZxLmNcbkBAIC0zOTksNiArMzk5LDExIEBAIHN0YXRpYyBzdHJ1Y3QgZnFfZmxvdyAqZnFfY2xhc3NpZnkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcGFjaW5nX3N0YXR1cykgIT0gU0tfUEFDSU5HX0ZRKVxuIFx0XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNrLVx1MDAzZXNrX3BhY2luZ19zdGF0dXMsXG4gXHRcdFx0XHRcdCAgU0tfUEFDSU5HX0ZRKTtcbitcbitcdFx0aWYgKHEtXHUwMDNlb2ZmbG9hZF9ob3Jpem9uIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZnFfc2tiX2NiKHNrYiktXHUwMDNldGltZV90b19zZW5kIFx1MDAzYz0gbm93KVxuK1x0XHRcdHNrYi1cdTAwM2V0c3RhbXAgPSAwO1xuK1xuIFx0XHRyZXR1cm4gXHUwMDI2cS1cdTAwM2VpbnRlcm5hbDtcbiBcdH1cbiBcbkBAIC03MDcsNiArNzEyLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIFx0c3RydWN0IGZxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gXHRzdHJ1Y3QgZnFfcGVyYmFuZF9mbG93cyAqcGJhbmQ7XG4gXHRzdHJ1Y3QgZnFfZmxvd19oZWFkICpoZWFkO1xuK1x0dTY0IHRpbWVfbmV4dF9wYWNrZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IGZxX2Zsb3cgKmY7XG4gXHR1bnNpZ25lZCBsb25nIHJhdGU7XG5AQCAtNzIxLDcgKzcyNyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdGlmIChza2IpIHtcbiBcdFx0cS1cdTAwM2VpbnRlcm5hbC5xbGVuLS07XG4gXHRcdGZxX2RlcXVldWVfc2tiKHNjaCwgXHUwMDI2cS1cdTAwM2VpbnRlcm5hbCwgc2tiKTtcbi1cdFx0Z290byBvdXQ7XG4rXHRcdHJldHVybiBza2I7XG4gXHR9XG4gXG4gXHRub3cgPSBrdGltZV9nZXRfbnMoKTtcbkBAIC03NTgsOCArNzY0LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuIFxuIFx0c2tiID0gZnFfcGVlayhmKTtcbiBcdGlmIChza2IpIHtcbi1cdFx0dTY0IHRpbWVfbmV4dF9wYWNrZXQgPSBtYXhfdCh1NjQsIGZxX3NrYl9jYihza2IpLVx1MDAzZXRpbWVfdG9fc2VuZCxcbi1cdFx0XHRcdFx0ICAgICBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xuK1x0XHR0aW1lX25leHRfcGFja2V0ID0gbWF4X3QodTY0LCBmcV9za2JfY2Ioc2tiKS1cdTAwM2V0aW1lX3RvX3NlbmQsXG4rXHRcdFx0XHRcdCBmLVx1MDAzZXRpbWVfbmV4dF9wYWNrZXQpO1xuIFxuIFx0XHRpZiAobm93ICsgcS1cdTAwM2VvZmZsb2FkX2hvcml6b24gXHUwMDNjIHRpbWVfbmV4dF9wYWNrZXQpIHtcbiBcdFx0XHRoZWFkLVx1MDAzZWZpcnN0ID0gZi1cdTAwM2VuZXh0O1xuQEAgLTgyOCwxMSArODM0LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbiBcdFx0ICogZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IHdhcyBzZXQgd2hlbiBwcmlvciBwYWNrZXQgd2FzIHNlbnQsXG4gXHRcdCAqIGFuZCBjdXJyZW50IHRpbWUgKEBub3cpIGNhbiBiZSB0b28gbGF0ZSBieSB0ZW5zIG9mIHVzLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGYtXHUwMDNldGltZV9uZXh0X3BhY2tldClcbitcdFx0aWYgKGYtXHUwMDNldGltZV9uZXh0X3BhY2tldCBcdTAwMjZcdTAwMjYgZi1cdTAwM2V0aW1lX25leHRfcGFja2V0IFx1MDAzYyBub3cpXG4gXHRcdFx0bGVuIC09IG1pbihsZW4vMiwgbm93IC0gZi1cdTAwM2V0aW1lX25leHRfcGFja2V0KTtcbiBcdFx0Zi1cdTAwM2V0aW1lX25leHRfcGFja2V0ID0gbm93ICsgbGVuO1xuIFx0fVxuK1xuIG91dDpcbitcdGlmIChxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbiBcdTAwMjZcdTAwMjYgdGltZV9uZXh0X3BhY2tldCBcdTAwM2M9IG5vdylcbitcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IDA7XG4rXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbkBAIC0xMTc5LDcgKzExODksOCBAQCBzdGF0aWMgaW50IGZxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIFx0XHR1NjQgb2ZmbG9hZF9ob3Jpem9uID0gKHU2NClOU0VDX1BFUl9VU0VDICpcbiBcdFx0XHRcdCAgICAgIG5sYV9nZXRfdTMyKHRiW1RDQV9GUV9PRkZMT0FEX0hPUklaT05dKTtcbiBcbi1cdFx0aWYgKG9mZmxvYWRfaG9yaXpvbiBcdTAwM2M9IHFkaXNjX2RldihzY2gpLVx1MDAzZW1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uKSB7XG4rXHRcdGlmIChvZmZsb2FkX2hvcml6b24gXHUwMDNjPVxuK1x0XHQgICAgKHU2NClxZGlzY19kZXYoc2NoKS1cdTAwM2VwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uICogTlNFQ19QRVJfVVNFQykge1xuIFx0XHRcdFdSSVRFX09OQ0UocS1cdTAwM2VvZmZsb2FkX2hvcml6b24sIG9mZmxvYWRfaG9yaXpvbik7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJpbnZhbGlkIG9mZmxvYWRfaG9yaXpvblwiKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zZXR0aW5ncyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NldHRpbmdzXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI0NzhlNjg0ODQ2YTE2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zZXR0aW5nc1xuQEAgLTAsMCArMSBAQFxuK3RpbWVvdXQ9MjQwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUuY1xuaW5kZXggNTVhMzg2ZjNkMWI5MGYuLjZlNjRiYWE0YzYwZGQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5jXG5AQCAtNDIsOCArNDIsMTAgQEAgc3RhdGljIGJvb2xcdGNmZ19tYWNoaW5lX3Nsb3c7XG4gc3RhdGljIHVpbnQ2NF90XHRjZmdfc3RhcnRfdGltZV9ucztcbiBzdGF0aWMgaW50XHRjZmdfbWFyaztcbiBzdGF0aWMgYm9vbFx0Y2ZnX3J4O1xuK3N0YXRpYyBib29sXHRjZmdfdmVyaWZ5X2h3X29mZmxvYWQ7XG4gXG4gc3RhdGljIHVpbnQ2NF90IGdsb2JfdHN0YXJ0O1xuK3N0YXRpYyB1aW50NjRfdCBnbG9iX3RzdGFydF9yZWFsO1xuIHN0YXRpYyB1aW50NjRfdCB0ZGVsaXZlcl9tYXg7XG4gXG4gc3RhdGljIGludCBlcnJvcnM7XG5AQCAtMTU4LDE4ICsxNjAsNzAgQEAgc3RhdGljIHZvaWQgZG9fcmVjdl92ZXJpZnlfZW1wdHkoaW50IGZkcilcbiBcdFx0ZXJyb3IoMSwgMCwgXCJyZWN2OiBub3QgZW1wdHkgYXMgZXhwZWN0ZWQgKCVkLCAlZClcIiwgcmV0LCBlcnJubyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXG4rc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsXG4rXHRcdFx0XHQgICAgY29uc3QgY2hhciBwYXlsb2FkX2NoYXIpXG4re1xuK1x0Y29uc3QgY2hhciAqcmVhc29uID0gTlVMTDtcbitcdGludDY0X3QgdHN0YW1wID0gMDtcbitcbitcdHN3aXRjaCAoZXJyLVx1MDAzZWVlX2Vycm5vKSB7XG4rXHRjYXNlIEVDQU5DRUxFRDpcbitcdFx0aWYgKGVyci1cdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX01JU1NFRClcbitcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcblwiLFxuK1x0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbitcdFx0cmVhc29uID0gXCJtaXNzZWQgdHh0aW1lXCI7XG4rXHRicmVhaztcbitcdGNhc2UgRUlOVkFMOlxuK1x0XHRpZiAoZXJyLVx1MDAzZWVlX2NvZGUgIT0gU09fRUVfQ09ERV9UWFRJTUVfSU5WQUxJRF9QQVJBTSlcbitcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcblwiLFxuK1x0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9jb2RlKTtcbitcdFx0cmVhc29uID0gXCJpbnZhbGlkIHR4dGltZVwiO1xuK1x0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiBlcnJubyAldSBjb2RlICV1XFxuXCIsXG4rXHRcdCAgICAgIGVyci1cdTAwM2VlZV9lcnJubywgZXJyLVx1MDAzZWVlX2NvZGUpO1xuK1x0fVxuK1xuK1x0dHN0YW1wID0gKChpbnQ2NF90KWVyci1cdTAwM2VlZV9kYXRhKSBcdTAwM2NcdTAwM2MgMzIgfCBlcnItXHUwMDNlZWVfaW5mbztcbitcdHRzdGFtcCAtPSAoaW50NjRfdClnbG9iX3RzdGFydDtcbitcdHRzdGFtcCAvPSAxMDAwICogMTAwMDtcbitcdGZwcmludGYoc3RkZXJyLCBcInNlbmQ6IHBrdCAlYyBhdCAlXCIgUFJJZDY0IFwibXMgZHJvcHBlZDogJXNcXG5cIixcbitcdFx0cGF5bG9hZF9jaGFyLCB0c3RhbXAsIHJlYXNvbik7XG4rXG4rXHRyZXR1cm4gMTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIsXG4rXHRcdFx0XHRcdCAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcylcbit7XG4rXHRpbnQ2NF90IHRzO1xuK1xuK1x0dHMgPSB0c3MtXHUwMDNldHNbMF0udHZfc2VjO1xuK1x0dHMgKj0gMTAwMFVMTCAqIDEwMDAgKiAxMDAwO1xuK1x0dHMgKz0gdHNzLVx1MDAzZXRzWzBdLnR2X25zZWM7XG4rXHR0cyAtPSBnbG9iX3RzdGFydF9yZWFsO1xuK1x0dHMgLz0gMTAwMDtcbitcbitcdGlmICh0cyBcdTAwM2UgY2ZnX3ZhcmlhbmNlX3VzKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcInN3IGRlbGF5ICVcIiBQUklkNjQgXCJ1cyBleGNlZWRzIGJvdW5kc1xcblwiLCB0cyk7XG4rXHRcdGlmICghY2ZnX21hY2hpbmVfc2xvdylcbitcdFx0XHRlcnJvcnMrKztcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlKGludCBmZHQpXG4ge1xuIFx0Y2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VycikpICtcbitcdFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZykpICtcbiBcdFx0ICAgICBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSldID0gezB9O1xuIFx0Y2hhciBkYXRhW3NpemVvZihzdHJ1Y3QgZXRoaGRyKSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xuIFx0XHQgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIDFdO1xuK1x0c3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcztcbiBcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqZXJyO1xuIFx0aW50IHJldCwgbnVtX3RzdGFtcCA9IDA7XG4gXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHswfTtcbiBcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7MH07XG4gXHRzdHJ1Y3QgY21zZ2hkciAqY207XG4tXHRpbnQ2NF90IHRzdGFtcCA9IDA7XG4gXG4gXHRpb3YuaW92X2Jhc2UgPSBkYXRhO1xuIFx0aW92Lmlvdl9sZW4gPSBzaXplb2YoZGF0YSk7XG5AQCAtMTgxLDggKzIzNSw2IEBAIHN0YXRpYyBpbnQgZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGludCBmZHQpXG4gXHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XG4gXG4gXHR3aGlsZSAoMSkge1xuLVx0XHRjb25zdCBjaGFyICpyZWFzb24gPSBOVUxMO1xuLVxuIFx0XHRyZXQgPSByZWN2bXNnKGZkdCwgXHUwMDI2bXNnLCBNU0dfRVJSUVVFVUUpO1xuIFx0XHRpZiAocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFQUdBSU4pXG4gXHRcdFx0YnJlYWs7XG5AQCAtMTkyLDQyICsyNDQsMzIgQEAgc3RhdGljIGludCBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoaW50IGZkdClcbiBcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiBmbGFncyAweCV4XFxuXCIsIG1zZy5tc2dfZmxhZ3MpO1xuIFxuIFx0XHRjbSA9IENNU0dfRklSU1RIRFIoXHUwMDI2bXNnKTtcbitcdFx0dHNzID0gTlVMTDtcbitcbitcdFx0aWYgKGNtLVx1MDAzZWNtc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGNtLVx1MDAzZWNtc2dfdHlwZSA9PSBTQ01fVElNRVNUQU1QSU5HKSB7XG4rXHRcdFx0dHNzID0gKHZvaWQgKilDTVNHX0RBVEEoY20pO1xuK1x0XHRcdGNtID0gQ01TR19OWFRIRFIoXHUwMDI2bXNnLCBjbSk7XG4rXHRcdFx0aWYgKCFjbSlcbitcdFx0XHRcdGVycm9yKDEsIDAsIFwidGltZXN0YW1wIG1pc3NpbmcgaXAgZXJyXFxuXCIpO1xuK1x0XHR9XG4rXG4gXHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsICE9IGNmZ19lcnJxX2xldmVsIHx8XG4gXHRcdCAgICBjbS1cdTAwM2VjbXNnX3R5cGUgIT0gY2ZnX2VycnFfdHlwZSlcbiBcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB0eXBlIDB4JXguMHgleFxcblwiLFxuIFx0XHRcdFx0ICAgIGNtLVx1MDAzZWNtc2dfbGV2ZWwsIGNtLVx1MDAzZWNtc2dfdHlwZSk7XG4gXG4gXHRcdGVyciA9IChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY20pO1xuLVx0XHRpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiAhPSBTT19FRV9PUklHSU5fVFhUSU1FKVxuK1x0XHRpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVFhUSU1FKVxuK1x0XHRcdG51bV90c3RhbXAgKz0gZG9fcmVjdl9lcnJxdWV1ZV90aW1lb3V0KGVycixcbitcdFx0XHRcdFx0XHRcdCAgICAgICBkYXRhW3JldCAtIDFdKTtcbitcdFx0ZWxzZSBpZiAoZXJyLVx1MDAzZWVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HIFx1MDAyNlx1MDAyNiB0c3MpXG4rXHRcdFx0ZG9fcmVjdl9lcnJxdWV1ZV90aW1lc3RhbXBpbmcoZXJyLCB0c3MpO1xuK1x0XHRlbHNlXG4gXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogb3JpZ2luIDB4JXhcXG5cIiwgZXJyLVx1MDAzZWVlX29yaWdpbik7XG4gXG4tXHRcdHN3aXRjaCAoZXJyLVx1MDAzZWVlX2Vycm5vKSB7XG4tXHRcdGNhc2UgRUNBTkNFTEVEOlxuLVx0XHRcdGlmIChlcnItXHUwMDNlZWVfY29kZSAhPSBTT19FRV9DT0RFX1RYVElNRV9NSVNTRUQpXG4tXHRcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB1bmtub3duIEVDQU5DRUxFRCAldVxcblwiLFxuLVx0XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHRcdHJlYXNvbiA9IFwibWlzc2VkIHR4dGltZVwiO1xuLVx0XHRicmVhaztcbi1cdFx0Y2FzZSBFSU5WQUw6XG4tXHRcdFx0aWYgKGVyci1cdTAwM2VlZV9jb2RlICE9IFNPX0VFX0NPREVfVFhUSU1FX0lOVkFMSURfUEFSQU0pXG4tXHRcdFx0XHRlcnJvcigxLCAwLCBcImVycnF1ZXVlOiB1bmtub3duIEVJTlZBTCAldVxcblwiLFxuLVx0XHRcdFx0ICAgICAgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHRcdHJlYXNvbiA9IFwiaW52YWxpZCB0eHRpbWVcIjtcbi1cdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0ZXJyb3IoMSwgMCwgXCJlcnJxdWV1ZTogZXJybm8gJXUgY29kZSAldVxcblwiLFxuLVx0XHRcdCAgICAgIGVyci1cdTAwM2VlZV9lcnJubywgZXJyLVx1MDAzZWVlX2NvZGUpO1xuLVx0XHR9XG4tXG4tXHRcdHRzdGFtcCA9ICgoaW50NjRfdCkgZXJyLVx1MDAzZWVlX2RhdGEpIFx1MDAzY1x1MDAzYyAzMiB8IGVyci1cdTAwM2VlZV9pbmZvO1xuLVx0XHR0c3RhbXAgLT0gKGludDY0X3QpIGdsb2JfdHN0YXJ0O1xuLVx0XHR0c3RhbXAgLz0gMTAwMCAqIDEwMDA7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcInNlbmQ6IHBrdCAlYyBhdCAlXCIgUFJJZDY0IFwibXMgZHJvcHBlZDogJXNcXG5cIixcbi1cdFx0XHRkYXRhW3JldCAtIDFdLCB0c3RhbXAsIHJlYXNvbik7XG4tXG4gXHRcdG1zZy5tc2dfZmxhZ3MgPSAwO1xuIFx0XHRtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbCk7XG4tXHRcdG51bV90c3RhbXArKztcbiBcdH1cbiBcbiBcdHJldHVybiBudW1fdHN0YW1wO1xuQEAgLTI0NSwxMiArMjg3LDEzIEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJycXVldWVfbXNncyhpbnQgZmR0KVxuIFx0XHRcdGVycm9yKDEsIGVycm5vLCBcInBvbGxcIik7XG4gXG4gXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IChwZmQucmV2ZW50cyBcdTAwMjYgUE9MTEVSUikpXG4tXHRcdFx0bnVtX3RzdGFtcCArPSBkb19yZWN2X2VycnF1ZXVlX3RpbWVvdXQoZmR0KTtcbitcdFx0XHRudW1fdHN0YW1wICs9IGRvX3JlY3ZfZXJycXVldWUoZmR0KTtcbiBcbiBcdFx0aWYgKG51bV90c3RhbXAgPT0gY2ZnX251bV9wa3QpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHR9IHdoaWxlIChnZXR0aW1lX25zKGNmZ19jbG9ja2lkKSBcdTAwM2MgdGRlbGl2ZXJfbWF4KTtcbitcdH0gd2hpbGUgKGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpIFx1MDAzY1xuK1x0XHQgdGRlbGl2ZXJfbWF4ICsgKGNmZ192YXJpYW5jZV91cyAqIDEwMDApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc3RhcnRfdGltZV93YWl0KHZvaWQpXG5AQCAtMjk1LDYgKzMzOCwxOCBAQCBzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZShpbnQgZmQpXG4gXHRcdGVycm9yKDEsIDAsIFwiZ2V0c29ja29wdCB0eHRpbWU6IG1pc21hdGNoXCIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBzZXRzb2Nrb3B0X3R4dGltZXN0YW1waW5nKGludCBmZClcbit7XG4rXHRpbnQgdmFsID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XG4rXHRcdCAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSB8XG4rXHRcdCAgU09GX1RJTUVTVEFNUElOR19PUFRfSUQgfFxuK1x0XHQgIFNPRl9USU1FU1RBTVBJTkdfT1BUX1RTT05MWTtcbitcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsXG4rXHRcdCAgICAgICBcdTAwMjZ2YWwsIHNpemVvZih2YWwpKSlcbitcdFx0ZXJyb3IoMSwgZXJybm8sIFwic2V0c29ja29wdCB0aW1lc3RhbXBpbmdcIik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiB7XG4gXHRpbnQgZmQ7XG5AQCAtMzA4LDYgKzM2Myw5IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHgoc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWxlbilcbiBcbiBcdHNldHNvY2tvcHRfdHh0aW1lKGZkKTtcbiBcbitcdGlmIChjZmdfdmVyaWZ5X2h3X29mZmxvYWQpXG4rXHRcdHNldHNvY2tvcHRfdHh0aW1lc3RhbXBpbmcoZmQpO1xuK1xuIFx0aWYgKGNmZ19tYXJrIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX01BUkssIFx1MDAyNmNmZ19tYXJrLCBzaXplb2YoY2ZnX21hcmspKSlcbiBcdFx0ZXJyb3IoMSwgZXJybm8sIFwic2V0c29ja29wdCBtYXJrXCIpO1xuQEAgLTMxNyw3ICszNzUsNyBAQCBzdGF0aWMgaW50IHNldHVwX3R4KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFsZW4pXG4gXG4gc3RhdGljIGludCBzZXR1cF9yeChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIHtcbi1cdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDEwMCAqIDEwMDAgfTtcbitcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfdXNlYyA9IDYwMCAqIDEwMDAgfTtcbiBcdGludCBmZDtcbiBcbiBcdGZkID0gc29ja2V0KGFkZHItXHUwMDNlc2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTtcbkBAIC0zNDgsNiArNDA2LDcgQEAgc3RhdGljIHZvaWQgZG9fdGVzdF90eChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2tsZW5fdCBhbGVuKVxuIFxuIFx0c3RhcnRfdGltZV93YWl0KCk7XG4gXHRnbG9iX3RzdGFydCA9IGdldHRpbWVfbnMoY2ZnX2Nsb2NraWQpO1xuK1x0Z2xvYl90c3RhcnRfcmVhbCA9IGdldHRpbWVfbnMoQ0xPQ0tfUkVBTFRJTUUpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2ZnX251bV9wa3Q7IGkrKylcbiBcdFx0ZG9fc2VuZF9vbmUoZmR0LCBcdTAwMjZjZmdfYnVmW2ldKTtcbkBAIC00NDAsMTAgKzQ5OSwxMSBAQCBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSlcbiBcdFx0XHRcIiAgLTYgICAgICAgICAgICBvbmx5IElQdjZcXG5cIlxuIFx0XHRcdFwiICAtYyBcdTAwM2NjbG9ja1x1MDAzZSAgICBtb25vdG9uaWMgb3IgdGFpIChkZWZhdWx0KVxcblwiXG4gXHRcdFx0XCIgIC1EIFx1MDAzY2FkZHJcdTAwM2UgICAgIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MgKHNlcnZlcilcXG5cIlxuLVx0XHRcdFwiICAtUyBcdTAwM2NhZGRyXHUwMDNlICAgICBzb3VyY2UgSVAgYWRkcmVzcyAoY2xpZW50KVxcblwiXG4rXHRcdFx0XCIgIC1oICAgICAgICAgICAgdmVyaWZ5IGhhcmR3YXJlIG9mZmxvYWQgKHR4KVxcblwiXG4rXHRcdFx0XCIgIC1tIFx1MDAzY21hcmtcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxuXCJcbiBcdFx0XHRcIiAgLXIgICAgICAgICAgICBydW4gcnggbW9kZVxcblwiXG4rXHRcdFx0XCIgIC1TIFx1MDAzY2FkZHJcdTAwM2UgICAgIHNvdXJjZSBJUCBhZGRyZXNzIChjbGllbnQpXFxuXCJcbiBcdFx0XHRcIiAgLXQgXHUwMDNjbnNlY1x1MDAzZSAgICAgc3RhcnQgdGltZSAoVVRDIG5hbm9zZWNvbmRzKVxcblwiXG4tXHRcdFx0XCIgIC1tIFx1MDAzY21hcmtcdTAwM2UgICAgIHNvY2tldCBtYXJrXFxuXCJcbiBcdFx0XHRcIlxcblwiLFxuIFx0XHRcdHByb2duYW1lKTtcbiBcdGV4aXQoMSk7XG5AQCAtNDU1LDcgKzUxNSw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aW50IGRvbWFpbiA9IFBGX1VOU1BFQztcbiBcdGludCBjO1xuIFxuLVx0d2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwiNDZjOlM6RDpydDptOlwiKSkgIT0gLTEpIHtcbitcdHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCBcIjQ2YzpEOmhtOnJTOnQ6XCIpKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKGMpIHtcbiBcdFx0Y2FzZSAnNCc6XG4gXHRcdFx0aWYgKGRvbWFpbiAhPSBQRl9VTlNQRUMpXG5AQCAtNDgyLDIxICs1NDIsMjQgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyb3IoMSwgMCwgXCJ1bmtub3duIGNsb2NrIGlkICVzXCIsIG9wdGFyZyk7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ1MnOlxuLVx0XHRcdHNhZGRyID0gb3B0YXJnO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICdEJzpcbiBcdFx0XHRkYWRkciA9IG9wdGFyZztcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnaCc6XG4rXHRcdFx0Y2ZnX3ZlcmlmeV9od19vZmZsb2FkID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnbSc6XG4rXHRcdFx0Y2ZnX21hcmsgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAwKTtcbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAncic6XG4gXHRcdFx0Y2ZnX3J4ID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnUyc6XG4rXHRcdFx0c2FkZHIgPSBvcHRhcmc7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ3QnOlxuIFx0XHRcdGNmZ19zdGFydF90aW1lX25zID0gc3RydG9sbChvcHRhcmcsIE5VTEwsIDApO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdtJzpcbi1cdFx0XHRjZmdfbWFyayA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDApO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvc29fdHh0aW1lLnB5XG5pbmRleCBhZGY2Yzg0OGQ2ZDgwZi4uN2I3NWEzM2Y1YzQzZjggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9zb190eHRpbWUucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3NvX3R4dGltZS5weVxuQEAgLTEyLDEwICsxMiwxMyBAQCBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X3ZhcmlhbnRzXG4gZnJvbSBsaWIucHkgaW1wb3J0IEtzZnROYW1lZFZhcmlhbnQsIEtzZnRTa2lwRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIGJrZywgY21kLCBkZWZlciwgdGNcbitmcm9tIGxpYi5weSBpbXBvcnQgRXRodG9vbEZhbWlseSwgTmxFcnJvclxuIFxuIFxuIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6XG4gICAgIFwiXCJcIk1haW4gZnVuY3Rpb24uIFJ1biBzb190eHRpbWUgYXMgc2VuZGVyIGFuZCByZWNlaXZlci5cIlwiXCJcbisgICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG4rXG4gICAgIHNsb3dfbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCdLU0ZUX01BQ0hJTkVfU0xPVycpXG4gXG4gICAgIGlmIG5vdCBoYXNhdHRyKGNmZywgXCJiaW5fcmVtb3RlXCIpOlxuQEAgLTM4LDYgKzQxLDM0IEBAIGRlZiB0ZXN0X3NvX3R4dGltZShjZmcsIGNsb2NraWQsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBleHBlY3Rfc3VjY2Vzcyk6XG4gICAgICAgICBjbWQoY21kX3R4KVxuIFxuIFxuK2RlZiBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZyk6XG4rICAgIFwiXCJcIkNvbmZpZ3VyZSBwYWNpbmctb2ZmbG9hZC1ob3Jpem9uLlwiXCJcIlxuKyAgICBldGhubCA9IEV0aHRvb2xGYW1pbHkoKVxuK1xuKyAgICB0cnk6XG4rICAgICAgICByaW5ncyA9IGV0aG5sLnJpbmdzX2dldCh7J2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9fSlcbisgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ3JpbmctZ2V0IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJykgZnJvbSBlXG4rXG4rICAgIGlmICdwYWNpbmctb2ZmbG9hZC1ob3Jpem9uJyBub3QgaW4gcmluZ3Mgb3IgXFxcbisgICAgICAgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4JyBub3QgaW4gcmluZ3M6XG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCdwYWNpbmcgb2ZmbG9hZCBob3Jpem9uIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlJylcbitcbisgICAgaWYgcmluZ3NbJ3BhY2luZy1vZmZsb2FkLWhvcml6b24tbWF4J10gXHUwMDNjIDUwXzAwMDpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ3BhY2luZyBvZmZsb2FkIG1heCBob3Jpem9uIHRvbyBzbWFsbCcpXG4rXG4rICAgIGN1cl9ob3Jpem9uID0gcmluZ3NbJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nXVxuKyAgICBuZXdfaG9yaXpvbiA9IDUwXzAwMFxuKyAgICBldGhubC5yaW5nc19zZXQoe1xuKyAgICAgICAgJ2hlYWRlcic6IHsnZGV2LWluZGV4JzogY2ZnLmlmaW5kZXh9LFxuKyAgICAgICAgJ3BhY2luZy1vZmZsb2FkLWhvcml6b24nOiBuZXdfaG9yaXpvbixcbisgICAgfSlcbisgICAgZGVmZXIoZXRobmwucmluZ3Nfc2V0LCB7XG4rICAgICAgICAnaGVhZGVyJzogeydkZXYtaW5kZXgnOiBjZmcuaWZpbmRleH0sXG4rICAgICAgICAncGFjaW5nLW9mZmxvYWQtaG9yaXpvbic6IGN1cl9ob3Jpem9uXG4rICAgIH0pXG4rXG4rXG4gZGVmIF9xZGlzY19zZXR1cChpZm5hbWUsIHFkaXNjLCBvcHRhcmdzPVwiXCIpOlxuICAgICBcIlwiXCJSZXBsYWNlIHJvb3QgcWRpc2MuIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGFmdGVyIHRoZSB0ZXN0LlxuIFxuQEAgLTU2LDYgKzg3LDcgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6XG4gICAgICAgICAgICAgW1wib25lX3BrdFwiLCBcImEsMTBcIiwgXCJhLDEwXCJdLFxuICAgICAgICAgICAgIFtcImluX29yZGVyXCIsIFwiYSwxMCxiLDIwXCIsIFwiYSwxMCxiLDIwXCJdLFxuICAgICAgICAgICAgIFtcInJldmVyc2Vfb3JkZXJcIiwgXCJhLDIwLGIsMTBcIiwgXCJiLDEwLGEsMjBcIl0sXG4rICAgICAgICAgICAgW1wiYmV5b25kX2h3X2hvcml6b25cIiwgXCJhLDcwXCIsIFwiYSw3MFwiXSxcbiAgICAgICAgIF06XG4gICAgICAgICAgICAgbmFtZSA9IGZcInZ7aXB2ZXJ9X3t0ZXN0Y2FzZVswXX1cIlxuICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQobmFtZSwgaXB2ZXIsIHRlc3RjYXNlWzFdLCB0ZXN0Y2FzZVsyXSlcbkBAIC02NCwxNSArOTYsNDIgQEAgZGVmIF90ZXN0X3ZhcmlhbnRzX2ZxKCk6XG4gQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZnFfbW9ubyhjZmcsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4KTpcbiAgICAgXCJcIlwiUnVuIGFsbCB2YXJpYW50cyBvZiBtb25vdG9uaWMgKGZxKSB0ZXN0cy5cIlwiXCJcbi0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG4gICAgIF9xZGlzY19zZXR1cChjZmcuaWZuYW1lLCBcImZxXCIpXG4gICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCJtb25vXCIsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxuIFxuIFxuK0Brc2Z0X3ZhcmlhbnRzKF90ZXN0X3ZhcmlhbnRzX2ZxKCkpXG4rZGVmIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4rICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIGZxIHRlc3RzLCB3aXRoIG9mZmxvYWQgaG9yaXpvbi5cIlwiXCJcbisgICAgY2ZnLnJlcXVpcmVfbnNpbShuc2ltX3Rlc3Q9RmFsc2UpXG4rXG4rICAgIF9kZXZfc2V0dXBfcGFjaW5nX29mZmxvYWQoY2ZnKVxuKyAgICB0cnk6XG4rICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCJmcVwiLCBcIm9mZmxvYWRfaG9yaXpvbiA1MG1zXCIpXG4rICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJuZXRkZXYgZG9lcyBub3Qgc3VwcG9ydCBvZmZsb2FkLiBza2lwcGluZ1wiKSBmcm9tIGVcbitcbisgICAgIyBFeHBlY3QgYWxsIHRlc3RzIHRvIHVzZSBvbmx5IGh3IHBhY2luZywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uLlxuKyAgICBod19vbmx5ID0gXCItaFwiIGlmIGFyZ3NfdHggIT0gXCJhLDcwXCIgZWxzZSBcIlwiXG4rICAgIHRlc3Rfc29fdHh0aW1lKGNmZywgXCJtb25vXCIsIGlwdmVyLCBmXCJ7aHdfb25seX0ge2FyZ3NfdHh9XCIsIGFyZ3NfcngsIFRydWUpXG4rXG4rXG4rQGtzZnRfdmFyaWFudHMoX3Rlc3RfdmFyaWFudHNfZnEoKSlcbitkZWYgdGVzdF9zb190eHRpbWVfcGZpZm9mYXN0X21vbm9faHcoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4rICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgbW9ub3RvbmljIHRlc3RzLCB3aXRob3V0IGZxIHBhY2luZyBzdyBiYWNrdXAuXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX25zaW0obnNpbV90ZXN0PUZhbHNlKVxuK1xuKyAgICBfZGV2X3NldHVwX3BhY2luZ19vZmZsb2FkKGNmZylcbisgICAgX3FkaXNjX3NldHVwKGNmZy5pZm5hbWUsIFwicGZpZm9fZmFzdFwiKVxuK1xuKyAgICAjIEV4cGVjdCBhbGwgdGVzdHMgdG8gcGFzcywgZXhjZXB0IGJleW9uZF9od19ob3Jpem9uIHdpdGhvdXQgc3cgZmFsbGJhY2suXG4rICAgIGV4cGVjdF9wYXNzID0gbm90IGFyZ3NfdHggPT0gXCJhLDcwXCJcbisgICAgdGVzdF9zb190eHRpbWUoY2ZnLCBcIm1vbm9cIiwgaXB2ZXIsIGZcIi1oIHthcmdzX3R4fVwiLCBhcmdzX3J4LCBleHBlY3RfcGFzcylcbitcbitcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19mcSgpKVxuIGRlZiB0ZXN0X3NvX3R4dGltZV9mcV90YWkoY2ZnLCBpcHZlciwgYXJnc190eCwgYXJnc19yeCk6XG4gICAgIFwiXCJcIlJ1biBhbGwgdmFyaWFudHMgb2YgZnEgdGVzdHMsIGJ1dCBwYXNzIENMT0NLX1RBSSB0byB0ZXN0IGNvbnZlcnNpb24uXCJcIlwiXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCJmcVwiKVxuICAgICB0ZXN0X3NvX3R4dGltZShjZmcsIFwidGFpXCIsIGlwdmVyLCBhcmdzX3R4LCBhcmdzX3J4LCBUcnVlKVxuIFxuQEAgLTk1LDcgKzE1NCw2IEBAIGRlZiBfdGVzdF92YXJpYW50c19ldGYoKTpcbiBAa3NmdF92YXJpYW50cyhfdGVzdF92YXJpYW50c19ldGYoKSlcbiBkZWYgdGVzdF9zb190eHRpbWVfZXRmKGNmZywgaXB2ZXIsIGFyZ3NfdHgsIGFyZ3NfcngsIGV4cGVjdF9mYWlsKTpcbiAgICAgXCJcIlwiUnVuIGFsbCB2YXJpYW50cyBvZiBldGYgdGVzdHMuXCJcIlwiXG4tICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuICAgICB0cnk6XG4gICAgICAgICBfcWRpc2Nfc2V0dXAoY2ZnLmlmbmFtZSwgXCJldGZcIiwgXCJjbG9ja2lkIENMT0NLX1RBSSBkZWx0YSA0MDAwMDBcIilcbiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOlxuQEAgLTEwOCw3ICsxNjYsMTMgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIkJvaWxlcnBsYXRlIGtzZnQgbWFpbi5cIlwiXCJcbiAgICAgd2l0aCBOZXREcnZFcEVudihfX2ZpbGVfXykgYXMgY2ZnOlxuICAgICAgICAga3NmdF9ydW4oXG4tICAgICAgICAgICAgW3Rlc3Rfc29fdHh0aW1lX2ZxX21vbm8sIHRlc3Rfc29fdHh0aW1lX2ZxX3RhaSwgdGVzdF9zb190eHRpbWVfZXRmXSxcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm8sXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2ZxX21vbm9faHcsXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX3BmaWZvZmFzdF9tb25vX2h3LFxuKyAgICAgICAgICAgICAgICB0ZXN0X3NvX3R4dGltZV9mcV90YWksXG4rICAgICAgICAgICAgICAgIHRlc3Rfc29fdHh0aW1lX2V0ZixcbisgICAgICAgICAgICBdLFxuICAgICAgICAgICAgIGFyZ3M9KGNmZywpLFxuICAgICAgICAgKVxuICAgICBrc2Z0X2V4aXQoKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MDUuMzA5MzU4OTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0MDAxNjMwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgTmV3IE5ldHdvcmsgS2VybmVsIEZlYXR1cmVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBuZXcga2VybmVsIGVudHJ5IHBvaW50cyBvciBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgaW5pdGlhbCBzY2FuIHJldmVhbHMgc29tZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zOiB0aGUgaW50cm9kdWN0aW9uIG9mIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhbmQgYG1heF9wYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYCBhcyBgZXRodG9vbGAgcmluZyBwYXJhbWV0ZXJzLiBUaGUgYGlkcGZgIGRyaXZlciBpcyBiZWluZyB1cGRhdGVkIHRvIHN1cHBvcnQgdGhlIGBFVEhUT09MX1JJTkdfVVNFX1BBQ0lOR19PRkZMT0FEX0hPUklaT05gIG9wdGlvbi4gUGx1cywgYHBrdGdlbmAgaXMgZ2V0dGluZyBzdXBwb3J0IGZvciBgU09fVFhUSU1FYCwgd2hpY2ggaW5jbHVkZXMgYSBgdHh0aW1lX2RlbGF5YCBhbmQgYHR4dGltZV9jbG9ja2lkYC4gQW5kIGZpbmFsbHksIGBzY2hfZnFgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGNvbnNpZGVyIGBxLVx1MDAzZW9mZmxvYWRfaG9yaXpvbmAuXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBpcyB0aGlzIHN0dWZmIGV2ZW4gKnJlYWNoYWJsZSo/IEFyZSB0aGVyZSBlbnRyeSBwb2ludHMgdGhhdCB3ZSBjYW4gZGlyZWN0bHkgZXhwbG9pdD8gVGhlIGBwa3RnZW5gIGNoYW5nZXMgYXJlIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyB0aGUgbmV3IGZpZWxkcyBpbiBgcGt0Z2VuX2lmX3dyaXRlYCBsb29rIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgcHJvY2ZzIGludGVyZmFjZSwgYC9wcm9jL25ldC9wa3RnZW4vKmAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBgZXRodG9vbGAgY2hhbmdlcywgYWRkaW5nIGBFVEhUT09MX0FfUklOR1NfUEFDSU5HX09GRkxPQURfSE9SSVpPTmAgdG8gbmV0bGluaywgYWxzbyBzZWVtIHN0cmFpZ2h0Zm9yd2FyZC4gQW5kIHRoZSBgc2NoX2ZxYCBtb2RpZmljYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGNoZWNrIG9mIGBvZmZsb2FkX2hvcml6b25gLCBsb29rIGxpa2UgdGhleSBhcmUgdHJpZ2dlcmVkIHZpYSBgcWRpc2NfZGV2KHNjaCktXHUwMDNlcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAuXG5cbk5vdywgaG93IGFyZSB0aGVzZSB0aGluZ3MgY3VycmVudGx5IGZ1enplZCwgaWYgYXQgYWxsPyBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgdG91Y2ggYC9wcm9jL25ldC9wa3RnZW4vYCwgYnV0IGl0J3MgKnBvc3NpYmxlKiBpZiB0aGVyZSBhcmUgZGVzY3JpcHRpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQuIFRoZSBgZXRodG9vbGAgbmV0bGluayBpbnRlcmZhY2UsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBkZWZpbml0ZWx5IGEgdGFyZ2V0LiBBbmQgdGhlIGBzY2hfZnFgIHFkaXNjIGlzIGdlbmVyYWxseSBmdXp6ZWQgdGhyb3VnaCB0aGUgYHRjYCBuZXRsaW5rIGludGVyZmFjZS5cblxuTGV0J3MgY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGBwYWNpbmdfb2ZmbG9hZF9ob3Jpem9uYC4gWWVzLCB0aHJvdWdoIHRoZSBgZXRodG9vbGAgbmV0bGluaywgYEVUSFRPT0xfTVNHX1JJTkdTX1NFVGAuIEFuZCB0aGUgYHNjaF9mcWAgY2hhbmdlcyBhcmUgYWNjZXNzZWQgdmlhIGBSVE1fTkVXUURJU0NgIHdpdGggYFRDQV9LSU5EYCA9IFwiZnFcIi5cblxuT2theSwgdGltZSB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cy4gRm9yIGBldGh0b29sYCwgSSdtIHRoaW5raW5nIGBldGhubF9zZXRfcmluZ3NgLCBgcmluZ3NfZmlsbF9yZXBseWAsIGFuZCBgcmluZ3NfcHJlcGFyZV9kYXRhYC4gRm9yIGBzY2hfZnFgLCBkZWZpbml0ZWx5IGBmcV9jaGFuZ2VgLCBgZnFfZGVxdWV1ZWAsIGFuZCBgZnFfY2xhc3NpZnlgLiBBbmQgZm9yIGBwa3RnZW5gLCB0aGUgcmVsZXZhbnQgb25lcyBhcmUgYHBrdGdlbl9pZl93cml0ZWAgYW5kIGBwa3RnZW5feG1pdGAuXG5cbkZpbmFsbHksIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IGBDT05GSUdfTkVUX1NDSF9GUWAgaXMgZXNzZW50aWFsIGZvciBlbmFibGluZyB0aGUgYHNjaF9mcWAgY29kZS4gU2ltaWxhcmx5LCBgQ09ORklHX05FVF9QS1RHRU5gIGZvciBgcGt0Z2VuYC4gQW5kIHdlJ2xsIG5lZWQgYENPTkZJR19JRFBGYCBmb3IgdGhlIEludGVsIElQVSBkcml2ZXIsIGJ1dCBpdCBtaWdodCBub3QgYmUgcmVhY2hhYmxlLiBJJ20gbGVzcyBjb25jZXJuZWQgd2l0aCB0aGUgZHJpdmVyIGl0c2VsZiwgdW5sZXNzIGl0J3Mgc29tZXRoaW5nIGxpa2UgdmV0aC90dW4vZXRjLiBUaGUgY29yZSBjaGFuZ2VzIGluIGBzY2hfZnFgLCBgcGt0Z2VuYCwgYW5kIGBldGh0b29sYCBhcmUgdGhlIHJlYWwgdGFyZ2V0cyBoZXJlLlxuXG5JJ2xsIHJ1biBzb21lIGNvZGUgc2VhcmNoZXMgdG8gdmVyaWZ5IGV2ZXJ5dGhpbmcsIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYyOSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjUzOjE1LjcwOTUyNTQzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI2NTM0NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZxX2NoYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2ZxLmM9MTA1OD1zdGF0aWMgaW50IGZxX2xvYWRfcHJpb21hcChzdHJ1Y3QgZnFfc2NoZWRfZGF0YSAqcSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMDc5LVxcbm5ldC9zY2hlZC9zY2hfZnEuYzoxMDgwOnN0YXRpYyBpbnQgZnFfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF9mcS5jLTEwODEtXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxLmM9MTIzMj1zdGF0aWMgaW50IGZxX2luaXQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMjcwLVxcdGlmIChvcHQpXFxubmV0L3NjaGVkL3NjaF9mcS5jOjEyNzE6XFx0XFx0ZXJyID0gZnFfY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfZnEuYy0xMjcyLVxcdGVsc2VcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnEuYz0xMzg4PXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcS5jLTEzOTctXFx0LmRlc3Ryb3lcXHQ9XFx0ZnFfZGVzdHJveSxcXG5uZXQvc2NoZWQvc2NoX2ZxLmM6MTM5ODpcXHQuY2hhbmdlXFx0XFx0PVxcdGZxX2NoYW5nZSxcXG5uZXQvc2NoZWQvc2NoX2ZxLmMtMTM5OS1cXHQuZHVtcFxcdFxcdD1cXHRmcV9kdW1wLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYz0zNzQ9c3RhdGljIHZvaWQgcWZxX2RlYWN0X3JtX2Zyb21fYWdnKHN0cnVjdCBxZnFfc2NoZWQgKnEsIHN0cnVjdCBxZnFfY2xhc3MgKmNsKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYy0zODItLyogTW92ZSBjbGFzcyB0byBhIG5ldyBhZ2dyZWdhdGUsIG1hdGNoaW5nIHRoZSBuZXcgY2xhc3Mgd2VpZ2h0IGFuZC9vciBsbWF4ICovXFxubmV0L3NjaGVkL3NjaF9xZnEuYzozODM6c3RhdGljIGludCBxZnFfY2hhbmdlX2FnZyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFmcV9jbGFzcyAqY2wsIHUzMiB3ZWlnaHQsXFxubmV0L3NjaGVkL3NjaF9xZnEuYy0zODQtXFx0XFx0XFx0ICAgdTMyIGxtYXgpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTQwNS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjQwNjpzdGF0aWMgaW50IHFmcV9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxubmV0L3NjaGVkL3NjaF9xZnEuYy00MDctXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHVuc2lnbmVkIGxvbmcgKmFyZyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfcWZxLmM9MTEwMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFmcV9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYy0xMTY2LVxcbm5ldC9zY2hlZC9zY2hfcWZxLmM6MTE2NzpcXHQvKiBJZiBsbWF4IGlzIGxvd2VyZWQsIHRocm91Z2ggcWZxX2NoYW5nZV9jbGFzcywgZm9yIGEgY2xhc3NcXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTExNjgtXFx0ICogb3duaW5nIHBlbmRpbmcgcGFja2V0cyB3aXRoIGxhcmdlciBzaXplIHRoYW4gdGhlIG5ldyB2YWx1ZVxcbi0tXFxubmV0L3NjaGVkL3NjaF9xZnEuYz0xMjI3PXN0YXRpYyBpbnQgcWZxX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTEyNDctXFx0XFx0XFx0IGNsLVxcdTAwM2VhZ2ctXFx1MDAzZWxtYXgsIGxlbiwgY2wtXFx1MDAzZWNvbW1vbi5jbGFzc2lkKTtcXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjEyNDg6XFx0XFx0ZXJyID0gcWZxX2NoYW5nZV9hZ2coc2NoLCBjbCwgY2wtXFx1MDAzZWFnZy1cXHUwMDNlY2xhc3Nfd2VpZ2h0LCBsZW4pO1xcbm5ldC9zY2hlZC9zY2hfcWZxLmMtMTI0OS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3FmcS5jPTE1MTM9c3RhdGljIGNvbnN0IHN0cnVjdCBRZGlzY19jbGFzc19vcHMgcWZxX2NsYXNzX29wcyA9IHtcXG5uZXQvc2NoZWQvc2NoX3FmcS5jOjE1MTQ6XFx0LmNoYW5nZVxcdFxcdD0gcWZxX2NoYW5nZV9jbGFzcyxcXG5uZXQvc2NoZWQvc2NoX3FmcS5jLTE1MTUtXFx0LmRlbGV0ZVxcdFxcdD0gcWZxX2RlbGV0ZV9jbGFzcyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfc2ZxLmM9NjA0PXN0YXRpYyB2b2lkIHNmcV9wZXJ0dXJiYXRpb24oc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYyMS1cXHQvKiBxLVxcdTAwM2VwZXJ0dXJiX3BlcmlvZCBjYW4gY2hhbmdlIHVuZGVyIHVzIGZyb21cXG5uZXQvc2NoZWQvc2NoX3NmcS5jOjYyMjpcXHQgKiBzZnFfY2hhbmdlKCkgYW5kIHNmcV9kZXN0cm95KCkuXFxubmV0L3NjaGVkL3NjaF9zZnEuYy02MjMtXFx0ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYyOS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jOjYzMDpzdGF0aWMgaW50IHNmcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTYzMS1cXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jPTc3Nz1zdGF0aWMgaW50IHNmcV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3NmcS5jLTgwNi1cXHRpZiAob3B0KSB7XFxubmV0L3NjaGVkL3NjaF9zZnEuYzo4MDc6XFx0XFx0aW50IGVyciA9IHNmcV9jaGFuZ2Uoc2NoLCBvcHQsIGV4dGFjayk7XFxubmV0L3NjaGVkL3NjaF9zZnEuYy04MDgtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MjEuMjM2MDcxNDExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3NzczOTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkNoZWNraW5nIFJlYWNoYWJpbGl0eSBpbiBgc2NoX2ZxLmNgKipcblxuQWxyaWdodCwgc28gdGhlIG1vZGlmaWNhdGlvbnMgaW4gYHNjaF9mcS5jYCBhcmUgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kLCBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgYWx3YXlzOiBhcmUgdGhlc2UgY2hhbmdlcyBldmVuICpyZWxldmFudCogdG8gbXkgY3VycmVudCBjb25maWd1cmF0aW9uPyBBcmUgdGhleSBhY3RpdmU/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGV5J3JlIHJlYWNoYWJsZSBjb2RlLlxuXG5UaGVyZWZvcmUsIEknbSBpbW1lZGlhdGVseSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEknbGwgY2hlY2sgYENPTkZJR19ORVRfU0NIX0ZRYCBhbmQgYENPTkZJR19ORVRfUEtUR0VOYC4gVGhvc2Ugd2lsbCBiZSB0aGUga2V5LiBJZiBlaXRoZXIsIG9yIGJvdGgsIG9mIHRob3NlIGFyZSBkaXNhYmxlZCwgSSBjYW4gcHJvYmFibHkgaWdub3JlIHRoZXNlIGNoYW5nZXMgZm9yIG5vdywgYXQgbGVhc3QgaW4gdGhlIGNvbnRleHQgb2YgbXkgY3VycmVudCBidWlsZC4gSWYgdGhleSBhcmUgZW5hYmxlZCwgdGhlbiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IEknbSBjb25jZXJuZWQgd2l0aC4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGEgZnVuZGFtZW50YWwgZmlyc3Qgc3RlcCBpbiBldmFsdWF0aW5nIGFueSBjb2RlIG1vZGlmaWNhdGlvbjsgaXQncyB0aGUgZ2F0ZWtlZXBlciBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTo1MzoyNi4yMTM4MTM3NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMTEwMTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9GUVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0yNjY9Y29uZmlnIE5FVF9TQ0hfQ09ERUxcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cXG5uZXQvc2NoZWQvS2NvbmZpZzoyNzc6Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIkZhaXIgUXVldWUgQ29udHJvbGxlZCBEZWxheSBBUU0gKEZRX0NPREVMKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTI4OD1jb25maWcgTkVUX1NDSF9DQUtFXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yOTgtXFxubmV0L3NjaGVkL0tjb25maWc6Mjk5OmNvbmZpZyBORVRfU0NIX0ZRXFxubmV0L3NjaGVkL0tjb25maWctMzAwLVxcdHRyaXN0YXRlIFxcXCJGYWlyIFF1ZXVlXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9MzIyPWNvbmZpZyBORVRfU0NIX1BJRVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMzMzLVxcbm5ldC9zY2hlZC9LY29uZmlnOjMzNDpjb25maWcgTkVUX1NDSF9GUV9QSUVcXG5uZXQvc2NoZWQvS2NvbmZpZy0zMzUtXFx0ZGVwZW5kcyBvbiBORVRfU0NIX1BJRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMTo1MzozMC43MzQ5MzU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTEzMzc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBhY2tldCBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0aGlzOiBnaXZlbiB0aGUgY29udGV4dCDigJMgSSBhc3N1bWUgd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3IgZGVidWdnaW5nIOKAkyBJJ20gZ29pbmcgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBwYWNrZXQgZ2VuZXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfTkVUX1BLVEdFTmAuIEkgc3VzcGVjdCB0aGF0IHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBjdXJyZW50bHkgc2V0LCBlbmFibGVkLCBvciBkaXNhYmxlZCwgaXMgY3J1Y2lhbCBmb3Igd2hhdGV2ZXIgaW52ZXN0aWdhdGlvbiBJJ20gdW5kZXJ0YWtpbmcuIEl0J3MgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBmb3IgYSBsb3Qgb2YgbmV0d29yayB0ZXN0aW5nIGFuZCB0cmFmZmljIHNoYXBpbmcgc2NlbmFyaW9zLCBzbyBpdCdzIGEgdmVyeSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIFdl4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHN0YXRlIG9mIHRoaXMgcGFyYW1ldGVyIG9uIHRoZSBzeXN0ZW0gYXMgYSB3aG9sZS4gS25vd2luZyB3aGF0IGBDT05GSUdfTkVUX1BLVEdFTmAgYWxsb3dzIGFuZCBkaXNhYmxlcyBpcyBhIGtleSBhc3BlY3Qgb2YgYW55IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODgwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MzQuMzY0MDczNjQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDc2MTgwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9QS1RHRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9Mzg0PW1lbnUgXFxcIk5ldHdvcmsgdGVzdGluZ1xcXCJcXG5uZXQvS2NvbmZpZy0zODUtXFxubmV0L0tjb25maWc6Mzg2OmNvbmZpZyBORVRfUEtUR0VOXFxubmV0L0tjb25maWctMzg3LVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6MzkuODcxNjk3MTc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5OTY0MDg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBgc2NoX2ZxYCwgYHBrdGdlbmAsIGFuZCB0aGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLCBhbmQgdGhhdCdzIHdoYXQgd2Ugd2FudCB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy5cblxuSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYGZxX2NoYW5nZWAsIGBmcV9kZXF1ZXVlYCwgYGZxX2NsYXNzaWZ5YCwgYHBrdGdlbl9pZl93cml0ZWAsIGBwa3RnZW5feG1pdGAsIGBldGhubF9zZXRfcmluZ3NgLCBhbmQgYHJpbmdzX2ZpbGxfcmVwbHlgIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uIGFuZCBrZWVwaW5nIGluIG1pbmQgdGhlIG5lZWQgdG8gYXZvaWQgc2tld2luZyB0ZXN0IGRpc3RyaWJ1dGlvbnMgYnkgZm9jdXNpbmcgb24gZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIEknbSBnb2luZyB0byByZWZpbmUgdGhhdCBsaXN0LiBJIGRvbid0IHdhbnQgdG8gZ2V0IGJvZ2dlZCBkb3duIGluIGZ1bmN0aW9ucyBjYWxsZWQgZm9yIGV2ZXJ5IHNpbmdsZSBwYWNrZXQsIHNvIEknbGwgZXhjbHVkZSBgZnFfZGVxdWV1ZWAgYW5kIGBmcV9jbGFzc2lmeWAuIEknbGwgYWxzbyBiZSBhIGJpdCBtb3JlIHNlbGVjdGl2ZSBhYm91dCBgcGt0Z2VuX3htaXRgLlxuXG5NeSByZXZpc2VkIGxpc3QgdG8gcHJpb3JpdGl6ZSB3aWxsIGJlOlxuXG4qICAgYGZxX2NoYW5nZWBcbiogICBgZXRobmxfc2V0X3JpbmdzYFxuKiAgIGBwa3RnZW5faWZfd3JpdGVgXG4qICAgYHBrdGdlbl94bWl0YFxuKiAgIGByaW5nc19maWxsX3JlcGx5YFxuKiAgIGByaW5nc19wcmVwYXJlX2RhdGFgXG5cbkknbSBjb25maWRlbnQgaW4gaW5jbHVkaW5nIGBwa3RnZW5feG1pdGAgYW5kIGBwa3RnZW5faWZfd3JpdGVgIG5vdywgYWx0aG91Z2ggYHBrdGdlbl94bWl0YCBpcyB0aGUgbWFpbiBsb29wIG9mIHBrdGdlbiwgaXQncyBzdGlsbCBnb29kIHRvIGZ1enouXG5cbldlJ3ZlIGdvdCB0byBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgYE5FVF9TQ0hfRlFgIGFuZCBgTkVUX1BLVEdFTmAuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdsYW5jaW5nIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIHJlbGV2YW50LCBsaWtlIGBDT05GSUdfSURQRmAsIGFsdGhvdWdoIGdpdmVuIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCBkcml2ZXIsIGl0J3MgcHJvYmFibHkgbm90IGEgaGlnaCBwcmlvcml0eSBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNzYsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTM6NDcuNDcxMzQwODk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM1NjcwNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRFBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0zLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzo0OmNvbmZpZyBJRFBGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnPTE3PWlmIElEUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnOjE5OmNvbmZpZyBJRFBGX1NJTkdMRVFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiaWRwZiBzaW5nbGVxIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIxOjUzOjUyLjYwNzAyMDQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjcwMjQ4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIEknbSBnb2luZyB0byBleGNsdWRlIGBJRFBGYCwgc2luY2UgaXQncyBhIGhhcmR3YXJlIGRyaXZlciwgYW5kIHdlIGdlbmVyYWxseSBkb24ndCBmdXp6IHRob3NlIHVubGVzcyB3ZSd2ZSBnb3QgZW11bGF0ZWQgaGFyZHdhcmUuIEhvd2V2ZXIsIGBORVRfU0NIX0ZRYCBhbmQgYE5FVF9QS1RHRU5gIGFyZSBkZWZpbml0ZWx5IHNvZnR3YXJlIGZlYXR1cmVzIHJpcGUgZm9yIGZ1enppbmcuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgaGVyZSdzIHRoZSBsYW5kc2NhcGU6IGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sYCwgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdGAsIHRoZSBgaWRwZmAgZHJpdmVyIGZpbGVzLCBhIGZldyBgaW5jbHVkZWAgZmlsZXMgbGlrZSBgZXRodG9vbC5oYCBhbmQgYG5ldGRldmljZS5oYCwgdGhlIGB1YXBpYCBgZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oYCwgYW5kIHRoZW4gdGhlIG1lYXQgb2YgaXQ6IGBuZXQvY29yZS9wa3RnZW4uY2AsIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AsIHRoZSBgZXRodG9vbGAgZGlyZWN0b3J5IChgY29tbW9uLmNgLCBgbmV0bGluay5oYCwgYHJpbmdzLmNgKSwgYG5ldC9zY2hlZC9zY2hfZnEuY2AsIGFuZCBzb21lIHNlbGZ0ZXN0cy5cblxuVGhlIG1vc3QgY3JpdGljYWwgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBuZXQvY29yZS9wa3RnZW4uY2AsIGBuZXQvZXRodG9vbC9yaW5ncy5jYCwgYG5ldC9zY2hlZC9zY2hfZnEuY2AsIGFuZCBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBUaGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFuZCB0aG9zZSBhcmUgdGhlIGFyZWFzIEknbSBtb3N0IGludGVyZXN0ZWQgaW4gdGFyZ2V0aW5nLlxuXG5TcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGVzZSBzeW1ib2xzOiBgZXRobmxfc2V0X3JpbmdzYCwgYHJpbmdzX2ZpbGxfcmVwbHlgLCBgZnFfY2hhbmdlYCwgYW5kIGBwa3RnZW5faWZfd3JpdGVgLiBJJ20gZXhjbHVkaW5nIGBmcV9kZXF1ZXVlYCBhbmQgYGZxX2NsYXNzaWZ5YCBiZWNhdXNlIHRob3NlIGFyZSBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIGZ1enppbmcgdGhlbSBpcyBwcm9iYWJseSBub3QgdGhlIGJlc3QgdXNlIG9mIHJlc291cmNlcy5cblxuVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHdpbGwgYmUgYE5FVF9TQ0hfRlFgIGFuZCBgTkVUX1BLVEdFTmAuXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIHJpbmcgcGFyYW1ldGVyLCBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAsIGFuZCBtb2RpZmllcyBgc2NoX2ZxYCB0byB1c2UgaXQsIGFsb25nIHdpdGggdGhlIGBTT19UWFRJTUVgIHN1cHBvcnQgYWRkZWQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBuZXRsaW5rIGludGVyZmFjZXMsIGFuZCBwYWNrZXQgZ2VuZXJhdGlvbiwgd2hpY2ggbWVhbnMgdGhleSBhcmUgYWxsIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cblxuTGV0J3MgdHJpZ2dlciBhIGBzZXQtcmVzdWx0c2AgdG8gZ2V0IHRoaXMgZnV6emVyIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI5OSwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjE6NTQ6MDAuODM0MDUwMTE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMzY2NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX0ZRXCIsXG4gICAgXCJORVRfUEtUR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXRobmxfc2V0X3JpbmdzXCIsXG4gICAgXCJyaW5nc19maWxsX3JlcGx5XCIsXG4gICAgXCJmcV9jaGFuZ2VcIixcbiAgICBcInBrdGdlbl9pZl93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCByaW5nIHBhcmFtZXRlciBgcGFjaW5nX29mZmxvYWRfaG9yaXpvbmAgYW5kIG1vZGlmaWVzIGBzY2hfZnFgIHRvIHVzZSBpdC4gSXQgYWxzbyBhZGRzIGBTT19UWFRJTUVgIHN1cHBvcnQgdG8gYHBrdGdlbmAuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbmV0d29ya2luZyBsb2dpYywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgcGFja2V0IGdlbmVyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9GUVwiLFxuICAgIFwiTkVUX1BLVEdFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3NldF9yaW5nc1wiLFxuICAgIFwicmluZ3NfZmlsbF9yZXBseVwiLFxuICAgIFwiZnFfY2hhbmdlXCIsXG4gICAgXCJwa3RnZW5faWZfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgcmluZyBwYXJhbWV0ZXIgYHBhY2luZ19vZmZsb2FkX2hvcml6b25gIGFuZCBtb2RpZmllcyBgc2NoX2ZxYCB0byB1c2UgaXQuIEl0IGFsc28gYWRkcyBgU09fVFhUSU1FYCBzdXBwb3J0IHRvIGBwa3RnZW5gLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIG5ldGxpbmsgaW50ZXJmYWNlcywgYW5kIHBhY2tldCBnZW5lcmF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sd67[1] Phase: Succeeded StartedAt: 2026-07-23 21:54:15 +0000 UTC FinishedAt: 2026-07-23 21:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 21:54:15 +0000 UTC FinishedAt: 2026-07-23 21:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2] Phase: Succeeded StartedAt: 2026-07-23 21:54:15 +0000 UTC FinishedAt: 2026-07-24 02:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 21:54:16 +0000 UTC FinishedAt: 2026-07-24 02:20:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 21:54:16 +0000 UTC FinishedAt: 2026-07-23 21:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 21:54:16 +0000 UTC FinishedAt: 2026-07-23 21:54:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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-workflow5sd67/series-workflow5sd67-convert-artifact-1833489418/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 21:54:51 +0000 UTC FinishedAt: 2026-07-23 22:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 21:54:51 +0000 UTC FinishedAt: 2026-07-23 22:29:26 +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:*60407733-89bc-4f2e-a859-7300bbf22a68,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-workflow5sd67/series-workflow5sd67-convert-artifact-1833489418/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": "214b06b9-602c-40be-a5f0-52095908ea77", "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-workflow5sd67/series-workflow5sd67-build-action-2535030520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 21:54:51 +0000 UTC FinishedAt: 2026-07-23 22:29:16 +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:*60407733-89bc-4f2e-a859-7300bbf22a68,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-workflow5sd67/series-workflow5sd67-convert-artifact-1833489418/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": "214b06b9-602c-40be-a5f0-52095908ea77", "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-workflow5sd67/series-workflow5sd67-build-action-2535030520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:29:26 +0000 UTC FinishedAt: 2026-07-23 22:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:29:26 +0000 UTC FinishedAt: 2026-07-23 22:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:29:26 +0000 UTC FinishedAt: 2026-07-23 22:29:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:29:26 +0000 UTC FinishedAt: 2026-07-23 22:29:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-workflow5sd67/series-workflow5sd67-convert-artifact-3202708133/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:29:48 +0000 UTC FinishedAt: 2026-07-23 22:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:29:48 +0000 UTC FinishedAt: 2026-07-23 22:31:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*214b06b9-602c-40be-a5f0-52095908ea77,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-workflow5sd67/series-workflow5sd67-build-action-2535030520/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-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:31:46 +0000 UTC FinishedAt: 2026-07-23 22:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:31:46 +0000 UTC FinishedAt: 2026-07-23 22:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:31:46 +0000 UTC FinishedAt: 2026-07-23 23:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:31:46 +0000 UTC FinishedAt: 2026-07-23 23:16:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*60407733-89bc-4f2e-a859-7300bbf22a68,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-workflow5sd67/series-workflow5sd67-convert-artifact-3202708133/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": "5f7360ef-bef1-4366-ba03-a62b8edec77f", "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-workflow5sd67/series-workflow5sd67-build-action-1444850417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 22:31:46 +0000 UTC FinishedAt: 2026-07-23 23:16:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*60407733-89bc-4f2e-a859-7300bbf22a68,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-workflow5sd67/series-workflow5sd67-convert-artifact-3202708133/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": "5f7360ef-bef1-4366-ba03-a62b8edec77f", "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-workflow5sd67/series-workflow5sd67-build-action-1444850417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:16:30 +0000 UTC FinishedAt: 2026-07-23 23:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:16:30 +0000 UTC FinishedAt: 2026-07-23 23:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:16:30 +0000 UTC FinishedAt: 2026-07-23 23:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:16:30 +0000 UTC FinishedAt: 2026-07-23 23:18:08 +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:*5f7360ef-bef1-4366-ba03-a62b8edec77f,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-workflow5sd67/series-workflow5sd67-build-action-1444850417/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-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:18:18 +0000 UTC FinishedAt: 2026-07-24 02:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:18:18 +0000 UTC FinishedAt: 2026-07-24 02:20:09 +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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"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:*214b06b9-602c-40be-a5f0-52095908ea77,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5f7360ef-bef1-4366-ba03-a62b8edec77f,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-workflow5sd67/series-workflow5sd67-build-action-2535030520/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-workflow5sd67/series-workflow5sd67-build-action-1444850417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:18:18 +0000 UTC FinishedAt: 2026-07-23 23:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:18:18 +0000 UTC FinishedAt: 2026-07-23 23:18:26 +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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"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-workflow5sd67/series-workflow5sd67-convert-artifact-2882213418/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:18:18 +0000 UTC FinishedAt: 2026-07-23 23:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:18:18 +0000 UTC FinishedAt: 2026-07-23 23:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:18:18 +0000 UTC FinishedAt: 2026-07-23 23:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:18:38 +0000 UTC FinishedAt: 2026-07-24 02:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sd67[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"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":["ethnl_set_rings","rings_fill_reply","fq_change","pktgen_if_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"92f0217f8afd8c96288a5e88263d1a15cf98ceec","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_FQ","NET_PKTGEN"],"series_id":"3442606c-8dfe-43e1-9f7c-fb0f966dd68e","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-23 23:18:38 +0000 UTC FinishedAt: 2026-07-24 02:19:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*214b06b9-602c-40be-a5f0-52095908ea77,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5f7360ef-bef1-4366-ba03-a62b8edec77f,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-workflow5sd67/series-workflow5sd67-build-action-2535030520/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-workflow5sd67/series-workflow5sd67-build-action-1444850417/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-workflow5sd67/series-workflow5sd67-convert-artifact-2882213418/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,}