Name: series-workflow9h7k6 Phase: Failed StartedAt: 2026-09-11 04:15:29 +0000 UTC FinishedAt: 2026-09-11 05:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9h7k6[0] Phase: Succeeded StartedAt: 2026-09-11 04:15:29 +0000 UTC FinishedAt: 2026-09-11 05:03:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9h7k6[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 04:15:29 +0000 UTC FinishedAt: 2026-09-11 05:03:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvKSwgYWRkaW5nIElSUSBwb29sIG1hbmFnZW1lbnQgYW5kIGV2ZW50IHF1ZXVlIHBsdW1iaW5nIGZvciBaVEUgRGluZ0hhaSBQQ0llIGFkYXB0ZXJzIChQQ0kgdmVuZG9yIElEIDB4MWNmMikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDU6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZTNlZjQ5NmE5MzVkNGZjZGMzNzQxMGI5NzBlNDczZDhiNmI5YzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDU6MDM6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuaW5kZXggZTJmNGRhMzNkZjU5My4uMmRjNmQ2OGNjMGUxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuQEAgLTQsNCAmIzQzOzQsNCBAQFxuICNcbiBcbiBvYmotJChDT05GSUdfRElOR0hBSV9QRikgJiM0Mzs9IGRpbmdoYWkxMGUub1xuLWRpbmdoYWkxMGUteSA6PSBlbl9wZi5vXG4mIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vIHp4ZGhfaXJxLm8genhkaF9lcS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcbmluZGV4IDg2ZDQzNzQwODgyMDMuLmZlMzkyNGI4OTBkMTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtNiw2ICYjNDM7NiwxMCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZW5fcGYuaFwmIzM0O1xuQEAgLTI1LDYgJiM0MzsyOSwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcbiBcbiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpO1xuIFxuJiM0MztzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUge1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV9wb29sICphc3luY19wb29sO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogSVJRIGNvbXBhY3Rpb24gdGhyZXNob2xkcyBvZiB0aGUgYXN5bmMgcG9vbCwgaW4gbnVtYmVyIG9mIHF1ZXVlcy4gKi9cbiYjNDM7I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NSU5fQ09NUFx0MFxuJiM0MzsjZGVmaW5lIFpYREhfUEZfQVNZTkNfSVJRX01BWF9DT01QXHQ3XG4mIzQzO1xuIHZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG5AQCAtMzY5LDYgJiM0MzszODEsMTc3IEBAIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyogUmVhZCB0aGUgZmlybXdhcmUgdmVyc2lvbiBibG9jayBhbmQgdmVyaWZ5IHRoZSBkcml2ZXIvZmlybXdhcmVcbiYjNDM7ICogdmVyc2lvbiBjb250cmFjdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgenhkaF9wZl9md19jb21wYXRfY2hlY2soc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCB6eGRoX2Z3X2NvbXBhdCBfX2lvbWVtICpjb21wYXQ7XG4mIzQzO1x0c3RydWN0IHp4ZGhfZndfY29tcGF0ICpmd19jb21wYXQ7XG4mIzQzO1x0dTMyIGVyYXNlZDtcbiYjNDM7XG4mIzQzO1x0ZndfY29tcGF0ID0gXHUwMDI2cGZfZGV2LVx1MDAzZWZ3X2NvbXBhdDtcbiYjNDM7XHRjb21wYXQgPSBwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSAmIzQzOyBaWERIX0ZXX0NPTVBBVF9PRkZTRVQ7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSByZWdpb24gcmVhZHMgYXMgYWxsIG9uZXMgdW50aWwgdGhlIGZpcm13YXJlIHBvcHVsYXRlcyBpdCBhdFxuJiM0MztcdCAqIHRoZSBlbmQgb2YgaXRzIGJvb3Q7IGFsbG93IHVwIHRvIDIwMCBzIGZvciBhIGNvbGQgYm9vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZWFkeF9wb2xsX3RpbWVvdXQoaW9yZWFkMzIsIGNvbXBhdCwgZXJhc2VkLCBlcmFzZWQgIT0gMHhmZmZmZmZmZlUsXG4mIzQzO1x0XHRcdCAgIFVTRUNfUEVSX1NFQyxcbiYjNDM7XHRcdFx0ICAgWlhESF9GV19DT01QQVRfVElNRU9VVF9TRUMgKiBVU0VDX1BFUl9TRUMpO1xuJiM0MztcbiYjNDM7XHQvKiBGaXJtd2FyZSBwcmVkYXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcmVnaW9uIGtlZXBzIHRoZSBlcmFzZWRcbiYjNDM7XHQgKiBwYXR0ZXJuLCB3aGljaCBmYWlscyB0aGUgbW9kdWxlIGlkIGNoZWNrIGJlbG93IGFuZCBkZWZlcnMgdGhlXG4mIzQzO1x0ICogZGVjaXNpb24gdG8gdGhlIHJlYWRpbmVzcyB3YWl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQgPSBpb3JlYWQ4KFx1MDAyNmNvbXBhdC1cdTAwM2Vtb2R1bGVfaWQpO1xuJiM0MztcdGZ3X2NvbXBhdC1cdTAwM2VtYWpvciA9IGlvcmVhZDgoXHUwMDI2Y29tcGF0LVx1MDAzZW1ham9yKTtcbiYjNDM7XHRmd19jb21wYXQtXHUwMDNlZndfbWlub3IgPSBpb3JlYWQ4KFx1MDAyNmNvbXBhdC1cdTAwM2Vmd19taW5vcik7XG4mIzQzO1x0ZndfY29tcGF0LVx1MDAzZWRydl9taW5vciA9IGlvcmVhZDgoXHUwMDI2Y29tcGF0LVx1MDAzZWRydl9taW5vcik7XG4mIzQzO1x0ZndfY29tcGF0LVx1MDAzZXBhdGNoID0gaW9yZWFkMTYoXHUwMDI2Y29tcGF0LVx1MDAzZXBhdGNoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQgIT0gWlhESF9NT0RVTEVfSUQpIHtcbiYjNDM7XHRcdGRldl9pbmZvKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0IFwmIzM0O3Vua25vd24gbW9kdWxlIGlkICV1LCBza2lwIGZ3IGNvbXBhdCBjaGVja1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZndfY29tcGF0LVx1MDAzZW1ham9yICE9IFpYREhfTUFKT1IpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtkcml2ZXIgbWFqb3IgJXUgaW5jb21wYXRpYmxlIHdpdGggZmlybXdhcmUgbWFqb3IgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFpYREhfTUFKT1IsIGZ3X2NvbXBhdC1cdTAwM2VtYWpvcik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmd19jb21wYXQtXHUwMDNlZndfbWlub3IgXHUwMDNjIFpYREhfRldfTUlOT1IpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtmaXJtd2FyZSBmd19taW5vciAlZCBvbGRlciB0aGFuIHJlcXVpcmVkICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRmd19jb21wYXQtXHUwMDNlZndfbWlub3IsIFpYREhfRldfTUlOT1IpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZndfY29tcGF0LVx1MDAzZWRydl9taW5vciBcdTAwM2UgWlhESF9EUlZfTUlOT1IpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtkcml2ZXIgZHJ2X21pbm9yICV1IG9sZGVyIHRoYW4gcmVxdWlyZWQgYnkgZmlybXdhcmUgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFpYREhfRFJWX01JTk9SLCBmd19jb21wYXQtXHUwMDNlZHJ2X21pbm9yKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFdhaXQgZm9yIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIG9mIHRoZSBmaXJtd2FyZSB0byBmaW5pc2hcbiYjNDM7ICogYm9vdGluZywgc28gdGhhdCBsYXRlciBwcm9iZSBzdGVwcyBjYW4gdGFsayB0byBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgenhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIF9faW9tZW0gKmhiO1xuJiM0MztcdHU4IGhlYWx0aF92ZXJzaW9uO1xuJiM0MztcdHU4IHBvd2VyX29uO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGhiID0gcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gJiM0MzsgWlhESF9SSVNDVl9IQl9PRkZTRVQ7XG4mIzQzO1x0aGVhbHRoX3ZlcnNpb24gPSBpb3JlYWQ4KFx1MDAyNmhiLVx1MDAzZWhlYWx0aF92ZXJzaW9uKTtcbiYjNDM7XG4mIzQzO1x0LyogRmlybXdhcmUgcHJlZGF0aW5nIHRoZSBoZWFsdGggYnVmZmVyIHByb3RvY29sIGhhcyBuZWl0aGVyIGFcbiYjNDM7XHQgKiB2YWxpZCB2ZXJzaW9uIGJ5dGUgbm9yIGEgcG93ZXItb24gZmxhZyB0byB3YWl0IGZvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaGVhbHRoX3ZlcnNpb24gIT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGZfZGV2LVx1MDAzZWZ3X2NvbXBhdC5wYXRjaCBcdTAwM2MgWlhESF9IUElSUV9QQVRDSClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSByZWFkeF9wb2xsX3RpbWVvdXQoaW9yZWFkOCwgXHUwMDI2aGItXHUwMDNlcmlzY3ZfcG93ZXJfb24sIHBvd2VyX29uLFxuJiM0MztcdFx0XHRcdCBwb3dlcl9vbiA9PSAxLCBVU0VDX1BFUl9TRUMsXG4mIzQzO1x0XHRcdFx0IFpYREhfUklTQ1ZfUkVBRFlfVElNRU9VVF9TRUMgKiBVU0VDX1BFUl9TRUMpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmlzY3YgcG93ZXIgb25cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfaXJxX3Bvb2xzX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUgPSB6eGRoX2Rldi1cdTAwM2VpcnFfdGFibGUucHJpdjtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbDtcbiYjNDM7XG4mIzQzO1x0cG9vbCA9IHp4ZGhfaXJxX3Bvb2xfYWxsb2MoenhkaF9kZXYsIDAsIFpYREhfQVNZTkNfQ0hBTk5FTFNfTlVNLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O3p4ZGhfcGZfYXN5bmNcJiMzNDssIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QLFxuJiM0MztcdFx0XHRcdCAgIFpYREhfUEZfQVNZTkNfSVJRX01BWF9DT01QKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBvb2wpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocG9vbCk7XG4mIzQzO1xuJiM0MztcdHBmX2lycV90YWJsZS1cdTAwM2Vhc3luY19wb29sID0gcG9vbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfaXJxX3Bvb2xzX2Rlc3Ryb3koc3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAocGZfaXJxX3RhYmxlLVx1MDAzZWFzeW5jX3Bvb2wpXG4mIzQzO1x0XHR6eGRoX2lycV9wb29sX2ZyZWUocGZfaXJxX3RhYmxlLVx1MDAzZWFzeW5jX3Bvb2wpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9pcnFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnFfdGFibGUgKnRhYmxlID0gXHUwMDI2enhkaF9kZXYtXHUwMDNlaXJxX3RhYmxlO1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcHJpdjtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGt2emFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0dGFibGUtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdGludCB0b3RhbF92ZWMgPSBaWERIX1ZRU19DSEFOTkVMU19OVU0gJiM0MzsgWlhESF9BU1lOQ19DSEFOTkVMU19OVU0gJiM0MztcbiYjNDM7XHRcdFx0WlhESF9SRE1BX0NIQU5ORUxTX05VTTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHR0b3RhbF92ZWMgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgdG90YWxfdmVjLCB0b3RhbF92ZWMsXG4mIzQzO1x0XHRcdFx0XHQgIFBDSV9JUlFfTVNJWCk7XG4mIzQzO1x0aWYgKHRvdGFsX3ZlYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BjaV9hbGxvY19pcnFfdmVjdG9ycyBmYWlsZWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR0b3RhbF92ZWMpO1xuJiM0MztcdFx0cmV0dXJuIHRvdGFsX3ZlYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IHp4ZGhfcGZfaXJxX3Bvb2xzX2luaXQoenhkaF9kZXYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2lycV9wb29sc19pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVycik7XG4mIzQzO1x0XHRwY2lfZnJlZV9pcnFfdmVjdG9ycyh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9pcnFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnFfdGFibGUgKnRhYmxlID0gXHUwMDI2enhkaF9kZXYtXHUwMDNlaXJxX3RhYmxlO1xuJiM0MztcbiYjNDM7XHRpZiAodGFibGUtXHUwMDNlcHJpdilcbiYjNDM7XHRcdHp4ZGhfcGZfaXJxX3Bvb2xzX2Rlc3Ryb3kodGFibGUtXHUwMDNlcHJpdik7XG4mIzQzO1x0a3ZmcmVlKHRhYmxlLVx1MDAzZXByaXYpO1xuJiM0MztcdHRhYmxlLVx1MDAzZXByaXYgPSBOVUxMO1xuJiM0MztcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBGZXRjaCBhIHZlY3RvciBmcm9tIHRoZSBhc3luYyBwb29sIGZvciBvbmUgYXN5bmMgZXZlbnQgcXVldWUuICovXG4mIzQzO3N0cnVjdCB6eGRoX2lycSAqenhkaF9wZl9hc3luY19pcnFfcmVxdWVzdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnBmX2lycV90YWJsZSA9IHp4ZGhfZGV2LVx1MDAzZWlycV90YWJsZS5wcml2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4genhkaF9nZXRfaXJxX29mX3Bvb2wocGZfaXJxX3RhYmxlLVx1MDAzZWFzeW5jX3Bvb2wpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgenhkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIHtcbiBcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcbkBAIC00MDUsMTAgJiM0Mzs1ODgsNTAgQEAgc3RhdGljIGludCB6eGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRcdGdvdG8gZXJyX2NmZ19pbml0O1xuIFx0fVxuIFxuJiM0MztcdHJldCA9IHp4ZGhfcGZfZndfY29tcGF0X2NoZWNrKHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX2Z3X2NvbXBhdF9jaGVjayBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX3dhaXRfcmlzY3ZfcmVhZHkoenhkaF9kZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX2lycV90YWJsZV9pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9jZmdfaW5pdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZSh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9pcnFfdGFibGVfY3JlYXRlIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9pcnFfdGFibGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2luaXQoenhkaF9kZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfZXFfdGFibGVfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfZXFfdGFibGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZSh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9lcV90YWJsZV9jcmVhdGUgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX2VxX3RhYmxlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycl9lcV90YWJsZTpcbiYjNDM7XHR6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuJiM0MztlcnJfaXJxX3RhYmxlOlxuJiM0MztcdHp4ZGhfcGZfaXJxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuIGVycl9jZmdfaW5pdDpcbiBcdHp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTtcbiBlcnJfcGNpX2luaXQ6XG5AQCAtNDI0LDYgJiM0Mzs2NDcsOCBAQCBzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTtcbiBcbiBcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbiYjNDM7XHR6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuJiM0MztcdHp4ZGhfcGZfaXJxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuIFx0enhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdCh6eGRoX2Rldik7XG4gXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4gXHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaFxuaW5kZXggNzM3M2RlZThkMWE5Zi4uODk0YTA1YTA5ZDk2MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC05LDYgJiM0Mzs5LDkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3p4ZGhfZXEuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt6eGRoX2lycS5oXCYjMzQ7XG4mIzQzO1xuICNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuICNkZWZpbmUgWlhESF9QRl9ERVZJQ0VfSURcdDB4ODA0MFxuICNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSURcdDB4ODA0MVxuQEAgLTI5LDEwICYjNDM7MzIsNTcgQEBcbiAjZGVmaW5lIFpYREhfUEZfQUxJR04yXHRcdFx0MlxuICNkZWZpbmUgWlhESF9QRl9NQVBfTUlOTEVOMlx0XHQyXG4gXG4mIzQzOy8qIEZpeGVkIG9mZnNldHMgb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSByZWdpb25zIHdpdGhpbiBCQVIgMC4gKi9cbiYjNDM7I2RlZmluZSBaWERIX1JJU0NWX0hCX09GRlNFVFx0MHg1MzAwXG4mIzQzOyNkZWZpbmUgWlhESF9GV19DT01QQVRfT0ZGU0VUXHQweDU0MDBcbiYjNDM7XG4mIzQzOy8qIERyaXZlci9maXJtd2FyZSB2ZXJzaW9uIGNvbnRyYWN0LiBUaGUgZmlybXdhcmUgcHVibGlzaGVzIGl0cyBzaWRlIG9mXG4mIzQzOyAqIHRoZSBjb250cmFjdCBpbiB0aGUgcmVnaW9uIGF0IFpYREhfRldfQ09NUEFUX09GRlNFVC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWlhESF9NT0RVTEVfSURcdFx0MVxuJiM0MzsjZGVmaW5lIFpYREhfTUFKT1JcdFx0MVxuJiM0MzsjZGVmaW5lIFpYREhfRldfTUlOT1JcdFx0MFxuJiM0MzsjZGVmaW5lIFpYREhfRFJWX01JTk9SXHRcdDBcbiYjNDM7LyogRmlybXdhcmUgcGF0Y2ggbGV2ZWwgdGhhdCBpbnRyb2R1Y2VkIHRoZSBoZWFsdGggYnVmZmVyIHByb3RvY29sLiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfSFBJUlFfUEFUQ0hcdDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9GV19DT01QQVRfVElNRU9VVF9TRUNcdDIwMFxuJiM0MzsjZGVmaW5lIFpYREhfUklTQ1ZfUkVBRFlfVElNRU9VVF9TRUNcdDQwXG4mIzQzO1xuJiM0MzsvKiBGaXJtd2FyZSB2ZXJzaW9uIGNvbXBhdGliaWxpdHkgYmxvY2sgYXQgWlhESF9GV19DT01QQVRfT0ZGU0VULlxuJiM0MzsgKiBGaWVsZHMgYXJlIHJlYWQgdGhyb3VnaCBpb3JlYWQqKCksIHdoaWNoIGNvbnZlcnRzIGZyb20gbGl0dGxlLWVuZGlhbi5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6eGRoX2Z3X2NvbXBhdCB7XG4mIzQzO1x0dTggbW9kdWxlX2lkO1xuJiM0MztcdHU4IG1ham9yO1xuJiM0MztcdHM4IGZ3X21pbm9yO1xuJiM0MztcdHU4IGRydl9taW5vcjtcbiYjNDM7XHR1MTYgcGF0Y2g7XG4mIzQzO1x0dTE2IHJzdjtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qIEhlYWx0aCBidWZmZXIgYXQgWlhESF9SSVNDVl9IQl9PRkZTRVQsIG1haW50YWluZWQgYnkgdGhlIFJJU0MtVlxuJiM0MzsgKiBtYW5hZ2VtZW50IGNvcmUgb2YgdGhlIGZpcm13YXJlLiBGaWVsZHMgYXJlIHJlYWQgdGhyb3VnaCBpb3JlYWQqKCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIHtcbiYjNDM7XHR1MzIgc3luZDtcdFx0LyogQml0bWFzayBvZiBhY3RpdmUgc3luZHJvbWUgZmxhZ3MuICovXG4mIzQzO1x0dTMyIGhlYWx0aF9jb3VudGVyO1x0LyogSW5jcmVtZW50ZWQgaGVhcnRiZWF0IGNvdW50ZXIuICovXG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHJmcjtcbiYjNDM7XHR1OCBmd19leGNlcHRpb247XG4mIzQzO1x0dTggcmlzY3ZfcG93ZXJfb247XHQvKiBTZXQgdG8gMSBvbmNlIHRoZSBjb3JlIGZpbmlzaGVkIGJvb3RpbmcuICovXG4mIzQzO1x0dTggZndfdmVyc2lvblszMl07XG4mIzQzO1x0dTggcGZfc3RhdHVzWzVdO1xuJiM0MztcdHU4IGhlYWx0aF92ZXJzaW9uO1x0LyogSGVhbHRoIGJ1ZmZlciBwcm90b2NvbCB2ZXJzaW9uLiAqL1xuJiM0MztcdHU4IHJzdjFbMzBdO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiBzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbiBcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV90YWJsZSBpcnFfdGFibGU7XG4mIzQzO1x0c3RydWN0IHp4ZGhfZXFfdGFibGUgZXFfdGFibGU7XG4gXHR2b2lkICpwcml2O1xuIH07XG4gXG5AQCAtNTQsNiAmIzQzOzEwNCw3IEBAIHN0cnVjdCB6eGRoX3BmX2RldiB7XG4gXHRzMzIgbW9kZXJuX2JhcnM7XG4gXHR2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07XG4gXHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xuJiM0MztcdHN0cnVjdCB6eGRoX2Z3X2NvbXBhdCBmd19jb21wYXQ7XG4gfTtcbiBcbiB2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTtcbkBAIC03Miw0ICYjNDM7MTIzLDEwIEBAIGludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuIHZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuIFxuJiM0MzsvKiBQRiBJUlEgdGFibGUgKGVuX3BmLmMpICovXG4mIzQzO2ludCB6eGRoX3BmX2lycV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO2ludCB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO3N0cnVjdCB6eGRoX2lycSAqenhkaF9wZl9hc3luY19pcnFfcmVxdWVzdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztcbiAjZW5kaWYgLyogX19aWERIX0VOX1BGX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmYxZDdlZWVjMWFlNGVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuY1xuQEAgLTAsMCAmIzQzOzEsMTQ1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gZXZlbnQgcXVldWUgcGx1bWJpbmdcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogQXN5bmMgZXZlbnQgcXVldWVzIGFyZSB0aGUgZGVsaXZlcnkgcGF0aCBmb3IgZmlybXdhcmUgbm90aWZpY2F0aW9uczpcbiYjNDM7ICogYSBxdWV1ZSBvd25zIG9uZSBNU0ktWCB2ZWN0b3Igb2YgdGhlIGFzeW5jIHBvb2wgYW5kIGZhbnMgaW50ZXJydXB0c1xuJiM0MzsgKiBvdXQgdG8gdGhlIHBlci1ldmVudC10eXBlIG5vdGlmaWVyIGNoYWlucyBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGUuXG4mIzQzOyAqIFRoZSBCQVIgbWVzc2FnZSBjaGFubmVsIGhhbmRzaGFrZSB0aGF0IHRlbGxzIHRoZSBmaXJtd2FyZSB3aGljaFxuJiM0MzsgKiB2ZWN0b3JzIHRvIHNpZ25hbCBjb21lcyB3aXRoIHRoZSBCQVIgbWVzc2FnZSBzdWJzeXN0ZW0gaW4gYSBsYXRlclxuJiM0MzsgKiBzZXJpZXM7IHRoZSBQRiBzaWRlIHdpcmVkIGhlcmUgaXMgbGl2ZSBhcyBzb29uIGFzIHRoYXQgY2hhbm5lbCBpc1xuJiM0MzsgKiBlbmFibGVkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZW5fcGYuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt6eGRoX2VxLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7enhkaF9pcnEuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyogUEYgc2lkZSBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGU6IG9uZSBhc3luYyBFUSBmZWQgYnkgdGhlIFJJU0MtVlxuJiM0MzsgKiBtYW5hZ2VtZW50IGNvcmUuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfZXFfYXN5bmMgcmlzY3ZfZXE7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBGZXRjaCB0aGUgZXZlbnRfaWQgdGhlIFJJU0MtViBjb3JlIHBvc3RlZCBpbiB0aGUgUEYgcmVjZWl2ZVxuJiM0MzsgKiBzdWItY2hhbm5lbCBvZiB0aGUgQkFSIG1lc3NhZ2UgYXJlYS4gVGhlIGZpZWxkIGxpdmVzIGF0IGJ5dGUgb2Zmc2V0XG4mIzQzOyAqIDIgb2YgdGhlIDEyLWJ5dGUgbWVzc2FnZSBoZWFkZXIsIHNvIGEgc2luZ2xlIDMyLWJpdCByZWFkIG9mIHRoZVxuJiM0MzsgKiBzdWItY2hhbm5lbCBzdGFydCBjb3ZlcnMgaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdTE2IHp4ZGhfZXFfZXZlbnRfaWRfZ2V0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnN1YmNoYW47XG4mIzQzO1xuJiM0MztcdHN1YmNoYW4gPSBwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSAmIzQzOyBaWERIX0JBUl9NU0dfU1VCQ0hBTl9SRUNWO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9yZWFkMzIoc3ViY2hhbikgXHUwMDNlXHUwMDNlIDE2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUgenhkaF9lcV9ldmVudF90eXBlX2dldCh1MTYgZXZlbnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZXZlbnRfaWQgPT0gWlhESF9NU0dfTU9EVUxFX1JJU0NfUkVBRFkpXG4mIzQzO1x0XHRyZXR1cm4gWlhESF9FUV9FVkVOVF9UWVBFX1JJU0NWX1JFQURZO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IHRoZSBSSVNDLVYgcmVhZHkgbm90aWZpY2F0aW9uIGlzIGRpc3BhdGNoZWQgaW4gdGhpc1xuJiM0MztcdCAqIHNlcmllczsgdGhlIHJlbWFpbmluZyBmaXJtd2FyZSBldmVudHMgYXJyaXZlIHdpdGggdGhlIEJBUlxuJiM0MztcdCAqIG1lc3NhZ2Ugc3Vic3lzdGVtLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBaWERIX0VRX0VWRU5UX1RZUEVfTUFYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfZXFfYXN5bmNfcmlzY3ZfaW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9lcV9hc3luYyAqZXEgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCB6eGRoX2VxX2FzeW5jLCBpcnFfbmIpO1xuJiM0MztcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IGVxLVx1MDAzZXByaXY7XG4mIzQzO1x0ZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUgZXZlbnRfdHlwZTtcbiYjNDM7XG4mIzQzO1x0ZXZlbnRfdHlwZSA9IHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQoenhkaF9lcV9ldmVudF9pZF9nZXQoenhkaF9kZXYpKTtcbiYjNDM7XHRpZiAoZXZlbnRfdHlwZSA9PSBaWERIX0VRX0VWRU5UX1RZUEVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZ6eGRoX2Rldi1cdTAwM2VlcV90YWJsZS5uaFtldmVudF90eXBlXSxcbiYjNDM7XHRcdFx0XHQgICBldmVudF90eXBlLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfZXFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSBcdTAwMjZ6eGRoX2Rldi1cdTAwM2VlcV90YWJsZTtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcHJpdjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGt2emFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0dGFibGUtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2dGFibGUtXHUwMDNlbG9jayk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWlhESF9FUV9FVkVOVF9UWVBFX01BWDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKFx1MDAyNnRhYmxlLVx1MDAzZW5oW2ldKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcGZfZXFfdGFibGUgPSB6eGRoX2Rldi1cdTAwM2VlcV90YWJsZS5wcml2O1xuJiM0MztcdHN0cnVjdCB6eGRoX2VxX3RhYmxlICp0YWJsZSA9IFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWVxX3RhYmxlO1xuJiM0MztcdHN0cnVjdCB6eGRoX2VxX2FzeW5jICplcSA9IFx1MDAyNnBmX2VxX3RhYmxlLVx1MDAzZXJpc2N2X2VxO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dGFibGUtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGVxLVx1MDAzZXByaXYgPSB6eGRoX2RldjtcbiYjNDM7XHRlcS1cdTAwM2VpcnEgPSB6eGRoX3BmX2FzeW5jX2lycV9yZXF1ZXN0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGVxLVx1MDAzZWlycSkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIoZXEtXHUwMDNlaXJxKTtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXEtXHUwMDNlaXJxX25iLm5vdGlmaWVyX2NhbGwgPSB6eGRoX2VxX2FzeW5jX3Jpc2N2X2ludDtcbiYjNDM7XHRlcnIgPSB6eGRoX2lycV9hdHRhY2hfbmIoZXEtXHUwMDNlaXJxLCBcdTAwMjZlcS1cdTAwM2VpcnFfbmIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoXHUwMDI2ZXEtXHUwMDNlaXJxLCAxKTtcbiYjNDM7XHRcdGVxLVx1MDAzZWlycSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZXFfdGFibGUgKnBmX2VxX3RhYmxlID0genhkaF9kZXYtXHUwMDNlZXFfdGFibGUucHJpdjtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSBcdTAwMjZ6eGRoX2Rldi1cdTAwM2VlcV90YWJsZTtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9lcV9hc3luYyAqZXE7XG4mIzQzO1xuJiM0MztcdGlmICghcGZfZXFfdGFibGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVxID0gXHUwMDI2cGZfZXFfdGFibGUtXHUwMDNlcmlzY3ZfZXE7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dGFibGUtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKGVxLVx1MDAzZWlycSkge1xuJiM0MztcdFx0enhkaF9pcnFfZGV0YWNoX25iKGVxLVx1MDAzZWlycSwgXHUwMDI2ZXEtXHUwMDNlaXJxX25iKTtcbiYjNDM7XHRcdHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoXHUwMDI2ZXEtXHUwMDNlaXJxLCAxKTtcbiYjNDM7XHRcdGVxLVx1MDAzZWlycSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrdmZyZWUodGFibGUtXHUwMDNlcHJpdik7XG4mIzQzO1x0dGFibGUtXHUwMDNlcHJpdiA9IE5VTEw7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40OTY1Y2ExNTkxMmFjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcbkBAIC0wLDAgJiM0MzsxLDYxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gZXZlbnQgcXVldWUgYWJzdHJhY3Rpb25cbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fWlhESF9FUV9IX19cbiYjNDM7I2RlZmluZSBfX1pYREhfRVFfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2NvcmVfZGV2O1xuJiM0MztzdHJ1Y3QgenhkaF9pcnE7XG4mIzQzO1xuJiM0MzsvKiBCQVIgbWVzc2FnZSBhcmVhOiBzaGFyZWQtbWVtb3J5IG1haWxib3ggYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGVcbiYjNDM7ICogZmlybXdhcmUsIHNwbGl0IGludG8gc3ViLWNoYW5uZWxzIG9mIDIwNDggYnl0ZXMuIE5vdGlmaWNhdGlvbnMgZnJvbVxuJiM0MzsgKiB0aGUgUklTQy1WIG1hbmFnZW1lbnQgY29yZSBhcmUgcG9zdGVkIHRvIHRoZSBQRiByZWNlaXZlIHN1Yi1jaGFubmVsLFxuJiM0MzsgKiBvbmUgaW50ZXJ2YWwgYWJvdmUgdGhlIGFyZWEgYmFzZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWlhESF9CQVJfTVNHX09GRlNFVFx0XHQweDIwMDBcbiYjNDM7I2RlZmluZSBaWERIX0JBUl9NU0dfU1VCQ0hBTl9JTlRFUlZBTFx0MjA0OFxuJiM0MzsjZGVmaW5lIFpYREhfQkFSX01TR19TVUJDSEFOX1JFQ1ZcdChaWERIX0JBUl9NU0dfT0ZGU0VUICYjNDM7XHRcXFxuJiM0MztcdFx0XHRcdFx0IFpYREhfQkFSX01TR19TVUJDSEFOX0lOVEVSVkFMKVxuJiM0MztcbiYjNDM7LyogZXZlbnRfaWQgb2YgdGhlIFwmIzM0O1JJU0MtViBjb3JlIHJlYWR5XCYjMzQ7IGZpcm13YXJlIG5vdGlmaWNhdGlvbiwgY2FycmllZFxuJiM0MzsgKiBhdCBieXRlIG9mZnNldCAyIG9mIHRoZSBCQVIgbWVzc2FnZSBoZWFkZXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfTVNHX01PRFVMRV9SSVNDX1JFQURZXHQxM1xuJiM0MztcbiYjNDM7LyogRXZlbnQgdHlwZXMgdGhlIHVwcGVyIGxheWVycyBjYW4gc3Vic2NyaWJlIHRvIG92ZXIgdGhlIHBlci10eXBlXG4mIzQzOyAqIG5vdGlmaWVyIGNoYWlucyBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGUuIFRoZSBmdWxsIGNhdGFsb2d1ZSBsaXZlc1xuJiM0MzsgKiBpbiB0aGUgZmlybXdhcmU7IG9ubHkgdGhlIG9uZXMgZGlzcGF0Y2hlZCBpbiB0aGlzIHNlcmllcyBhcmUgbmFtZWQuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHp4ZGhfZXFfZXZlbnRfdHlwZSB7XG4mIzQzO1x0WlhESF9FUV9FVkVOVF9UWVBFX1JJU0NWX1JFQURZID0gMCxcbiYjNDM7XHRaWERIX0VRX0VWRU5UX1RZUEVfTUFYLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogQXN5bmNocm9ub3VzIGV2ZW50IHF1ZXVlIGRlbGl2ZXJpbmcgZmlybXdhcmUgbm90aWZpY2F0aW9ucyB0byB0aGVcbiYjNDM7ICogZHJpdmVyIHdpdGhvdXQgYSByZXF1ZXN0L3JlcGx5IGhhbmRzaGFrZS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6eGRoX2VxX2FzeW5jIHtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcbiYjNDM7XHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaXJxX25iO1xuJiM0MztcdHZvaWQgKnByaXY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9lcV90YWJsZSB7XG4mIzQzO1x0LyogTm90aWZpZXIgY2hhaW5zIGZhbm5lZCBvdXQgYnkgZXZlbnQgdHlwZS4gKi9cbiYjNDM7XHRzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgbmhbWlhESF9FUV9FVkVOVF9UWVBFX01BWF07XG4mIzQzO1x0LyogU2VyaWFsaXplcyBhc3luYyBFUSBjcmVhdGUvZGVzdHJveS4gKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiYjNDM7XHR2b2lkICpwcml2O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfZXFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9lcV90YWJsZV9jcmVhdGUoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1pYREhfRVFfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40MzczNDQzMjljN2U4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5jXG5AQCAtMCwwICYjNDM7MSw0MTIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBJUlEgcG9vbCBtYW5hZ2VtZW50XG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIERldmljZSB2ZWN0b3JzIGFyZSBtYW5hZ2VkIGluIHBlci1wdXJwb3NlIHBvb2xzLiBBbiBJUlEgY2FycmllcyBhXG4mIzQzOyAqIHJlZmNvdW50IHNvIHRoYXQgc2V2ZXJhbCBldmVudCBxdWV1ZXMgY2FuIHNoYXJlIG9uZSB2ZWN0b3I7IG9uXG4mIzQzOyAqIHJhaXNlLCB0aGUgaW50ZXJydXB0IGlzIGZhbm5lZCBvdXQgdGhyb3VnaCBhbiBhdG9taWMgbm90aWZpZXIgY2hhaW5cbiYjNDM7ICogYXR0YWNoZWQgdG8gdGhlIElSUS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVtYXNrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9wZi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3p4ZGhfaXJxLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIFJlbGVhc2UgY2FsbGJhY2sgb2YgdGhlIElSUSBrcmVmLCBjYWxsZWQgd2l0aCBwb29sLVx1MDAzZWxvY2sgaGVsZC4gKi9cbiYjNDM7c3RhdGljIHZvaWQgenhkaF9pcnFfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB6eGRoX2lycSwgcmVmY291bnQpO1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sID0gaXJxLVx1MDAzZXBvb2w7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR4YV9lcmFzZShcdTAwMjZwb29sLVx1MDAzZWlycXMsIGlycS1cdTAwM2VpbmRleCk7XG4mIzQzO1x0LyogZnJlZV9pcnEoKSByZXF1aXJlcyB0aGUgYWZmaW5pdHkgaGludCB0byBiZSBjbGVhcmVkIGJlZm9yZSBpdCBpc1xuJiM0MztcdCAqIGNhbGxlZDsgdGhlIGFzeW1tZXRyeSB3aXRoIHRoZSBzZXQgcGF0aCBpbiB6eGRoX2lycV9hbGxvYygpIGlzXG4mIzQzO1x0ICogaW50ZW50aW9uYWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2VpcnFuLCBOVUxMKTtcbiYjNDM7XHRmcmVlX2NwdW1hc2tfdmFyKGlycS1cdTAwM2VtYXNrKTtcbiYjNDM7XHRmcmVlX2lycShpcnEtXHUwMDNlaXJxbiwgaXJxKTtcbiYjNDM7XHRrZnJlZShpcnEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEcm9wIG9uZSByZWZlcmVuY2U7IHJldHVybnMgMSBpZiB0aGUgSVJRIHdhcyByZWxlYXNlZC4gKi9cbiYjNDM7c3RhdGljIGludCB6eGRoX2lycV9wdXQoc3RydWN0IHp4ZGhfaXJxICppcnEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS1cdTAwM2Vwb29sO1xuJiM0MztcdGludCByZWxlYXNlZDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdHJlbGVhc2VkID0ga3JlZl9wdXQoXHUwMDI2aXJxLVx1MDAzZXJlZmNvdW50LCB6eGRoX2lycV9yZWxlYXNlKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlbGVhc2VkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfaXJxX2dldChzdHJ1Y3QgenhkaF9pcnEgKmlycSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgenhkaF9pcnFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnEgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZ6eGRoX2lycS1cdTAwM2VuaCwgMCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfYWxsb2Moc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsIGludCB2ZWNpZHgsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBvb2wtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0aXJxID0ga3phbGxvY19vYmooKmlycSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpcnEpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0aXJxLVx1MDAzZXBvb2wgPSBwb29sO1xuJiM0MztcdGlycS1cdTAwM2VpcnFuID0gcGNpX2lycV92ZWN0b3IoenhkaF9kZXYtXHUwMDNlcGRldiwgdmVjaWR4KTtcbiYjNDM7XHRpZiAoaXJxLVx1MDAzZWlycW4gXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IGlycS1cdTAwM2VpcnFuO1xuJiM0MztcdFx0Z290byBlcnJfaXJxbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoXHUwMDI2aXJxLVx1MDAzZW5oKTtcbiYjNDM7XHRzbnByaW50ZihpcnEtXHUwMDNlbmFtZSwgWlhESF9NQVhfSVJRX05BTUUsIFwmIzM0O2FzeW5jXyVkQHBjaTolc1wmIzM0OywgdmVjaWR4LFxuJiM0MztcdFx0IHBjaV9uYW1lKHp4ZGhfZGV2LVx1MDAzZXBkZXYpKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcmVxdWVzdF9pcnEoaXJxLVx1MDAzZWlycW4sIHp4ZGhfaXJxX2ludF9oYW5kbGVyLCAwLCBpcnEtXHUwMDNlbmFtZSwgaXJxKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2lycW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZpcnEtXHUwMDNlbWFzaywgR0ZQX0tFUk5FTCkpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6YWxsb2NfY3B1bWFza192YXIgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycl9jcHVtYXNrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGFmZmluaXR5KSB7XG4mIzQzO1x0XHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZW1hc2ssIGFmZmluaXR5KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogTm8gcHJlZmVyZW5jZSByZXF1ZXN0ZWQ7IHNwcmVhZCBvdmVyIGFsbCBvbmxpbmUgQ1BVcy4gKi9cbiYjNDM7XHRcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuJiM0MztcdFx0XHRjcHVtYXNrX3NldF9jcHUoY3B1LCBpcnEtXHUwMDNlbWFzayk7XG4mIzQzO1x0fVxuJiM0MztcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNlaXJxbiwgaXJxLVx1MDAzZW1hc2spO1xuJiM0MztcbiYjNDM7XHRrcmVmX2luaXQoXHUwMDI2aXJxLVx1MDAzZXJlZmNvdW50KTtcbiYjNDM7XHRpcnEtXHUwMDNlaW5kZXggPSB2ZWNpZHg7XG4mIzQzO1x0ZXJyID0geGFfZXJyKHhhX3N0b3JlKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaXJxLVx1MDAzZWluZGV4LCBpcnEsIEdGUF9LRVJORUwpKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7eGFfc3RvcmUgZmFpbGVkIGZvciBpcnEgJXU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRpcnEtXHUwMDNlaW5kZXgsIGVycik7XG4mIzQzO1x0XHRnb3RvIGVycl94YTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpcnE7XG4mIzQzO1xuJiM0MztlcnJfeGE6XG4mIzQzO1x0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2VpcnFuLCBOVUxMKTtcbiYjNDM7XHRmcmVlX2NwdW1hc2tfdmFyKGlycS1cdTAwM2VtYXNrKTtcbiYjNDM7ZXJyX2NwdW1hc2s6XG4mIzQzO1x0ZnJlZV9pcnEoaXJxLVx1MDAzZWlycW4sIGlycSk7XG4mIzQzO2Vycl9pcnFuOlxuJiM0MztcdGtmcmVlKGlycSk7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfaXJxX2F0dGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghenhkaF9pcnFfZ2V0KGlycSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNmlycS1cdTAwM2VuaCwgbmIpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHR6eGRoX2lycV9wdXQoaXJxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfaXJxX2RldGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKFx1MDAyNmlycS1cdTAwM2VuaCwgbmIpO1xuJiM0MztcdHp4ZGhfaXJxX3B1dChpcnEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWxlYXNlIG9uZSBvciBtb3JlIElSUXMgYmFjayB0byB0aGVpciBwb29sLiAqL1xuJiM0Mzt2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pcnFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3luY2hyb25pemVfaXJxKGlycXNbaV0tXHUwMDNlaXJxbik7XG4mIzQzO1x0XHR6eGRoX2lycV9wdXQoaXJxc1tpXSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB6eGRoX2NwdV9wdXQoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRwb29sLVx1MDAzZWlycXNfcGVyX2NwdVtjcHVdLS07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHp4ZGhfY3B1X2dldChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0mIzQzOyYjNDM7O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBGaW5kIHRoZSBsZWFzdCBsb2FkZWQgQ1BVLCBpLmUuIHRoZSBDUFUgd2l0aCB0aGUgZmV3ZXN0IElSUXMgYm91bmRcbiYjNDM7ICogdG8gaXQsIHdpdGhpbiB0aGUgcmVxdWVzdGVkIG1hc2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfY3B1X2dldF9sZWFzdF9sb2FkZWQoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spXG4mIzQzO3tcbiYjNDM7XHRpbnQgYmVzdF9jcHUgPSAtMTtcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jcHVfYW5kKGNwdSwgcmVxX21hc2ssIGNwdV9vbmxpbmVfbWFzaykge1xuJiM0MztcdFx0LyogVGhpcyBDUFUgaGFzIG5vIElSUXMgeWV0LCBubyBuZWVkIHRvIGxvb2sgZnVydGhlci4gKi9cbiYjNDM7XHRcdGlmICghcG9vbC1cdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSkge1xuJiM0MztcdFx0XHRiZXN0X2NwdSA9IGNwdTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoYmVzdF9jcHUgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJlc3RfY3B1ID0gY3B1O1xuJiM0MztcdFx0aWYgKHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0gXHUwMDNjIHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2Jlc3RfY3B1XSlcbiYjNDM7XHRcdFx0YmVzdF9jcHUgPSBjcHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoYmVzdF9jcHUgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGRldl9lcnIocG9vbC1cdTAwM2VkZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtubyBvbmxpbmUgQ1BVIGluIGFmZmluaXR5IG1hc2sgKCUqcGJsKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0Y3B1bWFza19wcl9hcmdzKHJlcV9tYXNrKSk7XG4mIzQzO1x0XHRiZXN0X2NwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTtcbiYjNDM7XHR9XG4mIzQzO1x0cG9vbC1cdTAwM2VpcnFzX3Blcl9jcHVbYmVzdF9jcHVdJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJlc3RfY3B1O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBDcmVhdGUgYSBuZXcgSVJRIGZyb20gdGhlIHBvb2wgYW5kIGJpbmQgaXQgdG8gdGhlIHJlcXVlc3RlZCBtYXNrLiAqL1xuJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9wb29sX3JlcXVlc3RfaXJxKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSA9IHJlcV9tYXNrO1xuJiM0MztcdGNwdW1hc2tfdmFyX3QgYXV0b19tYXNrO1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xuJiM0MztcdHUzMiBpcnFfaW5kZXg7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2YXV0b19tYXNrLCBHRlBfS0VSTkVMKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4YV9hbGxvYyhcdTAwMjZwb29sLVx1MDAzZWlycXMsIFx1MDAyNmlycV9pbmRleCwgTlVMTCwgcG9vbC1cdTAwM2V4YV9udW1faXJxcyxcbiYjNDM7XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpZiAoZXJyID09IC1FQlVTWSlcbiYjNDM7XHRcdFx0ZXJyID0gLUVVU0VSUztcbiYjNDM7XHRcdGdvdG8gZXJyX3hhO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNwdW1hc2tfd2VpZ2h0KHJlcV9tYXNrKSBcdTAwM2UgMSkge1xuJiM0MztcdFx0LyogQmluZCB0byB0aGUgbGVhc3QgbG9hZGVkIENQVSBvZiB0aGUgcmVxdWVzdC4gKi9cbiYjNDM7XHRcdGNwdW1hc2tfc2V0X2NwdSh6eGRoX2NwdV9nZXRfbGVhc3RfbG9hZGVkKHBvb2wsIHJlcV9tYXNrKSxcbiYjNDM7XHRcdFx0XHRhdXRvX21hc2spO1xuJiM0MztcdFx0YWZmaW5pdHkgPSBhdXRvX21hc2s7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHp4ZGhfY3B1X2dldChwb29sLCBjcHVtYXNrX2ZpcnN0KHJlcV9tYXNrKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpcnEgPSB6eGRoX2lycV9hbGxvYyhwb29sLCBpcnFfaW5kZXgsIGFmZmluaXR5KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGlycSkpXG4mIzQzO1x0XHRnb3RvIGVycl9hbGxvYztcbiYjNDM7XG4mIzQzO1x0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXJxO1xuJiM0MztcbiYjNDM7ZXJyX2FsbG9jOlxuJiM0MztcdC8qIFVuZG8gdGhlIHBlci1DUFUgYWNjb3VudGluZyBkb25lIGFib3ZlLiAqL1xuJiM0MztcdHp4ZGhfY3B1X3B1dChwb29sLCBjcHVtYXNrX2ZpcnN0KGFmZmluaXR5KSk7XG4mIzQzO1x0eGFfZXJhc2UoXHUwMDI2cG9vbC1cdTAwM2VpcnFzLCBpcnFfaW5kZXgpO1xuJiM0MztlcnJfeGE6XG4mIzQzO1x0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xuJiM0MztcdHJldHVybiBlcnIgPyBFUlJfUFRSKGVycikgOiBpcnE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIExvb2sgZm9yIHRoZSBJUlEgd2l0aCB0aGUgc21hbGxlc3QgcmVmY291bnQgd2hvc2UgYWZmaW5pdHkgbWFzayBpcyBhXG4mIzQzOyAqIHN1YnNldCBvZiB0aGUgcmVxdWVzdGVkIG1hc2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9wb29sX2ZpbmRfbGVhc3RfbG9hZGVkKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnEgKml0ZXI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiYjNDM7XHRpbnQgaXRlcl9yZWZjb3VudDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdHhhX2Zvcl9lYWNoX3JhbmdlKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaW5kZXgsIGl0ZXIsXG4mIzQzO1x0XHRcdCAgcG9vbC1cdTAwM2V4YV9udW1faXJxcy5taW4sIHBvb2wtXHUwMDNleGFfbnVtX2lycXMubWF4KSB7XG4mIzQzO1x0XHRpdGVyX3JlZmNvdW50ID0gcmVmY291bnRfcmVhZChcdTAwMjZpdGVyLVx1MDAzZXJlZmNvdW50LnJlZmNvdW50KTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTa2lwIElSUXMgd2hvc2UgbWFzayBpcyBub3QgYSBzdWJzZXQgb2YgdGhlIHJlcXVlc3QuICovXG4mIzQzO1x0XHRpZiAoIWNwdW1hc2tfc3Vic2V0KGl0ZXItXHUwMDNlbWFzaywgcmVxX21hc2spKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdC8qIElSUSBiZWxvdyB0aGUgbWluaW11bSB0aHJlc2hvbGQgZm91bmQsIHRha2UgaXQuICovXG4mIzQzO1x0XHRpZiAoaXRlcl9yZWZjb3VudCBcdTAwM2MgcG9vbC1cdTAwM2VtaW5fdGhyZXNob2xkKVxuJiM0MztcdFx0XHRyZXR1cm4gaXRlcjtcbiYjNDM7XHRcdGlmICghaXJxIHx8XG4mIzQzO1x0XHQgICAgaXRlcl9yZWZjb3VudCBcdTAwM2MgcmVmY291bnRfcmVhZChcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQucmVmY291bnQpKVxuJiM0MztcdFx0XHRpcnEgPSBpdGVyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlycTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVxdWVzdCBhbiBJUlEgZm9yIHRoZSBnaXZlbiBtYXNrOiBzaGFyZSB0aGUgbGVhc3QgbG9hZGVkIGV4aXN0aW5nXG4mIzQzOyAqIG1hdGNoaW5nIElSUSBvbmNlIGl0IHBhc3NlcyB0aGUgcG9vbCBtaW5pbXVtIHRocmVzaG9sZCwgb3RoZXJ3aXNlXG4mIzQzOyAqIGNyZWF0ZSBhIG5ldyBvbmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9hZmZpbml0eV9yZXF1ZXN0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqbGVhc3RfbG9hZGVkX2lycTtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnEgKm5ld19pcnE7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bGVhc3RfbG9hZGVkX2lycSA9IHp4ZGhfaXJxX3Bvb2xfZmluZF9sZWFzdF9sb2FkZWQocG9vbCwgcmVxX21hc2spO1xuJiM0MztcdGlmIChsZWFzdF9sb2FkZWRfaXJxIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICByZWZjb3VudF9yZWFkKFx1MDAyNmxlYXN0X2xvYWRlZF9pcnEtXHUwMDNlcmVmY291bnQucmVmY291bnQpIFx1MDAzYyBwb29sLVx1MDAzZW1pbl90aHJlc2hvbGQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gSVJRIGJlbG93IHRoZSBtaW5pbXVtIHRocmVzaG9sZCwgdHJ5IHRvIGNyZWF0ZSBhIG5ldyBvbmUuICovXG4mIzQzO1x0bmV3X2lycSA9IHp4ZGhfaXJxX3Bvb2xfcmVxdWVzdF9pcnEocG9vbCwgcmVxX21hc2spO1xuJiM0MztcdGlmIChJU19FUlIobmV3X2lycSkpIHtcbiYjNDM7XHRcdGlmICghbGVhc3RfbG9hZGVkX2lycSkge1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIG5ld19pcnE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBDb3VsZCBub3QgY3JlYXRlIGEgbmV3IElSUSBmb3IgdGhlIHJlcXVlc3RlZCBhZmZpbml0eSxcbiYjNDM7XHRcdCAqIHNoYXJlIHRoZSBleGlzdGluZyBvbmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl93YXJuKHBvb2wtXHUwMDNlZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0IFwmIzM0O2lycSBwb29sICVzIGV4aGF1c3RlZCwgc2hhcmluZyBpcnFzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgcG9vbC1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVhc3RfbG9hZGVkX2lycSA9IG5ld19pcnE7XG4mIzQzO1x0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0LyogSG9sZGluZyBwb29sLVx1MDAzZWxvY2sga2VlcHMgdGhlIElSUSBhbGl2ZSwgc28gdGhpcyBjYW5ub3QgZmFpbC4gKi9cbiYjNDM7XHR6eGRoX2lycV9nZXQobGVhc3RfbG9hZGVkX2lycSk7XG4mIzQzO1x0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2bGVhc3RfbG9hZGVkX2lycS1cdTAwM2VyZWZjb3VudC5yZWZjb3VudCkgXHUwMDNlIHBvb2wtXHUwMDNlbWF4X3RocmVzaG9sZClcbiYjNDM7XHRcdGRldl93YXJuKHBvb2wtXHUwMDNlZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0IFwmIzM0O2lycSAldSBvdmVybG9hZGVkLCBwb29sICVzLCAldSByZWZzIG9uIHRoaXMgaXJxXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgcGNpX2lycV92ZWN0b3IocG9vbC1cdTAwM2VkZXYtXHUwMDNlcGRldixcbiYjNDM7XHRcdFx0XHRcdGxlYXN0X2xvYWRlZF9pcnEtXHUwMDNlaW5kZXgpLFxuJiM0MztcdFx0XHQgcG9vbC1cdTAwM2VuYW1lLFxuJiM0MztcdFx0XHQgcmVmY291bnRfcmVhZChcdTAwMjZsZWFzdF9sb2FkZWRfaXJxLVx1MDAzZXJlZmNvdW50LnJlZmNvdW50KSAvXG4mIzQzO1x0XHRcdCBaWERIX0VRX1JFRlNfUEVSX0lSUSk7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGxlYXN0X2xvYWRlZF9pcnE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlcXVlc3QgYW4gSVJRIGZyb20gdGhlIHBvb2wsIHNwcmVhZCBvdmVyIHRoZSBvbmxpbmUgQ1BVcy4gKi9cbiYjNDM7c3RydWN0IHp4ZGhfaXJxICp6eGRoX2dldF9pcnFfb2ZfcG9vbChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbClcbiYjNDM7e1xuJiM0MztcdGNwdW1hc2tfdmFyX3QgcmVxX21hc2s7XG4mIzQzO1x0c3RydWN0IHp4ZGhfaXJxICppcnE7XG4mIzQzO1xuJiM0MztcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJlcV9tYXNrLCBHRlBfS0VSTkVMKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGNwdW1hc2tfY29weShyZXFfbWFzaywgY3B1X29ubGluZV9tYXNrKTtcbiYjNDM7XG4mIzQzO1x0aXJxID0genhkaF9pcnFfYWZmaW5pdHlfcmVxdWVzdChwb29sLCByZXFfbWFzayk7XG4mIzQzO1xuJiM0MztcdGZyZWVfY3B1bWFza192YXIocmVxX21hc2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXJxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdFx0XHQgIHUzMiBtaW5fdGhyZXNob2xkLCB1MzIgbWF4X3RocmVzaG9sZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sO1xuJiM0MztcdHUxNiAqaXJxc19wZXJfY3B1O1xuJiM0MztcbiYjNDM7XHRpcnFzX3Blcl9jcHUgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqaXJxc19wZXJfY3B1KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpcnFzX3Blcl9jcHUpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cG9vbCA9IGt2emFsbG9jX29iaigqcG9vbCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwb29sKSB7XG4mIzQzO1x0XHRrZnJlZShpcnFzX3Blcl9jcHUpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwb29sLVx1MDAzZWRldiA9IHp4ZGhfZGV2O1xuJiM0MztcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1ID0gaXJxc19wZXJfY3B1O1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR4YV9pbml0X2ZsYWdzKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgWEFfRkxBR1NfQUxMT0MpO1xuJiM0MztcdHBvb2wtXHUwMDNleGFfbnVtX2lycXMubWluID0gc3RhcnQ7XG4mIzQzO1x0cG9vbC1cdTAwM2V4YV9udW1faXJxcy5tYXggPSBzdGFydCAmIzQzOyBzaXplIC0gMTtcbiYjNDM7XHRzbnByaW50Zihwb29sLVx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcJiMzNDslc1wmIzM0OywgbmFtZSk7XG4mIzQzO1xuJiM0MztcdC8qIFRocmVzaG9sZHMgYXJlIGV4cHJlc3NlZCBpbiBxdWV1ZSByZWZlcmVuY2VzLCB0d28gcGVyIElSUS4gKi9cbiYjNDM7XHRwb29sLVx1MDAzZW1pbl90aHJlc2hvbGQgPSBtaW5fdGhyZXNob2xkICogWlhESF9FUV9SRUZTX1BFUl9JUlE7XG4mIzQzO1x0cG9vbC1cdTAwM2VtYXhfdGhyZXNob2xkID0gbWF4X3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJRO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG9vbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX2lycV9wb29sX2ZyZWUoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4O1xuJiM0MztcdHUzMiBjcHU7XG4mIzQzO1xuJiM0MztcdC8qIE9uIGEgZmFzdCB0ZWFyZG93biB0aGUgdGFibGUgbWF5IHN0aWxsIGhvbGQgSVJRczsgcmVsZWFzZVxuJiM0MztcdCAqIHdoYXRldmVyIGlzIGxlZnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaW5kZXgsIGlycSlcbiYjNDM7XHRcdHp4ZGhfaXJxX3JlbGVhc2UoXHUwMDI2aXJxLVx1MDAzZXJlZmNvdW50KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR4YV9kZXN0cm95KFx1MDAyNnBvb2wtXHUwMDNlaXJxcyk7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHUpIHtcbiYjNDM7XHRcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuJiM0MztcdFx0XHRXQVJOX09OKHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0pO1xuJiM0MztcdFx0a2ZyZWUocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3ZmcmVlKHBvb2wpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44OWY0NmQ3YjExYzljXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oXG5AQCAtMCwwICYjNDM7MSw3MiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIElSUSBwb29sIG1hbmFnZW1lbnRcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fWlhESF9JUlFfSF9fXG4mIzQzOyNkZWZpbmUgX19aWERIX0lSUV9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdW1hc2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2NvcmVfZGV2O1xuJiM0MztcbiYjNDM7LyogTnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgcGVyIHB1cnBvc2UuIFRoZSBsYXlvdXQgb2YgdGhlIHZlY3RvciBzcGFjZVxuJiM0MzsgKiBpcyBhIGhhcmR3YXJlIGludGVyZmFjZTpcbiYjNDM7ICogICBbMCwgOCkgICAgYXN5bmMgZXZlbnQgcXVldWVzXG4mIzQzOyAqICAgWzgsIDE0KSAgIHJlc2VydmVkIGZvciBSRE1BICh1bnVzZWQgZm9yIG5vdylcbiYjNDM7ICogICBbMTQsIDc4KSAgdnEgcngvdHggcXVldWUgcGFpcnNcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWlhESF9BU1lOQ19DSEFOTkVMU19OVU1cdFx0OFxuJiM0MzsjZGVmaW5lIFpYREhfUkRNQV9DSEFOTkVMU19OVU1cdFx0NlxuJiM0MzsjZGVmaW5lIFpYREhfVlFTX0NIQU5ORUxTX05VTVx0XHQ2NFxuJiM0MztcbiYjNDM7I2RlZmluZSBaWERIX01BWF9JUlFfTkFNRVx0MTAwXG4mIzQzOyNkZWZpbmUgWlhESF9FUV9SRUZTX1BFUl9JUlFcdDJcbiYjNDM7XG4mIzQzOy8qIFJlZmVyZW5jZSBjb3VudGVkIGludGVycnVwdC4gRXZlbnQgcXVldWVzIHNoYXJlIGFuIElSUSB0aHJvdWdoIHRoZVxuJiM0MzsgKiBub3RpZmllciBjaGFpbiwgd2hpY2ggaXMgZmlyZWQgZnJvbSBoYXJkIElSUSBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHp4ZGhfaXJxIHtcbiYjNDM7XHRzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgbmg7XG4mIzQzO1x0Y3B1bWFza192YXJfdCBtYXNrO1x0XHQvKiBpbnRlcnJ1cHQgYWZmaW5pdHkgKi9cbiYjNDM7XHRjaGFyIG5hbWVbWlhESF9NQVhfSVJRX05BTUVdO1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sO1xuJiM0MztcdHUzMiBpbmRleDtcdFx0XHQvKiB2ZWN0b3IgaW5kZXggKi9cbiYjNDM7XHRpbnQgaXJxbjtcdFx0XHQvKiBMaW51eCBJUlEgbnVtYmVyICovXG4mIzQzO1x0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBQb29sIG9mIHZlY3RvcnMgZGVkaWNhdGVkIHRvIG9uZSBwdXJwb3NlLCBpZGVudGlmaWVkIGJ5IHRoZVxuJiM0MzsgKiBbeGFfbnVtX2lycXMubWluLCB4YV9udW1faXJxcy5tYXhdIHZlY3RvciByYW5nZS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6eGRoX2lycV9wb29sIHtcbiYjNDM7XHRjaGFyIG5hbWVbWlhESF9NQVhfSVJRX05BTUVdO1xuJiM0MztcdHN0cnVjdCB4YV9saW1pdCB4YV9udW1faXJxcztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jaztcdFx0Lyogc2VyaWFsaXplcyBJUlEgY3JlYXRpb24gKi9cbiYjNDM7XHRzdHJ1Y3QgeGFycmF5IGlycXM7XG4mIzQzO1x0dTMyIG1pbl90aHJlc2hvbGQ7XHRcdC8qIGluIHF1ZXVlIHJlZmVyZW5jZXMgKi9cbiYjNDM7XHR1MzIgbWF4X3RocmVzaG9sZDtcdFx0LyogaW4gcXVldWUgcmVmZXJlbmNlcyAqL1xuJiM0MztcdHUxNiAqaXJxc19wZXJfY3B1O1x0XHQvKiBudW1iZXIgb2YgSVJRcyBib3VuZCBwZXIgQ1BVICovXG4mIzQzO1x0c3RydWN0IHp4ZGhfY29yZV9kZXYgKmRldjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2lycV90YWJsZSB7XG4mIzQzO1x0dm9pZCAqcHJpdjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2lycSAqenhkaF9nZXRfaXJxX29mX3Bvb2woc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpO1xuJiM0MztpbnQgenhkaF9pcnFfYXR0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbiYjNDM7aW50IHp4ZGhfaXJxX2RldGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG4mIzQzO3ZvaWQgenhkaF9pcnFzX3JlbGVhc2VfdmVjdG9ycyhzdHJ1Y3QgenhkaF9pcnEgKippcnFzLCBpbnQgbmlycXMpO1xuJiM0MztzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdFx0XHQgIHUzMiBtaW5fdGhyZXNob2xkLCB1MzIgbWF4X3RocmVzaG9sZCk7XG4mIzQzO3ZvaWQgenhkaF9pcnFfcG9vbF9mcmVlKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1pYREhfSVJRX0hfXyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpLyksIGFkZGluZyBJUlEgcG9vbCBtYW5hZ2VtZW50IGFuZCBldmVudCBxdWV1ZSBwbHVtYmluZyBmb3IgWlRFIERpbmdIYWkgUENJZSBhZGFwdGVycyAoUENJIHZlbmRvciBJRCAweDFjZjIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWUzZWY0OTZhOTM1ZDRmY2RjMzc0MTBiOTcwZTQ3M2Q4YjZiOWMwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA1OjAzOjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQppbmRleCBlMmY0ZGEzM2RmNTkzLi4yZGM2ZDY4Y2MwZTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQpAQCAtNCw0ICYjNDM7NCw0IEBACiAjCiAKIG9iai0kKENPTkZJR19ESU5HSEFJX1BGKSAmIzQzOz0gZGluZ2hhaTEwZS5vCi1kaW5naGFpMTBlLXkgOj0gZW5fcGYubwomIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vIHp4ZGhfaXJxLm8genhkaF9lcS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwppbmRleCA4NmQ0Mzc0MDg4MjAzLi5mZTM5MjRiODkwZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMKQEAgLTYsNiAmIzQzOzYsMTAgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKICNpbmNsdWRlICYjMzQ7ZW5fcGYuaCYjMzQ7CkBAIC0yNSw2ICYjNDM7MjksMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHp4ZGhfcGZfcGNpX3RhYmxlW10gPSB7CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7CiAKJiM0MztzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgewomIzQzOwlzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqYXN5bmNfcG9vbDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIElSUSBjb21wYWN0aW9uIHRocmVzaG9sZHMgb2YgdGhlIGFzeW5jIHBvb2wsIGluIG51bWJlciBvZiBxdWV1ZXMuICovCiYjNDM7I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NSU5fQ09NUAkwCiYjNDM7I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUAk3CiYjNDM7CiB2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKQogewogCXZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwpAQCAtMzY5LDYgJiM0MzszODEsMTc3IEBAIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qIFJlYWQgdGhlIGZpcm13YXJlIHZlcnNpb24gYmxvY2sgYW5kIHZlcmlmeSB0aGUgZHJpdmVyL2Zpcm13YXJlCiYjNDM7ICogdmVyc2lvbiBjb250cmFjdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfZndfY29tcGF0X2NoZWNrKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCB6eGRoX2Z3X2NvbXBhdCBfX2lvbWVtICpjb21wYXQ7CiYjNDM7CXN0cnVjdCB6eGRoX2Z3X2NvbXBhdCAqZndfY29tcGF0OwomIzQzOwl1MzIgZXJhc2VkOwomIzQzOwomIzQzOwlmd19jb21wYXQgPSAmYW1wO3BmX2Rldi0mZ3Q7ZndfY29tcGF0OwomIzQzOwljb21wYXQgPSBwZl9kZXYtJmd0O3BjaV9pb3JlbWFwX2FkZHJbMF0gJiM0MzsgWlhESF9GV19DT01QQVRfT0ZGU0VUOwomIzQzOwomIzQzOwkvKiBUaGUgcmVnaW9uIHJlYWRzIGFzIGFsbCBvbmVzIHVudGlsIHRoZSBmaXJtd2FyZSBwb3B1bGF0ZXMgaXQgYXQKJiM0MzsJICogdGhlIGVuZCBvZiBpdHMgYm9vdDsgYWxsb3cgdXAgdG8gMjAwIHMgZm9yIGEgY29sZCBib290LgomIzQzOwkgKi8KJiM0MzsJcmVhZHhfcG9sbF90aW1lb3V0KGlvcmVhZDMyLCBjb21wYXQsIGVyYXNlZCwgZXJhc2VkICE9IDB4ZmZmZmZmZmZVLAomIzQzOwkJCSAgIFVTRUNfUEVSX1NFQywKJiM0MzsJCQkgICBaWERIX0ZXX0NPTVBBVF9USU1FT1VUX1NFQyAqIFVTRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CS8qIEZpcm13YXJlIHByZWRhdGluZyB0aGUgY29tcGF0aWJpbGl0eSByZWdpb24ga2VlcHMgdGhlIGVyYXNlZAomIzQzOwkgKiBwYXR0ZXJuLCB3aGljaCBmYWlscyB0aGUgbW9kdWxlIGlkIGNoZWNrIGJlbG93IGFuZCBkZWZlcnMgdGhlCiYjNDM7CSAqIGRlY2lzaW9uIHRvIHRoZSByZWFkaW5lc3Mgd2FpdC4KJiM0MzsJICovCiYjNDM7CWZ3X2NvbXBhdC0mZ3Q7bW9kdWxlX2lkID0gaW9yZWFkOCgmYW1wO2NvbXBhdC0mZ3Q7bW9kdWxlX2lkKTsKJiM0MzsJZndfY29tcGF0LSZndDttYWpvciA9IGlvcmVhZDgoJmFtcDtjb21wYXQtJmd0O21ham9yKTsKJiM0MzsJZndfY29tcGF0LSZndDtmd19taW5vciA9IGlvcmVhZDgoJmFtcDtjb21wYXQtJmd0O2Z3X21pbm9yKTsKJiM0MzsJZndfY29tcGF0LSZndDtkcnZfbWlub3IgPSBpb3JlYWQ4KCZhbXA7Y29tcGF0LSZndDtkcnZfbWlub3IpOwomIzQzOwlmd19jb21wYXQtJmd0O3BhdGNoID0gaW9yZWFkMTYoJmFtcDtjb21wYXQtJmd0O3BhdGNoKTsKJiM0MzsKJiM0MzsJaWYgKGZ3X2NvbXBhdC0mZ3Q7bW9kdWxlX2lkICE9IFpYREhfTU9EVUxFX0lEKSB7CiYjNDM7CQlkZXZfaW5mbyh6eGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSAmIzM0O3Vua25vd24gbW9kdWxlIGlkICV1LCBza2lwIGZ3IGNvbXBhdCBjaGVja1xuJiMzNDssCiYjNDM7CQkJIGZ3X2NvbXBhdC0mZ3Q7bW9kdWxlX2lkKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmd19jb21wYXQtJmd0O21ham9yICE9IFpYREhfTUFKT1IpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2RyaXZlciBtYWpvciAldSBpbmNvbXBhdGlibGUgd2l0aCBmaXJtd2FyZSBtYWpvciAldVxuJiMzNDssCiYjNDM7CQkJWlhESF9NQUpPUiwgZndfY29tcGF0LSZndDttYWpvcik7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZndfY29tcGF0LSZndDtmd19taW5vciAmbHQ7IFpYREhfRldfTUlOT1IpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2Zpcm13YXJlIGZ3X21pbm9yICVkIG9sZGVyIHRoYW4gcmVxdWlyZWQgJXVcbiYjMzQ7LAomIzQzOwkJCWZ3X2NvbXBhdC0mZ3Q7ZndfbWlub3IsIFpYREhfRldfTUlOT1IpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZ3X2NvbXBhdC0mZ3Q7ZHJ2X21pbm9yICZndDsgWlhESF9EUlZfTUlOT1IpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2RyaXZlciBkcnZfbWlub3IgJXUgb2xkZXIgdGhhbiByZXF1aXJlZCBieSBmaXJtd2FyZSAldVxuJiMzNDssCiYjNDM7CQkJWlhESF9EUlZfTUlOT1IsIGZ3X2NvbXBhdC0mZ3Q7ZHJ2X21pbm9yKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXYWl0IGZvciB0aGUgUklTQy1WIG1hbmFnZW1lbnQgY29yZSBvZiB0aGUgZmlybXdhcmUgdG8gZmluaXNoCiYjNDM7ICogYm9vdGluZywgc28gdGhhdCBsYXRlciBwcm9iZSBzdGVwcyBjYW4gdGFsayB0byBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIF9faW9tZW0gKmhiOwomIzQzOwl1OCBoZWFsdGhfdmVyc2lvbjsKJiM0MzsJdTggcG93ZXJfb247CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWhiID0gcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdICYjNDM7IFpYREhfUklTQ1ZfSEJfT0ZGU0VUOwomIzQzOwloZWFsdGhfdmVyc2lvbiA9IGlvcmVhZDgoJmFtcDtoYi0mZ3Q7aGVhbHRoX3ZlcnNpb24pOwomIzQzOwomIzQzOwkvKiBGaXJtd2FyZSBwcmVkYXRpbmcgdGhlIGhlYWx0aCBidWZmZXIgcHJvdG9jb2wgaGFzIG5laXRoZXIgYQomIzQzOwkgKiB2YWxpZCB2ZXJzaW9uIGJ5dGUgbm9yIGEgcG93ZXItb24gZmxhZyB0byB3YWl0IGZvci4KJiM0MzsJICovCiYjNDM7CWlmIChoZWFsdGhfdmVyc2lvbiAhPSAxICZhbXA7JmFtcDsKJiM0MzsJICAgIHBmX2Rldi0mZ3Q7ZndfY29tcGF0LnBhdGNoICZsdDsgWlhESF9IUElSUV9QQVRDSCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSByZWFkeF9wb2xsX3RpbWVvdXQoaW9yZWFkOCwgJmFtcDtoYi0mZ3Q7cmlzY3ZfcG93ZXJfb24sIHBvd2VyX29uLAomIzQzOwkJCQkgcG93ZXJfb24gPT0gMSwgVVNFQ19QRVJfU0VDLAomIzQzOwkJCQkgWlhESF9SSVNDVl9SRUFEWV9USU1FT1VUX1NFQyAqIFVTRUNfUEVSX1NFQyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmlzY3YgcG93ZXIgb25cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgenhkaF9wZl9pcnFfcG9vbHNfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnBmX2lycV90YWJsZSA9IHp4ZGhfZGV2LSZndDtpcnFfdGFibGUucHJpdjsKJiM0MzsJc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2w7CiYjNDM7CiYjNDM7CXBvb2wgPSB6eGRoX2lycV9wb29sX2FsbG9jKHp4ZGhfZGV2LCAwLCBaWERIX0FTWU5DX0NIQU5ORUxTX05VTSwKJiM0MzsJCQkJICAgJiMzNDt6eGRoX3BmX2FzeW5jJiMzNDssIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QLAomIzQzOwkJCQkgICBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUCk7CiYjNDM7CWlmIChJU19FUlIocG9vbCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwb29sKTsKJiM0MzsKJiM0MzsJcGZfaXJxX3RhYmxlLSZndDthc3luY19wb29sID0gcG9vbDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfaXJxX3Bvb2xzX2Rlc3Ryb3koc3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUpCiYjNDM7ewomIzQzOwlpZiAocGZfaXJxX3RhYmxlLSZndDthc3luY19wb29sKQomIzQzOwkJenhkaF9pcnFfcG9vbF9mcmVlKHBmX2lycV90YWJsZS0mZ3Q7YXN5bmNfcG9vbCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX2lycV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2lycV90YWJsZSAqdGFibGUgPSAmYW1wO3p4ZGhfZGV2LSZndDtpcnFfdGFibGU7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcHJpdjsKJiM0MzsKJiM0MzsJcHJpdiA9IGt2emFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl0YWJsZS0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CWludCB0b3RhbF92ZWMgPSBaWERIX1ZRU19DSEFOTkVMU19OVU0gJiM0MzsgWlhESF9BU1lOQ19DSEFOTkVMU19OVU0gJiM0MzsKJiM0MzsJCQlaWERIX1JETUFfQ0hBTk5FTFNfTlVNOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwl0b3RhbF92ZWMgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoenhkaF9kZXYtJmd0O3BkZXYsIHRvdGFsX3ZlYywgdG90YWxfdmVjLAomIzQzOwkJCQkJICBQQ0lfSVJRX01TSVgpOwomIzQzOwlpZiAodG90YWxfdmVjICZsdDsgMCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9hbGxvY19pcnFfdmVjdG9ycyBmYWlsZWQ6ICVkXG4mIzM0OywKJiM0MzsJCQl0b3RhbF92ZWMpOwomIzQzOwkJcmV0dXJuIHRvdGFsX3ZlYzsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSB6eGRoX3BmX2lycV9wb29sc19pbml0KHp4ZGhfZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3p4ZGhfcGZfaXJxX3Bvb2xzX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssCiYjNDM7CQkJZXJyKTsKJiM0MzsJCXBjaV9mcmVlX2lycV92ZWN0b3JzKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfaXJxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfaXJxX3RhYmxlICp0YWJsZSA9ICZhbXA7enhkaF9kZXYtJmd0O2lycV90YWJsZTsKJiM0MzsKJiM0MzsJaWYgKHRhYmxlLSZndDtwcml2KQomIzQzOwkJenhkaF9wZl9pcnFfcG9vbHNfZGVzdHJveSh0YWJsZS0mZ3Q7cHJpdik7CiYjNDM7CWt2ZnJlZSh0YWJsZS0mZ3Q7cHJpdik7CiYjNDM7CXRhYmxlLSZndDtwcml2ID0gTlVMTDsKJiM0MzsJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBGZXRjaCBhIHZlY3RvciBmcm9tIHRoZSBhc3luYyBwb29sIGZvciBvbmUgYXN5bmMgZXZlbnQgcXVldWUuICovCiYjNDM7c3RydWN0IHp4ZGhfaXJxICp6eGRoX3BmX2FzeW5jX2lycV9yZXF1ZXN0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcGZfaXJxX3RhYmxlID0genhkaF9kZXYtJmd0O2lycV90YWJsZS5wcml2OwomIzQzOwomIzQzOwlyZXR1cm4genhkaF9nZXRfaXJxX29mX3Bvb2wocGZfaXJxX3RhYmxlLSZndDthc3luY19wb29sKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7CkBAIC00MDUsMTAgJiM0Mzs1ODgsNTAgQEAgc3RhdGljIGludCB6eGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJCWdvdG8gZXJyX2NmZ19pbml0OwogCX0KIAomIzQzOwlyZXQgPSB6eGRoX3BmX2Z3X2NvbXBhdF9jaGVjayh6eGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7enhkaF9wZl9md19jb21wYXRfY2hlY2sgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9jZmdfaW5pdDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX3dhaXRfcmlzY3ZfcmVhZHkoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeSBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2NmZ19pbml0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfaXJxX3RhYmxlX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfaXJxX3RhYmxlX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9jZmdfaW5pdDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZSBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2lycV90YWJsZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfZXFfdGFibGVfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2VxX3RhYmxlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfZXFfdGFibGVfY3JlYXRlKHp4ZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDt6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZSBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2VxX3RhYmxlOwomIzQzOwl9CiYjNDM7CiAJZGV2bGlua19yZWdpc3RlcihkZXZsaW5rKTsKIAogCXJldHVybiAwOwogCiYjNDM7ZXJyX2VxX3RhYmxlOgomIzQzOwl6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpOwomIzQzO2Vycl9pcnFfdGFibGU6CiYjNDM7CXp4ZGhfcGZfaXJxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpOwogZXJyX2NmZ19pbml0OgogCXp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTsKIGVycl9wY2lfaW5pdDoKQEAgLTQyNCw2ICYjNDM7NjQ3LDggQEAgc3RhdGljIHZvaWQgenhkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJc3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpOwogCiAJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwomIzQzOwl6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpOwomIzQzOwl6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTsKIAl6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTsKIAl6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7CiAJenhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaAppbmRleCA3MzczZGVlOGQxYTlmLi44OTRhMDVhMDlkOTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgKQEAgLTksNiAmIzQzOzksOSBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7enhkaF9lcS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3p4ZGhfaXJxLmgmIzM0OwomIzQzOwogI2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRAkweDFjZjIKICNkZWZpbmUgWlhESF9QRl9ERVZJQ0VfSUQJMHg4MDQwCiAjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lECTB4ODA0MQpAQCAtMjksMTAgJiM0MzszMiw1NyBAQAogI2RlZmluZSBaWERIX1BGX0FMSUdOMgkJCTIKICNkZWZpbmUgWlhESF9QRl9NQVBfTUlOTEVOMgkJMgogCiYjNDM7LyogRml4ZWQgb2Zmc2V0cyBvZiB0aGUgZmlybXdhcmUgaW50ZXJmYWNlIHJlZ2lvbnMgd2l0aGluIEJBUiAwLiAqLwomIzQzOyNkZWZpbmUgWlhESF9SSVNDVl9IQl9PRkZTRVQJMHg1MzAwCiYjNDM7I2RlZmluZSBaWERIX0ZXX0NPTVBBVF9PRkZTRVQJMHg1NDAwCiYjNDM7CiYjNDM7LyogRHJpdmVyL2Zpcm13YXJlIHZlcnNpb24gY29udHJhY3QuIFRoZSBmaXJtd2FyZSBwdWJsaXNoZXMgaXRzIHNpZGUgb2YKJiM0MzsgKiB0aGUgY29udHJhY3QgaW4gdGhlIHJlZ2lvbiBhdCBaWERIX0ZXX0NPTVBBVF9PRkZTRVQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaWERIX01PRFVMRV9JRAkJMQomIzQzOyNkZWZpbmUgWlhESF9NQUpPUgkJMQomIzQzOyNkZWZpbmUgWlhESF9GV19NSU5PUgkJMAomIzQzOyNkZWZpbmUgWlhESF9EUlZfTUlOT1IJCTAKJiM0MzsvKiBGaXJtd2FyZSBwYXRjaCBsZXZlbCB0aGF0IGludHJvZHVjZWQgdGhlIGhlYWx0aCBidWZmZXIgcHJvdG9jb2wuICovCiYjNDM7I2RlZmluZSBaWERIX0hQSVJRX1BBVENICTQKJiM0MzsKJiM0MzsjZGVmaW5lIFpYREhfRldfQ09NUEFUX1RJTUVPVVRfU0VDCTIwMAomIzQzOyNkZWZpbmUgWlhESF9SSVNDVl9SRUFEWV9USU1FT1VUX1NFQwk0MAomIzQzOwomIzQzOy8qIEZpcm13YXJlIHZlcnNpb24gY29tcGF0aWJpbGl0eSBibG9jayBhdCBaWERIX0ZXX0NPTVBBVF9PRkZTRVQuCiYjNDM7ICogRmllbGRzIGFyZSByZWFkIHRocm91Z2ggaW9yZWFkKigpLCB3aGljaCBjb252ZXJ0cyBmcm9tIGxpdHRsZS1lbmRpYW4uCiYjNDM7ICovCiYjNDM7c3RydWN0IHp4ZGhfZndfY29tcGF0IHsKJiM0MzsJdTggbW9kdWxlX2lkOwomIzQzOwl1OCBtYWpvcjsKJiM0MzsJczggZndfbWlub3I7CiYjNDM7CXU4IGRydl9taW5vcjsKJiM0MzsJdTE2IHBhdGNoOwomIzQzOwl1MTYgcnN2OwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyogSGVhbHRoIGJ1ZmZlciBhdCBaWERIX1JJU0NWX0hCX09GRlNFVCwgbWFpbnRhaW5lZCBieSB0aGUgUklTQy1WCiYjNDM7ICogbWFuYWdlbWVudCBjb3JlIG9mIHRoZSBmaXJtd2FyZS4gRmllbGRzIGFyZSByZWFkIHRocm91Z2ggaW9yZWFkKigpLgomIzQzOyAqLwomIzQzO3N0cnVjdCB6eGRoX2hlYWx0aF9idWZmZXIgewomIzQzOwl1MzIgc3luZDsJCS8qIEJpdG1hc2sgb2YgYWN0aXZlIHN5bmRyb21lIGZsYWdzLiAqLwomIzQzOwl1MzIgaGVhbHRoX2NvdW50ZXI7CS8qIEluY3JlbWVudGVkIGhlYXJ0YmVhdCBjb3VudGVyLiAqLwomIzQzOwl1OCBzdGF0dXM7CiYjNDM7CXU4IHJmcjsKJiM0MzsJdTggZndfZXhjZXB0aW9uOwomIzQzOwl1OCByaXNjdl9wb3dlcl9vbjsJLyogU2V0IHRvIDEgb25jZSB0aGUgY29yZSBmaW5pc2hlZCBib290aW5nLiAqLwomIzQzOwl1OCBmd192ZXJzaW9uWzMyXTsKJiM0MzsJdTggcGZfc3RhdHVzWzVdOwomIzQzOwl1OCBoZWFsdGhfdmVyc2lvbjsJLyogSGVhbHRoIGJ1ZmZlciBwcm90b2NvbCB2ZXJzaW9uLiAqLwomIzQzOwl1OCByc3YxWzMwXTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwogc3RydWN0IHp4ZGhfY29yZV9kZXYgewogCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlzdHJ1Y3QgZGV2bGluayAqZGV2bGluazsKJiM0MzsJc3RydWN0IHp4ZGhfaXJxX3RhYmxlIGlycV90YWJsZTsKJiM0MzsJc3RydWN0IHp4ZGhfZXFfdGFibGUgZXFfdGFibGU7CiAJdm9pZCAqcHJpdjsKIH07CiAKQEAgLTU0LDYgJiM0MzsxMDQsNyBAQCBzdHJ1Y3QgenhkaF9wZl9kZXYgewogCXMzMiBtb2Rlcm5fYmFyczsKIAl2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07CiAJdTMyIGRldl9jZmdfYmFyX29mZjsKJiM0MzsJc3RydWN0IHp4ZGhfZndfY29tcGF0IGZ3X2NvbXBhdDsKIH07CiAKIHZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpOwpAQCAtNzIsNCAmIzQzOzEyMywxMCBAQCBpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKIHZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpOwogaW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiAKJiM0MzsvKiBQRiBJUlEgdGFibGUgKGVuX3BmLmMpICovCiYjNDM7aW50IHp4ZGhfcGZfaXJxX3RhYmxlX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7dm9pZCB6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7c3RydWN0IHp4ZGhfaXJxICp6eGRoX3BmX2FzeW5jX2lycV9yZXF1ZXN0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7CiAjZW5kaWYgLyogX19aWERIX0VOX1BGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmYxZDdlZWVjMWFlNGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmMKQEAgLTAsMCAmIzQzOzEsMTQ1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gZXZlbnQgcXVldWUgcGx1bWJpbmcKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogQXN5bmMgZXZlbnQgcXVldWVzIGFyZSB0aGUgZGVsaXZlcnkgcGF0aCBmb3IgZmlybXdhcmUgbm90aWZpY2F0aW9uczoKJiM0MzsgKiBhIHF1ZXVlIG93bnMgb25lIE1TSS1YIHZlY3RvciBvZiB0aGUgYXN5bmMgcG9vbCBhbmQgZmFucyBpbnRlcnJ1cHRzCiYjNDM7ICogb3V0IHRvIHRoZSBwZXItZXZlbnQtdHlwZSBub3RpZmllciBjaGFpbnMgb2YgdGhlIGV2ZW50IHF1ZXVlIHRhYmxlLgomIzQzOyAqIFRoZSBCQVIgbWVzc2FnZSBjaGFubmVsIGhhbmRzaGFrZSB0aGF0IHRlbGxzIHRoZSBmaXJtd2FyZSB3aGljaAomIzQzOyAqIHZlY3RvcnMgdG8gc2lnbmFsIGNvbWVzIHdpdGggdGhlIEJBUiBtZXNzYWdlIHN1YnN5c3RlbSBpbiBhIGxhdGVyCiYjNDM7ICogc2VyaWVzOyB0aGUgUEYgc2lkZSB3aXJlZCBoZXJlIGlzIGxpdmUgYXMgc29vbiBhcyB0aGF0IGNoYW5uZWwgaXMKJiM0MzsgKiBlbmFibGVkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbm90aWZpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fcGYuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt6eGRoX2VxLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7enhkaF9pcnEuaCYjMzQ7CiYjNDM7CiYjNDM7LyogUEYgc2lkZSBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGU6IG9uZSBhc3luYyBFUSBmZWQgYnkgdGhlIFJJU0MtVgomIzQzOyAqIG1hbmFnZW1lbnQgY29yZS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSB7CiYjNDM7CXN0cnVjdCB6eGRoX2VxX2FzeW5jIHJpc2N2X2VxOwomIzQzO307CiYjNDM7CiYjNDM7LyogRmV0Y2ggdGhlIGV2ZW50X2lkIHRoZSBSSVNDLVYgY29yZSBwb3N0ZWQgaW4gdGhlIFBGIHJlY2VpdmUKJiM0MzsgKiBzdWItY2hhbm5lbCBvZiB0aGUgQkFSIG1lc3NhZ2UgYXJlYS4gVGhlIGZpZWxkIGxpdmVzIGF0IGJ5dGUgb2Zmc2V0CiYjNDM7ICogMiBvZiB0aGUgMTItYnl0ZSBtZXNzYWdlIGhlYWRlciwgc28gYSBzaW5nbGUgMzItYml0IHJlYWQgb2YgdGhlCiYjNDM7ICogc3ViLWNoYW5uZWwgc3RhcnQgY292ZXJzIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MTYgenhkaF9lcV9ldmVudF9pZF9nZXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdm9pZCBfX2lvbWVtICpzdWJjaGFuOwomIzQzOwomIzQzOwlzdWJjaGFuID0gcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdICYjNDM7IFpYREhfQkFSX01TR19TVUJDSEFOX1JFQ1Y7CiYjNDM7CiYjNDM7CXJldHVybiBpb3JlYWQzMihzdWJjaGFuKSAmZ3Q7Jmd0OyAxNjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGVudW0genhkaF9lcV9ldmVudF90eXBlIHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQodTE2IGV2ZW50X2lkKQomIzQzO3sKJiM0MzsJaWYgKGV2ZW50X2lkID09IFpYREhfTVNHX01PRFVMRV9SSVNDX1JFQURZKQomIzQzOwkJcmV0dXJuIFpYREhfRVFfRVZFTlRfVFlQRV9SSVNDVl9SRUFEWTsKJiM0MzsKJiM0MzsJLyogT25seSB0aGUgUklTQy1WIHJlYWR5IG5vdGlmaWNhdGlvbiBpcyBkaXNwYXRjaGVkIGluIHRoaXMKJiM0MzsJICogc2VyaWVzOyB0aGUgcmVtYWluaW5nIGZpcm13YXJlIGV2ZW50cyBhcnJpdmUgd2l0aCB0aGUgQkFSCiYjNDM7CSAqIG1lc3NhZ2Ugc3Vic3lzdGVtLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIFpYREhfRVFfRVZFTlRfVFlQRV9NQVg7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgenhkaF9lcV9hc3luY19yaXNjdl9pbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9lcV9hc3luYyAqZXEgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCB6eGRoX2VxX2FzeW5jLCBpcnFfbmIpOwomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBlcS0mZ3Q7cHJpdjsKJiM0MzsJZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUgZXZlbnRfdHlwZTsKJiM0MzsKJiM0MzsJZXZlbnRfdHlwZSA9IHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQoenhkaF9lcV9ldmVudF9pZF9nZXQoenhkaF9kZXYpKTsKJiM0MzsJaWYgKGV2ZW50X3R5cGUgPT0gWlhESF9FUV9FVkVOVF9UWVBFX01BWCkKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsKJiM0MzsJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDt6eGRoX2Rldi0mZ3Q7ZXFfdGFibGUubmhbZXZlbnRfdHlwZV0sCiYjNDM7CQkJCSAgIGV2ZW50X3R5cGUsIE5VTEwpOwomIzQzOwomIzQzOwlyZXR1cm4gTk9USUZZX09LOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2VxX3RhYmxlICp0YWJsZSA9ICZhbXA7enhkaF9kZXYtJmd0O2VxX3RhYmxlOwomIzQzOwlzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcHJpdjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CXByaXYgPSBrdnphbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJdGFibGUtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwltdXRleF9pbml0KCZhbXA7dGFibGUtJmd0O2xvY2spOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWlhESF9FUV9FVkVOVF9UWVBFX01BWDsgaSYjNDM7JiM0MzspCiYjNDM7CQlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZhbXA7dGFibGUtJmd0O25oW2ldKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcGZfZXFfdGFibGUgPSB6eGRoX2Rldi0mZ3Q7ZXFfdGFibGUucHJpdjsKJiM0MzsJc3RydWN0IHp4ZGhfZXFfdGFibGUgKnRhYmxlID0gJmFtcDt6eGRoX2Rldi0mZ3Q7ZXFfdGFibGU7CiYjNDM7CXN0cnVjdCB6eGRoX2VxX2FzeW5jICplcSA9ICZhbXA7cGZfZXFfdGFibGUtJmd0O3Jpc2N2X2VxOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dGFibGUtJmd0O2xvY2spOwomIzQzOwomIzQzOwllcS0mZ3Q7cHJpdiA9IHp4ZGhfZGV2OwomIzQzOwllcS0mZ3Q7aXJxID0genhkaF9wZl9hc3luY19pcnFfcmVxdWVzdCh6eGRoX2Rldik7CiYjNDM7CWlmIChJU19FUlIoZXEtJmd0O2lycSkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIoZXEtJmd0O2lycSk7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwllcS0mZ3Q7aXJxX25iLm5vdGlmaWVyX2NhbGwgPSB6eGRoX2VxX2FzeW5jX3Jpc2N2X2ludDsKJiM0MzsJZXJyID0genhkaF9pcnFfYXR0YWNoX25iKGVxLSZndDtpcnEsICZhbXA7ZXEtJmd0O2lycV9uYik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoJmFtcDtlcS0mZ3Q7aXJxLCAxKTsKJiM0MzsJCWVxLSZndDtpcnEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDt0YWJsZS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9wZl9lcV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2VxX3RhYmxlICpwZl9lcV90YWJsZSA9IHp4ZGhfZGV2LSZndDtlcV90YWJsZS5wcml2OwomIzQzOwlzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSAmYW1wO3p4ZGhfZGV2LSZndDtlcV90YWJsZTsKJiM0MzsJc3RydWN0IHp4ZGhfZXFfYXN5bmMgKmVxOwomIzQzOwomIzQzOwlpZiAoIXBmX2VxX3RhYmxlKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcSA9ICZhbXA7cGZfZXFfdGFibGUtJmd0O3Jpc2N2X2VxOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dGFibGUtJmd0O2xvY2spOwomIzQzOwlpZiAoZXEtJmd0O2lycSkgewomIzQzOwkJenhkaF9pcnFfZGV0YWNoX25iKGVxLSZndDtpcnEsICZhbXA7ZXEtJmd0O2lycV9uYik7CiYjNDM7CQl6eGRoX2lycXNfcmVsZWFzZV92ZWN0b3JzKCZhbXA7ZXEtJmd0O2lycSwgMSk7CiYjNDM7CQllcS0mZ3Q7aXJxID0gTlVMTDsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDt0YWJsZS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDt0YWJsZS0mZ3Q7bG9jayk7CiYjNDM7CWt2ZnJlZSh0YWJsZS0mZ3Q7cHJpdik7CiYjNDM7CXRhYmxlLSZndDtwcml2ID0gTlVMTDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNDk2NWNhMTU5MTJhYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuaApAQCAtMCwwICYjNDM7MSw2MSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIGV2ZW50IHF1ZXVlIGFic3RyYWN0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fWlhESF9FUV9IX18KJiM0MzsjZGVmaW5lIF9fWlhESF9FUV9IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbm90aWZpZXIuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9jb3JlX2RldjsKJiM0MztzdHJ1Y3QgenhkaF9pcnE7CiYjNDM7CiYjNDM7LyogQkFSIG1lc3NhZ2UgYXJlYTogc2hhcmVkLW1lbW9yeSBtYWlsYm94IGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlCiYjNDM7ICogZmlybXdhcmUsIHNwbGl0IGludG8gc3ViLWNoYW5uZWxzIG9mIDIwNDggYnl0ZXMuIE5vdGlmaWNhdGlvbnMgZnJvbQomIzQzOyAqIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIGFyZSBwb3N0ZWQgdG8gdGhlIFBGIHJlY2VpdmUgc3ViLWNoYW5uZWwsCiYjNDM7ICogb25lIGludGVydmFsIGFib3ZlIHRoZSBhcmVhIGJhc2UuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaWERIX0JBUl9NU0dfT0ZGU0VUCQkweDIwMDAKJiM0MzsjZGVmaW5lIFpYREhfQkFSX01TR19TVUJDSEFOX0lOVEVSVkFMCTIwNDgKJiM0MzsjZGVmaW5lIFpYREhfQkFSX01TR19TVUJDSEFOX1JFQ1YJKFpYREhfQkFSX01TR19PRkZTRVQgJiM0MzsJXAomIzQzOwkJCQkJIFpYREhfQkFSX01TR19TVUJDSEFOX0lOVEVSVkFMKQomIzQzOwomIzQzOy8qIGV2ZW50X2lkIG9mIHRoZSAmIzM0O1JJU0MtViBjb3JlIHJlYWR5JiMzNDsgZmlybXdhcmUgbm90aWZpY2F0aW9uLCBjYXJyaWVkCiYjNDM7ICogYXQgYnl0ZSBvZmZzZXQgMiBvZiB0aGUgQkFSIG1lc3NhZ2UgaGVhZGVyLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWlhESF9NU0dfTU9EVUxFX1JJU0NfUkVBRFkJMTMKJiM0MzsKJiM0MzsvKiBFdmVudCB0eXBlcyB0aGUgdXBwZXIgbGF5ZXJzIGNhbiBzdWJzY3JpYmUgdG8gb3ZlciB0aGUgcGVyLXR5cGUKJiM0MzsgKiBub3RpZmllciBjaGFpbnMgb2YgdGhlIGV2ZW50IHF1ZXVlIHRhYmxlLiBUaGUgZnVsbCBjYXRhbG9ndWUgbGl2ZXMKJiM0MzsgKiBpbiB0aGUgZmlybXdhcmU7IG9ubHkgdGhlIG9uZXMgZGlzcGF0Y2hlZCBpbiB0aGlzIHNlcmllcyBhcmUgbmFtZWQuCiYjNDM7ICovCiYjNDM7ZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUgewomIzQzOwlaWERIX0VRX0VWRU5UX1RZUEVfUklTQ1ZfUkVBRFkgPSAwLAomIzQzOwlaWERIX0VRX0VWRU5UX1RZUEVfTUFYLAomIzQzO307CiYjNDM7CiYjNDM7LyogQXN5bmNocm9ub3VzIGV2ZW50IHF1ZXVlIGRlbGl2ZXJpbmcgZmlybXdhcmUgbm90aWZpY2F0aW9ucyB0byB0aGUKJiM0MzsgKiBkcml2ZXIgd2l0aG91dCBhIHJlcXVlc3QvcmVwbHkgaGFuZHNoYWtlLgomIzQzOyAqLwomIzQzO3N0cnVjdCB6eGRoX2VxX2FzeW5jIHsKJiM0MzsJc3RydWN0IHp4ZGhfaXJxICppcnE7CiYjNDM7CXN0cnVjdCBub3RpZmllcl9ibG9jayBpcnFfbmI7CiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9lcV90YWJsZSB7CiYjNDM7CS8qIE5vdGlmaWVyIGNoYWlucyBmYW5uZWQgb3V0IGJ5IGV2ZW50IHR5cGUuICovCiYjNDM7CXN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBuaFtaWERIX0VRX0VWRU5UX1RZUEVfTUFYXTsKJiM0MzsJLyogU2VyaWFsaXplcyBhc3luYyBFUSBjcmVhdGUvZGVzdHJveS4gKi8KJiM0MzsJc3RydWN0IG11dGV4IGxvY2s7CiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfZXFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7dm9pZCB6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19aWERIX0VRX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNDM3MzQ0MzI5YzdlOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmMKQEAgLTAsMCAmIzQzOzEsNDEyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gSVJRIHBvb2wgbWFuYWdlbWVudAomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBEZXZpY2UgdmVjdG9ycyBhcmUgbWFuYWdlZCBpbiBwZXItcHVycG9zZSBwb29scy4gQW4gSVJRIGNhcnJpZXMgYQomIzQzOyAqIHJlZmNvdW50IHNvIHRoYXQgc2V2ZXJhbCBldmVudCBxdWV1ZXMgY2FuIHNoYXJlIG9uZSB2ZWN0b3I7IG9uCiYjNDM7ICogcmFpc2UsIHRoZSBpbnRlcnJ1cHQgaXMgZmFubmVkIG91dCB0aHJvdWdoIGFuIGF0b21pYyBub3RpZmllciBjaGFpbgomIzQzOyAqIGF0dGFjaGVkIHRvIHRoZSBJUlEuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NwdW1hc2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgveGFycmF5LmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9wZi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3p4ZGhfaXJxLmgmIzM0OwomIzQzOwomIzQzOy8qIFJlbGVhc2UgY2FsbGJhY2sgb2YgdGhlIElSUSBrcmVmLCBjYWxsZWQgd2l0aCBwb29sLSZndDtsb2NrIGhlbGQuICovCiYjNDM7c3RhdGljIHZvaWQgenhkaF9pcnFfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXJxID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB6eGRoX2lycSwgcmVmY291bnQpOwomIzQzOwlzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS0mZ3Q7cG9vbDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3Bvb2wtJmd0O2xvY2spOwomIzQzOwl4YV9lcmFzZSgmYW1wO3Bvb2wtJmd0O2lycXMsIGlycS0mZ3Q7aW5kZXgpOwomIzQzOwkvKiBmcmVlX2lycSgpIHJlcXVpcmVzIHRoZSBhZmZpbml0eSBoaW50IHRvIGJlIGNsZWFyZWQgYmVmb3JlIGl0IGlzCiYjNDM7CSAqIGNhbGxlZDsgdGhlIGFzeW1tZXRyeSB3aXRoIHRoZSBzZXQgcGF0aCBpbiB6eGRoX2lycV9hbGxvYygpIGlzCiYjNDM7CSAqIGludGVudGlvbmFsLgomIzQzOwkgKi8KJiM0MzsJaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS0mZ3Q7aXJxbiwgTlVMTCk7CiYjNDM7CWZyZWVfY3B1bWFza192YXIoaXJxLSZndDttYXNrKTsKJiM0MzsJZnJlZV9pcnEoaXJxLSZndDtpcnFuLCBpcnEpOwomIzQzOwlrZnJlZShpcnEpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEcm9wIG9uZSByZWZlcmVuY2U7IHJldHVybnMgMSBpZiB0aGUgSVJRIHdhcyByZWxlYXNlZC4gKi8KJiM0MztzdGF0aWMgaW50IHp4ZGhfaXJxX3B1dChzdHJ1Y3QgenhkaF9pcnEgKmlycSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sID0gaXJxLSZndDtwb29sOwomIzQzOwlpbnQgcmVsZWFzZWQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJcmVsZWFzZWQgPSBrcmVmX3B1dCgmYW1wO2lycS0mZ3Q7cmVmY291bnQsIHp4ZGhfaXJxX3JlbGVhc2UpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlbGVhc2VkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHp4ZGhfaXJxX2dldChzdHJ1Y3QgenhkaF9pcnEgKmlycSkKJiM0Mzt7CiYjNDM7CXJldHVybiBrcmVmX2dldF91bmxlc3NfemVybygmYW1wO2lycS0mZ3Q7cmVmY291bnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgenhkaF9pcnFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnEgPSBkYXRhOwomIzQzOwomIzQzOwlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3p4ZGhfaXJxLSZndDtuaCwgMCwgTlVMTCk7CiYjNDM7CiYjNDM7CXJldHVybiBJUlFfSEFORExFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfYWxsb2Moc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsIGludCB2ZWNpZHgsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWZmaW5pdHkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwb29sLSZndDtkZXY7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXJxOwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlpcnEgPSBremFsbG9jX29iaigqaXJxLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFpcnEpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJaXJxLSZndDtwb29sID0gcG9vbDsKJiM0MzsJaXJxLSZndDtpcnFuID0gcGNpX2lycV92ZWN0b3IoenhkaF9kZXYtJmd0O3BkZXYsIHZlY2lkeCk7CiYjNDM7CWlmIChpcnEtJmd0O2lycW4gJmx0OyAwKSB7CiYjNDM7CQllcnIgPSBpcnEtJmd0O2lycW47CiYjNDM7CQlnb3RvIGVycl9pcnFuOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoJmFtcDtpcnEtJmd0O25oKTsKJiM0MzsJc25wcmludGYoaXJxLSZndDtuYW1lLCBaWERIX01BWF9JUlFfTkFNRSwgJiMzNDthc3luY18lZEBwY2k6JXMmIzM0OywgdmVjaWR4LAomIzQzOwkJIHBjaV9uYW1lKHp4ZGhfZGV2LSZndDtwZGV2KSk7CiYjNDM7CiYjNDM7CWVyciA9IHJlcXVlc3RfaXJxKGlycS0mZ3Q7aXJxbiwgenhkaF9pcnFfaW50X2hhbmRsZXIsIDAsIGlycS0mZ3Q7bmFtZSwgaXJxKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3JlcXVlc3RfaXJxIGZhaWxlZDogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZ290byBlcnJfaXJxbjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO2lycS0mZ3Q7bWFzaywgR0ZQX0tFUk5FTCkpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt6YWxsb2NfY3B1bWFza192YXIgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfY3B1bWFzazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYWZmaW5pdHkpIHsKJiM0MzsJCWNwdW1hc2tfY29weShpcnEtJmd0O21hc2ssIGFmZmluaXR5KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIE5vIHByZWZlcmVuY2UgcmVxdWVzdGVkOyBzcHJlYWQgb3ZlciBhbGwgb25saW5lIENQVXMuICovCiYjNDM7CQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKJiM0MzsJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBpcnEtJmd0O21hc2spOwomIzQzOwl9CiYjNDM7CWlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtJmd0O2lycW4sIGlycS0mZ3Q7bWFzayk7CiYjNDM7CiYjNDM7CWtyZWZfaW5pdCgmYW1wO2lycS0mZ3Q7cmVmY291bnQpOwomIzQzOwlpcnEtJmd0O2luZGV4ID0gdmVjaWR4OwomIzQzOwllcnIgPSB4YV9lcnIoeGFfc3RvcmUoJmFtcDtwb29sLSZndDtpcnFzLCBpcnEtJmd0O2luZGV4LCBpcnEsIEdGUF9LRVJORUwpKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3hhX3N0b3JlIGZhaWxlZCBmb3IgaXJxICV1OiAlZFxuJiMzNDssCiYjNDM7CQkJaXJxLSZndDtpbmRleCwgZXJyKTsKJiM0MzsJCWdvdG8gZXJyX3hhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpcnE7CiYjNDM7CiYjNDM7ZXJyX3hhOgomIzQzOwlpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLSZndDtpcnFuLCBOVUxMKTsKJiM0MzsJZnJlZV9jcHVtYXNrX3ZhcihpcnEtJmd0O21hc2spOwomIzQzO2Vycl9jcHVtYXNrOgomIzQzOwlmcmVlX2lycShpcnEtJmd0O2lycW4sIGlycSk7CiYjNDM7ZXJyX2lycW46CiYjNDM7CWtmcmVlKGlycSk7CiYjNDM7CXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX2lycV9hdHRhY2hfbmIoc3RydWN0IHp4ZGhfaXJxICppcnEsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIXp4ZGhfaXJxX2dldChpcnEpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWVyciA9IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYW1wO2lycS0mZ3Q7bmgsIG5iKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXp4ZGhfaXJxX3B1dChpcnEpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9pcnFfZGV0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmFtcDtpcnEtJmd0O25oLCBuYik7CiYjNDM7CXp4ZGhfaXJxX3B1dChpcnEpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWxlYXNlIG9uZSBvciBtb3JlIElSUXMgYmFjayB0byB0aGVpciBwb29sLiAqLwomIzQzO3ZvaWQgenhkaF9pcnFzX3JlbGVhc2VfdmVjdG9ycyhzdHJ1Y3QgenhkaF9pcnEgKippcnFzLCBpbnQgbmlycXMpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5pcnFzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3luY2hyb25pemVfaXJxKGlycXNbaV0tJmd0O2lycW4pOwomIzQzOwkJenhkaF9pcnFfcHV0KGlycXNbaV0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHp4ZGhfY3B1X3B1dChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXBvb2wtJmd0O2lycXNfcGVyX2NwdVtjcHVdLS07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHp4ZGhfY3B1X2dldChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXBvb2wtJmd0O2lycXNfcGVyX2NwdVtjcHVdJiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRmluZCB0aGUgbGVhc3QgbG9hZGVkIENQVSwgaS5lLiB0aGUgQ1BVIHdpdGggdGhlIGZld2VzdCBJUlFzIGJvdW5kCiYjNDM7ICogdG8gaXQsIHdpdGhpbiB0aGUgcmVxdWVzdGVkIG1hc2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6eGRoX2NwdV9nZXRfbGVhc3RfbG9hZGVkKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaykKJiM0Mzt7CiYjNDM7CWludCBiZXN0X2NwdSA9IC0xOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgcmVxX21hc2ssIGNwdV9vbmxpbmVfbWFzaykgewomIzQzOwkJLyogVGhpcyBDUFUgaGFzIG5vIElSUXMgeWV0LCBubyBuZWVkIHRvIGxvb2sgZnVydGhlci4gKi8KJiM0MzsJCWlmICghcG9vbC0mZ3Q7aXJxc19wZXJfY3B1W2NwdV0pIHsKJiM0MzsJCQliZXN0X2NwdSA9IGNwdTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWlmIChiZXN0X2NwdSAmbHQ7IDApCiYjNDM7CQkJYmVzdF9jcHUgPSBjcHU7CiYjNDM7CQlpZiAocG9vbC0mZ3Q7aXJxc19wZXJfY3B1W2NwdV0gJmx0OyBwb29sLSZndDtpcnFzX3Blcl9jcHVbYmVzdF9jcHVdKQomIzQzOwkJCWJlc3RfY3B1ID0gY3B1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChiZXN0X2NwdSAmbHQ7IDApIHsKJiM0MzsJCWRldl9lcnIocG9vbC0mZ3Q7ZGV2LSZndDtkZXZpY2UsCiYjNDM7CQkJJiMzNDtubyBvbmxpbmUgQ1BVIGluIGFmZmluaXR5IG1hc2sgKCUqcGJsKVxuJiMzNDssCiYjNDM7CQkJY3B1bWFza19wcl9hcmdzKHJlcV9tYXNrKSk7CiYjNDM7CQliZXN0X2NwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTsKJiM0MzsJfQomIzQzOwlwb29sLSZndDtpcnFzX3Blcl9jcHVbYmVzdF9jcHVdJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJcmV0dXJuIGJlc3RfY3B1OwomIzQzO30KJiM0MzsKJiM0MzsvKiBDcmVhdGUgYSBuZXcgSVJRIGZyb20gdGhlIHBvb2wgYW5kIGJpbmQgaXQgdG8gdGhlIHJlcXVlc3RlZCBtYXNrLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxX3Bvb2xfcmVxdWVzdF9pcnEoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsCiYjNDM7CQkJCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWZmaW5pdHkgPSByZXFfbWFzazsKJiM0MzsJY3B1bWFza192YXJfdCBhdXRvX21hc2s7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXJxOwomIzQzOwl1MzIgaXJxX2luZGV4OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO2F1dG9fbWFzaywgR0ZQX0tFUk5FTCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJZXJyID0geGFfYWxsb2MoJmFtcDtwb29sLSZndDtpcnFzLCAmYW1wO2lycV9pbmRleCwgTlVMTCwgcG9vbC0mZ3Q7eGFfbnVtX2lycXMsCiYjNDM7CQkgICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWlmIChlcnIgPT0gLUVCVVNZKQomIzQzOwkJCWVyciA9IC1FVVNFUlM7CiYjNDM7CQlnb3RvIGVycl94YTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY3B1bWFza193ZWlnaHQocmVxX21hc2spICZndDsgMSkgewomIzQzOwkJLyogQmluZCB0byB0aGUgbGVhc3QgbG9hZGVkIENQVSBvZiB0aGUgcmVxdWVzdC4gKi8KJiM0MzsJCWNwdW1hc2tfc2V0X2NwdSh6eGRoX2NwdV9nZXRfbGVhc3RfbG9hZGVkKHBvb2wsIHJlcV9tYXNrKSwKJiM0MzsJCQkJYXV0b19tYXNrKTsKJiM0MzsJCWFmZmluaXR5ID0gYXV0b19tYXNrOwomIzQzOwl9IGVsc2UgewomIzQzOwkJenhkaF9jcHVfZ2V0KHBvb2wsIGNwdW1hc2tfZmlyc3QocmVxX21hc2spKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpcnEgPSB6eGRoX2lycV9hbGxvYyhwb29sLCBpcnFfaW5kZXgsIGFmZmluaXR5KTsKJiM0MzsJaWYgKElTX0VSUihpcnEpKQomIzQzOwkJZ290byBlcnJfYWxsb2M7CiYjNDM7CiYjNDM7CWZyZWVfY3B1bWFza192YXIoYXV0b19tYXNrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlycTsKJiM0MzsKJiM0MztlcnJfYWxsb2M6CiYjNDM7CS8qIFVuZG8gdGhlIHBlci1DUFUgYWNjb3VudGluZyBkb25lIGFib3ZlLiAqLwomIzQzOwl6eGRoX2NwdV9wdXQocG9vbCwgY3B1bWFza19maXJzdChhZmZpbml0eSkpOwomIzQzOwl4YV9lcmFzZSgmYW1wO3Bvb2wtJmd0O2lycXMsIGlycV9pbmRleCk7CiYjNDM7ZXJyX3hhOgomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKGF1dG9fbWFzayk7CiYjNDM7CXJldHVybiBlcnIgPyBFUlJfUFRSKGVycikgOiBpcnE7CiYjNDM7fQomIzQzOwomIzQzOy8qIExvb2sgZm9yIHRoZSBJUlEgd2l0aCB0aGUgc21hbGxlc3QgcmVmY291bnQgd2hvc2UgYWZmaW5pdHkgbWFzayBpcyBhCiYjNDM7ICogc3Vic2V0IG9mIHRoZSByZXF1ZXN0ZWQgbWFzay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9wb29sX2ZpbmRfbGVhc3RfbG9hZGVkKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLAomIzQzOwkJCQkJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9pcnEgKmlycSA9IE5VTEw7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXRlcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleDsKJiM0MzsJaW50IGl0ZXJfcmVmY291bnQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJeGFfZm9yX2VhY2hfcmFuZ2UoJmFtcDtwb29sLSZndDtpcnFzLCBpbmRleCwgaXRlciwKJiM0MzsJCQkgIHBvb2wtJmd0O3hhX251bV9pcnFzLm1pbiwgcG9vbC0mZ3Q7eGFfbnVtX2lycXMubWF4KSB7CiYjNDM7CQlpdGVyX3JlZmNvdW50ID0gcmVmY291bnRfcmVhZCgmYW1wO2l0ZXItJmd0O3JlZmNvdW50LnJlZmNvdW50KTsKJiM0MzsKJiM0MzsJCS8qIFNraXAgSVJRcyB3aG9zZSBtYXNrIGlzIG5vdCBhIHN1YnNldCBvZiB0aGUgcmVxdWVzdC4gKi8KJiM0MzsJCWlmICghY3B1bWFza19zdWJzZXQoaXRlci0mZ3Q7bWFzaywgcmVxX21hc2spKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJLyogSVJRIGJlbG93IHRoZSBtaW5pbXVtIHRocmVzaG9sZCBmb3VuZCwgdGFrZSBpdC4gKi8KJiM0MzsJCWlmIChpdGVyX3JlZmNvdW50ICZsdDsgcG9vbC0mZ3Q7bWluX3RocmVzaG9sZCkKJiM0MzsJCQlyZXR1cm4gaXRlcjsKJiM0MzsJCWlmICghaXJxIHx8CiYjNDM7CQkgICAgaXRlcl9yZWZjb3VudCAmbHQ7IHJlZmNvdW50X3JlYWQoJmFtcDtpcnEtJmd0O3JlZmNvdW50LnJlZmNvdW50KSkKJiM0MzsJCQlpcnEgPSBpdGVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpcnE7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlcXVlc3QgYW4gSVJRIGZvciB0aGUgZ2l2ZW4gbWFzazogc2hhcmUgdGhlIGxlYXN0IGxvYWRlZCBleGlzdGluZwomIzQzOyAqIG1hdGNoaW5nIElSUSBvbmNlIGl0IHBhc3NlcyB0aGUgcG9vbCBtaW5pbXVtIHRocmVzaG9sZCwgb3RoZXJ3aXNlCiYjNDM7ICogY3JlYXRlIGEgbmV3IG9uZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9hZmZpbml0eV9yZXF1ZXN0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLAomIzQzOwkJCQkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfaXJxICpsZWFzdF9sb2FkZWRfaXJxOwomIzQzOwlzdHJ1Y3QgenhkaF9pcnEgKm5ld19pcnE7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJbGVhc3RfbG9hZGVkX2lycSA9IHp4ZGhfaXJxX3Bvb2xfZmluZF9sZWFzdF9sb2FkZWQocG9vbCwgcmVxX21hc2spOwomIzQzOwlpZiAobGVhc3RfbG9hZGVkX2lycSAmYW1wOyZhbXA7CiYjNDM7CSAgICByZWZjb3VudF9yZWFkKCZhbXA7bGVhc3RfbG9hZGVkX2lycS0mZ3Q7cmVmY291bnQucmVmY291bnQpICZsdDsgcG9vbC0mZ3Q7bWluX3RocmVzaG9sZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBObyBJUlEgYmVsb3cgdGhlIG1pbmltdW0gdGhyZXNob2xkLCB0cnkgdG8gY3JlYXRlIGEgbmV3IG9uZS4gKi8KJiM0MzsJbmV3X2lycSA9IHp4ZGhfaXJxX3Bvb2xfcmVxdWVzdF9pcnEocG9vbCwgcmVxX21hc2spOwomIzQzOwlpZiAoSVNfRVJSKG5ld19pcnEpKSB7CiYjNDM7CQlpZiAoIWxlYXN0X2xvYWRlZF9pcnEpIHsKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJCQlyZXR1cm4gbmV3X2lycTsKJiM0MzsJCX0KJiM0MzsJCS8qIENvdWxkIG5vdCBjcmVhdGUgYSBuZXcgSVJRIGZvciB0aGUgcmVxdWVzdGVkIGFmZmluaXR5LAomIzQzOwkJICogc2hhcmUgdGhlIGV4aXN0aW5nIG9uZS4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X3dhcm4ocG9vbC0mZ3Q7ZGV2LSZndDtkZXZpY2UsCiYjNDM7CQkJICYjMzQ7aXJxIHBvb2wgJXMgZXhoYXVzdGVkLCBzaGFyaW5nIGlycXNcbiYjMzQ7LAomIzQzOwkJCSBwb29sLSZndDtuYW1lKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWxlYXN0X2xvYWRlZF9pcnEgPSBuZXdfaXJxOwomIzQzOwlnb3RvIHVubG9jazsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CS8qIEhvbGRpbmcgcG9vbC0mZ3Q7bG9jayBrZWVwcyB0aGUgSVJRIGFsaXZlLCBzbyB0aGlzIGNhbm5vdCBmYWlsLiAqLwomIzQzOwl6eGRoX2lycV9nZXQobGVhc3RfbG9hZGVkX2lycSk7CiYjNDM7CWlmIChyZWZjb3VudF9yZWFkKCZhbXA7bGVhc3RfbG9hZGVkX2lycS0mZ3Q7cmVmY291bnQucmVmY291bnQpICZndDsgcG9vbC0mZ3Q7bWF4X3RocmVzaG9sZCkKJiM0MzsJCWRldl93YXJuKHBvb2wtJmd0O2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSAmIzM0O2lycSAldSBvdmVybG9hZGVkLCBwb29sICVzLCAldSByZWZzIG9uIHRoaXMgaXJxXG4mIzM0OywKJiM0MzsJCQkgcGNpX2lycV92ZWN0b3IocG9vbC0mZ3Q7ZGV2LSZndDtwZGV2LAomIzQzOwkJCQkJbGVhc3RfbG9hZGVkX2lycS0mZ3Q7aW5kZXgpLAomIzQzOwkJCSBwb29sLSZndDtuYW1lLAomIzQzOwkJCSByZWZjb3VudF9yZWFkKCZhbXA7bGVhc3RfbG9hZGVkX2lycS0mZ3Q7cmVmY291bnQucmVmY291bnQpIC8KJiM0MzsJCQkgWlhESF9FUV9SRUZTX1BFUl9JUlEpOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBsZWFzdF9sb2FkZWRfaXJxOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXF1ZXN0IGFuIElSUSBmcm9tIHRoZSBwb29sLCBzcHJlYWQgb3ZlciB0aGUgb25saW5lIENQVXMuICovCiYjNDM7c3RydWN0IHp4ZGhfaXJxICp6eGRoX2dldF9pcnFfb2ZfcG9vbChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCkKJiM0Mzt7CiYjNDM7CWNwdW1hc2tfdmFyX3QgcmVxX21hc2s7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXJxOwomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO3JlcV9tYXNrLCBHRlBfS0VSTkVMKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwljcHVtYXNrX2NvcHkocmVxX21hc2ssIGNwdV9vbmxpbmVfbWFzayk7CiYjNDM7CiYjNDM7CWlycSA9IHp4ZGhfaXJxX2FmZmluaXR5X3JlcXVlc3QocG9vbCwgcmVxX21hc2spOwomIzQzOwomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKHJlcV9tYXNrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlycTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnp4ZGhfaXJxX3Bvb2xfYWxsb2Moc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LAomIzQzOwkJCQkJICBpbnQgc3RhcnQsIGludCBzaXplLCBjb25zdCBjaGFyICpuYW1lLAomIzQzOwkJCQkJICB1MzIgbWluX3RocmVzaG9sZCwgdTMyIG1heF90aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbDsKJiM0MzsJdTE2ICppcnFzX3Blcl9jcHU7CiYjNDM7CiYjNDM7CWlycXNfcGVyX2NwdSA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCppcnFzX3Blcl9jcHUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFpcnFzX3Blcl9jcHUpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJcG9vbCA9IGt2emFsbG9jX29iaigqcG9vbCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcG9vbCkgewomIzQzOwkJa2ZyZWUoaXJxc19wZXJfY3B1KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBvb2wtJmd0O2RldiA9IHp4ZGhfZGV2OwomIzQzOwlwb29sLSZndDtpcnFzX3Blcl9jcHUgPSBpcnFzX3Blcl9jcHU7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJeGFfaW5pdF9mbGFncygmYW1wO3Bvb2wtJmd0O2lycXMsIFhBX0ZMQUdTX0FMTE9DKTsKJiM0MzsJcG9vbC0mZ3Q7eGFfbnVtX2lycXMubWluID0gc3RhcnQ7CiYjNDM7CXBvb2wtJmd0O3hhX251bV9pcnFzLm1heCA9IHN0YXJ0ICYjNDM7IHNpemUgLSAxOwomIzQzOwlzbnByaW50Zihwb29sLSZndDtuYW1lLCBaWERIX01BWF9JUlFfTkFNRSwgJiMzNDslcyYjMzQ7LCBuYW1lKTsKJiM0MzsKJiM0MzsJLyogVGhyZXNob2xkcyBhcmUgZXhwcmVzc2VkIGluIHF1ZXVlIHJlZmVyZW5jZXMsIHR3byBwZXIgSVJRLiAqLwomIzQzOwlwb29sLSZndDttaW5fdGhyZXNob2xkID0gbWluX3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJROwomIzQzOwlwb29sLSZndDttYXhfdGhyZXNob2xkID0gbWF4X3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJROwomIzQzOwomIzQzOwlyZXR1cm4gcG9vbDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB6eGRoX2lycV9wb29sX2ZyZWUoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9pcnEgKmlycTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleDsKJiM0MzsJdTMyIGNwdTsKJiM0MzsKJiM0MzsJLyogT24gYSBmYXN0IHRlYXJkb3duIHRoZSB0YWJsZSBtYXkgc3RpbGwgaG9sZCBJUlFzOyByZWxlYXNlCiYjNDM7CSAqIHdoYXRldmVyIGlzIGxlZnQuCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7cG9vbC0mZ3Q7aXJxcywgaW5kZXgsIGlycSkKJiM0MzsJCXp4ZGhfaXJxX3JlbGVhc2UoJmFtcDtpcnEtJmd0O3JlZmNvdW50KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7CiYjNDM7CXhhX2Rlc3Ryb3koJmFtcDtwb29sLSZndDtpcnFzKTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3Bvb2wtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAocG9vbC0mZ3Q7aXJxc19wZXJfY3B1KSB7CiYjNDM7CQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKJiM0MzsJCQlXQVJOX09OKHBvb2wtJmd0O2lycXNfcGVyX2NwdVtjcHVdKTsKJiM0MzsJCWtmcmVlKHBvb2wtJmd0O2lycXNfcGVyX2NwdSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3ZmcmVlKHBvb2wpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjg5ZjQ2ZDdiMTFjOWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oCkBAIC0wLDAgJiM0MzsxLDcyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gSVJRIHBvb2wgbWFuYWdlbWVudAomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX1pYREhfSVJRX0hfXwomIzQzOyNkZWZpbmUgX19aWERIX0lSUV9IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1bWFzay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rcmVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCB6eGRoX2NvcmVfZGV2OwomIzQzOwomIzQzOy8qIE51bWJlciBvZiBNU0ktWCB2ZWN0b3JzIHBlciBwdXJwb3NlLiBUaGUgbGF5b3V0IG9mIHRoZSB2ZWN0b3Igc3BhY2UKJiM0MzsgKiBpcyBhIGhhcmR3YXJlIGludGVyZmFjZToKJiM0MzsgKiAgIFswLCA4KSAgICBhc3luYyBldmVudCBxdWV1ZXMKJiM0MzsgKiAgIFs4LCAxNCkgICByZXNlcnZlZCBmb3IgUkRNQSAodW51c2VkIGZvciBub3cpCiYjNDM7ICogICBbMTQsIDc4KSAgdnEgcngvdHggcXVldWUgcGFpcnMKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFpYREhfQVNZTkNfQ0hBTk5FTFNfTlVNCQk4CiYjNDM7I2RlZmluZSBaWERIX1JETUFfQ0hBTk5FTFNfTlVNCQk2CiYjNDM7I2RlZmluZSBaWERIX1ZRU19DSEFOTkVMU19OVU0JCTY0CiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX01BWF9JUlFfTkFNRQkxMDAKJiM0MzsjZGVmaW5lIFpYREhfRVFfUkVGU19QRVJfSVJRCTIKJiM0MzsKJiM0MzsvKiBSZWZlcmVuY2UgY291bnRlZCBpbnRlcnJ1cHQuIEV2ZW50IHF1ZXVlcyBzaGFyZSBhbiBJUlEgdGhyb3VnaCB0aGUKJiM0MzsgKiBub3RpZmllciBjaGFpbiwgd2hpY2ggaXMgZmlyZWQgZnJvbSBoYXJkIElSUSBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0cnVjdCB6eGRoX2lycSB7CiYjNDM7CXN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBuaDsKJiM0MzsJY3B1bWFza192YXJfdCBtYXNrOwkJLyogaW50ZXJydXB0IGFmZmluaXR5ICovCiYjNDM7CWNoYXIgbmFtZVtaWERIX01BWF9JUlFfTkFNRV07CiYjNDM7CXN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sOwomIzQzOwl1MzIgaW5kZXg7CQkJLyogdmVjdG9yIGluZGV4ICovCiYjNDM7CWludCBpcnFuOwkJCS8qIExpbnV4IElSUSBudW1iZXIgKi8KJiM0MzsJc3RydWN0IGtyZWYgcmVmY291bnQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBQb29sIG9mIHZlY3RvcnMgZGVkaWNhdGVkIHRvIG9uZSBwdXJwb3NlLCBpZGVudGlmaWVkIGJ5IHRoZQomIzQzOyAqIFt4YV9udW1faXJxcy5taW4sIHhhX251bV9pcnFzLm1heF0gdmVjdG9yIHJhbmdlLgomIzQzOyAqLwomIzQzO3N0cnVjdCB6eGRoX2lycV9wb29sIHsKJiM0MzsJY2hhciBuYW1lW1pYREhfTUFYX0lSUV9OQU1FXTsKJiM0MzsJc3RydWN0IHhhX2xpbWl0IHhhX251bV9pcnFzOwomIzQzOwlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIHNlcmlhbGl6ZXMgSVJRIGNyZWF0aW9uICovCiYjNDM7CXN0cnVjdCB4YXJyYXkgaXJxczsKJiM0MzsJdTMyIG1pbl90aHJlc2hvbGQ7CQkvKiBpbiBxdWV1ZSByZWZlcmVuY2VzICovCiYjNDM7CXUzMiBtYXhfdGhyZXNob2xkOwkJLyogaW4gcXVldWUgcmVmZXJlbmNlcyAqLwomIzQzOwl1MTYgKmlycXNfcGVyX2NwdTsJCS8qIG51bWJlciBvZiBJUlFzIGJvdW5kIHBlciBDUFUgKi8KJiM0MzsJc3RydWN0IHp4ZGhfY29yZV9kZXYgKmRldjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB6eGRoX2lycV90YWJsZSB7CiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfZ2V0X2lycV9vZl9wb29sKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTsKJiM0MztpbnQgenhkaF9pcnFfYXR0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKJiM0MztpbnQgenhkaF9pcnFfZGV0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKJiM0Mzt2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKTsKJiM0MztzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsCiYjNDM7CQkJCQkgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJCQkgIHUzMiBtaW5fdGhyZXNob2xkLCB1MzIgbWF4X3RocmVzaG9sZCk7CiYjNDM7dm9pZCB6eGRoX2lycV9wb29sX2ZyZWUoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfX1pYREhfSVJRX0hfXyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE2NAoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDI3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpURSBEaW5nSGFpIEV0aGVybmV0IERyaXZlciBQYXRjaCBmb3IgU3l6a2FsbGVyIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGUgdGFzayBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMga2VybmVsIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgcGF0Y2ggYWRkcyBhIGJ1bmNoIG9mIGZpbGVzIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaWAuICBTcGVjaWZpY2FsbHk6ICBgTWFrZWZpbGVgLCBgZW5fcGYuY2AsIGBlbl9wZi5oYCwgYHp4ZGhfZXEuY2AsIGB6eGRoX2VxLmhgLCBgenhkaF9pcnEuY2AsIGFuZCBgenhkaF9pcnEuaGAuICBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBlc3RhYmxpc2ggdGhlIGNvbnRleHQgb2YgdGhpcyBkcml2ZXIuICBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBwaHlzaWNhbCBQQ0kgZGV2aWNlLCBhbiBBU0lDLCBvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBlbXVsYXRlZCBvciBhY2Nlc3NpYmxlIGluIHNvbWUgd2F5LiAgVGhlIGRlY2lkaW5nIGZhY3RvciBpcyB3aGV0aGVyIGl0IGlzIGEgcGh5c2ljYWwgZGV2aWNlLCBhbmQgaWYgc28sIGhvdyBhY2Nlc3NpYmxlIGl0IGlzLiAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoYXQuIFRoYXQgd2lsbCBkaWN0YXRlIHRoZSBmdXp6aW5nIGFwcHJvYWNoIGFuZCB0aGUgb3ZlcmFsbCB2YWx1ZSBvZiBmdXp6aW5nIHRoaXMgcGFydGljdWxhciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RJTkdIQUkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9MzAxOTU9RjpcdHNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jXG5NQUlOVEFJTkVSUy0zMDE5Ni1cbk1BSU5UQUlORVJTOjMwMTk3OlpURSBESU5HSEFJIEVUSEVSTkVUIERSSVZFUlxuTUFJTlRBSU5FUlMtMzAxOTgtTTpcdEp1bnlhbmcgSGFuIFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ESU5HSEFJKSAmIzQzOz0gZGluZ2hhaS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnOjY6Y29uZmlnIERJTkdIQUlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctNy0gICAgYm9vbCBcJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzoyMTppZiBESU5HSEFJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzoyMzpjb25maWcgRElOR0hBSV9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy0yNC0gICAgdHJpc3RhdGUgXCYjMzQ7WlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzozNDplbmRpZiAjIERJTkdIQUlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRElOR0hBSV9QRikgJiM0Mzs9IGRpbmdoYWkxMGUub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUtNy1kaW5naGFpMTBlLXkgOj0gZW5fcGYubyB6eGRoX2lycS5vIHp4ZGhfZXEub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZToKCioqRGl2aW5nIGludG8gdGhlIFpURSBEaW5naGFpIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdgLiBSaWdodCBhd2F5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG5ldHdvcmsgZHJpdmVyIHNwZWNpZmljIHRvIFpURSYjMzk7cyBEaW5naGFpIHBsYXRmb3JtLiBHaXZlbiB0aGUgcGF0aCwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IG1vZHVsZSBlbmFibGUgZmxhZ3MsIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgRE1BIHNldHRpbmdzIG9yIFBIWSBjb25maWd1cmF0aW9ucywgcGVyaGFwcyBldmVuIHBsYXRmb3JtIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIEtjb25maWcgYW5kIHRoZSBvdGhlciBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBkcml2ZXJzIG9yIHN1YnN5c3RlbXM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgaW5jbHVkZXMgYmFzZWQgb24gc3BlY2lmaWMgYm9hcmQgcmV2aXNpb25zIG9yIGhhcmR3YXJlIHJldmlzaW9ucyB3aXRoaW4gdGhlIERpbmdoYWkgZmFtaWx5PyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgY29uZmlnIFpURV9ESU5HSEFJYCBhcyBhIHRvcC1sZXZlbCBzeW1ib2wsIGFuZCB0aGVuIG5lc3RlZCBvcHRpb25zIGRldGFpbGluZyB0aGluZ3MgbGlrZSBkaWZmZXJlbnQgTUFDIGFkZHJlc3Nlcywgc3BlY2lmaWMgUEhZIHN1cHBvcnQgKGxpa2UgYENPTkZJR19QSFlfWFhYWGApLCBhbnkgZGV2aWNlLXRyZWUtcmVsYXRlZCBzZXR0aW5ncywgb3IgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLiBBbnkgdXNlIG9mIGBzZWxlY3RgIHN0YXRlbWVudHMgdG8gcHVsbCBpbiBvdGhlciBzdXBwb3J0aW5nIG1vZHVsZXMgd2lsbCBiZSBpbXBvcnRhbnQgdG8gbm90ZS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgYmUgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gWlRFJiMzOTtzIGRlc2lnbiBjaG9pY2VzIG9yIGN1c3RvbWl6YXRpb25zLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHNjYW4sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGtleSBjb25maWd1cmFibGUgZWxlbWVudHMgdGhhdCBjb250cm9sIHRoaXMgZHJpdmVyJiMzOTtzIGJlaGF2aW9yIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCBjYW4gYmUgZW5hYmxlZC4gVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3Agd2hhdCBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgdmlhIHRoaXMgY29uZmlnIGZpbGUgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZXRoZXJuZXQgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBESU5HSEFJXG4gICA3Olx0ICAgIGJvb2wgXCYjMzQ7WlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4gICA4Olx0ICAgIGRlcGVuZHMgb24gUENJXG4gICA5Olx0ICAgIHNlbGVjdCBORVRfREVWTElOS1xuICAxMDpcdCAgICBoZWxwXG4gIDExOlx0ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy5cbiAgMTI6XHRcbiAgMTM6XHQgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHNcbiAgMTQ6XHQgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmRcbiAgMTU6XHQgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXG4gIDE2Olx0XG4gIDE3Olx0ICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy5cbiAgMTg6XHRcbiAgMTk6XHQgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuICAyMDpcdFxuICAyMTpcdGlmIERJTkdIQUlcbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgRElOR0hBSV9QRlxuICAyNDpcdCAgICB0cmlzdGF0ZSBcJiMzNDtaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwmIzM0O1xuICAyNTpcdCAgICBoZWxwXG4gIDI2Olx0ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXRcbiAgMjc6XHQgICAgICBhZGFwdGVycyAoUEYpLlxuICAyODpcdFxuICAyOTpcdCAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgMzA6XHQgICAgICB3aWxsIGJlIG5hbWVkIGRpbmdoYWkxMGUuXG4gIDMxOlx0XG4gIDMyOlx0ICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzM6XHRcbiAgMzQ6XHRlbmRpZiAjIERJTkdIQUlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFdvcnRoRnV6emluZyBmb3IgdGhlIFpURSBEaW5nSGFpIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNvbnNpZGVyIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgbW9kaWZpZWQgY29kZSBmYWxscyBpbnRvIGNlcnRhaW4gbmVnYXRpdmUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIuIExvb2tpbmcgYXQgdGhhdCBzZWN0aW9uLCBJIG5lZWQgdG8gc2VlIGlmIHRoZSBjaGFuZ2VzIHRvdWNoIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuCgpGaXJzdCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiBaVEUgRGluZ0hhaSBmYWxscyB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgVGhlIGNyaXRlcmlhIHNwZWNpZnkgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLiBCYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGF0Y2ggYW5kIG15IGtub3dsZWRnZSwgaXQgbG9va3MgbGlrZToKCiogICBUaGUgZHJpdmVyIHVzZXMgUENJIHZlbmRvciBJRCBgMHgxY2YyYCAoWlRFIENvcnBvcmF0aW9uKSwgd2hpY2ggaXMgYSBjbGVhciBpbmRpY2F0aW9uIG9mIGEgdmVuZG9yLXNwZWNpZmljIGRldmljZS4KKiAgIEl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYSBQQ0kgZHJpdmVyIHZpYSBgbW9kdWxlX3BjaV9kcml2ZXJgLCBjb21tdW5pY2F0aW5nIHZpYSBCQVIgcmVnaXN0ZXJzLCBNU0ktWCBpbnRlcnJ1cHRzLCBhbmQgbGlrZWx5IHdpdGggb24tY2hpcCBmaXJtd2FyZS4KKiAgIENydWNpYWxseSwgdGhlIHByb21wdCBzdGF0ZXMgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgWlRFIERpbmdIYWkgUENJIE5JQ3MuCgpUaGVyZWZvcmUsICpwcmltYSBmYWNpZSosIHRoaXMgWlRFIERpbmdIYWkgZHJpdmVyIGFwcGVhcnMgdG8gYmUgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIFNtYXJ0TklDIC8gRXRoZXJuZXQgY29udHJvbGxlciBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24uIEl0IHNhdGlzZmllcyB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjcml0ZXJpYS4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHZpcnR1YWwgYnVzLCBzb2Z0d2FyZSBtb2NrLCBvciBzdGFuZGFyZCB2aXJ0dWFsIGRldmljZSB0aGF0IGNvdWxkIGluc3RhbnRpYXRlIG9yIHJlYWNoIHRoaXMgZHJpdmVyIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgZW5fcGYuY2AsIGJ1dCBiYXNlZCBvbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBhbnN3ZXIgaXMgbm8uIFVubGVzcyBJIGZpbmQgc29tZXRoaW5nIHVuZXhwZWN0ZWQsIG15IGluaXRpYWwgYXNzZXNzbWVudCBzdGFuZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlcnxtb2R1bGVfcGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM9NjY2PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB6eGRoX3BmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY3My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Njc0Om1vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkwMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFBDSSBUYWJsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGB6eGRoX3BmX3BjaV90YWJsZWAgd2l0aGluIGBlbl9wZi5jYC4gVGhhdCB0YWJsZSBpcyB1c3VhbGx5IHdoZXJlIEkgZmluZCB0aGUgY29yZSBtYXBwaW5ncyBhbmQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBQQ0kgZGV2aWNlcyB3aXRoaW4gdGhlIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgY29udGV4dC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSByZWxldmFudCBlbnRyaWVzIHRoYXQgZGVmaW5lIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaW50ZXJydXB0cyBhcmUgcm91dGVkLCBkZXZpY2UgSURzIGFuZCBtYXliZSBldmVuIERNQSBzZXR0aW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFBDSSBkZXZpY2VzIGFyZSBiZWluZyBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCBoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgdGFibGUgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdCNpbmNsdWRlIFwmIzM0O2VuX3BmLmhcJiMzNDtcbiAgMTY6XHQjaW5jbHVkZSBcJiMzNDtkaF9xdWV1ZS5oXCYjMzQ7XG4gIDE3Olx0XG4gIDE4Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtKdW55YW5nIEhhbiBcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXHUwMDNlXCYjMzQ7KTtcbiAgMTk6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WlRFIERpbmdIYWkgc2VyaWVzIEV0aGVybmV0IGRyaXZlclwmIzM0Oyk7XG4gIDIwOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIHp4ZGhfcGZfZGV2bGlua19vcHMgPSB7fTtcbiAgMjM6XHRcbiAgMjQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcbiAgMjU6XHRcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9QRl9ERVZJQ0VfSUQpIH0sXG4gIDI2Olx0XHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfVkZfREVWSUNFX0lEKSB9LFxuICAyNzpcdFx0eyB9XG4gIDI4Olx0fTtcbiAgMjk6XHRcbiAgMzA6XHRNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpO1xuICAzMTpcdFxuICAzMjpcdHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSB7XG4gIDMzOlx0XHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqYXN5bmNfcG9vbDtcbiAgMzQ6XHR9O1xuICAzNTpcdFxuICAzNjpcdC8qIElSUSBjb21wYWN0aW9uIHRocmVzaG9sZHMgb2YgdGhlIGFzeW5jIHBvb2wsIGluIG51bWJlciBvZiBxdWV1ZXMuICovXG4gIDM3Olx0I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NSU5fQ09NUFx0MFxuICAzODpcdCNkZWZpbmUgWlhESF9QRl9BU1lOQ19JUlFfTUFYX0NPTVBcdDdcbiAgMzk6XHRcbiAgNDA6XHR2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKVxuICA0MTpcdHtcbiAgNDI6XHRcdHZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuICA0MzpcdFxuICA0NDpcdFx0aWYgKHByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjE2CgkJCQkJCQlvdXRwdXQ6IDEyMQoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBhZmZlY3RpbmcgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9gLiBMb29raW5nIGF0IHRoZSBmaWxlbmFtZXMsIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgZm9yIGEgc3BlY2lmaWMgUENJZSBOSUMsIGFuZCBmcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGlzbiYjMzk7dCBzb21ldGhpbmcgdGhhdCYjMzk7cyBlbXVsYXRlZCBpbiB5b3VyIHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzIGxpa2UgUUVNVSBvciBHQ0UuCgpHaXZlbiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhpcyBjb2RlIGlzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGR1cmluZyBvdXIgdHlwaWNhbCBmdXp6aW5nIHByb2Nlc3Nlcy4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGF0IGhhcmQgZmFjdCwgdGhlcmUgaXMgbm8gdmFsdWUgaW4gbWFraW5nIGFueSBmdXp6aW5nIGFkanVzdG1lbnRzIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIFRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGNyZWF0aW5nIGZ1enppbmcgc3ltYm9scyBvciBlbmFibGluZyBjb25maWd1cmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgcGF0Y2gsIGFzIGl0IGlzLiBUaGVyZWZvcmUsIGJvdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIHNldCB0byBlbXB0eSBhcnJheXMuIEkmIzM5O3ZlIGdvdCBteSByZWFzb25pbmcgbGFpZCBvdXQgcHJldHR5IGNsZWFybHk6IHRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGlzIERpbmdIYWkgZHJpdmVyIGZvciBzcGVjaWZpYyBQQ0llIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGFjY2Vzc2libGUgaW4gZnV6emluZy4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS8pLCBhZGRpbmcgSVJRIHBvb2wgbWFuYWdlbWVudCBhbmQgZXZlbnQgcXVldWUgcGx1bWJpbmcgZm9yIFpURSBEaW5nSGFpIFBDSWUgYWRhcHRlcnMgKFBDSSB2ZW5kb3IgSUQgMHgxY2YyKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvKSwgYWRkaW5nIElSUSBwb29sIG1hbmFnZW1lbnQgYW5kIGV2ZW50IHF1ZXVlIHBsdW1iaW5nIGZvciBaVEUgRGluZ0hhaSBQQ0llIGFkYXB0ZXJzIChQQ0kgdmVuZG9yIElEIDB4MWNmMikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoxMi4xMjQ3NTMwNzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjEwNTI3NjMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpLyksIGFkZGluZyBJUlEgcG9vbCBtYW5hZ2VtZW50IGFuZCBldmVudCBxdWV1ZSBwbHVtYmluZyBmb3IgWlRFIERpbmdIYWkgUENJZSBhZGFwdGVycyAoUENJIHZlbmRvciBJRCAweDFjZjIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoxMi4xMjQ3NTg4NDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODA0NDQ2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZTNlZjQ5NmE5MzVkNGZjZGMzNzQxMGI5NzBlNDczZDhiNmI5YzAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA1OjAzOjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcXG5pbmRleCBlMmY0ZGEzM2RmNTkzLi4yZGM2ZDY4Y2MwZTEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcXG5AQCAtNCw0ICs0LDQgQEBcXG4gI1xcbiBcXG4gb2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICs9IGRpbmdoYWkxMGUub1xcbi1kaW5naGFpMTBlLXkgOj0gZW5fcGYub1xcbitkaW5naGFpMTBlLXkgOj0gZW5fcGYubyB6eGRoX2lycS5vIHp4ZGhfZXEub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xcbmluZGV4IDg2ZDQzNzQwODgyMDMuLmZlMzkyNGI4OTBkMTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcXG5AQCAtNiw2ICs2LDEwIEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImVuX3BmLmhcXFwiXFxuQEAgLTI1LDYgKzI5LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xcbiBcXG4gTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHp4ZGhfcGZfcGNpX3RhYmxlKTtcXG4gXFxuK3N0cnVjdCB6eGRoX3BmX2lycV90YWJsZSB7XFxuK1xcdHN0cnVjdCB6eGRoX2lycV9wb29sICphc3luY19wb29sO1xcbit9O1xcbitcXG4rLyogSVJRIGNvbXBhY3Rpb24gdGhyZXNob2xkcyBvZiB0aGUgYXN5bmMgcG9vbCwgaW4gbnVtYmVyIG9mIHF1ZXVlcy4gKi9cXG4rI2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NSU5fQ09NUFxcdDBcXG4rI2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUFxcdDdcXG4rXFxuIHZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXFxuIHtcXG4gXFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuQEAgLTM2OSw2ICszODEsMTc3IEBAIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qIFJlYWQgdGhlIGZpcm13YXJlIHZlcnNpb24gYmxvY2sgYW5kIHZlcmlmeSB0aGUgZHJpdmVyL2Zpcm13YXJlXFxuKyAqIHZlcnNpb24gY29udHJhY3QuXFxuKyAqL1xcbitzdGF0aWMgaW50IHp4ZGhfcGZfZndfY29tcGF0X2NoZWNrKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgenhkaF9md19jb21wYXQgX19pb21lbSAqY29tcGF0O1xcbitcXHRzdHJ1Y3QgenhkaF9md19jb21wYXQgKmZ3X2NvbXBhdDtcXG4rXFx0dTMyIGVyYXNlZDtcXG4rXFxuK1xcdGZ3X2NvbXBhdCA9IFxcdTAwMjZwZl9kZXYtXFx1MDAzZWZ3X2NvbXBhdDtcXG4rXFx0Y29tcGF0ID0gcGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdICsgWlhESF9GV19DT01QQVRfT0ZGU0VUO1xcbitcXG4rXFx0LyogVGhlIHJlZ2lvbiByZWFkcyBhcyBhbGwgb25lcyB1bnRpbCB0aGUgZmlybXdhcmUgcG9wdWxhdGVzIGl0IGF0XFxuK1xcdCAqIHRoZSBlbmQgb2YgaXRzIGJvb3Q7IGFsbG93IHVwIHRvIDIwMCBzIGZvciBhIGNvbGQgYm9vdC5cXG4rXFx0ICovXFxuK1xcdHJlYWR4X3BvbGxfdGltZW91dChpb3JlYWQzMiwgY29tcGF0LCBlcmFzZWQsIGVyYXNlZCAhPSAweGZmZmZmZmZmVSxcXG4rXFx0XFx0XFx0ICAgVVNFQ19QRVJfU0VDLFxcbitcXHRcXHRcXHQgICBaWERIX0ZXX0NPTVBBVF9USU1FT1VUX1NFQyAqIFVTRUNfUEVSX1NFQyk7XFxuK1xcbitcXHQvKiBGaXJtd2FyZSBwcmVkYXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcmVnaW9uIGtlZXBzIHRoZSBlcmFzZWRcXG4rXFx0ICogcGF0dGVybiwgd2hpY2ggZmFpbHMgdGhlIG1vZHVsZSBpZCBjaGVjayBiZWxvdyBhbmQgZGVmZXJzIHRoZVxcbitcXHQgKiBkZWNpc2lvbiB0byB0aGUgcmVhZGluZXNzIHdhaXQuXFxuK1xcdCAqL1xcbitcXHRmd19jb21wYXQtXFx1MDAzZW1vZHVsZV9pZCA9IGlvcmVhZDgoXFx1MDAyNmNvbXBhdC1cXHUwMDNlbW9kdWxlX2lkKTtcXG4rXFx0ZndfY29tcGF0LVxcdTAwM2VtYWpvciA9IGlvcmVhZDgoXFx1MDAyNmNvbXBhdC1cXHUwMDNlbWFqb3IpO1xcbitcXHRmd19jb21wYXQtXFx1MDAzZWZ3X21pbm9yID0gaW9yZWFkOChcXHUwMDI2Y29tcGF0LVxcdTAwM2Vmd19taW5vcik7XFxuK1xcdGZ3X2NvbXBhdC1cXHUwMDNlZHJ2X21pbm9yID0gaW9yZWFkOChcXHUwMDI2Y29tcGF0LVxcdTAwM2VkcnZfbWlub3IpO1xcbitcXHRmd19jb21wYXQtXFx1MDAzZXBhdGNoID0gaW9yZWFkMTYoXFx1MDAyNmNvbXBhdC1cXHUwMDNlcGF0Y2gpO1xcbitcXG4rXFx0aWYgKGZ3X2NvbXBhdC1cXHUwMDNlbW9kdWxlX2lkICE9IFpYREhfTU9EVUxFX0lEKSB7XFxuK1xcdFxcdGRldl9pbmZvKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdCBcXFwidW5rbm93biBtb2R1bGUgaWQgJXUsIHNraXAgZncgY29tcGF0IGNoZWNrXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgZndfY29tcGF0LVxcdTAwM2Vtb2R1bGVfaWQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZ3X2NvbXBhdC1cXHUwMDNlbWFqb3IgIT0gWlhESF9NQUpPUikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdFxcXCJkcml2ZXIgbWFqb3IgJXUgaW5jb21wYXRpYmxlIHdpdGggZmlybXdhcmUgbWFqb3IgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFpYREhfTUFKT1IsIGZ3X2NvbXBhdC1cXHUwMDNlbWFqb3IpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZ3X2NvbXBhdC1cXHUwMDNlZndfbWlub3IgXFx1MDAzYyBaWERIX0ZXX01JTk9SKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcImZpcm13YXJlIGZ3X21pbm9yICVkIG9sZGVyIHRoYW4gcmVxdWlyZWQgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGZ3X2NvbXBhdC1cXHUwMDNlZndfbWlub3IsIFpYREhfRldfTUlOT1IpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZ3X2NvbXBhdC1cXHUwMDNlZHJ2X21pbm9yIFxcdTAwM2UgWlhESF9EUlZfTUlOT1IpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXFwiZHJpdmVyIGRydl9taW5vciAldSBvbGRlciB0aGFuIHJlcXVpcmVkIGJ5IGZpcm13YXJlICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRaWERIX0RSVl9NSU5PUiwgZndfY29tcGF0LVxcdTAwM2VkcnZfbWlub3IpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFdhaXQgZm9yIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIG9mIHRoZSBmaXJtd2FyZSB0byBmaW5pc2hcXG4rICogYm9vdGluZywgc28gdGhhdCBsYXRlciBwcm9iZSBzdGVwcyBjYW4gdGFsayB0byBpdC5cXG4rICovXFxuK3N0YXRpYyBpbnQgenhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIF9faW9tZW0gKmhiO1xcbitcXHR1OCBoZWFsdGhfdmVyc2lvbjtcXG4rXFx0dTggcG93ZXJfb247XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRoYiA9IHBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSArIFpYREhfUklTQ1ZfSEJfT0ZGU0VUO1xcbitcXHRoZWFsdGhfdmVyc2lvbiA9IGlvcmVhZDgoXFx1MDAyNmhiLVxcdTAwM2VoZWFsdGhfdmVyc2lvbik7XFxuK1xcbitcXHQvKiBGaXJtd2FyZSBwcmVkYXRpbmcgdGhlIGhlYWx0aCBidWZmZXIgcHJvdG9jb2wgaGFzIG5laXRoZXIgYVxcbitcXHQgKiB2YWxpZCB2ZXJzaW9uIGJ5dGUgbm9yIGEgcG93ZXItb24gZmxhZyB0byB3YWl0IGZvci5cXG4rXFx0ICovXFxuK1xcdGlmIChoZWFsdGhfdmVyc2lvbiAhPSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwZl9kZXYtXFx1MDAzZWZ3X2NvbXBhdC5wYXRjaCBcXHUwMDNjIFpYREhfSFBJUlFfUEFUQ0gpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZXJyID0gcmVhZHhfcG9sbF90aW1lb3V0KGlvcmVhZDgsIFxcdTAwMjZoYi1cXHUwMDNlcmlzY3ZfcG93ZXJfb24sIHBvd2VyX29uLFxcbitcXHRcXHRcXHRcXHQgcG93ZXJfb24gPT0gMSwgVVNFQ19QRVJfU0VDLFxcbitcXHRcXHRcXHRcXHQgWlhESF9SSVNDVl9SRUFEWV9USU1FT1VUX1NFQyAqIFVTRUNfUEVSX1NFQyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwidGltZWQgb3V0IHdhaXRpbmcgZm9yIHJpc2N2IHBvd2VyIG9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgenhkaF9wZl9pcnFfcG9vbHNfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUgPSB6eGRoX2Rldi1cXHUwMDNlaXJxX3RhYmxlLnByaXY7XFxuK1xcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sO1xcbitcXG4rXFx0cG9vbCA9IHp4ZGhfaXJxX3Bvb2xfYWxsb2MoenhkaF9kZXYsIDAsIFpYREhfQVNZTkNfQ0hBTk5FTFNfTlVNLFxcbitcXHRcXHRcXHRcXHQgICBcXFwienhkaF9wZl9hc3luY1xcXCIsIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QLFxcbitcXHRcXHRcXHRcXHQgICBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUCk7XFxuK1xcdGlmIChJU19FUlIocG9vbCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHBvb2wpO1xcbitcXG4rXFx0cGZfaXJxX3RhYmxlLVxcdTAwM2Vhc3luY19wb29sID0gcG9vbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB6eGRoX3BmX2lycV9wb29sc19kZXN0cm95KHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcGZfaXJxX3RhYmxlKVxcbit7XFxuK1xcdGlmIChwZl9pcnFfdGFibGUtXFx1MDAzZWFzeW5jX3Bvb2wpXFxuK1xcdFxcdHp4ZGhfaXJxX3Bvb2xfZnJlZShwZl9pcnFfdGFibGUtXFx1MDAzZWFzeW5jX3Bvb2wpO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9pcnFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfaXJxX3RhYmxlICp0YWJsZSA9IFxcdTAwMjZ6eGRoX2Rldi1cXHUwMDNlaXJxX3RhYmxlO1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnByaXY7XFxuK1xcbitcXHRwcml2ID0ga3Z6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0dGFibGUtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdGludCB0b3RhbF92ZWMgPSBaWERIX1ZRU19DSEFOTkVMU19OVU0gKyBaWERIX0FTWU5DX0NIQU5ORUxTX05VTSArXFxuK1xcdFxcdFxcdFpYREhfUkRNQV9DSEFOTkVMU19OVU07XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHR0b3RhbF92ZWMgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsIHRvdGFsX3ZlYywgdG90YWxfdmVjLFxcbitcXHRcXHRcXHRcXHRcXHQgIFBDSV9JUlFfTVNJWCk7XFxuK1xcdGlmICh0b3RhbF92ZWMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9hbGxvY19pcnFfdmVjdG9ycyBmYWlsZWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR0b3RhbF92ZWMpO1xcbitcXHRcXHRyZXR1cm4gdG90YWxfdmVjO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSB6eGRoX3BmX2lycV9wb29sc19pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX2lycV9wb29sc19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVycik7XFxuK1xcdFxcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rdm9pZCB6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9pcnFfdGFibGUgKnRhYmxlID0gXFx1MDAyNnp4ZGhfZGV2LVxcdTAwM2VpcnFfdGFibGU7XFxuK1xcbitcXHRpZiAodGFibGUtXFx1MDAzZXByaXYpXFxuK1xcdFxcdHp4ZGhfcGZfaXJxX3Bvb2xzX2Rlc3Ryb3kodGFibGUtXFx1MDAzZXByaXYpO1xcbitcXHRrdmZyZWUodGFibGUtXFx1MDAzZXByaXYpO1xcbitcXHR0YWJsZS1cXHUwMDNlcHJpdiA9IE5VTEw7XFxuK1xcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2KTtcXG4rfVxcbitcXG4rLyogRmV0Y2ggYSB2ZWN0b3IgZnJvbSB0aGUgYXN5bmMgcG9vbCBmb3Igb25lIGFzeW5jIGV2ZW50IHF1ZXVlLiAqL1xcbitzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfcGZfYXN5bmNfaXJxX3JlcXVlc3Qoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcGZfaXJxX3RhYmxlID0genhkaF9kZXYtXFx1MDAzZWlycV90YWJsZS5wcml2O1xcbitcXG4rXFx0cmV0dXJuIHp4ZGhfZ2V0X2lycV9vZl9wb29sKHBmX2lycV90YWJsZS1cXHUwMDNlYXN5bmNfcG9vbCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgenhkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiB7XFxuIFxcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcXG5AQCAtNDA1LDEwICs1ODgsNTAgQEAgc3RhdGljIGludCB6eGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuIFxcdFxcdGdvdG8gZXJyX2NmZ19pbml0O1xcbiBcXHR9XFxuIFxcbitcXHRyZXQgPSB6eGRoX3BmX2Z3X2NvbXBhdF9jaGVjayh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9md19jb21wYXRfY2hlY2sgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfY2ZnX2luaXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeSh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX2NmZ19pbml0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ6eGRoX3BmX2lycV90YWJsZV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX2NmZ19pbml0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInp4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9pcnFfdGFibGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfZXFfdGFibGVfaW5pdCh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9lcV90YWJsZV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX2VxX3RhYmxlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZSh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9lcV90YWJsZV9jcmVhdGUgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfZXFfdGFibGU7XFxuK1xcdH1cXG4rXFxuIFxcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9lcV90YWJsZTpcXG4rXFx0enhkaF9wZl9lcV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTtcXG4rZXJyX2lycV90YWJsZTpcXG4rXFx0enhkaF9wZl9pcnFfdGFibGVfZGVzdHJveSh6eGRoX2Rldik7XFxuIGVycl9jZmdfaW5pdDpcXG4gXFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xcbiBlcnJfcGNpX2luaXQ6XFxuQEAgLTQyNCw2ICs2NDcsOCBAQCBzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpO1xcbiBcXG4gXFx0ZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspO1xcbitcXHR6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xcbitcXHR6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTtcXG4gXFx0enhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdCh6eGRoX2Rldik7XFxuIFxcdHp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTtcXG4gXFx0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXFxuaW5kZXggNzM3M2RlZThkMWE5Zi4uODk0YTA1YTA5ZDk2MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaFxcbkBAIC05LDYgKzksOSBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwienhkaF9lcS5oXFxcIlxcbisjaW5jbHVkZSBcXFwienhkaF9pcnEuaFxcXCJcXG4rXFxuICNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcXHQweDFjZjJcXG4gI2RlZmluZSBaWERIX1BGX0RFVklDRV9JRFxcdDB4ODA0MFxcbiAjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lEXFx0MHg4MDQxXFxuQEAgLTI5LDEwICszMiw1NyBAQFxcbiAjZGVmaW5lIFpYREhfUEZfQUxJR04yXFx0XFx0XFx0MlxcbiAjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjJcXHRcXHQyXFxuIFxcbisvKiBGaXhlZCBvZmZzZXRzIG9mIHRoZSBmaXJtd2FyZSBpbnRlcmZhY2UgcmVnaW9ucyB3aXRoaW4gQkFSIDAuICovXFxuKyNkZWZpbmUgWlhESF9SSVNDVl9IQl9PRkZTRVRcXHQweDUzMDBcXG4rI2RlZmluZSBaWERIX0ZXX0NPTVBBVF9PRkZTRVRcXHQweDU0MDBcXG4rXFxuKy8qIERyaXZlci9maXJtd2FyZSB2ZXJzaW9uIGNvbnRyYWN0LiBUaGUgZmlybXdhcmUgcHVibGlzaGVzIGl0cyBzaWRlIG9mXFxuKyAqIHRoZSBjb250cmFjdCBpbiB0aGUgcmVnaW9uIGF0IFpYREhfRldfQ09NUEFUX09GRlNFVC5cXG4rICovXFxuKyNkZWZpbmUgWlhESF9NT0RVTEVfSURcXHRcXHQxXFxuKyNkZWZpbmUgWlhESF9NQUpPUlxcdFxcdDFcXG4rI2RlZmluZSBaWERIX0ZXX01JTk9SXFx0XFx0MFxcbisjZGVmaW5lIFpYREhfRFJWX01JTk9SXFx0XFx0MFxcbisvKiBGaXJtd2FyZSBwYXRjaCBsZXZlbCB0aGF0IGludHJvZHVjZWQgdGhlIGhlYWx0aCBidWZmZXIgcHJvdG9jb2wuICovXFxuKyNkZWZpbmUgWlhESF9IUElSUV9QQVRDSFxcdDRcXG4rXFxuKyNkZWZpbmUgWlhESF9GV19DT01QQVRfVElNRU9VVF9TRUNcXHQyMDBcXG4rI2RlZmluZSBaWERIX1JJU0NWX1JFQURZX1RJTUVPVVRfU0VDXFx0NDBcXG4rXFxuKy8qIEZpcm13YXJlIHZlcnNpb24gY29tcGF0aWJpbGl0eSBibG9jayBhdCBaWERIX0ZXX0NPTVBBVF9PRkZTRVQuXFxuKyAqIEZpZWxkcyBhcmUgcmVhZCB0aHJvdWdoIGlvcmVhZCooKSwgd2hpY2ggY29udmVydHMgZnJvbSBsaXR0bGUtZW5kaWFuLlxcbisgKi9cXG4rc3RydWN0IHp4ZGhfZndfY29tcGF0IHtcXG4rXFx0dTggbW9kdWxlX2lkO1xcbitcXHR1OCBtYWpvcjtcXG4rXFx0czggZndfbWlub3I7XFxuK1xcdHU4IGRydl9taW5vcjtcXG4rXFx0dTE2IHBhdGNoO1xcbitcXHR1MTYgcnN2O1xcbit9IF9fcGFja2VkO1xcbitcXG4rLyogSGVhbHRoIGJ1ZmZlciBhdCBaWERIX1JJU0NWX0hCX09GRlNFVCwgbWFpbnRhaW5lZCBieSB0aGUgUklTQy1WXFxuKyAqIG1hbmFnZW1lbnQgY29yZSBvZiB0aGUgZmlybXdhcmUuIEZpZWxkcyBhcmUgcmVhZCB0aHJvdWdoIGlvcmVhZCooKS5cXG4rICovXFxuK3N0cnVjdCB6eGRoX2hlYWx0aF9idWZmZXIge1xcbitcXHR1MzIgc3luZDtcXHRcXHQvKiBCaXRtYXNrIG9mIGFjdGl2ZSBzeW5kcm9tZSBmbGFncy4gKi9cXG4rXFx0dTMyIGhlYWx0aF9jb3VudGVyO1xcdC8qIEluY3JlbWVudGVkIGhlYXJ0YmVhdCBjb3VudGVyLiAqL1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHJmcjtcXG4rXFx0dTggZndfZXhjZXB0aW9uO1xcbitcXHR1OCByaXNjdl9wb3dlcl9vbjtcXHQvKiBTZXQgdG8gMSBvbmNlIHRoZSBjb3JlIGZpbmlzaGVkIGJvb3RpbmcuICovXFxuK1xcdHU4IGZ3X3ZlcnNpb25bMzJdO1xcbitcXHR1OCBwZl9zdGF0dXNbNV07XFxuK1xcdHU4IGhlYWx0aF92ZXJzaW9uO1xcdC8qIEhlYWx0aCBidWZmZXIgcHJvdG9jb2wgdmVyc2lvbi4gKi9cXG4rXFx0dTggcnN2MVszMF07XFxuK30gX19wYWNrZWQ7XFxuK1xcbiBzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldmljZTtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XFxuIFxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xcbitcXHRzdHJ1Y3QgenhkaF9pcnFfdGFibGUgaXJxX3RhYmxlO1xcbitcXHRzdHJ1Y3QgenhkaF9lcV90YWJsZSBlcV90YWJsZTtcXG4gXFx0dm9pZCAqcHJpdjtcXG4gfTtcXG4gXFxuQEAgLTU0LDYgKzEwNCw3IEBAIHN0cnVjdCB6eGRoX3BmX2RldiB7XFxuIFxcdHMzMiBtb2Rlcm5fYmFycztcXG4gXFx0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xcbiBcXHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xcbitcXHRzdHJ1Y3QgenhkaF9md19jb21wYXQgZndfY29tcGF0O1xcbiB9O1xcbiBcXG4gdm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSk7XFxuQEAgLTcyLDQgKzEyMywxMCBAQCBpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4gdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbiBcXG4rLyogUEYgSVJRIHRhYmxlIChlbl9wZi5jKSAqL1xcbitpbnQgenhkaF9wZl9pcnFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK3ZvaWQgenhkaF9wZl9pcnFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfcGZfYXN5bmNfaXJxX3JlcXVlc3Qoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4rXFxuICNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjFkN2VlZWMxYWU0ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmNcXG5AQCAtMCwwICsxLDE0NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIGV2ZW50IHF1ZXVlIHBsdW1iaW5nXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXFxuKyAqXFxuKyAqIEFzeW5jIGV2ZW50IHF1ZXVlcyBhcmUgdGhlIGRlbGl2ZXJ5IHBhdGggZm9yIGZpcm13YXJlIG5vdGlmaWNhdGlvbnM6XFxuKyAqIGEgcXVldWUgb3ducyBvbmUgTVNJLVggdmVjdG9yIG9mIHRoZSBhc3luYyBwb29sIGFuZCBmYW5zIGludGVycnVwdHNcXG4rICogb3V0IHRvIHRoZSBwZXItZXZlbnQtdHlwZSBub3RpZmllciBjaGFpbnMgb2YgdGhlIGV2ZW50IHF1ZXVlIHRhYmxlLlxcbisgKiBUaGUgQkFSIG1lc3NhZ2UgY2hhbm5lbCBoYW5kc2hha2UgdGhhdCB0ZWxscyB0aGUgZmlybXdhcmUgd2hpY2hcXG4rICogdmVjdG9ycyB0byBzaWduYWwgY29tZXMgd2l0aCB0aGUgQkFSIG1lc3NhZ2Ugc3Vic3lzdGVtIGluIGEgbGF0ZXJcXG4rICogc2VyaWVzOyB0aGUgUEYgc2lkZSB3aXJlZCBoZXJlIGlzIGxpdmUgYXMgc29vbiBhcyB0aGF0IGNoYW5uZWwgaXNcXG4rICogZW5hYmxlZC5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZW5fcGYuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInp4ZGhfZXEuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInp4ZGhfaXJxLmhcXFwiXFxuK1xcbisvKiBQRiBzaWRlIG9mIHRoZSBldmVudCBxdWV1ZSB0YWJsZTogb25lIGFzeW5jIEVRIGZlZCBieSB0aGUgUklTQy1WXFxuKyAqIG1hbmFnZW1lbnQgY29yZS5cXG4rICovXFxuK3N0cnVjdCB6eGRoX3BmX2VxX3RhYmxlIHtcXG4rXFx0c3RydWN0IHp4ZGhfZXFfYXN5bmMgcmlzY3ZfZXE7XFxuK307XFxuK1xcbisvKiBGZXRjaCB0aGUgZXZlbnRfaWQgdGhlIFJJU0MtViBjb3JlIHBvc3RlZCBpbiB0aGUgUEYgcmVjZWl2ZVxcbisgKiBzdWItY2hhbm5lbCBvZiB0aGUgQkFSIG1lc3NhZ2UgYXJlYS4gVGhlIGZpZWxkIGxpdmVzIGF0IGJ5dGUgb2Zmc2V0XFxuKyAqIDIgb2YgdGhlIDEyLWJ5dGUgbWVzc2FnZSBoZWFkZXIsIHNvIGEgc2luZ2xlIDMyLWJpdCByZWFkIG9mIHRoZVxcbisgKiBzdWItY2hhbm5lbCBzdGFydCBjb3ZlcnMgaXQuXFxuKyAqL1xcbitzdGF0aWMgdTE2IHp4ZGhfZXFfZXZlbnRfaWRfZ2V0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR2b2lkIF9faW9tZW0gKnN1YmNoYW47XFxuK1xcbitcXHRzdWJjaGFuID0gcGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdICsgWlhESF9CQVJfTVNHX1NVQkNIQU5fUkVDVjtcXG4rXFxuK1xcdHJldHVybiBpb3JlYWQzMihzdWJjaGFuKSBcXHUwMDNlXFx1MDAzZSAxNjtcXG4rfVxcbitcXG4rc3RhdGljIGVudW0genhkaF9lcV9ldmVudF90eXBlIHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQodTE2IGV2ZW50X2lkKVxcbit7XFxuK1xcdGlmIChldmVudF9pZCA9PSBaWERIX01TR19NT0RVTEVfUklTQ19SRUFEWSlcXG4rXFx0XFx0cmV0dXJuIFpYREhfRVFfRVZFTlRfVFlQRV9SSVNDVl9SRUFEWTtcXG4rXFxuK1xcdC8qIE9ubHkgdGhlIFJJU0MtViByZWFkeSBub3RpZmljYXRpb24gaXMgZGlzcGF0Y2hlZCBpbiB0aGlzXFxuK1xcdCAqIHNlcmllczsgdGhlIHJlbWFpbmluZyBmaXJtd2FyZSBldmVudHMgYXJyaXZlIHdpdGggdGhlIEJBUlxcbitcXHQgKiBtZXNzYWdlIHN1YnN5c3RlbS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBaWERIX0VRX0VWRU5UX1RZUEVfTUFYO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHp4ZGhfZXFfYXN5bmNfcmlzY3ZfaW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2VxX2FzeW5jICplcSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHp4ZGhfZXFfYXN5bmMsIGlycV9uYik7XFxuK1xcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IGVxLVxcdTAwM2Vwcml2O1xcbitcXHRlbnVtIHp4ZGhfZXFfZXZlbnRfdHlwZSBldmVudF90eXBlO1xcbitcXG4rXFx0ZXZlbnRfdHlwZSA9IHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQoenhkaF9lcV9ldmVudF9pZF9nZXQoenhkaF9kZXYpKTtcXG4rXFx0aWYgKGV2ZW50X3R5cGUgPT0gWlhESF9FUV9FVkVOVF9UWVBFX01BWClcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXG4rXFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXFx1MDAyNnp4ZGhfZGV2LVxcdTAwM2VlcV90YWJsZS5uaFtldmVudF90eXBlXSxcXG4rXFx0XFx0XFx0XFx0ICAgZXZlbnRfdHlwZSwgTlVMTCk7XFxuK1xcbitcXHRyZXR1cm4gTk9USUZZX09LO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSBcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWVxX3RhYmxlO1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcHJpdjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRwcml2ID0ga3Z6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0dGFibGUtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2dGFibGUtXFx1MDAzZWxvY2spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWlhESF9FUV9FVkVOVF9UWVBFX01BWDsgaSsrKVxcbitcXHRcXHRBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbmhbaV0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZXFfdGFibGUgKnBmX2VxX3RhYmxlID0genhkaF9kZXYtXFx1MDAzZWVxX3RhYmxlLnByaXY7XFxuK1xcdHN0cnVjdCB6eGRoX2VxX3RhYmxlICp0YWJsZSA9IFxcdTAwMjZ6eGRoX2Rldi1cXHUwMDNlZXFfdGFibGU7XFxuK1xcdHN0cnVjdCB6eGRoX2VxX2FzeW5jICplcSA9IFxcdTAwMjZwZl9lcV90YWJsZS1cXHUwMDNlcmlzY3ZfZXE7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRlcS1cXHUwMDNlcHJpdiA9IHp4ZGhfZGV2O1xcbitcXHRlcS1cXHUwMDNlaXJxID0genhkaF9wZl9hc3luY19pcnFfcmVxdWVzdCh6eGRoX2Rldik7XFxuK1xcdGlmIChJU19FUlIoZXEtXFx1MDAzZWlycSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihlcS1cXHUwMDNlaXJxKTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGVxLVxcdTAwM2VpcnFfbmIubm90aWZpZXJfY2FsbCA9IHp4ZGhfZXFfYXN5bmNfcmlzY3ZfaW50O1xcbitcXHRlcnIgPSB6eGRoX2lycV9hdHRhY2hfbmIoZXEtXFx1MDAzZWlycSwgXFx1MDAyNmVxLVxcdTAwM2VpcnFfbmIpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoXFx1MDAyNmVxLVxcdTAwM2VpcnEsIDEpO1xcbitcXHRcXHRlcS1cXHUwMDNlaXJxID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnRhYmxlLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9lcV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcGZfZXFfdGFibGUgPSB6eGRoX2Rldi1cXHUwMDNlZXFfdGFibGUucHJpdjtcXG4rXFx0c3RydWN0IHp4ZGhfZXFfdGFibGUgKnRhYmxlID0gXFx1MDAyNnp4ZGhfZGV2LVxcdTAwM2VlcV90YWJsZTtcXG4rXFx0c3RydWN0IHp4ZGhfZXFfYXN5bmMgKmVxO1xcbitcXG4rXFx0aWYgKCFwZl9lcV90YWJsZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXEgPSBcXHUwMDI2cGZfZXFfdGFibGUtXFx1MDAzZXJpc2N2X2VxO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dGFibGUtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoZXEtXFx1MDAzZWlycSkge1xcbitcXHRcXHR6eGRoX2lycV9kZXRhY2hfbmIoZXEtXFx1MDAzZWlycSwgXFx1MDAyNmVxLVxcdTAwM2VpcnFfbmIpO1xcbitcXHRcXHR6eGRoX2lycXNfcmVsZWFzZV92ZWN0b3JzKFxcdTAwMjZlcS1cXHUwMDNlaXJxLCAxKTtcXG4rXFx0XFx0ZXEtXFx1MDAzZWlycSA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ0YWJsZS1cXHUwMDNlbG9jayk7XFxuK1xcdGt2ZnJlZSh0YWJsZS1cXHUwMDNlcHJpdik7XFxuK1xcdHRhYmxlLVxcdTAwM2Vwcml2ID0gTlVMTDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ5NjVjYTE1OTEyYWNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5oXFxuQEAgLTAsMCArMSw2MSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIGV2ZW50IHF1ZXVlIGFic3RyYWN0aW9uXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX1pYREhfRVFfSF9fXFxuKyNkZWZpbmUgX19aWERIX0VRX0hfX1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3RpZmllci5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHp4ZGhfY29yZV9kZXY7XFxuK3N0cnVjdCB6eGRoX2lycTtcXG4rXFxuKy8qIEJBUiBtZXNzYWdlIGFyZWE6IHNoYXJlZC1tZW1vcnkgbWFpbGJveCBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZVxcbisgKiBmaXJtd2FyZSwgc3BsaXQgaW50byBzdWItY2hhbm5lbHMgb2YgMjA0OCBieXRlcy4gTm90aWZpY2F0aW9ucyBmcm9tXFxuKyAqIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIGFyZSBwb3N0ZWQgdG8gdGhlIFBGIHJlY2VpdmUgc3ViLWNoYW5uZWwsXFxuKyAqIG9uZSBpbnRlcnZhbCBhYm92ZSB0aGUgYXJlYSBiYXNlLlxcbisgKi9cXG4rI2RlZmluZSBaWERIX0JBUl9NU0dfT0ZGU0VUXFx0XFx0MHgyMDAwXFxuKyNkZWZpbmUgWlhESF9CQVJfTVNHX1NVQkNIQU5fSU5URVJWQUxcXHQyMDQ4XFxuKyNkZWZpbmUgWlhESF9CQVJfTVNHX1NVQkNIQU5fUkVDVlxcdChaWERIX0JBUl9NU0dfT0ZGU0VUICtcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBaWERIX0JBUl9NU0dfU1VCQ0hBTl9JTlRFUlZBTClcXG4rXFxuKy8qIGV2ZW50X2lkIG9mIHRoZSBcXFwiUklTQy1WIGNvcmUgcmVhZHlcXFwiIGZpcm13YXJlIG5vdGlmaWNhdGlvbiwgY2FycmllZFxcbisgKiBhdCBieXRlIG9mZnNldCAyIG9mIHRoZSBCQVIgbWVzc2FnZSBoZWFkZXIuXFxuKyAqL1xcbisjZGVmaW5lIFpYREhfTVNHX01PRFVMRV9SSVNDX1JFQURZXFx0MTNcXG4rXFxuKy8qIEV2ZW50IHR5cGVzIHRoZSB1cHBlciBsYXllcnMgY2FuIHN1YnNjcmliZSB0byBvdmVyIHRoZSBwZXItdHlwZVxcbisgKiBub3RpZmllciBjaGFpbnMgb2YgdGhlIGV2ZW50IHF1ZXVlIHRhYmxlLiBUaGUgZnVsbCBjYXRhbG9ndWUgbGl2ZXNcXG4rICogaW4gdGhlIGZpcm13YXJlOyBvbmx5IHRoZSBvbmVzIGRpc3BhdGNoZWQgaW4gdGhpcyBzZXJpZXMgYXJlIG5hbWVkLlxcbisgKi9cXG4rZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUge1xcbitcXHRaWERIX0VRX0VWRU5UX1RZUEVfUklTQ1ZfUkVBRFkgPSAwLFxcbitcXHRaWERIX0VRX0VWRU5UX1RZUEVfTUFYLFxcbit9O1xcbitcXG4rLyogQXN5bmNocm9ub3VzIGV2ZW50IHF1ZXVlIGRlbGl2ZXJpbmcgZmlybXdhcmUgbm90aWZpY2F0aW9ucyB0byB0aGVcXG4rICogZHJpdmVyIHdpdGhvdXQgYSByZXF1ZXN0L3JlcGx5IGhhbmRzaGFrZS5cXG4rICovXFxuK3N0cnVjdCB6eGRoX2VxX2FzeW5jIHtcXG4rXFx0c3RydWN0IHp4ZGhfaXJxICppcnE7XFxuK1xcdHN0cnVjdCBub3RpZmllcl9ibG9jayBpcnFfbmI7XFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9lcV90YWJsZSB7XFxuK1xcdC8qIE5vdGlmaWVyIGNoYWlucyBmYW5uZWQgb3V0IGJ5IGV2ZW50IHR5cGUuICovXFxuK1xcdHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBuaFtaWERIX0VRX0VWRU5UX1RZUEVfTUFYXTtcXG4rXFx0LyogU2VyaWFsaXplcyBhc3luYyBFUSBjcmVhdGUvZGVzdHJveS4gKi9cXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7XFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbit2b2lkIHp4ZGhfcGZfZXFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitcXG4rI2VuZGlmIC8qIF9fWlhESF9FUV9IX18gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQzNzM0NDMyOWM3ZThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuY1xcbkBAIC0wLDAgKzEsNDEyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gSVJRIHBvb2wgbWFuYWdlbWVudFxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKlxcbisgKiBEZXZpY2UgdmVjdG9ycyBhcmUgbWFuYWdlZCBpbiBwZXItcHVycG9zZSBwb29scy4gQW4gSVJRIGNhcnJpZXMgYVxcbisgKiByZWZjb3VudCBzbyB0aGF0IHNldmVyYWwgZXZlbnQgcXVldWVzIGNhbiBzaGFyZSBvbmUgdmVjdG9yOyBvblxcbisgKiByYWlzZSwgdGhlIGludGVycnVwdCBpcyBmYW5uZWQgb3V0IHRocm91Z2ggYW4gYXRvbWljIG5vdGlmaWVyIGNoYWluXFxuKyAqIGF0dGFjaGVkIHRvIHRoZSBJUlEuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdW1hc2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZW5fcGYuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInp4ZGhfaXJxLmhcXFwiXFxuK1xcbisvKiBSZWxlYXNlIGNhbGxiYWNrIG9mIHRoZSBJUlEga3JlZiwgY2FsbGVkIHdpdGggcG9vbC1cXHUwMDNlbG9jayBoZWxkLiAqL1xcbitzdGF0aWMgdm9pZCB6eGRoX2lycV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB6eGRoX2lycSwgcmVmY291bnQpO1xcbitcXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS1cXHUwMDNlcG9vbDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXHR4YV9lcmFzZShcXHUwMDI2cG9vbC1cXHUwMDNlaXJxcywgaXJxLVxcdTAwM2VpbmRleCk7XFxuK1xcdC8qIGZyZWVfaXJxKCkgcmVxdWlyZXMgdGhlIGFmZmluaXR5IGhpbnQgdG8gYmUgY2xlYXJlZCBiZWZvcmUgaXQgaXNcXG4rXFx0ICogY2FsbGVkOyB0aGUgYXN5bW1ldHJ5IHdpdGggdGhlIHNldCBwYXRoIGluIHp4ZGhfaXJxX2FsbG9jKCkgaXNcXG4rXFx0ICogaW50ZW50aW9uYWwuXFxuK1xcdCAqL1xcbitcXHRpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVxcdTAwM2VpcnFuLCBOVUxMKTtcXG4rXFx0ZnJlZV9jcHVtYXNrX3ZhcihpcnEtXFx1MDAzZW1hc2spO1xcbitcXHRmcmVlX2lycShpcnEtXFx1MDAzZWlycW4sIGlycSk7XFxuK1xcdGtmcmVlKGlycSk7XFxuK31cXG4rXFxuKy8qIERyb3Agb25lIHJlZmVyZW5jZTsgcmV0dXJucyAxIGlmIHRoZSBJUlEgd2FzIHJlbGVhc2VkLiAqL1xcbitzdGF0aWMgaW50IHp4ZGhfaXJxX3B1dChzdHJ1Y3QgenhkaF9pcnEgKmlycSlcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS1cXHUwMDNlcG9vbDtcXG4rXFx0aW50IHJlbGVhc2VkO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlbGVhc2VkID0ga3JlZl9wdXQoXFx1MDAyNmlycS1cXHUwMDNlcmVmY291bnQsIHp4ZGhfaXJxX3JlbGVhc2UpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlbGVhc2VkO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHp4ZGhfaXJxX2dldChzdHJ1Y3QgenhkaF9pcnEgKmlycSlcXG4re1xcbitcXHRyZXR1cm4ga3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNmlycS1cXHUwMDNlcmVmY291bnQpO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgenhkaF9pcnFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxID0gZGF0YTtcXG4rXFxuK1xcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFxcdTAwMjZ6eGRoX2lycS1cXHUwMDNlbmgsIDAsIE5VTEwpO1xcbitcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9hbGxvYyhzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IHZlY2lkeCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSlcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwb29sLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0aXJxID0ga3phbGxvY19vYmooKmlycSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghaXJxKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGlycS1cXHUwMDNlcG9vbCA9IHBvb2w7XFxuK1xcdGlycS1cXHUwMDNlaXJxbiA9IHBjaV9pcnFfdmVjdG9yKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCB2ZWNpZHgpO1xcbitcXHRpZiAoaXJxLVxcdTAwM2VpcnFuIFxcdTAwM2MgMCkge1xcbitcXHRcXHRlcnIgPSBpcnEtXFx1MDAzZWlycW47XFxuK1xcdFxcdGdvdG8gZXJyX2lycW47XFxuK1xcdH1cXG4rXFxuK1xcdEFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoXFx1MDAyNmlycS1cXHUwMDNlbmgpO1xcbitcXHRzbnByaW50ZihpcnEtXFx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcXFwiYXN5bmNfJWRAcGNpOiVzXFxcIiwgdmVjaWR4LFxcbitcXHRcXHQgcGNpX25hbWUoenhkaF9kZXYtXFx1MDAzZXBkZXYpKTtcXG4rXFxuK1xcdGVyciA9IHJlcXVlc3RfaXJxKGlycS1cXHUwMDNlaXJxbiwgenhkaF9pcnFfaW50X2hhbmRsZXIsIDAsIGlycS1cXHUwMDNlbmFtZSwgaXJxKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJyZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRnb3RvIGVycl9pcnFuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcXHUwMDI2aXJxLVxcdTAwM2VtYXNrLCBHRlBfS0VSTkVMKSkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6YWxsb2NfY3B1bWFza192YXIgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfY3B1bWFzaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFmZmluaXR5KSB7XFxuK1xcdFxcdGNwdW1hc2tfY29weShpcnEtXFx1MDAzZW1hc2ssIGFmZmluaXR5KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogTm8gcHJlZmVyZW5jZSByZXF1ZXN0ZWQ7IHNwcmVhZCBvdmVyIGFsbCBvbmxpbmUgQ1BVcy4gKi9cXG4rXFx0XFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXFxuK1xcdFxcdFxcdGNwdW1hc2tfc2V0X2NwdShjcHUsIGlycS1cXHUwMDNlbWFzayk7XFxuK1xcdH1cXG4rXFx0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cXHUwMDNlaXJxbiwgaXJxLVxcdTAwM2VtYXNrKTtcXG4rXFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2aXJxLVxcdTAwM2VyZWZjb3VudCk7XFxuK1xcdGlycS1cXHUwMDNlaW5kZXggPSB2ZWNpZHg7XFxuK1xcdGVyciA9IHhhX2Vycih4YV9zdG9yZShcXHUwMDI2cG9vbC1cXHUwMDNlaXJxcywgaXJxLVxcdTAwM2VpbmRleCwgaXJxLCBHRlBfS0VSTkVMKSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwieGFfc3RvcmUgZmFpbGVkIGZvciBpcnEgJXU6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRpcnEtXFx1MDAzZWluZGV4LCBlcnIpO1xcbitcXHRcXHRnb3RvIGVycl94YTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGlycTtcXG4rXFxuK2Vycl94YTpcXG4rXFx0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cXHUwMDNlaXJxbiwgTlVMTCk7XFxuK1xcdGZyZWVfY3B1bWFza192YXIoaXJxLVxcdTAwM2VtYXNrKTtcXG4rZXJyX2NwdW1hc2s6XFxuK1xcdGZyZWVfaXJxKGlycS1cXHUwMDNlaXJxbiwgaXJxKTtcXG4rZXJyX2lycW46XFxuK1xcdGtmcmVlKGlycSk7XFxuK1xcdHJldHVybiBFUlJfUFRSKGVycik7XFxuK31cXG4rXFxuK2ludCB6eGRoX2lycV9hdHRhY2hfbmIoc3RydWN0IHp4ZGhfaXJxICppcnEsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghenhkaF9pcnFfZ2V0KGlycSkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0ZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFxcdTAwMjZpcnEtXFx1MDAzZW5oLCBuYik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHp4ZGhfaXJxX3B1dChpcnEpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IHp4ZGhfaXJxX2RldGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXFx1MDAyNmlycS1cXHUwMDNlbmgsIG5iKTtcXG4rXFx0enhkaF9pcnFfcHV0KGlycSk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbisvKiBSZWxlYXNlIG9uZSBvciBtb3JlIElSUXMgYmFjayB0byB0aGVpciBwb29sLiAqL1xcbit2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5pcnFzOyBpKyspIHtcXG4rXFx0XFx0c3luY2hyb25pemVfaXJxKGlycXNbaV0tXFx1MDAzZWlycW4pO1xcbitcXHRcXHR6eGRoX2lycV9wdXQoaXJxc1tpXSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgenhkaF9jcHVfcHV0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLCBpbnQgY3B1KVxcbit7XFxuK1xcdHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdVtjcHVdLS07XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfY3B1X2dldChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IGNwdSlcXG4re1xcbitcXHRwb29sLVxcdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSsrO1xcbit9XFxuK1xcbisvKiBGaW5kIHRoZSBsZWFzdCBsb2FkZWQgQ1BVLCBpLmUuIHRoZSBDUFUgd2l0aCB0aGUgZmV3ZXN0IElSUXMgYm91bmRcXG4rICogdG8gaXQsIHdpdGhpbiB0aGUgcmVxdWVzdGVkIG1hc2suXFxuKyAqL1xcbitzdGF0aWMgaW50IHp4ZGhfY3B1X2dldF9sZWFzdF9sb2FkZWQoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKVxcbit7XFxuK1xcdGludCBiZXN0X2NwdSA9IC0xO1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0Zm9yX2VhY2hfY3B1X2FuZChjcHUsIHJlcV9tYXNrLCBjcHVfb25saW5lX21hc2spIHtcXG4rXFx0XFx0LyogVGhpcyBDUFUgaGFzIG5vIElSUXMgeWV0LCBubyBuZWVkIHRvIGxvb2sgZnVydGhlci4gKi9cXG4rXFx0XFx0aWYgKCFwb29sLVxcdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSkge1xcbitcXHRcXHRcXHRiZXN0X2NwdSA9IGNwdTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGJlc3RfY3B1IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YmVzdF9jcHUgPSBjcHU7XFxuK1xcdFxcdGlmIChwb29sLVxcdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSBcXHUwMDNjIHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdVtiZXN0X2NwdV0pXFxuK1xcdFxcdFxcdGJlc3RfY3B1ID0gY3B1O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoYmVzdF9jcHUgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl9lcnIocG9vbC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdFxcXCJubyBvbmxpbmUgQ1BVIGluIGFmZmluaXR5IG1hc2sgKCUqcGJsKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKHJlcV9tYXNrKSk7XFxuK1xcdFxcdGJlc3RfY3B1ID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spO1xcbitcXHR9XFxuK1xcdHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdVtiZXN0X2NwdV0rKztcXG4rXFxuK1xcdHJldHVybiBiZXN0X2NwdTtcXG4rfVxcbitcXG4rLyogQ3JlYXRlIGEgbmV3IElSUSBmcm9tIHRoZSBwb29sIGFuZCBiaW5kIGl0IHRvIHRoZSByZXF1ZXN0ZWQgbWFzay4gKi9cXG4rc3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfcG9vbF9yZXF1ZXN0X2lycShzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5ID0gcmVxX21hc2s7XFxuK1xcdGNwdW1hc2tfdmFyX3QgYXV0b19tYXNrO1xcbitcXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcXG4rXFx0dTMyIGlycV9pbmRleDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFxcdTAwMjZhdXRvX21hc2ssIEdGUF9LRVJORUwpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGVyciA9IHhhX2FsbG9jKFxcdTAwMjZwb29sLVxcdTAwM2VpcnFzLCBcXHUwMDI2aXJxX2luZGV4LCBOVUxMLCBwb29sLVxcdTAwM2V4YV9udW1faXJxcyxcXG4rXFx0XFx0ICAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChlcnIgPT0gLUVCVVNZKVxcbitcXHRcXHRcXHRlcnIgPSAtRVVTRVJTO1xcbitcXHRcXHRnb3RvIGVycl94YTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNwdW1hc2tfd2VpZ2h0KHJlcV9tYXNrKSBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0LyogQmluZCB0byB0aGUgbGVhc3QgbG9hZGVkIENQVSBvZiB0aGUgcmVxdWVzdC4gKi9cXG4rXFx0XFx0Y3B1bWFza19zZXRfY3B1KHp4ZGhfY3B1X2dldF9sZWFzdF9sb2FkZWQocG9vbCwgcmVxX21hc2spLFxcbitcXHRcXHRcXHRcXHRhdXRvX21hc2spO1xcbitcXHRcXHRhZmZpbml0eSA9IGF1dG9fbWFzaztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0enhkaF9jcHVfZ2V0KHBvb2wsIGNwdW1hc2tfZmlyc3QocmVxX21hc2spKTtcXG4rXFx0fVxcbitcXG4rXFx0aXJxID0genhkaF9pcnFfYWxsb2MocG9vbCwgaXJxX2luZGV4LCBhZmZpbml0eSk7XFxuK1xcdGlmIChJU19FUlIoaXJxKSlcXG4rXFx0XFx0Z290byBlcnJfYWxsb2M7XFxuK1xcbitcXHRmcmVlX2NwdW1hc2tfdmFyKGF1dG9fbWFzayk7XFxuK1xcbitcXHRyZXR1cm4gaXJxO1xcbitcXG4rZXJyX2FsbG9jOlxcbitcXHQvKiBVbmRvIHRoZSBwZXItQ1BVIGFjY291bnRpbmcgZG9uZSBhYm92ZS4gKi9cXG4rXFx0enhkaF9jcHVfcHV0KHBvb2wsIGNwdW1hc2tfZmlyc3QoYWZmaW5pdHkpKTtcXG4rXFx0eGFfZXJhc2UoXFx1MDAyNnBvb2wtXFx1MDAzZWlycXMsIGlycV9pbmRleCk7XFxuK2Vycl94YTpcXG4rXFx0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xcbitcXHRyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogaXJxO1xcbit9XFxuK1xcbisvKiBMb29rIGZvciB0aGUgSVJRIHdpdGggdGhlIHNtYWxsZXN0IHJlZmNvdW50IHdob3NlIGFmZmluaXR5IG1hc2sgaXMgYVxcbisgKiBzdWJzZXQgb2YgdGhlIHJlcXVlc3RlZCBtYXNrLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfcG9vbF9maW5kX2xlYXN0X2xvYWRlZChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gTlVMTDtcXG4rXFx0c3RydWN0IHp4ZGhfaXJxICppdGVyO1xcbitcXHR1bnNpZ25lZCBsb25nIGluZGV4O1xcbitcXHRpbnQgaXRlcl9yZWZjb3VudDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXHR4YV9mb3JfZWFjaF9yYW5nZShcXHUwMDI2cG9vbC1cXHUwMDNlaXJxcywgaW5kZXgsIGl0ZXIsXFxuK1xcdFxcdFxcdCAgcG9vbC1cXHUwMDNleGFfbnVtX2lycXMubWluLCBwb29sLVxcdTAwM2V4YV9udW1faXJxcy5tYXgpIHtcXG4rXFx0XFx0aXRlcl9yZWZjb3VudCA9IHJlZmNvdW50X3JlYWQoXFx1MDAyNml0ZXItXFx1MDAzZXJlZmNvdW50LnJlZmNvdW50KTtcXG4rXFxuK1xcdFxcdC8qIFNraXAgSVJRcyB3aG9zZSBtYXNrIGlzIG5vdCBhIHN1YnNldCBvZiB0aGUgcmVxdWVzdC4gKi9cXG4rXFx0XFx0aWYgKCFjcHVtYXNrX3N1YnNldChpdGVyLVxcdTAwM2VtYXNrLCByZXFfbWFzaykpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHQvKiBJUlEgYmVsb3cgdGhlIG1pbmltdW0gdGhyZXNob2xkIGZvdW5kLCB0YWtlIGl0LiAqL1xcbitcXHRcXHRpZiAoaXRlcl9yZWZjb3VudCBcXHUwMDNjIHBvb2wtXFx1MDAzZW1pbl90aHJlc2hvbGQpXFxuK1xcdFxcdFxcdHJldHVybiBpdGVyO1xcbitcXHRcXHRpZiAoIWlycSB8fFxcbitcXHRcXHQgICAgaXRlcl9yZWZjb3VudCBcXHUwMDNjIHJlZmNvdW50X3JlYWQoXFx1MDAyNmlycS1cXHUwMDNlcmVmY291bnQucmVmY291bnQpKVxcbitcXHRcXHRcXHRpcnEgPSBpdGVyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaXJxO1xcbit9XFxuK1xcbisvKiBSZXF1ZXN0IGFuIElSUSBmb3IgdGhlIGdpdmVuIG1hc2s6IHNoYXJlIHRoZSBsZWFzdCBsb2FkZWQgZXhpc3RpbmdcXG4rICogbWF0Y2hpbmcgSVJRIG9uY2UgaXQgcGFzc2VzIHRoZSBwb29sIG1pbmltdW0gdGhyZXNob2xkLCBvdGhlcndpc2VcXG4rICogY3JlYXRlIGEgbmV3IG9uZS5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxX2FmZmluaXR5X3JlcXVlc3Qoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2lycSAqbGVhc3RfbG9hZGVkX2lycTtcXG4rXFx0c3RydWN0IHp4ZGhfaXJxICpuZXdfaXJxO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRsZWFzdF9sb2FkZWRfaXJxID0genhkaF9pcnFfcG9vbF9maW5kX2xlYXN0X2xvYWRlZChwb29sLCByZXFfbWFzayk7XFxuK1xcdGlmIChsZWFzdF9sb2FkZWRfaXJxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICByZWZjb3VudF9yZWFkKFxcdTAwMjZsZWFzdF9sb2FkZWRfaXJxLVxcdTAwM2VyZWZjb3VudC5yZWZjb3VudCkgXFx1MDAzYyBwb29sLVxcdTAwM2VtaW5fdGhyZXNob2xkKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIE5vIElSUSBiZWxvdyB0aGUgbWluaW11bSB0aHJlc2hvbGQsIHRyeSB0byBjcmVhdGUgYSBuZXcgb25lLiAqL1xcbitcXHRuZXdfaXJxID0genhkaF9pcnFfcG9vbF9yZXF1ZXN0X2lycShwb29sLCByZXFfbWFzayk7XFxuK1xcdGlmIChJU19FUlIobmV3X2lycSkpIHtcXG4rXFx0XFx0aWYgKCFsZWFzdF9sb2FkZWRfaXJxKSB7XFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdHJldHVybiBuZXdfaXJxO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIENvdWxkIG5vdCBjcmVhdGUgYSBuZXcgSVJRIGZvciB0aGUgcmVxdWVzdGVkIGFmZmluaXR5LFxcbitcXHRcXHQgKiBzaGFyZSB0aGUgZXhpc3Rpbmcgb25lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X3dhcm4ocG9vbC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdCBcXFwiaXJxIHBvb2wgJXMgZXhoYXVzdGVkLCBzaGFyaW5nIGlycXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBwb29sLVxcdTAwM2VuYW1lKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGxlYXN0X2xvYWRlZF9pcnEgPSBuZXdfaXJxO1xcbitcXHRnb3RvIHVubG9jaztcXG4rXFxuK291dDpcXG4rXFx0LyogSG9sZGluZyBwb29sLVxcdTAwM2Vsb2NrIGtlZXBzIHRoZSBJUlEgYWxpdmUsIHNvIHRoaXMgY2Fubm90IGZhaWwuICovXFxuK1xcdHp4ZGhfaXJxX2dldChsZWFzdF9sb2FkZWRfaXJxKTtcXG4rXFx0aWYgKHJlZmNvdW50X3JlYWQoXFx1MDAyNmxlYXN0X2xvYWRlZF9pcnEtXFx1MDAzZXJlZmNvdW50LnJlZmNvdW50KSBcXHUwMDNlIHBvb2wtXFx1MDAzZW1heF90aHJlc2hvbGQpXFxuK1xcdFxcdGRldl93YXJuKHBvb2wtXFx1MDAzZWRldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHQgXFxcImlycSAldSBvdmVybG9hZGVkLCBwb29sICVzLCAldSByZWZzIG9uIHRoaXMgaXJxXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcGNpX2lycV92ZWN0b3IocG9vbC1cXHUwMDNlZGV2LVxcdTAwM2VwZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRsZWFzdF9sb2FkZWRfaXJxLVxcdTAwM2VpbmRleCksXFxuK1xcdFxcdFxcdCBwb29sLVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHQgcmVmY291bnRfcmVhZChcXHUwMDI2bGVhc3RfbG9hZGVkX2lycS1cXHUwMDNlcmVmY291bnQucmVmY291bnQpIC9cXG4rXFx0XFx0XFx0IFpYREhfRVFfUkVGU19QRVJfSVJRKTtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGxlYXN0X2xvYWRlZF9pcnE7XFxuK31cXG4rXFxuKy8qIFJlcXVlc3QgYW4gSVJRIGZyb20gdGhlIHBvb2wsIHNwcmVhZCBvdmVyIHRoZSBvbmxpbmUgQ1BVcy4gKi9cXG4rc3RydWN0IHp4ZGhfaXJxICp6eGRoX2dldF9pcnFfb2ZfcG9vbChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbClcXG4re1xcbitcXHRjcHVtYXNrX3Zhcl90IHJlcV9tYXNrO1xcbitcXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcXG4rXFxuK1xcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFxcdTAwMjZyZXFfbWFzaywgR0ZQX0tFUk5FTCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRjcHVtYXNrX2NvcHkocmVxX21hc2ssIGNwdV9vbmxpbmVfbWFzayk7XFxuK1xcbitcXHRpcnEgPSB6eGRoX2lycV9hZmZpbml0eV9yZXF1ZXN0KHBvb2wsIHJlcV9tYXNrKTtcXG4rXFxuK1xcdGZyZWVfY3B1bWFza192YXIocmVxX21hc2spO1xcbitcXG4rXFx0cmV0dXJuIGlycTtcXG4rfVxcbitcXG4rc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnp4ZGhfaXJxX3Bvb2xfYWxsb2Moc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIG1pbl90aHJlc2hvbGQsIHUzMiBtYXhfdGhyZXNob2xkKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sO1xcbitcXHR1MTYgKmlycXNfcGVyX2NwdTtcXG4rXFxuK1xcdGlycXNfcGVyX2NwdSA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCppcnFzX3Blcl9jcHUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFpcnFzX3Blcl9jcHUpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0cG9vbCA9IGt2emFsbG9jX29iaigqcG9vbCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcG9vbCkge1xcbitcXHRcXHRrZnJlZShpcnFzX3Blcl9jcHUpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0fVxcbitcXG4rXFx0cG9vbC1cXHUwMDNlZGV2ID0genhkaF9kZXY7XFxuK1xcdHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdSA9IGlycXNfcGVyX2NwdTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdHhhX2luaXRfZmxhZ3MoXFx1MDAyNnBvb2wtXFx1MDAzZWlycXMsIFhBX0ZMQUdTX0FMTE9DKTtcXG4rXFx0cG9vbC1cXHUwMDNleGFfbnVtX2lycXMubWluID0gc3RhcnQ7XFxuK1xcdHBvb2wtXFx1MDAzZXhhX251bV9pcnFzLm1heCA9IHN0YXJ0ICsgc2l6ZSAtIDE7XFxuK1xcdHNucHJpbnRmKHBvb2wtXFx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcXFwiJXNcXFwiLCBuYW1lKTtcXG4rXFxuK1xcdC8qIFRocmVzaG9sZHMgYXJlIGV4cHJlc3NlZCBpbiBxdWV1ZSByZWZlcmVuY2VzLCB0d28gcGVyIElSUS4gKi9cXG4rXFx0cG9vbC1cXHUwMDNlbWluX3RocmVzaG9sZCA9IG1pbl90aHJlc2hvbGQgKiBaWERIX0VRX1JFRlNfUEVSX0lSUTtcXG4rXFx0cG9vbC1cXHUwMDNlbWF4X3RocmVzaG9sZCA9IG1heF90aHJlc2hvbGQgKiBaWERIX0VRX1JFRlNfUEVSX0lSUTtcXG4rXFxuK1xcdHJldHVybiBwb29sO1xcbit9XFxuK1xcbit2b2lkIHp4ZGhfaXJxX3Bvb2xfZnJlZShzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbClcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4rXFx0dTMyIGNwdTtcXG4rXFxuK1xcdC8qIE9uIGEgZmFzdCB0ZWFyZG93biB0aGUgdGFibGUgbWF5IHN0aWxsIGhvbGQgSVJRczsgcmVsZWFzZVxcbitcXHQgKiB3aGF0ZXZlciBpcyBsZWZ0LlxcbitcXHQgKi9cXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwb29sLVxcdTAwM2VpcnFzLCBpbmRleCwgaXJxKVxcbitcXHRcXHR6eGRoX2lycV9yZWxlYXNlKFxcdTAwMjZpcnEtXFx1MDAzZXJlZmNvdW50KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrKTtcXG4rXFx0eGFfZGVzdHJveShcXHUwMDI2cG9vbC1cXHUwMDNlaXJxcyk7XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0aWYgKHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdSkge1xcbitcXHRcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcXG4rXFx0XFx0XFx0V0FSTl9PTihwb29sLVxcdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSk7XFxuK1xcdFxcdGtmcmVlKHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdSk7XFxuK1xcdH1cXG4rXFxuK1xcdGt2ZnJlZShwb29sKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODlmNDZkN2IxMWM5Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oXFxuQEAgLTAsMCArMSw3MiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIElSUSBwb29sIG1hbmFnZW1lbnRcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fWlhESF9JUlFfSF9fXFxuKyNkZWZpbmUgX19aWERIX0lSUV9IX19cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVtYXNrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rcmVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXJyYXkuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCB6eGRoX2NvcmVfZGV2O1xcbitcXG4rLyogTnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgcGVyIHB1cnBvc2UuIFRoZSBsYXlvdXQgb2YgdGhlIHZlY3RvciBzcGFjZVxcbisgKiBpcyBhIGhhcmR3YXJlIGludGVyZmFjZTpcXG4rICogICBbMCwgOCkgICAgYXN5bmMgZXZlbnQgcXVldWVzXFxuKyAqICAgWzgsIDE0KSAgIHJlc2VydmVkIGZvciBSRE1BICh1bnVzZWQgZm9yIG5vdylcXG4rICogICBbMTQsIDc4KSAgdnEgcngvdHggcXVldWUgcGFpcnNcXG4rICovXFxuKyNkZWZpbmUgWlhESF9BU1lOQ19DSEFOTkVMU19OVU1cXHRcXHQ4XFxuKyNkZWZpbmUgWlhESF9SRE1BX0NIQU5ORUxTX05VTVxcdFxcdDZcXG4rI2RlZmluZSBaWERIX1ZRU19DSEFOTkVMU19OVU1cXHRcXHQ2NFxcbitcXG4rI2RlZmluZSBaWERIX01BWF9JUlFfTkFNRVxcdDEwMFxcbisjZGVmaW5lIFpYREhfRVFfUkVGU19QRVJfSVJRXFx0MlxcbitcXG4rLyogUmVmZXJlbmNlIGNvdW50ZWQgaW50ZXJydXB0LiBFdmVudCBxdWV1ZXMgc2hhcmUgYW4gSVJRIHRocm91Z2ggdGhlXFxuKyAqIG5vdGlmaWVyIGNoYWluLCB3aGljaCBpcyBmaXJlZCBmcm9tIGhhcmQgSVJRIGNvbnRleHQuXFxuKyAqL1xcbitzdHJ1Y3QgenhkaF9pcnEge1xcbitcXHRzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgbmg7XFxuK1xcdGNwdW1hc2tfdmFyX3QgbWFzaztcXHRcXHQvKiBpbnRlcnJ1cHQgYWZmaW5pdHkgKi9cXG4rXFx0Y2hhciBuYW1lW1pYREhfTUFYX0lSUV9OQU1FXTtcXG4rXFx0c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2w7XFxuK1xcdHUzMiBpbmRleDtcXHRcXHRcXHQvKiB2ZWN0b3IgaW5kZXggKi9cXG4rXFx0aW50IGlycW47XFx0XFx0XFx0LyogTGludXggSVJRIG51bWJlciAqL1xcbitcXHRzdHJ1Y3Qga3JlZiByZWZjb3VudDtcXG4rfTtcXG4rXFxuKy8qIFBvb2wgb2YgdmVjdG9ycyBkZWRpY2F0ZWQgdG8gb25lIHB1cnBvc2UsIGlkZW50aWZpZWQgYnkgdGhlXFxuKyAqIFt4YV9udW1faXJxcy5taW4sIHhhX251bV9pcnFzLm1heF0gdmVjdG9yIHJhbmdlLlxcbisgKi9cXG4rc3RydWN0IHp4ZGhfaXJxX3Bvb2wge1xcbitcXHRjaGFyIG5hbWVbWlhESF9NQVhfSVJRX05BTUVdO1xcbitcXHRzdHJ1Y3QgeGFfbGltaXQgeGFfbnVtX2lycXM7XFxuK1xcdHN0cnVjdCBtdXRleCBsb2NrO1xcdFxcdC8qIHNlcmlhbGl6ZXMgSVJRIGNyZWF0aW9uICovXFxuK1xcdHN0cnVjdCB4YXJyYXkgaXJxcztcXG4rXFx0dTMyIG1pbl90aHJlc2hvbGQ7XFx0XFx0LyogaW4gcXVldWUgcmVmZXJlbmNlcyAqL1xcbitcXHR1MzIgbWF4X3RocmVzaG9sZDtcXHRcXHQvKiBpbiBxdWV1ZSByZWZlcmVuY2VzICovXFxuK1xcdHUxNiAqaXJxc19wZXJfY3B1O1xcdFxcdC8qIG51bWJlciBvZiBJUlFzIGJvdW5kIHBlciBDUFUgKi9cXG4rXFx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKmRldjtcXG4rfTtcXG4rXFxuK3N0cnVjdCB6eGRoX2lycV90YWJsZSB7XFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfZ2V0X2lycV9vZl9wb29sKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTtcXG4raW50IHp4ZGhfaXJxX2F0dGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XFxuK2ludCB6eGRoX2lycV9kZXRhY2hfbmIoc3RydWN0IHp4ZGhfaXJxICppcnEsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xcbit2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKTtcXG4rc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnp4ZGhfaXJxX3Bvb2xfYWxsb2Moc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIG1pbl90aHJlc2hvbGQsIHUzMiBtYXhfdGhyZXNob2xkKTtcXG4rdm9pZCB6eGRoX2lycV9wb29sX2ZyZWUoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpO1xcbitcXG4rI2VuZGlmIC8qIF9fWlhESF9JUlFfSF9fICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA1OjAzOjEzLjgwNjAyNzc1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ0MjM5ODk4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpLyksIGFkZGluZyBJUlEgcG9vbCBtYW5hZ2VtZW50IGFuZCBldmVudCBxdWV1ZSBwbHVtYmluZyBmb3IgWlRFIERpbmdIYWkgUENJZSBhZGFwdGVycyAoUENJIHZlbmRvciBJRCAweDFjZjIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVlM2VmNDk2YTkzNWQ0ZmNkYzM3NDEwYjk3MGU0NzNkOGI2YjljMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNTowMzoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbmluZGV4IGUyZjRkYTMzZGY1OTMuLjJkYzZkNjhjYzBlMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbkBAIC00LDQgKzQsNCBAQFxuICNcbiBcbiBvYmotJChDT05GSUdfRElOR0hBSV9QRikgKz0gZGluZ2hhaTEwZS5vXG4tZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cbitkaW5naGFpMTBlLXkgOj0gZW5fcGYubyB6eGRoX2lycS5vIHp4ZGhfZXEub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5pbmRleCA4NmQ0Mzc0MDg4MjAzLi5mZTM5MjRiODkwZDE3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xuQEAgLTYsNiArNiwxMCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcImVuX3BmLmhcIlxuQEAgLTI1LDYgKzI5LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xuIFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XG4gXG4rc3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlIHtcbitcdHN0cnVjdCB6eGRoX2lycV9wb29sICphc3luY19wb29sO1xuK307XG4rXG4rLyogSVJRIGNvbXBhY3Rpb24gdGhyZXNob2xkcyBvZiB0aGUgYXN5bmMgcG9vbCwgaW4gbnVtYmVyIG9mIHF1ZXVlcy4gKi9cbisjZGVmaW5lIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QXHQwXG4rI2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUFx0N1xuK1xuIHZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG5AQCAtMzY5LDYgKzM4MSwxNzcgQEAgaW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qIFJlYWQgdGhlIGZpcm13YXJlIHZlcnNpb24gYmxvY2sgYW5kIHZlcmlmeSB0aGUgZHJpdmVyL2Zpcm13YXJlXG4rICogdmVyc2lvbiBjb250cmFjdC5cbisgKi9cbitzdGF0aWMgaW50IHp4ZGhfcGZfZndfY29tcGF0X2NoZWNrKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgenhkaF9md19jb21wYXQgX19pb21lbSAqY29tcGF0O1xuK1x0c3RydWN0IHp4ZGhfZndfY29tcGF0ICpmd19jb21wYXQ7XG4rXHR1MzIgZXJhc2VkO1xuK1xuK1x0ZndfY29tcGF0ID0gXHUwMDI2cGZfZGV2LVx1MDAzZWZ3X2NvbXBhdDtcbitcdGNvbXBhdCA9IHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdICsgWlhESF9GV19DT01QQVRfT0ZGU0VUO1xuK1xuK1x0LyogVGhlIHJlZ2lvbiByZWFkcyBhcyBhbGwgb25lcyB1bnRpbCB0aGUgZmlybXdhcmUgcG9wdWxhdGVzIGl0IGF0XG4rXHQgKiB0aGUgZW5kIG9mIGl0cyBib290OyBhbGxvdyB1cCB0byAyMDAgcyBmb3IgYSBjb2xkIGJvb3QuXG4rXHQgKi9cbitcdHJlYWR4X3BvbGxfdGltZW91dChpb3JlYWQzMiwgY29tcGF0LCBlcmFzZWQsIGVyYXNlZCAhPSAweGZmZmZmZmZmVSxcbitcdFx0XHQgICBVU0VDX1BFUl9TRUMsXG4rXHRcdFx0ICAgWlhESF9GV19DT01QQVRfVElNRU9VVF9TRUMgKiBVU0VDX1BFUl9TRUMpO1xuK1xuK1x0LyogRmlybXdhcmUgcHJlZGF0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHJlZ2lvbiBrZWVwcyB0aGUgZXJhc2VkXG4rXHQgKiBwYXR0ZXJuLCB3aGljaCBmYWlscyB0aGUgbW9kdWxlIGlkIGNoZWNrIGJlbG93IGFuZCBkZWZlcnMgdGhlXG4rXHQgKiBkZWNpc2lvbiB0byB0aGUgcmVhZGluZXNzIHdhaXQuXG4rXHQgKi9cbitcdGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQgPSBpb3JlYWQ4KFx1MDAyNmNvbXBhdC1cdTAwM2Vtb2R1bGVfaWQpO1xuK1x0ZndfY29tcGF0LVx1MDAzZW1ham9yID0gaW9yZWFkOChcdTAwMjZjb21wYXQtXHUwMDNlbWFqb3IpO1xuK1x0ZndfY29tcGF0LVx1MDAzZWZ3X21pbm9yID0gaW9yZWFkOChcdTAwMjZjb21wYXQtXHUwMDNlZndfbWlub3IpO1xuK1x0ZndfY29tcGF0LVx1MDAzZWRydl9taW5vciA9IGlvcmVhZDgoXHUwMDI2Y29tcGF0LVx1MDAzZWRydl9taW5vcik7XG4rXHRmd19jb21wYXQtXHUwMDNlcGF0Y2ggPSBpb3JlYWQxNihcdTAwMjZjb21wYXQtXHUwMDNlcGF0Y2gpO1xuK1xuK1x0aWYgKGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQgIT0gWlhESF9NT0RVTEVfSUQpIHtcbitcdFx0ZGV2X2luZm8oenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdCBcInVua25vd24gbW9kdWxlIGlkICV1LCBza2lwIGZ3IGNvbXBhdCBjaGVja1xcblwiLFxuK1x0XHRcdCBmd19jb21wYXQtXHUwMDNlbW9kdWxlX2lkKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoZndfY29tcGF0LVx1MDAzZW1ham9yICE9IFpYREhfTUFKT1IpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJkcml2ZXIgbWFqb3IgJXUgaW5jb21wYXRpYmxlIHdpdGggZmlybXdhcmUgbWFqb3IgJXVcXG5cIixcbitcdFx0XHRaWERIX01BSk9SLCBmd19jb21wYXQtXHUwMDNlbWFqb3IpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChmd19jb21wYXQtXHUwMDNlZndfbWlub3IgXHUwMDNjIFpYREhfRldfTUlOT1IpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJmaXJtd2FyZSBmd19taW5vciAlZCBvbGRlciB0aGFuIHJlcXVpcmVkICV1XFxuXCIsXG4rXHRcdFx0ZndfY29tcGF0LVx1MDAzZWZ3X21pbm9yLCBaWERIX0ZXX01JTk9SKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoZndfY29tcGF0LVx1MDAzZWRydl9taW5vciBcdTAwM2UgWlhESF9EUlZfTUlOT1IpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJkcml2ZXIgZHJ2X21pbm9yICV1IG9sZGVyIHRoYW4gcmVxdWlyZWQgYnkgZmlybXdhcmUgJXVcXG5cIixcbitcdFx0XHRaWERIX0RSVl9NSU5PUiwgZndfY29tcGF0LVx1MDAzZWRydl9taW5vcik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFdhaXQgZm9yIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIG9mIHRoZSBmaXJtd2FyZSB0byBmaW5pc2hcbisgKiBib290aW5nLCBzbyB0aGF0IGxhdGVyIHByb2JlIHN0ZXBzIGNhbiB0YWxrIHRvIGl0LlxuKyAqL1xuK3N0YXRpYyBpbnQgenhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIF9faW9tZW0gKmhiO1xuK1x0dTggaGVhbHRoX3ZlcnNpb247XG4rXHR1OCBwb3dlcl9vbjtcbitcdGludCBlcnI7XG4rXG4rXHRoYiA9IHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdICsgWlhESF9SSVNDVl9IQl9PRkZTRVQ7XG4rXHRoZWFsdGhfdmVyc2lvbiA9IGlvcmVhZDgoXHUwMDI2aGItXHUwMDNlaGVhbHRoX3ZlcnNpb24pO1xuK1xuK1x0LyogRmlybXdhcmUgcHJlZGF0aW5nIHRoZSBoZWFsdGggYnVmZmVyIHByb3RvY29sIGhhcyBuZWl0aGVyIGFcbitcdCAqIHZhbGlkIHZlcnNpb24gYnl0ZSBub3IgYSBwb3dlci1vbiBmbGFnIHRvIHdhaXQgZm9yLlxuK1x0ICovXG4rXHRpZiAoaGVhbHRoX3ZlcnNpb24gIT0gMSBcdTAwMjZcdTAwMjZcbitcdCAgICBwZl9kZXYtXHUwMDNlZndfY29tcGF0LnBhdGNoIFx1MDAzYyBaWERIX0hQSVJRX1BBVENIKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVyciA9IHJlYWR4X3BvbGxfdGltZW91dChpb3JlYWQ4LCBcdTAwMjZoYi1cdTAwM2VyaXNjdl9wb3dlcl9vbiwgcG93ZXJfb24sXG4rXHRcdFx0XHQgcG93ZXJfb24gPT0gMSwgVVNFQ19QRVJfU0VDLFxuK1x0XHRcdFx0IFpYREhfUklTQ1ZfUkVBRFlfVElNRU9VVF9TRUMgKiBVU0VDX1BFUl9TRUMpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmlzY3YgcG93ZXIgb25cXG5cIik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB6eGRoX3BmX2lycV9wb29sc19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnBmX2lycV90YWJsZSA9IHp4ZGhfZGV2LVx1MDAzZWlycV90YWJsZS5wcml2O1xuK1x0c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2w7XG4rXG4rXHRwb29sID0genhkaF9pcnFfcG9vbF9hbGxvYyh6eGRoX2RldiwgMCwgWlhESF9BU1lOQ19DSEFOTkVMU19OVU0sXG4rXHRcdFx0XHQgICBcInp4ZGhfcGZfYXN5bmNcIiwgWlhESF9QRl9BU1lOQ19JUlFfTUlOX0NPTVAsXG4rXHRcdFx0XHQgICBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUCk7XG4rXHRpZiAoSVNfRVJSKHBvb2wpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihwb29sKTtcbitcbitcdHBmX2lycV90YWJsZS1cdTAwM2Vhc3luY19wb29sID0gcG9vbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB6eGRoX3BmX2lycV9wb29sc19kZXN0cm95KHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcGZfaXJxX3RhYmxlKVxuK3tcbitcdGlmIChwZl9pcnFfdGFibGUtXHUwMDNlYXN5bmNfcG9vbClcbitcdFx0enhkaF9pcnFfcG9vbF9mcmVlKHBmX2lycV90YWJsZS1cdTAwM2Vhc3luY19wb29sKTtcbit9XG4rXG4raW50IHp4ZGhfcGZfaXJxX3RhYmxlX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX2lycV90YWJsZSAqdGFibGUgPSBcdTAwMjZ6eGRoX2Rldi1cdTAwM2VpcnFfdGFibGU7XG4rXHRzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnByaXY7XG4rXG4rXHRwcml2ID0ga3Z6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR0YWJsZS1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRpbnQgdG90YWxfdmVjID0gWlhESF9WUVNfQ0hBTk5FTFNfTlVNICsgWlhESF9BU1lOQ19DSEFOTkVMU19OVU0gK1xuK1x0XHRcdFpYREhfUkRNQV9DSEFOTkVMU19OVU07XG4rXHRpbnQgZXJyO1xuK1xuK1x0dG90YWxfdmVjID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIHRvdGFsX3ZlYywgdG90YWxfdmVjLFxuK1x0XHRcdFx0XHQgIFBDSV9JUlFfTVNJWCk7XG4rXHRpZiAodG90YWxfdmVjIFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9hbGxvY19pcnFfdmVjdG9ycyBmYWlsZWQ6ICVkXFxuXCIsXG4rXHRcdFx0dG90YWxfdmVjKTtcbitcdFx0cmV0dXJuIHRvdGFsX3ZlYztcbitcdH1cbitcbitcdGVyciA9IHp4ZGhfcGZfaXJxX3Bvb2xzX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ6eGRoX3BmX2lycV9wb29sc19pbml0IGZhaWxlZDogJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRwY2lfZnJlZV9pcnFfdmVjdG9ycyh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9pcnFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfaXJxX3RhYmxlICp0YWJsZSA9IFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWlycV90YWJsZTtcbitcbitcdGlmICh0YWJsZS1cdTAwM2Vwcml2KVxuK1x0XHR6eGRoX3BmX2lycV9wb29sc19kZXN0cm95KHRhYmxlLVx1MDAzZXByaXYpO1xuK1x0a3ZmcmVlKHRhYmxlLVx1MDAzZXByaXYpO1xuK1x0dGFibGUtXHUwMDNlcHJpdiA9IE5VTEw7XG4rXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbit9XG4rXG4rLyogRmV0Y2ggYSB2ZWN0b3IgZnJvbSB0aGUgYXN5bmMgcG9vbCBmb3Igb25lIGFzeW5jIGV2ZW50IHF1ZXVlLiAqL1xuK3N0cnVjdCB6eGRoX2lycSAqenhkaF9wZl9hc3luY19pcnFfcmVxdWVzdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUgPSB6eGRoX2Rldi1cdTAwM2VpcnFfdGFibGUucHJpdjtcbitcbitcdHJldHVybiB6eGRoX2dldF9pcnFfb2ZfcG9vbChwZl9pcnFfdGFibGUtXHUwMDNlYXN5bmNfcG9vbCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgenhkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIHtcbiBcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcbkBAIC00MDUsMTAgKzU4OCw1MCBAQCBzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4gXHR9XG4gXG4rXHRyZXQgPSB6eGRoX3BmX2Z3X2NvbXBhdF9jaGVjayh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9md19jb21wYXRfY2hlY2sgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9jZmdfaW5pdDtcbitcdH1cbitcbitcdHJldCA9IHp4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeSh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9pbml0KHp4ZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJ6eGRoX3BmX2lycV90YWJsZV9pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInp4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZXJyX2lycV90YWJsZTtcbitcdH1cbitcbitcdHJldCA9IHp4ZGhfcGZfZXFfdGFibGVfaW5pdCh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9lcV90YWJsZV9pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfZXFfdGFibGU7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZSh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9lcV90YWJsZV9jcmVhdGUgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9lcV90YWJsZTtcbitcdH1cbitcbiBcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfZXFfdGFibGU6XG4rXHR6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuK2Vycl9pcnFfdGFibGU6XG4rXHR6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTtcbiBlcnJfY2ZnX2luaXQ6XG4gXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4gZXJyX3BjaV9pbml0OlxuQEAgLTQyNCw2ICs2NDcsOCBAQCBzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTtcbiBcbiBcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbitcdHp4ZGhfcGZfZXFfdGFibGVfZGVzdHJveSh6eGRoX2Rldik7XG4rXHR6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTtcbiBcdHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoenhkaF9kZXYpO1xuIFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuIFx0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbmluZGV4IDczNzNkZWU4ZDFhOWYuLjg5NGEwNWEwOWQ5NjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXG5AQCAtOSw2ICs5LDkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXCJ6eGRoX2VxLmhcIlxuKyNpbmNsdWRlIFwienhkaF9pcnEuaFwiXG4rXG4gI2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRFx0MHgxY2YyXG4gI2RlZmluZSBaWERIX1BGX0RFVklDRV9JRFx0MHg4MDQwXG4gI2RlZmluZSBaWERIX1ZGX0RFVklDRV9JRFx0MHg4MDQxXG5AQCAtMjksMTAgKzMyLDU3IEBAXG4gI2RlZmluZSBaWERIX1BGX0FMSUdOMlx0XHRcdDJcbiAjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjJcdFx0MlxuIFxuKy8qIEZpeGVkIG9mZnNldHMgb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSByZWdpb25zIHdpdGhpbiBCQVIgMC4gKi9cbisjZGVmaW5lIFpYREhfUklTQ1ZfSEJfT0ZGU0VUXHQweDUzMDBcbisjZGVmaW5lIFpYREhfRldfQ09NUEFUX09GRlNFVFx0MHg1NDAwXG4rXG4rLyogRHJpdmVyL2Zpcm13YXJlIHZlcnNpb24gY29udHJhY3QuIFRoZSBmaXJtd2FyZSBwdWJsaXNoZXMgaXRzIHNpZGUgb2ZcbisgKiB0aGUgY29udHJhY3QgaW4gdGhlIHJlZ2lvbiBhdCBaWERIX0ZXX0NPTVBBVF9PRkZTRVQuXG4rICovXG4rI2RlZmluZSBaWERIX01PRFVMRV9JRFx0XHQxXG4rI2RlZmluZSBaWERIX01BSk9SXHRcdDFcbisjZGVmaW5lIFpYREhfRldfTUlOT1JcdFx0MFxuKyNkZWZpbmUgWlhESF9EUlZfTUlOT1JcdFx0MFxuKy8qIEZpcm13YXJlIHBhdGNoIGxldmVsIHRoYXQgaW50cm9kdWNlZCB0aGUgaGVhbHRoIGJ1ZmZlciBwcm90b2NvbC4gKi9cbisjZGVmaW5lIFpYREhfSFBJUlFfUEFUQ0hcdDRcbitcbisjZGVmaW5lIFpYREhfRldfQ09NUEFUX1RJTUVPVVRfU0VDXHQyMDBcbisjZGVmaW5lIFpYREhfUklTQ1ZfUkVBRFlfVElNRU9VVF9TRUNcdDQwXG4rXG4rLyogRmlybXdhcmUgdmVyc2lvbiBjb21wYXRpYmlsaXR5IGJsb2NrIGF0IFpYREhfRldfQ09NUEFUX09GRlNFVC5cbisgKiBGaWVsZHMgYXJlIHJlYWQgdGhyb3VnaCBpb3JlYWQqKCksIHdoaWNoIGNvbnZlcnRzIGZyb20gbGl0dGxlLWVuZGlhbi5cbisgKi9cbitzdHJ1Y3QgenhkaF9md19jb21wYXQge1xuK1x0dTggbW9kdWxlX2lkO1xuK1x0dTggbWFqb3I7XG4rXHRzOCBmd19taW5vcjtcbitcdHU4IGRydl9taW5vcjtcbitcdHUxNiBwYXRjaDtcbitcdHUxNiByc3Y7XG4rfSBfX3BhY2tlZDtcbitcbisvKiBIZWFsdGggYnVmZmVyIGF0IFpYREhfUklTQ1ZfSEJfT0ZGU0VULCBtYWludGFpbmVkIGJ5IHRoZSBSSVNDLVZcbisgKiBtYW5hZ2VtZW50IGNvcmUgb2YgdGhlIGZpcm13YXJlLiBGaWVsZHMgYXJlIHJlYWQgdGhyb3VnaCBpb3JlYWQqKCkuXG4rICovXG4rc3RydWN0IHp4ZGhfaGVhbHRoX2J1ZmZlciB7XG4rXHR1MzIgc3luZDtcdFx0LyogQml0bWFzayBvZiBhY3RpdmUgc3luZHJvbWUgZmxhZ3MuICovXG4rXHR1MzIgaGVhbHRoX2NvdW50ZXI7XHQvKiBJbmNyZW1lbnRlZCBoZWFydGJlYXQgY291bnRlci4gKi9cbitcdHU4IHN0YXR1cztcbitcdHU4IHJmcjtcbitcdHU4IGZ3X2V4Y2VwdGlvbjtcbitcdHU4IHJpc2N2X3Bvd2VyX29uO1x0LyogU2V0IHRvIDEgb25jZSB0aGUgY29yZSBmaW5pc2hlZCBib290aW5nLiAqL1xuK1x0dTggZndfdmVyc2lvblszMl07XG4rXHR1OCBwZl9zdGF0dXNbNV07XG4rXHR1OCBoZWFsdGhfdmVyc2lvbjtcdC8qIEhlYWx0aCBidWZmZXIgcHJvdG9jb2wgdmVyc2lvbi4gKi9cbitcdHU4IHJzdjFbMzBdO1xuK30gX19wYWNrZWQ7XG4rXG4gc3RydWN0IHp4ZGhfY29yZV9kZXYge1xuIFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xuIFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbitcdHN0cnVjdCB6eGRoX2lycV90YWJsZSBpcnFfdGFibGU7XG4rXHRzdHJ1Y3QgenhkaF9lcV90YWJsZSBlcV90YWJsZTtcbiBcdHZvaWQgKnByaXY7XG4gfTtcbiBcbkBAIC01NCw2ICsxMDQsNyBAQCBzdHJ1Y3QgenhkaF9wZl9kZXYge1xuIFx0czMyIG1vZGVybl9iYXJzO1xuIFx0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xuIFx0dTMyIGRldl9jZmdfYmFyX29mZjtcbitcdHN0cnVjdCB6eGRoX2Z3X2NvbXBhdCBmd19jb21wYXQ7XG4gfTtcbiBcbiB2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTtcbkBAIC03Miw0ICsxMjMsMTAgQEAgaW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4gdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4gaW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4gXG4rLyogUEYgSVJRIHRhYmxlIChlbl9wZi5jKSAqL1xuK2ludCB6eGRoX3BmX2lycV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK3ZvaWQgenhkaF9wZl9pcnFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK3N0cnVjdCB6eGRoX2lycSAqenhkaF9wZl9hc3luY19pcnFfcmVxdWVzdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK1xuICNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjFkN2VlZWMxYWU0ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jXG5AQCAtMCwwICsxLDE0NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIGV2ZW50IHF1ZXVlIHBsdW1iaW5nXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKlxuKyAqIEFzeW5jIGV2ZW50IHF1ZXVlcyBhcmUgdGhlIGRlbGl2ZXJ5IHBhdGggZm9yIGZpcm13YXJlIG5vdGlmaWNhdGlvbnM6XG4rICogYSBxdWV1ZSBvd25zIG9uZSBNU0ktWCB2ZWN0b3Igb2YgdGhlIGFzeW5jIHBvb2wgYW5kIGZhbnMgaW50ZXJydXB0c1xuKyAqIG91dCB0byB0aGUgcGVyLWV2ZW50LXR5cGUgbm90aWZpZXIgY2hhaW5zIG9mIHRoZSBldmVudCBxdWV1ZSB0YWJsZS5cbisgKiBUaGUgQkFSIG1lc3NhZ2UgY2hhbm5lbCBoYW5kc2hha2UgdGhhdCB0ZWxscyB0aGUgZmlybXdhcmUgd2hpY2hcbisgKiB2ZWN0b3JzIHRvIHNpZ25hbCBjb21lcyB3aXRoIHRoZSBCQVIgbWVzc2FnZSBzdWJzeXN0ZW0gaW4gYSBsYXRlclxuKyAqIHNlcmllczsgdGhlIFBGIHNpZGUgd2lyZWQgaGVyZSBpcyBsaXZlIGFzIHNvb24gYXMgdGhhdCBjaGFubmVsIGlzXG4rICogZW5hYmxlZC5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZW5fcGYuaFwiXG4rI2luY2x1ZGUgXCJ6eGRoX2VxLmhcIlxuKyNpbmNsdWRlIFwienhkaF9pcnEuaFwiXG4rXG4rLyogUEYgc2lkZSBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGU6IG9uZSBhc3luYyBFUSBmZWQgYnkgdGhlIFJJU0MtVlxuKyAqIG1hbmFnZW1lbnQgY29yZS5cbisgKi9cbitzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSB7XG4rXHRzdHJ1Y3QgenhkaF9lcV9hc3luYyByaXNjdl9lcTtcbit9O1xuK1xuKy8qIEZldGNoIHRoZSBldmVudF9pZCB0aGUgUklTQy1WIGNvcmUgcG9zdGVkIGluIHRoZSBQRiByZWNlaXZlXG4rICogc3ViLWNoYW5uZWwgb2YgdGhlIEJBUiBtZXNzYWdlIGFyZWEuIFRoZSBmaWVsZCBsaXZlcyBhdCBieXRlIG9mZnNldFxuKyAqIDIgb2YgdGhlIDEyLWJ5dGUgbWVzc2FnZSBoZWFkZXIsIHNvIGEgc2luZ2xlIDMyLWJpdCByZWFkIG9mIHRoZVxuKyAqIHN1Yi1jaGFubmVsIHN0YXJ0IGNvdmVycyBpdC5cbisgKi9cbitzdGF0aWMgdTE2IHp4ZGhfZXFfZXZlbnRfaWRfZ2V0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHR2b2lkIF9faW9tZW0gKnN1YmNoYW47XG4rXG4rXHRzdWJjaGFuID0gcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gKyBaWERIX0JBUl9NU0dfU1VCQ0hBTl9SRUNWO1xuK1xuK1x0cmV0dXJuIGlvcmVhZDMyKHN1YmNoYW4pIFx1MDAzZVx1MDAzZSAxNjtcbit9XG4rXG4rc3RhdGljIGVudW0genhkaF9lcV9ldmVudF90eXBlIHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQodTE2IGV2ZW50X2lkKVxuK3tcbitcdGlmIChldmVudF9pZCA9PSBaWERIX01TR19NT0RVTEVfUklTQ19SRUFEWSlcbitcdFx0cmV0dXJuIFpYREhfRVFfRVZFTlRfVFlQRV9SSVNDVl9SRUFEWTtcbitcbitcdC8qIE9ubHkgdGhlIFJJU0MtViByZWFkeSBub3RpZmljYXRpb24gaXMgZGlzcGF0Y2hlZCBpbiB0aGlzXG4rXHQgKiBzZXJpZXM7IHRoZSByZW1haW5pbmcgZmlybXdhcmUgZXZlbnRzIGFycml2ZSB3aXRoIHRoZSBCQVJcbitcdCAqIG1lc3NhZ2Ugc3Vic3lzdGVtLlxuK1x0ICovXG4rXHRyZXR1cm4gWlhESF9FUV9FVkVOVF9UWVBFX01BWDtcbit9XG4rXG4rc3RhdGljIGludCB6eGRoX2VxX2FzeW5jX3Jpc2N2X2ludChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHp4ZGhfZXFfYXN5bmMgKmVxID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgenhkaF9lcV9hc3luYywgaXJxX25iKTtcbitcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IGVxLVx1MDAzZXByaXY7XG4rXHRlbnVtIHp4ZGhfZXFfZXZlbnRfdHlwZSBldmVudF90eXBlO1xuK1xuK1x0ZXZlbnRfdHlwZSA9IHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQoenhkaF9lcV9ldmVudF9pZF9nZXQoenhkaF9kZXYpKTtcbitcdGlmIChldmVudF90eXBlID09IFpYREhfRVFfRVZFTlRfVFlQRV9NQVgpXG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcbitcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWVxX3RhYmxlLm5oW2V2ZW50X3R5cGVdLFxuK1x0XHRcdFx0ICAgZXZlbnRfdHlwZSwgTlVMTCk7XG4rXG4rXHRyZXR1cm4gTk9USUZZX09LO1xuK31cbitcbitpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSBcdTAwMjZ6eGRoX2Rldi1cdTAwM2VlcV90YWJsZTtcbitcdHN0cnVjdCB6eGRoX3BmX2VxX3RhYmxlICpwcml2O1xuK1x0aW50IGk7XG4rXG4rXHRwcml2ID0ga3Z6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR0YWJsZS1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdG11dGV4X2luaXQoXHUwMDI2dGFibGUtXHUwMDNlbG9jayk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaWERIX0VRX0VWRU5UX1RZUEVfTUFYOyBpKyspXG4rXHRcdEFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlbmhbaV0pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZXFfdGFibGUgKnBmX2VxX3RhYmxlID0genhkaF9kZXYtXHUwMDNlZXFfdGFibGUucHJpdjtcbitcdHN0cnVjdCB6eGRoX2VxX3RhYmxlICp0YWJsZSA9IFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWVxX3RhYmxlO1xuK1x0c3RydWN0IHp4ZGhfZXFfYXN5bmMgKmVxID0gXHUwMDI2cGZfZXFfdGFibGUtXHUwMDNlcmlzY3ZfZXE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbitcbitcdGVxLVx1MDAzZXByaXYgPSB6eGRoX2RldjtcbitcdGVxLVx1MDAzZWlycSA9IHp4ZGhfcGZfYXN5bmNfaXJxX3JlcXVlc3QoenhkaF9kZXYpO1xuK1x0aWYgKElTX0VSUihlcS1cdTAwM2VpcnEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoZXEtXHUwMDNlaXJxKTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRlcS1cdTAwM2VpcnFfbmIubm90aWZpZXJfY2FsbCA9IHp4ZGhfZXFfYXN5bmNfcmlzY3ZfaW50O1xuK1x0ZXJyID0genhkaF9pcnFfYXR0YWNoX25iKGVxLVx1MDAzZWlycSwgXHUwMDI2ZXEtXHUwMDNlaXJxX25iKTtcbitcdGlmIChlcnIpIHtcbitcdFx0enhkaF9pcnFzX3JlbGVhc2VfdmVjdG9ycyhcdTAwMjZlcS1cdTAwM2VpcnEsIDEpO1xuK1x0XHRlcS1cdTAwM2VpcnEgPSBOVUxMO1xuK1x0fVxuK1xuK3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9lcV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcGZfZXFfdGFibGUgPSB6eGRoX2Rldi1cdTAwM2VlcV90YWJsZS5wcml2O1xuK1x0c3RydWN0IHp4ZGhfZXFfdGFibGUgKnRhYmxlID0gXHUwMDI2enhkaF9kZXYtXHUwMDNlZXFfdGFibGU7XG4rXHRzdHJ1Y3QgenhkaF9lcV9hc3luYyAqZXE7XG4rXG4rXHRpZiAoIXBmX2VxX3RhYmxlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcSA9IFx1MDAyNnBmX2VxX3RhYmxlLVx1MDAzZXJpc2N2X2VxO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbitcdGlmIChlcS1cdTAwM2VpcnEpIHtcbitcdFx0enhkaF9pcnFfZGV0YWNoX25iKGVxLVx1MDAzZWlycSwgXHUwMDI2ZXEtXHUwMDNlaXJxX25iKTtcbitcdFx0enhkaF9pcnFzX3JlbGVhc2VfdmVjdG9ycyhcdTAwMjZlcS1cdTAwM2VpcnEsIDEpO1xuK1x0XHRlcS1cdTAwM2VpcnEgPSBOVUxMO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnRhYmxlLVx1MDAzZWxvY2spO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbitcdGt2ZnJlZSh0YWJsZS1cdTAwM2Vwcml2KTtcbitcdHRhYmxlLVx1MDAzZXByaXYgPSBOVUxMO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40OTY1Y2ExNTkxMmFjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcbkBAIC0wLDAgKzEsNjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBldmVudCBxdWV1ZSBhYnN0cmFjdGlvblxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2lmbmRlZiBfX1pYREhfRVFfSF9fXG4rI2RlZmluZSBfX1pYREhfRVFfSF9fXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbitcbitzdHJ1Y3QgenhkaF9jb3JlX2RldjtcbitzdHJ1Y3QgenhkaF9pcnE7XG4rXG4rLyogQkFSIG1lc3NhZ2UgYXJlYTogc2hhcmVkLW1lbW9yeSBtYWlsYm94IGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlXG4rICogZmlybXdhcmUsIHNwbGl0IGludG8gc3ViLWNoYW5uZWxzIG9mIDIwNDggYnl0ZXMuIE5vdGlmaWNhdGlvbnMgZnJvbVxuKyAqIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIGFyZSBwb3N0ZWQgdG8gdGhlIFBGIHJlY2VpdmUgc3ViLWNoYW5uZWwsXG4rICogb25lIGludGVydmFsIGFib3ZlIHRoZSBhcmVhIGJhc2UuXG4rICovXG4rI2RlZmluZSBaWERIX0JBUl9NU0dfT0ZGU0VUXHRcdDB4MjAwMFxuKyNkZWZpbmUgWlhESF9CQVJfTVNHX1NVQkNIQU5fSU5URVJWQUxcdDIwNDhcbisjZGVmaW5lIFpYREhfQkFSX01TR19TVUJDSEFOX1JFQ1ZcdChaWERIX0JBUl9NU0dfT0ZGU0VUICtcdFxcXG4rXHRcdFx0XHRcdCBaWERIX0JBUl9NU0dfU1VCQ0hBTl9JTlRFUlZBTClcbitcbisvKiBldmVudF9pZCBvZiB0aGUgXCJSSVNDLVYgY29yZSByZWFkeVwiIGZpcm13YXJlIG5vdGlmaWNhdGlvbiwgY2FycmllZFxuKyAqIGF0IGJ5dGUgb2Zmc2V0IDIgb2YgdGhlIEJBUiBtZXNzYWdlIGhlYWRlci5cbisgKi9cbisjZGVmaW5lIFpYREhfTVNHX01PRFVMRV9SSVNDX1JFQURZXHQxM1xuK1xuKy8qIEV2ZW50IHR5cGVzIHRoZSB1cHBlciBsYXllcnMgY2FuIHN1YnNjcmliZSB0byBvdmVyIHRoZSBwZXItdHlwZVxuKyAqIG5vdGlmaWVyIGNoYWlucyBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGUuIFRoZSBmdWxsIGNhdGFsb2d1ZSBsaXZlc1xuKyAqIGluIHRoZSBmaXJtd2FyZTsgb25seSB0aGUgb25lcyBkaXNwYXRjaGVkIGluIHRoaXMgc2VyaWVzIGFyZSBuYW1lZC5cbisgKi9cbitlbnVtIHp4ZGhfZXFfZXZlbnRfdHlwZSB7XG4rXHRaWERIX0VRX0VWRU5UX1RZUEVfUklTQ1ZfUkVBRFkgPSAwLFxuK1x0WlhESF9FUV9FVkVOVF9UWVBFX01BWCxcbit9O1xuK1xuKy8qIEFzeW5jaHJvbm91cyBldmVudCBxdWV1ZSBkZWxpdmVyaW5nIGZpcm13YXJlIG5vdGlmaWNhdGlvbnMgdG8gdGhlXG4rICogZHJpdmVyIHdpdGhvdXQgYSByZXF1ZXN0L3JlcGx5IGhhbmRzaGFrZS5cbisgKi9cbitzdHJ1Y3QgenhkaF9lcV9hc3luYyB7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcbitcdHN0cnVjdCBub3RpZmllcl9ibG9jayBpcnFfbmI7XG4rXHR2b2lkICpwcml2O1xuK307XG4rXG4rc3RydWN0IHp4ZGhfZXFfdGFibGUge1xuK1x0LyogTm90aWZpZXIgY2hhaW5zIGZhbm5lZCBvdXQgYnkgZXZlbnQgdHlwZS4gKi9cbitcdHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBuaFtaWERIX0VRX0VWRU5UX1RZUEVfTUFYXTtcbitcdC8qIFNlcmlhbGl6ZXMgYXN5bmMgRVEgY3JlYXRlL2Rlc3Ryb3kuICovXG4rXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbitcdHZvaWQgKnByaXY7XG4rfTtcbitcbitpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfZXFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4rdm9pZCB6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbitcbisjZW5kaWYgLyogX19aWERIX0VRX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDM3MzQ0MzI5YzdlOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuY1xuQEAgLTAsMCArMSw0MTIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBJUlEgcG9vbCBtYW5hZ2VtZW50XG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKlxuKyAqIERldmljZSB2ZWN0b3JzIGFyZSBtYW5hZ2VkIGluIHBlci1wdXJwb3NlIHBvb2xzLiBBbiBJUlEgY2FycmllcyBhXG4rICogcmVmY291bnQgc28gdGhhdCBzZXZlcmFsIGV2ZW50IHF1ZXVlcyBjYW4gc2hhcmUgb25lIHZlY3Rvcjsgb25cbisgKiByYWlzZSwgdGhlIGludGVycnVwdCBpcyBmYW5uZWQgb3V0IHRocm91Z2ggYW4gYXRvbWljIG5vdGlmaWVyIGNoYWluXG4rICogYXR0YWNoZWQgdG8gdGhlIElSUS5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVtYXNrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJlbl9wZi5oXCJcbisjaW5jbHVkZSBcInp4ZGhfaXJxLmhcIlxuK1xuKy8qIFJlbGVhc2UgY2FsbGJhY2sgb2YgdGhlIElSUSBrcmVmLCBjYWxsZWQgd2l0aCBwb29sLVx1MDAzZWxvY2sgaGVsZC4gKi9cbitzdGF0aWMgdm9pZCB6eGRoX2lycV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB6eGRoX2lycSwgcmVmY291bnQpO1xuK1x0c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wgPSBpcnEtXHUwMDNlcG9vbDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbitcdHhhX2VyYXNlKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaXJxLVx1MDAzZWluZGV4KTtcbitcdC8qIGZyZWVfaXJxKCkgcmVxdWlyZXMgdGhlIGFmZmluaXR5IGhpbnQgdG8gYmUgY2xlYXJlZCBiZWZvcmUgaXQgaXNcbitcdCAqIGNhbGxlZDsgdGhlIGFzeW1tZXRyeSB3aXRoIHRoZSBzZXQgcGF0aCBpbiB6eGRoX2lycV9hbGxvYygpIGlzXG4rXHQgKiBpbnRlbnRpb25hbC5cbitcdCAqL1xuK1x0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2VpcnFuLCBOVUxMKTtcbitcdGZyZWVfY3B1bWFza192YXIoaXJxLVx1MDAzZW1hc2spO1xuK1x0ZnJlZV9pcnEoaXJxLVx1MDAzZWlycW4sIGlycSk7XG4rXHRrZnJlZShpcnEpO1xuK31cbitcbisvKiBEcm9wIG9uZSByZWZlcmVuY2U7IHJldHVybnMgMSBpZiB0aGUgSVJRIHdhcyByZWxlYXNlZC4gKi9cbitzdGF0aWMgaW50IHp4ZGhfaXJxX3B1dChzdHJ1Y3QgenhkaF9pcnEgKmlycSlcbit7XG4rXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS1cdTAwM2Vwb29sO1xuK1x0aW50IHJlbGVhc2VkO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0cmVsZWFzZWQgPSBrcmVmX3B1dChcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQsIHp4ZGhfaXJxX3JlbGVhc2UpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVsZWFzZWQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgenhkaF9pcnFfZ2V0KHN0cnVjdCB6eGRoX2lycSAqaXJxKVxuK3tcbitcdHJldHVybiBrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQpO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgenhkaF9pcnFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxID0gZGF0YTtcbitcbitcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnp4ZGhfaXJxLVx1MDAzZW5oLCAwLCBOVUxMKTtcbitcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfYWxsb2Moc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsIGludCB2ZWNpZHgsXG4rXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KVxuK3tcbitcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBvb2wtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHp4ZGhfaXJxICppcnE7XG4rXHRpbnQgZXJyO1xuK1x0aW50IGNwdTtcbitcbitcdGlycSA9IGt6YWxsb2Nfb2JqKCppcnEsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFpcnEpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0aXJxLVx1MDAzZXBvb2wgPSBwb29sO1xuK1x0aXJxLVx1MDAzZWlycW4gPSBwY2lfaXJxX3ZlY3Rvcih6eGRoX2Rldi1cdTAwM2VwZGV2LCB2ZWNpZHgpO1xuK1x0aWYgKGlycS1cdTAwM2VpcnFuIFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IGlycS1cdTAwM2VpcnFuO1xuK1x0XHRnb3RvIGVycl9pcnFuO1xuK1x0fVxuK1xuK1x0QVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRChcdTAwMjZpcnEtXHUwMDNlbmgpO1xuK1x0c25wcmludGYoaXJxLVx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcImFzeW5jXyVkQHBjaTolc1wiLCB2ZWNpZHgsXG4rXHRcdCBwY2lfbmFtZSh6eGRoX2Rldi1cdTAwM2VwZGV2KSk7XG4rXG4rXHRlcnIgPSByZXF1ZXN0X2lycShpcnEtXHUwMDNlaXJxbiwgenhkaF9pcnFfaW50X2hhbmRsZXIsIDAsIGlycS1cdTAwM2VuYW1lLCBpcnEpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJyZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXFxuXCIsIGVycik7XG4rXHRcdGdvdG8gZXJyX2lycW47XG4rXHR9XG4rXG4rXHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZpcnEtXHUwMDNlbWFzaywgR0ZQX0tFUk5FTCkpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwiemFsbG9jX2NwdW1hc2tfdmFyIGZhaWxlZFxcblwiKTtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfY3B1bWFzaztcbitcdH1cbitcbitcdGlmIChhZmZpbml0eSkge1xuK1x0XHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZW1hc2ssIGFmZmluaXR5KTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIE5vIHByZWZlcmVuY2UgcmVxdWVzdGVkOyBzcHJlYWQgb3ZlciBhbGwgb25saW5lIENQVXMuICovXG4rXHRcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuK1x0XHRcdGNwdW1hc2tfc2V0X2NwdShjcHUsIGlycS1cdTAwM2VtYXNrKTtcbitcdH1cbitcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNlaXJxbiwgaXJxLVx1MDAzZW1hc2spO1xuK1xuK1x0a3JlZl9pbml0KFx1MDAyNmlycS1cdTAwM2VyZWZjb3VudCk7XG4rXHRpcnEtXHUwMDNlaW5kZXggPSB2ZWNpZHg7XG4rXHRlcnIgPSB4YV9lcnIoeGFfc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VpcnFzLCBpcnEtXHUwMDNlaW5kZXgsIGlycSwgR0ZQX0tFUk5FTCkpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ4YV9zdG9yZSBmYWlsZWQgZm9yIGlycSAldTogJWRcXG5cIixcbitcdFx0XHRpcnEtXHUwMDNlaW5kZXgsIGVycik7XG4rXHRcdGdvdG8gZXJyX3hhO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlycTtcbitcbitlcnJfeGE6XG4rXHRpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVx1MDAzZWlycW4sIE5VTEwpO1xuK1x0ZnJlZV9jcHVtYXNrX3ZhcihpcnEtXHUwMDNlbWFzayk7XG4rZXJyX2NwdW1hc2s6XG4rXHRmcmVlX2lycShpcnEtXHUwMDNlaXJxbiwgaXJxKTtcbitlcnJfaXJxbjpcbitcdGtmcmVlKGlycSk7XG4rXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK31cbitcbitpbnQgenhkaF9pcnFfYXR0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIXp4ZGhfaXJxX2dldChpcnEpKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdGVyciA9IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcdTAwMjZpcnEtXHUwMDNlbmgsIG5iKTtcbitcdGlmIChlcnIpXG4rXHRcdHp4ZGhfaXJxX3B1dChpcnEpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHp4ZGhfaXJxX2RldGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXHUwMDI2aXJxLVx1MDAzZW5oLCBuYik7XG4rXHR6eGRoX2lycV9wdXQoaXJxKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuKy8qIFJlbGVhc2Ugb25lIG9yIG1vcmUgSVJRcyBiYWNrIHRvIHRoZWlyIHBvb2wuICovXG4rdm9pZCB6eGRoX2lycXNfcmVsZWFzZV92ZWN0b3JzKHN0cnVjdCB6eGRoX2lycSAqKmlycXMsIGludCBuaXJxcylcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pcnFzOyBpKyspIHtcbitcdFx0c3luY2hyb25pemVfaXJxKGlycXNbaV0tXHUwMDNlaXJxbik7XG4rXHRcdHp4ZGhfaXJxX3B1dChpcnFzW2ldKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgenhkaF9jcHVfcHV0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLCBpbnQgY3B1KVxuK3tcbitcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0tLTtcbit9XG4rXG4rc3RhdGljIHZvaWQgenhkaF9jcHVfZ2V0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLCBpbnQgY3B1KVxuK3tcbitcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0rKztcbit9XG4rXG4rLyogRmluZCB0aGUgbGVhc3QgbG9hZGVkIENQVSwgaS5lLiB0aGUgQ1BVIHdpdGggdGhlIGZld2VzdCBJUlFzIGJvdW5kXG4rICogdG8gaXQsIHdpdGhpbiB0aGUgcmVxdWVzdGVkIG1hc2suXG4rICovXG4rc3RhdGljIGludCB6eGRoX2NwdV9nZXRfbGVhc3RfbG9hZGVkKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spXG4re1xuK1x0aW50IGJlc3RfY3B1ID0gLTE7XG4rXHRpbnQgY3B1O1xuK1xuK1x0Zm9yX2VhY2hfY3B1X2FuZChjcHUsIHJlcV9tYXNrLCBjcHVfb25saW5lX21hc2spIHtcbitcdFx0LyogVGhpcyBDUFUgaGFzIG5vIElSUXMgeWV0LCBubyBuZWVkIHRvIGxvb2sgZnVydGhlci4gKi9cbitcdFx0aWYgKCFwb29sLVx1MDAzZWlycXNfcGVyX2NwdVtjcHVdKSB7XG4rXHRcdFx0YmVzdF9jcHUgPSBjcHU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0aWYgKGJlc3RfY3B1IFx1MDAzYyAwKVxuK1x0XHRcdGJlc3RfY3B1ID0gY3B1O1xuK1x0XHRpZiAocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSBcdTAwM2MgcG9vbC1cdTAwM2VpcnFzX3Blcl9jcHVbYmVzdF9jcHVdKVxuK1x0XHRcdGJlc3RfY3B1ID0gY3B1O1xuK1x0fVxuK1xuK1x0aWYgKGJlc3RfY3B1IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIocG9vbC1cdTAwM2VkZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwibm8gb25saW5lIENQVSBpbiBhZmZpbml0eSBtYXNrICglKnBibClcXG5cIixcbitcdFx0XHRjcHVtYXNrX3ByX2FyZ3MocmVxX21hc2spKTtcbitcdFx0YmVzdF9jcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayk7XG4rXHR9XG4rXHRwb29sLVx1MDAzZWlycXNfcGVyX2NwdVtiZXN0X2NwdV0rKztcbitcbitcdHJldHVybiBiZXN0X2NwdTtcbit9XG4rXG4rLyogQ3JlYXRlIGEgbmV3IElSUSBmcm9tIHRoZSBwb29sIGFuZCBiaW5kIGl0IHRvIHRoZSByZXF1ZXN0ZWQgbWFzay4gKi9cbitzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9wb29sX3JlcXVlc3RfaXJxKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuK1x0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSA9IHJlcV9tYXNrO1xuK1x0Y3B1bWFza192YXJfdCBhdXRvX21hc2s7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcbitcdHUzMiBpcnFfaW5kZXg7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2YXV0b19tYXNrLCBHRlBfS0VSTkVMKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRlcnIgPSB4YV9hbGxvYyhcdTAwMjZwb29sLVx1MDAzZWlycXMsIFx1MDAyNmlycV9pbmRleCwgTlVMTCwgcG9vbC1cdTAwM2V4YV9udW1faXJxcyxcbitcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAoZXJyID09IC1FQlVTWSlcbitcdFx0XHRlcnIgPSAtRVVTRVJTO1xuK1x0XHRnb3RvIGVycl94YTtcbitcdH1cbitcbitcdGlmIChjcHVtYXNrX3dlaWdodChyZXFfbWFzaykgXHUwMDNlIDEpIHtcbitcdFx0LyogQmluZCB0byB0aGUgbGVhc3QgbG9hZGVkIENQVSBvZiB0aGUgcmVxdWVzdC4gKi9cbitcdFx0Y3B1bWFza19zZXRfY3B1KHp4ZGhfY3B1X2dldF9sZWFzdF9sb2FkZWQocG9vbCwgcmVxX21hc2spLFxuK1x0XHRcdFx0YXV0b19tYXNrKTtcbitcdFx0YWZmaW5pdHkgPSBhdXRvX21hc2s7XG4rXHR9IGVsc2Uge1xuK1x0XHR6eGRoX2NwdV9nZXQocG9vbCwgY3B1bWFza19maXJzdChyZXFfbWFzaykpO1xuK1x0fVxuK1xuK1x0aXJxID0genhkaF9pcnFfYWxsb2MocG9vbCwgaXJxX2luZGV4LCBhZmZpbml0eSk7XG4rXHRpZiAoSVNfRVJSKGlycSkpXG4rXHRcdGdvdG8gZXJyX2FsbG9jO1xuK1xuK1x0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xuK1xuK1x0cmV0dXJuIGlycTtcbitcbitlcnJfYWxsb2M6XG4rXHQvKiBVbmRvIHRoZSBwZXItQ1BVIGFjY291bnRpbmcgZG9uZSBhYm92ZS4gKi9cbitcdHp4ZGhfY3B1X3B1dChwb29sLCBjcHVtYXNrX2ZpcnN0KGFmZmluaXR5KSk7XG4rXHR4YV9lcmFzZShcdTAwMjZwb29sLVx1MDAzZWlycXMsIGlycV9pbmRleCk7XG4rZXJyX3hhOlxuK1x0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xuK1x0cmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IGlycTtcbit9XG4rXG4rLyogTG9vayBmb3IgdGhlIElSUSB3aXRoIHRoZSBzbWFsbGVzdCByZWZjb3VudCB3aG9zZSBhZmZpbml0eSBtYXNrIGlzIGFcbisgKiBzdWJzZXQgb2YgdGhlIHJlcXVlc3RlZCBtYXNrLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxX3Bvb2xfZmluZF9sZWFzdF9sb2FkZWQoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsXG4rXHRcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spXG4re1xuK1x0c3RydWN0IHp4ZGhfaXJxICppcnEgPSBOVUxMO1xuK1x0c3RydWN0IHp4ZGhfaXJxICppdGVyO1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbitcdGludCBpdGVyX3JlZmNvdW50O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0eGFfZm9yX2VhY2hfcmFuZ2UoXHUwMDI2cG9vbC1cdTAwM2VpcnFzLCBpbmRleCwgaXRlcixcbitcdFx0XHQgIHBvb2wtXHUwMDNleGFfbnVtX2lycXMubWluLCBwb29sLVx1MDAzZXhhX251bV9pcnFzLm1heCkge1xuK1x0XHRpdGVyX3JlZmNvdW50ID0gcmVmY291bnRfcmVhZChcdTAwMjZpdGVyLVx1MDAzZXJlZmNvdW50LnJlZmNvdW50KTtcbitcbitcdFx0LyogU2tpcCBJUlFzIHdob3NlIG1hc2sgaXMgbm90IGEgc3Vic2V0IG9mIHRoZSByZXF1ZXN0LiAqL1xuK1x0XHRpZiAoIWNwdW1hc2tfc3Vic2V0KGl0ZXItXHUwMDNlbWFzaywgcmVxX21hc2spKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHQvKiBJUlEgYmVsb3cgdGhlIG1pbmltdW0gdGhyZXNob2xkIGZvdW5kLCB0YWtlIGl0LiAqL1xuK1x0XHRpZiAoaXRlcl9yZWZjb3VudCBcdTAwM2MgcG9vbC1cdTAwM2VtaW5fdGhyZXNob2xkKVxuK1x0XHRcdHJldHVybiBpdGVyO1xuK1x0XHRpZiAoIWlycSB8fFxuK1x0XHQgICAgaXRlcl9yZWZjb3VudCBcdTAwM2MgcmVmY291bnRfcmVhZChcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQucmVmY291bnQpKVxuK1x0XHRcdGlycSA9IGl0ZXI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gaXJxO1xuK31cbitcbisvKiBSZXF1ZXN0IGFuIElSUSBmb3IgdGhlIGdpdmVuIG1hc2s6IHNoYXJlIHRoZSBsZWFzdCBsb2FkZWQgZXhpc3RpbmdcbisgKiBtYXRjaGluZyBJUlEgb25jZSBpdCBwYXNzZXMgdGhlIHBvb2wgbWluaW11bSB0aHJlc2hvbGQsIG90aGVyd2lzZVxuKyAqIGNyZWF0ZSBhIG5ldyBvbmUuXG4rICovXG4rc3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfYWZmaW5pdHlfcmVxdWVzdChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCxcbitcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaylcbit7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKmxlYXN0X2xvYWRlZF9pcnE7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKm5ld19pcnE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRsZWFzdF9sb2FkZWRfaXJxID0genhkaF9pcnFfcG9vbF9maW5kX2xlYXN0X2xvYWRlZChwb29sLCByZXFfbWFzayk7XG4rXHRpZiAobGVhc3RfbG9hZGVkX2lycSBcdTAwMjZcdTAwMjZcbitcdCAgICByZWZjb3VudF9yZWFkKFx1MDAyNmxlYXN0X2xvYWRlZF9pcnEtXHUwMDNlcmVmY291bnQucmVmY291bnQpIFx1MDAzYyBwb29sLVx1MDAzZW1pbl90aHJlc2hvbGQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogTm8gSVJRIGJlbG93IHRoZSBtaW5pbXVtIHRocmVzaG9sZCwgdHJ5IHRvIGNyZWF0ZSBhIG5ldyBvbmUuICovXG4rXHRuZXdfaXJxID0genhkaF9pcnFfcG9vbF9yZXF1ZXN0X2lycShwb29sLCByZXFfbWFzayk7XG4rXHRpZiAoSVNfRVJSKG5ld19pcnEpKSB7XG4rXHRcdGlmICghbGVhc3RfbG9hZGVkX2lycSkge1xuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0XHRcdHJldHVybiBuZXdfaXJxO1xuK1x0XHR9XG4rXHRcdC8qIENvdWxkIG5vdCBjcmVhdGUgYSBuZXcgSVJRIGZvciB0aGUgcmVxdWVzdGVkIGFmZmluaXR5LFxuK1x0XHQgKiBzaGFyZSB0aGUgZXhpc3Rpbmcgb25lLlxuK1x0XHQgKi9cbitcdFx0ZGV2X3dhcm4ocG9vbC1cdTAwM2VkZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdCBcImlycSBwb29sICVzIGV4aGF1c3RlZCwgc2hhcmluZyBpcnFzXFxuXCIsXG4rXHRcdFx0IHBvb2wtXHUwMDNlbmFtZSk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bGVhc3RfbG9hZGVkX2lycSA9IG5ld19pcnE7XG4rXHRnb3RvIHVubG9jaztcbitcbitvdXQ6XG4rXHQvKiBIb2xkaW5nIHBvb2wtXHUwMDNlbG9jayBrZWVwcyB0aGUgSVJRIGFsaXZlLCBzbyB0aGlzIGNhbm5vdCBmYWlsLiAqL1xuK1x0enhkaF9pcnFfZ2V0KGxlYXN0X2xvYWRlZF9pcnEpO1xuK1x0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2bGVhc3RfbG9hZGVkX2lycS1cdTAwM2VyZWZjb3VudC5yZWZjb3VudCkgXHUwMDNlIHBvb2wtXHUwMDNlbWF4X3RocmVzaG9sZClcbitcdFx0ZGV2X3dhcm4ocG9vbC1cdTAwM2VkZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdCBcImlycSAldSBvdmVybG9hZGVkLCBwb29sICVzLCAldSByZWZzIG9uIHRoaXMgaXJxXFxuXCIsXG4rXHRcdFx0IHBjaV9pcnFfdmVjdG9yKHBvb2wtXHUwMDNlZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHRcdGxlYXN0X2xvYWRlZF9pcnEtXHUwMDNlaW5kZXgpLFxuK1x0XHRcdCBwb29sLVx1MDAzZW5hbWUsXG4rXHRcdFx0IHJlZmNvdW50X3JlYWQoXHUwMDI2bGVhc3RfbG9hZGVkX2lycS1cdTAwM2VyZWZjb3VudC5yZWZjb3VudCkgL1xuK1x0XHRcdCBaWERIX0VRX1JFRlNfUEVSX0lSUSk7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gbGVhc3RfbG9hZGVkX2lycTtcbit9XG4rXG4rLyogUmVxdWVzdCBhbiBJUlEgZnJvbSB0aGUgcG9vbCwgc3ByZWFkIG92ZXIgdGhlIG9ubGluZSBDUFVzLiAqL1xuK3N0cnVjdCB6eGRoX2lycSAqenhkaF9nZXRfaXJxX29mX3Bvb2woc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpXG4re1xuK1x0Y3B1bWFza192YXJfdCByZXFfbWFzaztcbitcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xuK1xuK1x0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2cmVxX21hc2ssIEdGUF9LRVJORUwpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGNwdW1hc2tfY29weShyZXFfbWFzaywgY3B1X29ubGluZV9tYXNrKTtcbitcbitcdGlycSA9IHp4ZGhfaXJxX2FmZmluaXR5X3JlcXVlc3QocG9vbCwgcmVxX21hc2spO1xuK1xuK1x0ZnJlZV9jcHVtYXNrX3ZhcihyZXFfbWFzayk7XG4rXG4rXHRyZXR1cm4gaXJxO1xuK31cbitcbitzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsXG4rXHRcdFx0XHRcdCAgaW50IHN0YXJ0LCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSxcbitcdFx0XHRcdFx0ICB1MzIgbWluX3RocmVzaG9sZCwgdTMyIG1heF90aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2w7XG4rXHR1MTYgKmlycXNfcGVyX2NwdTtcbitcbitcdGlycXNfcGVyX2NwdSA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCppcnFzX3Blcl9jcHUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghaXJxc19wZXJfY3B1KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHBvb2wgPSBrdnphbGxvY19vYmooKnBvb2wsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwb29sKSB7XG4rXHRcdGtmcmVlKGlycXNfcGVyX2NwdSk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0fVxuK1xuK1x0cG9vbC1cdTAwM2VkZXYgPSB6eGRoX2RldjtcbitcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1ID0gaXJxc19wZXJfY3B1O1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0eGFfaW5pdF9mbGFncyhcdTAwMjZwb29sLVx1MDAzZWlycXMsIFhBX0ZMQUdTX0FMTE9DKTtcbitcdHBvb2wtXHUwMDNleGFfbnVtX2lycXMubWluID0gc3RhcnQ7XG4rXHRwb29sLVx1MDAzZXhhX251bV9pcnFzLm1heCA9IHN0YXJ0ICsgc2l6ZSAtIDE7XG4rXHRzbnByaW50Zihwb29sLVx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcIiVzXCIsIG5hbWUpO1xuK1xuK1x0LyogVGhyZXNob2xkcyBhcmUgZXhwcmVzc2VkIGluIHF1ZXVlIHJlZmVyZW5jZXMsIHR3byBwZXIgSVJRLiAqL1xuK1x0cG9vbC1cdTAwM2VtaW5fdGhyZXNob2xkID0gbWluX3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJRO1xuK1x0cG9vbC1cdTAwM2VtYXhfdGhyZXNob2xkID0gbWF4X3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJRO1xuK1xuK1x0cmV0dXJuIHBvb2w7XG4rfVxuK1xuK3ZvaWQgenhkaF9pcnFfcG9vbF9mcmVlKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKVxuK3tcbitcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbitcdHUzMiBjcHU7XG4rXG4rXHQvKiBPbiBhIGZhc3QgdGVhcmRvd24gdGhlIHRhYmxlIG1heSBzdGlsbCBob2xkIElSUXM7IHJlbGVhc2VcbitcdCAqIHdoYXRldmVyIGlzIGxlZnQuXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaW5kZXgsIGlycSlcbitcdFx0enhkaF9pcnFfcmVsZWFzZShcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXHR4YV9kZXN0cm95KFx1MDAyNnBvb2wtXHUwMDNlaXJxcyk7XG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHUpIHtcbitcdFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4rXHRcdFx0V0FSTl9PTihwb29sLVx1MDAzZWlycXNfcGVyX2NwdVtjcHVdKTtcbitcdFx0a2ZyZWUocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHUpO1xuK1x0fVxuK1xuK1x0a3ZmcmVlKHBvb2wpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg5ZjQ2ZDdiMTFjOWNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmhcbkBAIC0wLDAgKzEsNzIgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBJUlEgcG9vbCBtYW5hZ2VtZW50XG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKi9cbitcbisjaWZuZGVmIF9fWlhESF9JUlFfSF9fXG4rI2RlZmluZSBfX1pYREhfSVJRX0hfX1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdW1hc2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4rXG4rc3RydWN0IHp4ZGhfY29yZV9kZXY7XG4rXG4rLyogTnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgcGVyIHB1cnBvc2UuIFRoZSBsYXlvdXQgb2YgdGhlIHZlY3RvciBzcGFjZVxuKyAqIGlzIGEgaGFyZHdhcmUgaW50ZXJmYWNlOlxuKyAqICAgWzAsIDgpICAgIGFzeW5jIGV2ZW50IHF1ZXVlc1xuKyAqICAgWzgsIDE0KSAgIHJlc2VydmVkIGZvciBSRE1BICh1bnVzZWQgZm9yIG5vdylcbisgKiAgIFsxNCwgNzgpICB2cSByeC90eCBxdWV1ZSBwYWlyc1xuKyAqL1xuKyNkZWZpbmUgWlhESF9BU1lOQ19DSEFOTkVMU19OVU1cdFx0OFxuKyNkZWZpbmUgWlhESF9SRE1BX0NIQU5ORUxTX05VTVx0XHQ2XG4rI2RlZmluZSBaWERIX1ZRU19DSEFOTkVMU19OVU1cdFx0NjRcbitcbisjZGVmaW5lIFpYREhfTUFYX0lSUV9OQU1FXHQxMDBcbisjZGVmaW5lIFpYREhfRVFfUkVGU19QRVJfSVJRXHQyXG4rXG4rLyogUmVmZXJlbmNlIGNvdW50ZWQgaW50ZXJydXB0LiBFdmVudCBxdWV1ZXMgc2hhcmUgYW4gSVJRIHRocm91Z2ggdGhlXG4rICogbm90aWZpZXIgY2hhaW4sIHdoaWNoIGlzIGZpcmVkIGZyb20gaGFyZCBJUlEgY29udGV4dC5cbisgKi9cbitzdHJ1Y3QgenhkaF9pcnEge1xuK1x0c3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIG5oO1xuK1x0Y3B1bWFza192YXJfdCBtYXNrO1x0XHQvKiBpbnRlcnJ1cHQgYWZmaW5pdHkgKi9cbitcdGNoYXIgbmFtZVtaWERIX01BWF9JUlFfTkFNRV07XG4rXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbDtcbitcdHUzMiBpbmRleDtcdFx0XHQvKiB2ZWN0b3IgaW5kZXggKi9cbitcdGludCBpcnFuO1x0XHRcdC8qIExpbnV4IElSUSBudW1iZXIgKi9cbitcdHN0cnVjdCBrcmVmIHJlZmNvdW50O1xuK307XG4rXG4rLyogUG9vbCBvZiB2ZWN0b3JzIGRlZGljYXRlZCB0byBvbmUgcHVycG9zZSwgaWRlbnRpZmllZCBieSB0aGVcbisgKiBbeGFfbnVtX2lycXMubWluLCB4YV9udW1faXJxcy5tYXhdIHZlY3RvciByYW5nZS5cbisgKi9cbitzdHJ1Y3QgenhkaF9pcnFfcG9vbCB7XG4rXHRjaGFyIG5hbWVbWlhESF9NQVhfSVJRX05BTUVdO1xuK1x0c3RydWN0IHhhX2xpbWl0IHhhX251bV9pcnFzO1xuK1x0c3RydWN0IG11dGV4IGxvY2s7XHRcdC8qIHNlcmlhbGl6ZXMgSVJRIGNyZWF0aW9uICovXG4rXHRzdHJ1Y3QgeGFycmF5IGlycXM7XG4rXHR1MzIgbWluX3RocmVzaG9sZDtcdFx0LyogaW4gcXVldWUgcmVmZXJlbmNlcyAqL1xuK1x0dTMyIG1heF90aHJlc2hvbGQ7XHRcdC8qIGluIHF1ZXVlIHJlZmVyZW5jZXMgKi9cbitcdHUxNiAqaXJxc19wZXJfY3B1O1x0XHQvKiBudW1iZXIgb2YgSVJRcyBib3VuZCBwZXIgQ1BVICovXG4rXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqZGV2O1xuK307XG4rXG4rc3RydWN0IHp4ZGhfaXJxX3RhYmxlIHtcbitcdHZvaWQgKnByaXY7XG4rfTtcbitcbitzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfZ2V0X2lycV9vZl9wb29sKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTtcbitpbnQgenhkaF9pcnFfYXR0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbitpbnQgenhkaF9pcnFfZGV0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbit2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKTtcbitzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsXG4rXHRcdFx0XHRcdCAgaW50IHN0YXJ0LCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSxcbitcdFx0XHRcdFx0ICB1MzIgbWluX3RocmVzaG9sZCwgdTMyIG1heF90aHJlc2hvbGQpO1xuK3ZvaWQgenhkaF9pcnFfcG9vbF9mcmVlKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTtcbitcbisjZW5kaWYgLyogX19aWERIX0lSUV9IX18gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA1OjAzOjEzLjgwNjAyOTMyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyOTg0NjgzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2ggZm9yIFN5emthbGxlciBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMga2VybmVsIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgcGF0Y2ggYWRkcyBhIGJ1bmNoIG9mIGZpbGVzIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaWAuICBTcGVjaWZpY2FsbHk6ICBgTWFrZWZpbGVgLCBgZW5fcGYuY2AsIGBlbl9wZi5oYCwgYHp4ZGhfZXEuY2AsIGB6eGRoX2VxLmhgLCBgenhkaF9pcnEuY2AsIGFuZCBgenhkaF9pcnEuaGAuICBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGVzdGFibGlzaCB0aGUgY29udGV4dCBvZiB0aGlzIGRyaXZlci4gIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIHBoeXNpY2FsIFBDSSBkZXZpY2UsIGFuIEFTSUMsIG9yIHNvbWV0aGluZyB0aGF0J3MgZW11bGF0ZWQgb3IgYWNjZXNzaWJsZSBpbiBzb21lIHdheS4gIFRoZSBkZWNpZGluZyBmYWN0b3IgaXMgd2hldGhlciBpdCBpcyBhIHBoeXNpY2FsIGRldmljZSwgYW5kIGlmIHNvLCBob3cgYWNjZXNzaWJsZSBpdCBpcy4gIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgdGhlIEtjb25maWcgb3B0aW9ucyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGF0LiBUaGF0IHdpbGwgZGljdGF0ZSB0aGUgZnV6emluZyBhcHByb2FjaCBhbmQgdGhlIG92ZXJhbGwgdmFsdWUgb2YgZnV6emluZyB0aGlzIHBhcnRpY3VsYXIgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNjQsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoyMy4xMDQ1MDAwNzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzYzMzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJESU5HSEFJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIk1BSU5UQUlORVJTPTMwMTk1PUY6XFx0c291bmQvaGRhL2NvZGVjcy9zZW5hcnl0ZWNoLmNcXG5NQUlOVEFJTkVSUy0zMDE5Ni1cXG5NQUlOVEFJTkVSUzozMDE5NzpaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVJcXG5NQUlOVEFJTkVSUy0zMDE5OC1NOlxcdEp1bnlhbmcgSGFuIFxcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0RJTkdIQUkpICs9IGRpbmdoYWkvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzo2OmNvbmZpZyBESU5HSEFJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy03LSAgICBib29sIFxcXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc6MjE6aWYgRElOR0hBSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzoyMzpjb25maWcgRElOR0hBSV9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjQtICAgIHRyaXN0YXRlIFxcXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzozNDplbmRpZiAjIERJTkdIQUlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRElOR0hBSV9QRikgKz0gZGluZ2hhaTEwZS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUtNy1kaW5naGFpMTBlLXkgOj0gZW5fcGYubyB6eGRoX2lycS5vIHp4ZGhfZXEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoyNC43MTIxMzk2OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODI3NjgyOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgWlRFIERpbmdoYWkgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdgLiBSaWdodCBhd2F5LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gZGVmaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgbmV0d29yayBkcml2ZXIgc3BlY2lmaWMgdG8gWlRFJ3MgRGluZ2hhaSBwbGF0Zm9ybS4gR2l2ZW4gdGhlIHBhdGgsIEknbSBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IG1vZHVsZSBlbmFibGUgZmxhZ3MsIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgRE1BIHNldHRpbmdzIG9yIFBIWSBjb25maWd1cmF0aW9ucywgcGVyaGFwcyBldmVuIHBsYXRmb3JtIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgS2NvbmZpZyBhbmQgdGhlIG90aGVyIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGRyaXZlcnMgb3Igc3Vic3lzdGVtcz8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBpbmNsdWRlcyBiYXNlZCBvbiBzcGVjaWZpYyBib2FyZCByZXZpc2lvbnMgb3IgaGFyZHdhcmUgcmV2aXNpb25zIHdpdGhpbiB0aGUgRGluZ2hhaSBmYW1pbHk/IEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYGNvbmZpZyBaVEVfRElOR0hBSWAgYXMgYSB0b3AtbGV2ZWwgc3ltYm9sLCBhbmQgdGhlbiBuZXN0ZWQgb3B0aW9ucyBkZXRhaWxpbmcgdGhpbmdzIGxpa2UgZGlmZmVyZW50IE1BQyBhZGRyZXNzZXMsIHNwZWNpZmljIFBIWSBzdXBwb3J0IChsaWtlIGBDT05GSUdfUEhZX1hYWFhgKSwgYW55IGRldmljZS10cmVlLXJlbGF0ZWQgc2V0dGluZ3MsIG9yIGludGVycnVwdCBjb25maWd1cmF0aW9ucy4gQW55IHVzZSBvZiBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIHB1bGwgaW4gb3RoZXIgc3VwcG9ydGluZyBtb2R1bGVzIHdpbGwgYmUgaW1wb3J0YW50IHRvIG5vdGUuIEFuZCBvZiBjb3Vyc2UsIEknbGwgYmUgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gWlRFJ3MgZGVzaWduIGNob2ljZXMgb3IgY3VzdG9taXphdGlvbnMuIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgc2NhbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUga2V5IGNvbmZpZ3VyYWJsZSBlbGVtZW50cyB0aGF0IGNvbnRyb2wgdGhpcyBkcml2ZXIncyBiZWhhdmlvciBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgY2FuIGJlIGVuYWJsZWQuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHdoYXQgcGFyYW1ldGVycyBjYW4gYmUgc2V0IHZpYSB0aGlzIGNvbmZpZyBmaWxlIGFuZCBob3cgdGhleSBpbXBhY3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGV0aGVybmV0IGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoyNy41Mzk4MjUzMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIERJTkdIQUlcXG4gICA3OlxcdCAgICBib29sIFxcXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuICAgODpcXHQgICAgZGVwZW5kcyBvbiBQQ0lcXG4gICA5OlxcdCAgICBzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDEwOlxcdCAgICBoZWxwXFxuICAxMTpcXHQgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHQgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHNcXG4gIDE0OlxcdCAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZFxcbiAgMTU6XFx0ICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHQgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LlxcbiAgMTg6XFx0XFxuICAxOTpcXHQgICAgICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRpZiBESU5HSEFJXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBESU5HSEFJX1BGXFxuICAyNDpcXHQgICAgdHJpc3RhdGUgXFxcIlpURSBEaW5nSGFpIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgZHJpdmVyXFxcIlxcbiAgMjU6XFx0ICAgIGhlbHBcXG4gIDI2OlxcdCAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0XFxuICAyNzpcXHQgICAgICBhZGFwdGVycyAoUEYpLlxcbiAgMjg6XFx0XFxuICAyOTpcXHQgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAzMDpcXHQgICAgICB3aWxsIGJlIG5hbWVkIGRpbmdoYWkxMGUuXFxuICAzMTpcXHRcXG4gIDMyOlxcdCAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzMzpcXHRcXG4gIDM0OlxcdGVuZGlmICMgRElOR0hBSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoyNy41Mzk4ODMxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMzQwNDI2NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgV29ydGhGdXp6aW5nIGZvciB0aGUgWlRFIERpbmdIYWkgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNvbnNpZGVyIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgbW9kaWZpZWQgY29kZSBmYWxscyBpbnRvIGNlcnRhaW4gbmVnYXRpdmUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIuIExvb2tpbmcgYXQgdGhhdCBzZWN0aW9uLCBJIG5lZWQgdG8gc2VlIGlmIHRoZSBjaGFuZ2VzIHRvdWNoIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIFpURSBEaW5nSGFpIGZhbGxzIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBUaGUgY3JpdGVyaWEgc3BlY2lmeSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZS4gQmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhdGNoIGFuZCBteSBrbm93bGVkZ2UsIGl0IGxvb2tzIGxpa2U6XG5cbiogICBUaGUgZHJpdmVyIHVzZXMgUENJIHZlbmRvciBJRCBgMHgxY2YyYCAoWlRFIENvcnBvcmF0aW9uKSwgd2hpY2ggaXMgYSBjbGVhciBpbmRpY2F0aW9uIG9mIGEgdmVuZG9yLXNwZWNpZmljIGRldmljZS5cbiogICBJdCdzIHJlZ2lzdGVyZWQgYXMgYSBQQ0kgZHJpdmVyIHZpYSBgbW9kdWxlX3BjaV9kcml2ZXJgLCBjb21tdW5pY2F0aW5nIHZpYSBCQVIgcmVnaXN0ZXJzLCBNU0ktWCBpbnRlcnJ1cHRzLCBhbmQgbGlrZWx5IHdpdGggb24tY2hpcCBmaXJtd2FyZS5cbiogICBDcnVjaWFsbHksIHRoZSBwcm9tcHQgc3RhdGVzIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgWlRFIERpbmdIYWkgUENJIE5JQ3MuXG5cblRoZXJlZm9yZSwgKnByaW1hIGZhY2llKiwgdGhpcyBaVEUgRGluZ0hhaSBkcml2ZXIgYXBwZWFycyB0byBiZSBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgU21hcnROSUMgLyBFdGhlcm5ldCBjb250cm9sbGVyIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdW5jdGlvbi4gSXQgc2F0aXNmaWVzIHRoZSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNyaXRlcmlhLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHZpcnR1YWwgYnVzLCBzb2Z0d2FyZSBtb2NrLCBvciBzdGFuZGFyZCB2aXJ0dWFsIGRldmljZSB0aGF0IGNvdWxkIGluc3RhbnRpYXRlIG9yIHJlYWNoIHRoaXMgZHJpdmVyIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBlbl9wZi5jYCwgYnV0IGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIEknbSBjb25maWRlbnQgdGhhdCB0aGUgYW5zd2VyIGlzIG5vLiBVbmxlc3MgSSBmaW5kIHNvbWV0aGluZyB1bmV4cGVjdGVkLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgc3RhbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk2NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA1OjAzOjM5Ljg4MDMxMjYxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDgzNDE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyfG1vZHVsZV9wY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM9NjY2PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB6eGRoX3BmX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNjczLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Njc0Om1vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDU6MDM6MzkuOTMxMTUwNDk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5ODAwMDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUENJIFRhYmxlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgenhkaF9wZl9wY2lfdGFibGVgIHdpdGhpbiBgZW5fcGYuY2AuIFRoYXQgdGFibGUgaXMgdXN1YWxseSB3aGVyZSBJIGZpbmQgdGhlIGNvcmUgbWFwcGluZ3MgYW5kIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gUENJIGRldmljZXMgd2l0aGluIHRoZSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGNvbnRleHQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSByZWxldmFudCBlbnRyaWVzIHRoYXQgZGVmaW5lIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaW50ZXJydXB0cyBhcmUgcm91dGVkLCBkZXZpY2UgSURzIGFuZCBtYXliZSBldmVuIERNQSBzZXR0aW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFBDSSBkZXZpY2VzIGFyZSBiZWluZyBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCBoZXJlLiBMZXQncyBzZWUgaWYgdGhpcyB0YWJsZSBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdoYXRldmVyIEknbSB0cm91Ymxlc2hvb3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTAwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDU6MDM6NDMuMzI5MTU1NDcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0I2luY2x1ZGUgXFxcImVuX3BmLmhcXFwiXFxuICAxNjpcXHQjaW5jbHVkZSBcXFwiZGhfcXVldWUuaFxcXCJcXG4gIDE3OlxcdFxcbiAgMTg6XFx0TU9EVUxFX0FVVEhPUihcXFwiSnVueWFuZyBIYW4gXFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cXHUwMDNlXFxcIik7XFxuICAxOTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlpURSBEaW5nSGFpIHNlcmllcyBFdGhlcm5ldCBkcml2ZXJcXFwiKTtcXG4gIDIwOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyB6eGRoX3BmX2Rldmxpbmtfb3BzID0ge307XFxuICAyMzpcXHRcXG4gIDI0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xcbiAgMjU6XFx0XFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcXG4gIDI2OlxcdFxcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXFxuICAyNzpcXHRcXHR7IH1cXG4gIDI4OlxcdH07XFxuICAyOTpcXHRcXG4gIDMwOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XFxuICAzMTpcXHRcXG4gIDMyOlxcdHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSB7XFxuICAzMzpcXHRcXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqYXN5bmNfcG9vbDtcXG4gIDM0OlxcdH07XFxuICAzNTpcXHRcXG4gIDM2OlxcdC8qIElSUSBjb21wYWN0aW9uIHRocmVzaG9sZHMgb2YgdGhlIGFzeW5jIHBvb2wsIGluIG51bWJlciBvZiBxdWV1ZXMuICovXFxuICAzNzpcXHQjZGVmaW5lIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QXFx0MFxcbiAgMzg6XFx0I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUFxcdDdcXG4gIDM5OlxcdFxcbiAgNDA6XFx0dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRpZiAocHJpdilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDU6MDM6NDMuMzI5MjQ3NDgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MDA3NDQ1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2AuIExvb2tpbmcgYXQgdGhlIGZpbGVuYW1lcywgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIuIE15IGltbWVkaWF0ZSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBmb3IgYSBzcGVjaWZpYyBQQ0llIE5JQywgYW5kIGZyb20gZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXNuJ3Qgc29tZXRoaW5nIHRoYXQncyBlbXVsYXRlZCBpbiB5b3VyIHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzIGxpa2UgUUVNVSBvciBHQ0UuXG5cbkdpdmVuIHRoYXQsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGlzIGNvZGUgaXMgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogZHVyaW5nIG91ciB0eXBpY2FsIGZ1enppbmcgcHJvY2Vzc2VzLiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoYXQgaGFyZCBmYWN0LCB0aGVyZSBpcyBubyB2YWx1ZSBpbiBtYWtpbmcgYW55IGZ1enppbmcgYWRqdXN0bWVudHMgaGVyZS4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBUaGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGZ1enppbmcgc3ltYm9scyBvciBlbmFibGluZyBjb25maWd1cmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgcGF0Y2gsIGFzIGl0IGlzLiBUaGVyZWZvcmUsIGJvdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIHNldCB0byBlbXB0eSBhcnJheXMuIEkndmUgZ290IG15IHJlYXNvbmluZyBsYWlkIG91dCBwcmV0dHkgY2xlYXJseTogdGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoaXMgRGluZ0hhaSBkcml2ZXIgZm9yIHNwZWNpZmljIFBDSWUgaGFyZHdhcmUgdGhhdCBpc24ndCBhY2Nlc3NpYmxlIGluIGZ1enppbmcuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjE2LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA1OjAzOjQ4LjIyOTk5NDQzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpLyksIGFkZGluZyBJUlEgcG9vbCBtYW5hZ2VtZW50IGFuZCBldmVudCBxdWV1ZSBwbHVtYmluZyBmb3IgWlRFIERpbmdIYWkgUENJZSBhZGFwdGVycyAoUENJIHZlbmRvciBJRCAweDFjZjIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS8pLCBhZGRpbmcgSVJRIHBvb2wgbWFuYWdlbWVudCBhbmQgZXZlbnQgcXVldWUgcGx1bWJpbmcgZm9yIFpURSBEaW5nSGFpIFBDSWUgYWRhcHRlcnMgKFBDSSB2ZW5kb3IgSUQgMHgxY2YyKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDU6MDM6NDguMjMwMDE5MjAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9h7k6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 04:15:29 +0000 UTC FinishedAt: 2026-09-11 05:03:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvKSwgYWRkaW5nIElSUSBwb29sIG1hbmFnZW1lbnQgYW5kIGV2ZW50IHF1ZXVlIHBsdW1iaW5nIGZvciBaVEUgRGluZ0hhaSBQQ0llIGFkYXB0ZXJzIChQQ0kgdmVuZG9yIElEIDB4MWNmMikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDU6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZTNlZjQ5NmE5MzVkNGZjZGMzNzQxMGI5NzBlNDczZDhiNmI5YzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDU6MDM6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuaW5kZXggZTJmNGRhMzNkZjU5My4uMmRjNmQ2OGNjMGUxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuQEAgLTQsNCAmIzQzOzQsNCBAQFxuICNcbiBcbiBvYmotJChDT05GSUdfRElOR0hBSV9QRikgJiM0Mzs9IGRpbmdoYWkxMGUub1xuLWRpbmdoYWkxMGUteSA6PSBlbl9wZi5vXG4mIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vIHp4ZGhfaXJxLm8genhkaF9lcS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcbmluZGV4IDg2ZDQzNzQwODgyMDMuLmZlMzkyNGI4OTBkMTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtNiw2ICYjNDM7NiwxMCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZW5fcGYuaFwmIzM0O1xuQEAgLTI1LDYgJiM0MzsyOSwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcbiBcbiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpO1xuIFxuJiM0MztzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUge1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV9wb29sICphc3luY19wb29sO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogSVJRIGNvbXBhY3Rpb24gdGhyZXNob2xkcyBvZiB0aGUgYXN5bmMgcG9vbCwgaW4gbnVtYmVyIG9mIHF1ZXVlcy4gKi9cbiYjNDM7I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NSU5fQ09NUFx0MFxuJiM0MzsjZGVmaW5lIFpYREhfUEZfQVNZTkNfSVJRX01BWF9DT01QXHQ3XG4mIzQzO1xuIHZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG5AQCAtMzY5LDYgJiM0MzszODEsMTc3IEBAIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyogUmVhZCB0aGUgZmlybXdhcmUgdmVyc2lvbiBibG9jayBhbmQgdmVyaWZ5IHRoZSBkcml2ZXIvZmlybXdhcmVcbiYjNDM7ICogdmVyc2lvbiBjb250cmFjdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgenhkaF9wZl9md19jb21wYXRfY2hlY2soc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCB6eGRoX2Z3X2NvbXBhdCBfX2lvbWVtICpjb21wYXQ7XG4mIzQzO1x0c3RydWN0IHp4ZGhfZndfY29tcGF0ICpmd19jb21wYXQ7XG4mIzQzO1x0dTMyIGVyYXNlZDtcbiYjNDM7XG4mIzQzO1x0ZndfY29tcGF0ID0gXHUwMDI2cGZfZGV2LVx1MDAzZWZ3X2NvbXBhdDtcbiYjNDM7XHRjb21wYXQgPSBwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSAmIzQzOyBaWERIX0ZXX0NPTVBBVF9PRkZTRVQ7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSByZWdpb24gcmVhZHMgYXMgYWxsIG9uZXMgdW50aWwgdGhlIGZpcm13YXJlIHBvcHVsYXRlcyBpdCBhdFxuJiM0MztcdCAqIHRoZSBlbmQgb2YgaXRzIGJvb3Q7IGFsbG93IHVwIHRvIDIwMCBzIGZvciBhIGNvbGQgYm9vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZWFkeF9wb2xsX3RpbWVvdXQoaW9yZWFkMzIsIGNvbXBhdCwgZXJhc2VkLCBlcmFzZWQgIT0gMHhmZmZmZmZmZlUsXG4mIzQzO1x0XHRcdCAgIFVTRUNfUEVSX1NFQyxcbiYjNDM7XHRcdFx0ICAgWlhESF9GV19DT01QQVRfVElNRU9VVF9TRUMgKiBVU0VDX1BFUl9TRUMpO1xuJiM0MztcbiYjNDM7XHQvKiBGaXJtd2FyZSBwcmVkYXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcmVnaW9uIGtlZXBzIHRoZSBlcmFzZWRcbiYjNDM7XHQgKiBwYXR0ZXJuLCB3aGljaCBmYWlscyB0aGUgbW9kdWxlIGlkIGNoZWNrIGJlbG93IGFuZCBkZWZlcnMgdGhlXG4mIzQzO1x0ICogZGVjaXNpb24gdG8gdGhlIHJlYWRpbmVzcyB3YWl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQgPSBpb3JlYWQ4KFx1MDAyNmNvbXBhdC1cdTAwM2Vtb2R1bGVfaWQpO1xuJiM0MztcdGZ3X2NvbXBhdC1cdTAwM2VtYWpvciA9IGlvcmVhZDgoXHUwMDI2Y29tcGF0LVx1MDAzZW1ham9yKTtcbiYjNDM7XHRmd19jb21wYXQtXHUwMDNlZndfbWlub3IgPSBpb3JlYWQ4KFx1MDAyNmNvbXBhdC1cdTAwM2Vmd19taW5vcik7XG4mIzQzO1x0ZndfY29tcGF0LVx1MDAzZWRydl9taW5vciA9IGlvcmVhZDgoXHUwMDI2Y29tcGF0LVx1MDAzZWRydl9taW5vcik7XG4mIzQzO1x0ZndfY29tcGF0LVx1MDAzZXBhdGNoID0gaW9yZWFkMTYoXHUwMDI2Y29tcGF0LVx1MDAzZXBhdGNoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQgIT0gWlhESF9NT0RVTEVfSUQpIHtcbiYjNDM7XHRcdGRldl9pbmZvKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0IFwmIzM0O3Vua25vd24gbW9kdWxlIGlkICV1LCBza2lwIGZ3IGNvbXBhdCBjaGVja1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZndfY29tcGF0LVx1MDAzZW1ham9yICE9IFpYREhfTUFKT1IpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtkcml2ZXIgbWFqb3IgJXUgaW5jb21wYXRpYmxlIHdpdGggZmlybXdhcmUgbWFqb3IgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFpYREhfTUFKT1IsIGZ3X2NvbXBhdC1cdTAwM2VtYWpvcik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmd19jb21wYXQtXHUwMDNlZndfbWlub3IgXHUwMDNjIFpYREhfRldfTUlOT1IpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtmaXJtd2FyZSBmd19taW5vciAlZCBvbGRlciB0aGFuIHJlcXVpcmVkICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRmd19jb21wYXQtXHUwMDNlZndfbWlub3IsIFpYREhfRldfTUlOT1IpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZndfY29tcGF0LVx1MDAzZWRydl9taW5vciBcdTAwM2UgWlhESF9EUlZfTUlOT1IpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtkcml2ZXIgZHJ2X21pbm9yICV1IG9sZGVyIHRoYW4gcmVxdWlyZWQgYnkgZmlybXdhcmUgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFpYREhfRFJWX01JTk9SLCBmd19jb21wYXQtXHUwMDNlZHJ2X21pbm9yKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFdhaXQgZm9yIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIG9mIHRoZSBmaXJtd2FyZSB0byBmaW5pc2hcbiYjNDM7ICogYm9vdGluZywgc28gdGhhdCBsYXRlciBwcm9iZSBzdGVwcyBjYW4gdGFsayB0byBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgenhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIF9faW9tZW0gKmhiO1xuJiM0MztcdHU4IGhlYWx0aF92ZXJzaW9uO1xuJiM0MztcdHU4IHBvd2VyX29uO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGhiID0gcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gJiM0MzsgWlhESF9SSVNDVl9IQl9PRkZTRVQ7XG4mIzQzO1x0aGVhbHRoX3ZlcnNpb24gPSBpb3JlYWQ4KFx1MDAyNmhiLVx1MDAzZWhlYWx0aF92ZXJzaW9uKTtcbiYjNDM7XG4mIzQzO1x0LyogRmlybXdhcmUgcHJlZGF0aW5nIHRoZSBoZWFsdGggYnVmZmVyIHByb3RvY29sIGhhcyBuZWl0aGVyIGFcbiYjNDM7XHQgKiB2YWxpZCB2ZXJzaW9uIGJ5dGUgbm9yIGEgcG93ZXItb24gZmxhZyB0byB3YWl0IGZvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaGVhbHRoX3ZlcnNpb24gIT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGZfZGV2LVx1MDAzZWZ3X2NvbXBhdC5wYXRjaCBcdTAwM2MgWlhESF9IUElSUV9QQVRDSClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSByZWFkeF9wb2xsX3RpbWVvdXQoaW9yZWFkOCwgXHUwMDI2aGItXHUwMDNlcmlzY3ZfcG93ZXJfb24sIHBvd2VyX29uLFxuJiM0MztcdFx0XHRcdCBwb3dlcl9vbiA9PSAxLCBVU0VDX1BFUl9TRUMsXG4mIzQzO1x0XHRcdFx0IFpYREhfUklTQ1ZfUkVBRFlfVElNRU9VVF9TRUMgKiBVU0VDX1BFUl9TRUMpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmlzY3YgcG93ZXIgb25cXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfaXJxX3Bvb2xzX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUgPSB6eGRoX2Rldi1cdTAwM2VpcnFfdGFibGUucHJpdjtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbDtcbiYjNDM7XG4mIzQzO1x0cG9vbCA9IHp4ZGhfaXJxX3Bvb2xfYWxsb2MoenhkaF9kZXYsIDAsIFpYREhfQVNZTkNfQ0hBTk5FTFNfTlVNLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O3p4ZGhfcGZfYXN5bmNcJiMzNDssIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QLFxuJiM0MztcdFx0XHRcdCAgIFpYREhfUEZfQVNZTkNfSVJRX01BWF9DT01QKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBvb2wpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocG9vbCk7XG4mIzQzO1xuJiM0MztcdHBmX2lycV90YWJsZS1cdTAwM2Vhc3luY19wb29sID0gcG9vbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfaXJxX3Bvb2xzX2Rlc3Ryb3koc3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAocGZfaXJxX3RhYmxlLVx1MDAzZWFzeW5jX3Bvb2wpXG4mIzQzO1x0XHR6eGRoX2lycV9wb29sX2ZyZWUocGZfaXJxX3RhYmxlLVx1MDAzZWFzeW5jX3Bvb2wpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9pcnFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnFfdGFibGUgKnRhYmxlID0gXHUwMDI2enhkaF9kZXYtXHUwMDNlaXJxX3RhYmxlO1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcHJpdjtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGt2emFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0dGFibGUtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdGludCB0b3RhbF92ZWMgPSBaWERIX1ZRU19DSEFOTkVMU19OVU0gJiM0MzsgWlhESF9BU1lOQ19DSEFOTkVMU19OVU0gJiM0MztcbiYjNDM7XHRcdFx0WlhESF9SRE1BX0NIQU5ORUxTX05VTTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHR0b3RhbF92ZWMgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgdG90YWxfdmVjLCB0b3RhbF92ZWMsXG4mIzQzO1x0XHRcdFx0XHQgIFBDSV9JUlFfTVNJWCk7XG4mIzQzO1x0aWYgKHRvdGFsX3ZlYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BjaV9hbGxvY19pcnFfdmVjdG9ycyBmYWlsZWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR0b3RhbF92ZWMpO1xuJiM0MztcdFx0cmV0dXJuIHRvdGFsX3ZlYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IHp4ZGhfcGZfaXJxX3Bvb2xzX2luaXQoenhkaF9kZXYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2lycV9wb29sc19pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVycik7XG4mIzQzO1x0XHRwY2lfZnJlZV9pcnFfdmVjdG9ycyh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9pcnFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnFfdGFibGUgKnRhYmxlID0gXHUwMDI2enhkaF9kZXYtXHUwMDNlaXJxX3RhYmxlO1xuJiM0MztcbiYjNDM7XHRpZiAodGFibGUtXHUwMDNlcHJpdilcbiYjNDM7XHRcdHp4ZGhfcGZfaXJxX3Bvb2xzX2Rlc3Ryb3kodGFibGUtXHUwMDNlcHJpdik7XG4mIzQzO1x0a3ZmcmVlKHRhYmxlLVx1MDAzZXByaXYpO1xuJiM0MztcdHRhYmxlLVx1MDAzZXByaXYgPSBOVUxMO1xuJiM0MztcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBGZXRjaCBhIHZlY3RvciBmcm9tIHRoZSBhc3luYyBwb29sIGZvciBvbmUgYXN5bmMgZXZlbnQgcXVldWUuICovXG4mIzQzO3N0cnVjdCB6eGRoX2lycSAqenhkaF9wZl9hc3luY19pcnFfcmVxdWVzdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnBmX2lycV90YWJsZSA9IHp4ZGhfZGV2LVx1MDAzZWlycV90YWJsZS5wcml2O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4genhkaF9nZXRfaXJxX29mX3Bvb2wocGZfaXJxX3RhYmxlLVx1MDAzZWFzeW5jX3Bvb2wpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgenhkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIHtcbiBcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcbkBAIC00MDUsMTAgJiM0Mzs1ODgsNTAgQEAgc3RhdGljIGludCB6eGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRcdGdvdG8gZXJyX2NmZ19pbml0O1xuIFx0fVxuIFxuJiM0MztcdHJldCA9IHp4ZGhfcGZfZndfY29tcGF0X2NoZWNrKHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX2Z3X2NvbXBhdF9jaGVjayBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX3dhaXRfcmlzY3ZfcmVhZHkoenhkaF9kZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX2lycV90YWJsZV9pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9jZmdfaW5pdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZSh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9pcnFfdGFibGVfY3JlYXRlIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRnb3RvIGVycl9pcnFfdGFibGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2luaXQoenhkaF9kZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfZXFfdGFibGVfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfZXFfdGFibGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZSh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9lcV90YWJsZV9jcmVhdGUgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX2VxX3RhYmxlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycl9lcV90YWJsZTpcbiYjNDM7XHR6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuJiM0MztlcnJfaXJxX3RhYmxlOlxuJiM0MztcdHp4ZGhfcGZfaXJxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuIGVycl9jZmdfaW5pdDpcbiBcdHp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTtcbiBlcnJfcGNpX2luaXQ6XG5AQCAtNDI0LDYgJiM0Mzs2NDcsOCBAQCBzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTtcbiBcbiBcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbiYjNDM7XHR6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuJiM0MztcdHp4ZGhfcGZfaXJxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuIFx0enhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdCh6eGRoX2Rldik7XG4gXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4gXHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaFxuaW5kZXggNzM3M2RlZThkMWE5Zi4uODk0YTA1YTA5ZDk2MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC05LDYgJiM0Mzs5LDkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3p4ZGhfZXEuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt6eGRoX2lycS5oXCYjMzQ7XG4mIzQzO1xuICNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuICNkZWZpbmUgWlhESF9QRl9ERVZJQ0VfSURcdDB4ODA0MFxuICNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSURcdDB4ODA0MVxuQEAgLTI5LDEwICYjNDM7MzIsNTcgQEBcbiAjZGVmaW5lIFpYREhfUEZfQUxJR04yXHRcdFx0MlxuICNkZWZpbmUgWlhESF9QRl9NQVBfTUlOTEVOMlx0XHQyXG4gXG4mIzQzOy8qIEZpeGVkIG9mZnNldHMgb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSByZWdpb25zIHdpdGhpbiBCQVIgMC4gKi9cbiYjNDM7I2RlZmluZSBaWERIX1JJU0NWX0hCX09GRlNFVFx0MHg1MzAwXG4mIzQzOyNkZWZpbmUgWlhESF9GV19DT01QQVRfT0ZGU0VUXHQweDU0MDBcbiYjNDM7XG4mIzQzOy8qIERyaXZlci9maXJtd2FyZSB2ZXJzaW9uIGNvbnRyYWN0LiBUaGUgZmlybXdhcmUgcHVibGlzaGVzIGl0cyBzaWRlIG9mXG4mIzQzOyAqIHRoZSBjb250cmFjdCBpbiB0aGUgcmVnaW9uIGF0IFpYREhfRldfQ09NUEFUX09GRlNFVC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWlhESF9NT0RVTEVfSURcdFx0MVxuJiM0MzsjZGVmaW5lIFpYREhfTUFKT1JcdFx0MVxuJiM0MzsjZGVmaW5lIFpYREhfRldfTUlOT1JcdFx0MFxuJiM0MzsjZGVmaW5lIFpYREhfRFJWX01JTk9SXHRcdDBcbiYjNDM7LyogRmlybXdhcmUgcGF0Y2ggbGV2ZWwgdGhhdCBpbnRyb2R1Y2VkIHRoZSBoZWFsdGggYnVmZmVyIHByb3RvY29sLiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfSFBJUlFfUEFUQ0hcdDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9GV19DT01QQVRfVElNRU9VVF9TRUNcdDIwMFxuJiM0MzsjZGVmaW5lIFpYREhfUklTQ1ZfUkVBRFlfVElNRU9VVF9TRUNcdDQwXG4mIzQzO1xuJiM0MzsvKiBGaXJtd2FyZSB2ZXJzaW9uIGNvbXBhdGliaWxpdHkgYmxvY2sgYXQgWlhESF9GV19DT01QQVRfT0ZGU0VULlxuJiM0MzsgKiBGaWVsZHMgYXJlIHJlYWQgdGhyb3VnaCBpb3JlYWQqKCksIHdoaWNoIGNvbnZlcnRzIGZyb20gbGl0dGxlLWVuZGlhbi5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6eGRoX2Z3X2NvbXBhdCB7XG4mIzQzO1x0dTggbW9kdWxlX2lkO1xuJiM0MztcdHU4IG1ham9yO1xuJiM0MztcdHM4IGZ3X21pbm9yO1xuJiM0MztcdHU4IGRydl9taW5vcjtcbiYjNDM7XHR1MTYgcGF0Y2g7XG4mIzQzO1x0dTE2IHJzdjtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qIEhlYWx0aCBidWZmZXIgYXQgWlhESF9SSVNDVl9IQl9PRkZTRVQsIG1haW50YWluZWQgYnkgdGhlIFJJU0MtVlxuJiM0MzsgKiBtYW5hZ2VtZW50IGNvcmUgb2YgdGhlIGZpcm13YXJlLiBGaWVsZHMgYXJlIHJlYWQgdGhyb3VnaCBpb3JlYWQqKCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIHtcbiYjNDM7XHR1MzIgc3luZDtcdFx0LyogQml0bWFzayBvZiBhY3RpdmUgc3luZHJvbWUgZmxhZ3MuICovXG4mIzQzO1x0dTMyIGhlYWx0aF9jb3VudGVyO1x0LyogSW5jcmVtZW50ZWQgaGVhcnRiZWF0IGNvdW50ZXIuICovXG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHJmcjtcbiYjNDM7XHR1OCBmd19leGNlcHRpb247XG4mIzQzO1x0dTggcmlzY3ZfcG93ZXJfb247XHQvKiBTZXQgdG8gMSBvbmNlIHRoZSBjb3JlIGZpbmlzaGVkIGJvb3RpbmcuICovXG4mIzQzO1x0dTggZndfdmVyc2lvblszMl07XG4mIzQzO1x0dTggcGZfc3RhdHVzWzVdO1xuJiM0MztcdHU4IGhlYWx0aF92ZXJzaW9uO1x0LyogSGVhbHRoIGJ1ZmZlciBwcm90b2NvbCB2ZXJzaW9uLiAqL1xuJiM0MztcdHU4IHJzdjFbMzBdO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiBzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbiBcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV90YWJsZSBpcnFfdGFibGU7XG4mIzQzO1x0c3RydWN0IHp4ZGhfZXFfdGFibGUgZXFfdGFibGU7XG4gXHR2b2lkICpwcml2O1xuIH07XG4gXG5AQCAtNTQsNiAmIzQzOzEwNCw3IEBAIHN0cnVjdCB6eGRoX3BmX2RldiB7XG4gXHRzMzIgbW9kZXJuX2JhcnM7XG4gXHR2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07XG4gXHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xuJiM0MztcdHN0cnVjdCB6eGRoX2Z3X2NvbXBhdCBmd19jb21wYXQ7XG4gfTtcbiBcbiB2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTtcbkBAIC03Miw0ICYjNDM7MTIzLDEwIEBAIGludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuIHZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuIFxuJiM0MzsvKiBQRiBJUlEgdGFibGUgKGVuX3BmLmMpICovXG4mIzQzO2ludCB6eGRoX3BmX2lycV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO2ludCB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO3N0cnVjdCB6eGRoX2lycSAqenhkaF9wZl9hc3luY19pcnFfcmVxdWVzdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztcbiAjZW5kaWYgLyogX19aWERIX0VOX1BGX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmYxZDdlZWVjMWFlNGVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuY1xuQEAgLTAsMCAmIzQzOzEsMTQ1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gZXZlbnQgcXVldWUgcGx1bWJpbmdcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogQXN5bmMgZXZlbnQgcXVldWVzIGFyZSB0aGUgZGVsaXZlcnkgcGF0aCBmb3IgZmlybXdhcmUgbm90aWZpY2F0aW9uczpcbiYjNDM7ICogYSBxdWV1ZSBvd25zIG9uZSBNU0ktWCB2ZWN0b3Igb2YgdGhlIGFzeW5jIHBvb2wgYW5kIGZhbnMgaW50ZXJydXB0c1xuJiM0MzsgKiBvdXQgdG8gdGhlIHBlci1ldmVudC10eXBlIG5vdGlmaWVyIGNoYWlucyBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGUuXG4mIzQzOyAqIFRoZSBCQVIgbWVzc2FnZSBjaGFubmVsIGhhbmRzaGFrZSB0aGF0IHRlbGxzIHRoZSBmaXJtd2FyZSB3aGljaFxuJiM0MzsgKiB2ZWN0b3JzIHRvIHNpZ25hbCBjb21lcyB3aXRoIHRoZSBCQVIgbWVzc2FnZSBzdWJzeXN0ZW0gaW4gYSBsYXRlclxuJiM0MzsgKiBzZXJpZXM7IHRoZSBQRiBzaWRlIHdpcmVkIGhlcmUgaXMgbGl2ZSBhcyBzb29uIGFzIHRoYXQgY2hhbm5lbCBpc1xuJiM0MzsgKiBlbmFibGVkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZW5fcGYuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt6eGRoX2VxLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7enhkaF9pcnEuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyogUEYgc2lkZSBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGU6IG9uZSBhc3luYyBFUSBmZWQgYnkgdGhlIFJJU0MtVlxuJiM0MzsgKiBtYW5hZ2VtZW50IGNvcmUuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfZXFfYXN5bmMgcmlzY3ZfZXE7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBGZXRjaCB0aGUgZXZlbnRfaWQgdGhlIFJJU0MtViBjb3JlIHBvc3RlZCBpbiB0aGUgUEYgcmVjZWl2ZVxuJiM0MzsgKiBzdWItY2hhbm5lbCBvZiB0aGUgQkFSIG1lc3NhZ2UgYXJlYS4gVGhlIGZpZWxkIGxpdmVzIGF0IGJ5dGUgb2Zmc2V0XG4mIzQzOyAqIDIgb2YgdGhlIDEyLWJ5dGUgbWVzc2FnZSBoZWFkZXIsIHNvIGEgc2luZ2xlIDMyLWJpdCByZWFkIG9mIHRoZVxuJiM0MzsgKiBzdWItY2hhbm5lbCBzdGFydCBjb3ZlcnMgaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdTE2IHp4ZGhfZXFfZXZlbnRfaWRfZ2V0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnN1YmNoYW47XG4mIzQzO1xuJiM0MztcdHN1YmNoYW4gPSBwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSAmIzQzOyBaWERIX0JBUl9NU0dfU1VCQ0hBTl9SRUNWO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9yZWFkMzIoc3ViY2hhbikgXHUwMDNlXHUwMDNlIDE2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUgenhkaF9lcV9ldmVudF90eXBlX2dldCh1MTYgZXZlbnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZXZlbnRfaWQgPT0gWlhESF9NU0dfTU9EVUxFX1JJU0NfUkVBRFkpXG4mIzQzO1x0XHRyZXR1cm4gWlhESF9FUV9FVkVOVF9UWVBFX1JJU0NWX1JFQURZO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IHRoZSBSSVNDLVYgcmVhZHkgbm90aWZpY2F0aW9uIGlzIGRpc3BhdGNoZWQgaW4gdGhpc1xuJiM0MztcdCAqIHNlcmllczsgdGhlIHJlbWFpbmluZyBmaXJtd2FyZSBldmVudHMgYXJyaXZlIHdpdGggdGhlIEJBUlxuJiM0MztcdCAqIG1lc3NhZ2Ugc3Vic3lzdGVtLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBaWERIX0VRX0VWRU5UX1RZUEVfTUFYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfZXFfYXN5bmNfcmlzY3ZfaW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9lcV9hc3luYyAqZXEgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCB6eGRoX2VxX2FzeW5jLCBpcnFfbmIpO1xuJiM0MztcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IGVxLVx1MDAzZXByaXY7XG4mIzQzO1x0ZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUgZXZlbnRfdHlwZTtcbiYjNDM7XG4mIzQzO1x0ZXZlbnRfdHlwZSA9IHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQoenhkaF9lcV9ldmVudF9pZF9nZXQoenhkaF9kZXYpKTtcbiYjNDM7XHRpZiAoZXZlbnRfdHlwZSA9PSBaWERIX0VRX0VWRU5UX1RZUEVfTUFYKVxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZ6eGRoX2Rldi1cdTAwM2VlcV90YWJsZS5uaFtldmVudF90eXBlXSxcbiYjNDM7XHRcdFx0XHQgICBldmVudF90eXBlLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfZXFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSBcdTAwMjZ6eGRoX2Rldi1cdTAwM2VlcV90YWJsZTtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcHJpdjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGt2emFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0dGFibGUtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2dGFibGUtXHUwMDNlbG9jayk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWlhESF9FUV9FVkVOVF9UWVBFX01BWDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKFx1MDAyNnRhYmxlLVx1MDAzZW5oW2ldKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcGZfZXFfdGFibGUgPSB6eGRoX2Rldi1cdTAwM2VlcV90YWJsZS5wcml2O1xuJiM0MztcdHN0cnVjdCB6eGRoX2VxX3RhYmxlICp0YWJsZSA9IFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWVxX3RhYmxlO1xuJiM0MztcdHN0cnVjdCB6eGRoX2VxX2FzeW5jICplcSA9IFx1MDAyNnBmX2VxX3RhYmxlLVx1MDAzZXJpc2N2X2VxO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dGFibGUtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGVxLVx1MDAzZXByaXYgPSB6eGRoX2RldjtcbiYjNDM7XHRlcS1cdTAwM2VpcnEgPSB6eGRoX3BmX2FzeW5jX2lycV9yZXF1ZXN0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGVxLVx1MDAzZWlycSkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIoZXEtXHUwMDNlaXJxKTtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXEtXHUwMDNlaXJxX25iLm5vdGlmaWVyX2NhbGwgPSB6eGRoX2VxX2FzeW5jX3Jpc2N2X2ludDtcbiYjNDM7XHRlcnIgPSB6eGRoX2lycV9hdHRhY2hfbmIoZXEtXHUwMDNlaXJxLCBcdTAwMjZlcS1cdTAwM2VpcnFfbmIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoXHUwMDI2ZXEtXHUwMDNlaXJxLCAxKTtcbiYjNDM7XHRcdGVxLVx1MDAzZWlycSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZXFfdGFibGUgKnBmX2VxX3RhYmxlID0genhkaF9kZXYtXHUwMDNlZXFfdGFibGUucHJpdjtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSBcdTAwMjZ6eGRoX2Rldi1cdTAwM2VlcV90YWJsZTtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9lcV9hc3luYyAqZXE7XG4mIzQzO1xuJiM0MztcdGlmICghcGZfZXFfdGFibGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVxID0gXHUwMDI2cGZfZXFfdGFibGUtXHUwMDNlcmlzY3ZfZXE7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dGFibGUtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKGVxLVx1MDAzZWlycSkge1xuJiM0MztcdFx0enhkaF9pcnFfZGV0YWNoX25iKGVxLVx1MDAzZWlycSwgXHUwMDI2ZXEtXHUwMDNlaXJxX25iKTtcbiYjNDM7XHRcdHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoXHUwMDI2ZXEtXHUwMDNlaXJxLCAxKTtcbiYjNDM7XHRcdGVxLVx1MDAzZWlycSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrdmZyZWUodGFibGUtXHUwMDNlcHJpdik7XG4mIzQzO1x0dGFibGUtXHUwMDNlcHJpdiA9IE5VTEw7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40OTY1Y2ExNTkxMmFjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcbkBAIC0wLDAgJiM0MzsxLDYxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gZXZlbnQgcXVldWUgYWJzdHJhY3Rpb25cbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fWlhESF9FUV9IX19cbiYjNDM7I2RlZmluZSBfX1pYREhfRVFfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2NvcmVfZGV2O1xuJiM0MztzdHJ1Y3QgenhkaF9pcnE7XG4mIzQzO1xuJiM0MzsvKiBCQVIgbWVzc2FnZSBhcmVhOiBzaGFyZWQtbWVtb3J5IG1haWxib3ggYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGVcbiYjNDM7ICogZmlybXdhcmUsIHNwbGl0IGludG8gc3ViLWNoYW5uZWxzIG9mIDIwNDggYnl0ZXMuIE5vdGlmaWNhdGlvbnMgZnJvbVxuJiM0MzsgKiB0aGUgUklTQy1WIG1hbmFnZW1lbnQgY29yZSBhcmUgcG9zdGVkIHRvIHRoZSBQRiByZWNlaXZlIHN1Yi1jaGFubmVsLFxuJiM0MzsgKiBvbmUgaW50ZXJ2YWwgYWJvdmUgdGhlIGFyZWEgYmFzZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWlhESF9CQVJfTVNHX09GRlNFVFx0XHQweDIwMDBcbiYjNDM7I2RlZmluZSBaWERIX0JBUl9NU0dfU1VCQ0hBTl9JTlRFUlZBTFx0MjA0OFxuJiM0MzsjZGVmaW5lIFpYREhfQkFSX01TR19TVUJDSEFOX1JFQ1ZcdChaWERIX0JBUl9NU0dfT0ZGU0VUICYjNDM7XHRcXFxuJiM0MztcdFx0XHRcdFx0IFpYREhfQkFSX01TR19TVUJDSEFOX0lOVEVSVkFMKVxuJiM0MztcbiYjNDM7LyogZXZlbnRfaWQgb2YgdGhlIFwmIzM0O1JJU0MtViBjb3JlIHJlYWR5XCYjMzQ7IGZpcm13YXJlIG5vdGlmaWNhdGlvbiwgY2FycmllZFxuJiM0MzsgKiBhdCBieXRlIG9mZnNldCAyIG9mIHRoZSBCQVIgbWVzc2FnZSBoZWFkZXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfTVNHX01PRFVMRV9SSVNDX1JFQURZXHQxM1xuJiM0MztcbiYjNDM7LyogRXZlbnQgdHlwZXMgdGhlIHVwcGVyIGxheWVycyBjYW4gc3Vic2NyaWJlIHRvIG92ZXIgdGhlIHBlci10eXBlXG4mIzQzOyAqIG5vdGlmaWVyIGNoYWlucyBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGUuIFRoZSBmdWxsIGNhdGFsb2d1ZSBsaXZlc1xuJiM0MzsgKiBpbiB0aGUgZmlybXdhcmU7IG9ubHkgdGhlIG9uZXMgZGlzcGF0Y2hlZCBpbiB0aGlzIHNlcmllcyBhcmUgbmFtZWQuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHp4ZGhfZXFfZXZlbnRfdHlwZSB7XG4mIzQzO1x0WlhESF9FUV9FVkVOVF9UWVBFX1JJU0NWX1JFQURZID0gMCxcbiYjNDM7XHRaWERIX0VRX0VWRU5UX1RZUEVfTUFYLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogQXN5bmNocm9ub3VzIGV2ZW50IHF1ZXVlIGRlbGl2ZXJpbmcgZmlybXdhcmUgbm90aWZpY2F0aW9ucyB0byB0aGVcbiYjNDM7ICogZHJpdmVyIHdpdGhvdXQgYSByZXF1ZXN0L3JlcGx5IGhhbmRzaGFrZS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6eGRoX2VxX2FzeW5jIHtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcbiYjNDM7XHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaXJxX25iO1xuJiM0MztcdHZvaWQgKnByaXY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9lcV90YWJsZSB7XG4mIzQzO1x0LyogTm90aWZpZXIgY2hhaW5zIGZhbm5lZCBvdXQgYnkgZXZlbnQgdHlwZS4gKi9cbiYjNDM7XHRzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgbmhbWlhESF9FUV9FVkVOVF9UWVBFX01BWF07XG4mIzQzO1x0LyogU2VyaWFsaXplcyBhc3luYyBFUSBjcmVhdGUvZGVzdHJveS4gKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiYjNDM7XHR2b2lkICpwcml2O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfZXFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9lcV90YWJsZV9jcmVhdGUoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1pYREhfRVFfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40MzczNDQzMjljN2U4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5jXG5AQCAtMCwwICYjNDM7MSw0MTIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBJUlEgcG9vbCBtYW5hZ2VtZW50XG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIERldmljZSB2ZWN0b3JzIGFyZSBtYW5hZ2VkIGluIHBlci1wdXJwb3NlIHBvb2xzLiBBbiBJUlEgY2FycmllcyBhXG4mIzQzOyAqIHJlZmNvdW50IHNvIHRoYXQgc2V2ZXJhbCBldmVudCBxdWV1ZXMgY2FuIHNoYXJlIG9uZSB2ZWN0b3I7IG9uXG4mIzQzOyAqIHJhaXNlLCB0aGUgaW50ZXJydXB0IGlzIGZhbm5lZCBvdXQgdGhyb3VnaCBhbiBhdG9taWMgbm90aWZpZXIgY2hhaW5cbiYjNDM7ICogYXR0YWNoZWQgdG8gdGhlIElSUS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVtYXNrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9wZi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3p4ZGhfaXJxLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIFJlbGVhc2UgY2FsbGJhY2sgb2YgdGhlIElSUSBrcmVmLCBjYWxsZWQgd2l0aCBwb29sLVx1MDAzZWxvY2sgaGVsZC4gKi9cbiYjNDM7c3RhdGljIHZvaWQgenhkaF9pcnFfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB6eGRoX2lycSwgcmVmY291bnQpO1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sID0gaXJxLVx1MDAzZXBvb2w7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR4YV9lcmFzZShcdTAwMjZwb29sLVx1MDAzZWlycXMsIGlycS1cdTAwM2VpbmRleCk7XG4mIzQzO1x0LyogZnJlZV9pcnEoKSByZXF1aXJlcyB0aGUgYWZmaW5pdHkgaGludCB0byBiZSBjbGVhcmVkIGJlZm9yZSBpdCBpc1xuJiM0MztcdCAqIGNhbGxlZDsgdGhlIGFzeW1tZXRyeSB3aXRoIHRoZSBzZXQgcGF0aCBpbiB6eGRoX2lycV9hbGxvYygpIGlzXG4mIzQzO1x0ICogaW50ZW50aW9uYWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2VpcnFuLCBOVUxMKTtcbiYjNDM7XHRmcmVlX2NwdW1hc2tfdmFyKGlycS1cdTAwM2VtYXNrKTtcbiYjNDM7XHRmcmVlX2lycShpcnEtXHUwMDNlaXJxbiwgaXJxKTtcbiYjNDM7XHRrZnJlZShpcnEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEcm9wIG9uZSByZWZlcmVuY2U7IHJldHVybnMgMSBpZiB0aGUgSVJRIHdhcyByZWxlYXNlZC4gKi9cbiYjNDM7c3RhdGljIGludCB6eGRoX2lycV9wdXQoc3RydWN0IHp4ZGhfaXJxICppcnEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS1cdTAwM2Vwb29sO1xuJiM0MztcdGludCByZWxlYXNlZDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdHJlbGVhc2VkID0ga3JlZl9wdXQoXHUwMDI2aXJxLVx1MDAzZXJlZmNvdW50LCB6eGRoX2lycV9yZWxlYXNlKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlbGVhc2VkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfaXJxX2dldChzdHJ1Y3QgenhkaF9pcnEgKmlycSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgenhkaF9pcnFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnEgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihcdTAwMjZ6eGRoX2lycS1cdTAwM2VuaCwgMCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfYWxsb2Moc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsIGludCB2ZWNpZHgsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBvb2wtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0aXJxID0ga3phbGxvY19vYmooKmlycSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpcnEpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0aXJxLVx1MDAzZXBvb2wgPSBwb29sO1xuJiM0MztcdGlycS1cdTAwM2VpcnFuID0gcGNpX2lycV92ZWN0b3IoenhkaF9kZXYtXHUwMDNlcGRldiwgdmVjaWR4KTtcbiYjNDM7XHRpZiAoaXJxLVx1MDAzZWlycW4gXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IGlycS1cdTAwM2VpcnFuO1xuJiM0MztcdFx0Z290byBlcnJfaXJxbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdEFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoXHUwMDI2aXJxLVx1MDAzZW5oKTtcbiYjNDM7XHRzbnByaW50ZihpcnEtXHUwMDNlbmFtZSwgWlhESF9NQVhfSVJRX05BTUUsIFwmIzM0O2FzeW5jXyVkQHBjaTolc1wmIzM0OywgdmVjaWR4LFxuJiM0MztcdFx0IHBjaV9uYW1lKHp4ZGhfZGV2LVx1MDAzZXBkZXYpKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcmVxdWVzdF9pcnEoaXJxLVx1MDAzZWlycW4sIHp4ZGhfaXJxX2ludF9oYW5kbGVyLCAwLCBpcnEtXHUwMDNlbmFtZSwgaXJxKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2lycW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZpcnEtXHUwMDNlbWFzaywgR0ZQX0tFUk5FTCkpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6YWxsb2NfY3B1bWFza192YXIgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycl9jcHVtYXNrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGFmZmluaXR5KSB7XG4mIzQzO1x0XHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZW1hc2ssIGFmZmluaXR5KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogTm8gcHJlZmVyZW5jZSByZXF1ZXN0ZWQ7IHNwcmVhZCBvdmVyIGFsbCBvbmxpbmUgQ1BVcy4gKi9cbiYjNDM7XHRcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuJiM0MztcdFx0XHRjcHVtYXNrX3NldF9jcHUoY3B1LCBpcnEtXHUwMDNlbWFzayk7XG4mIzQzO1x0fVxuJiM0MztcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNlaXJxbiwgaXJxLVx1MDAzZW1hc2spO1xuJiM0MztcbiYjNDM7XHRrcmVmX2luaXQoXHUwMDI2aXJxLVx1MDAzZXJlZmNvdW50KTtcbiYjNDM7XHRpcnEtXHUwMDNlaW5kZXggPSB2ZWNpZHg7XG4mIzQzO1x0ZXJyID0geGFfZXJyKHhhX3N0b3JlKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaXJxLVx1MDAzZWluZGV4LCBpcnEsIEdGUF9LRVJORUwpKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7eGFfc3RvcmUgZmFpbGVkIGZvciBpcnEgJXU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRpcnEtXHUwMDNlaW5kZXgsIGVycik7XG4mIzQzO1x0XHRnb3RvIGVycl94YTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpcnE7XG4mIzQzO1xuJiM0MztlcnJfeGE6XG4mIzQzO1x0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2VpcnFuLCBOVUxMKTtcbiYjNDM7XHRmcmVlX2NwdW1hc2tfdmFyKGlycS1cdTAwM2VtYXNrKTtcbiYjNDM7ZXJyX2NwdW1hc2s6XG4mIzQzO1x0ZnJlZV9pcnEoaXJxLVx1MDAzZWlycW4sIGlycSk7XG4mIzQzO2Vycl9pcnFuOlxuJiM0MztcdGtmcmVlKGlycSk7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfaXJxX2F0dGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghenhkaF9pcnFfZ2V0KGlycSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNmlycS1cdTAwM2VuaCwgbmIpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHR6eGRoX2lycV9wdXQoaXJxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfaXJxX2RldGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKFx1MDAyNmlycS1cdTAwM2VuaCwgbmIpO1xuJiM0MztcdHp4ZGhfaXJxX3B1dChpcnEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWxlYXNlIG9uZSBvciBtb3JlIElSUXMgYmFjayB0byB0aGVpciBwb29sLiAqL1xuJiM0Mzt2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pcnFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3luY2hyb25pemVfaXJxKGlycXNbaV0tXHUwMDNlaXJxbik7XG4mIzQzO1x0XHR6eGRoX2lycV9wdXQoaXJxc1tpXSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB6eGRoX2NwdV9wdXQoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRwb29sLVx1MDAzZWlycXNfcGVyX2NwdVtjcHVdLS07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHp4ZGhfY3B1X2dldChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0mIzQzOyYjNDM7O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBGaW5kIHRoZSBsZWFzdCBsb2FkZWQgQ1BVLCBpLmUuIHRoZSBDUFUgd2l0aCB0aGUgZmV3ZXN0IElSUXMgYm91bmRcbiYjNDM7ICogdG8gaXQsIHdpdGhpbiB0aGUgcmVxdWVzdGVkIG1hc2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfY3B1X2dldF9sZWFzdF9sb2FkZWQoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spXG4mIzQzO3tcbiYjNDM7XHRpbnQgYmVzdF9jcHUgPSAtMTtcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jcHVfYW5kKGNwdSwgcmVxX21hc2ssIGNwdV9vbmxpbmVfbWFzaykge1xuJiM0MztcdFx0LyogVGhpcyBDUFUgaGFzIG5vIElSUXMgeWV0LCBubyBuZWVkIHRvIGxvb2sgZnVydGhlci4gKi9cbiYjNDM7XHRcdGlmICghcG9vbC1cdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSkge1xuJiM0MztcdFx0XHRiZXN0X2NwdSA9IGNwdTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoYmVzdF9jcHUgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJlc3RfY3B1ID0gY3B1O1xuJiM0MztcdFx0aWYgKHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0gXHUwMDNjIHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2Jlc3RfY3B1XSlcbiYjNDM7XHRcdFx0YmVzdF9jcHUgPSBjcHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoYmVzdF9jcHUgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGRldl9lcnIocG9vbC1cdTAwM2VkZXYtXHUwMDNlZGV2aWNlLFxuJiM0MztcdFx0XHRcJiMzNDtubyBvbmxpbmUgQ1BVIGluIGFmZmluaXR5IG1hc2sgKCUqcGJsKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0Y3B1bWFza19wcl9hcmdzKHJlcV9tYXNrKSk7XG4mIzQzO1x0XHRiZXN0X2NwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTtcbiYjNDM7XHR9XG4mIzQzO1x0cG9vbC1cdTAwM2VpcnFzX3Blcl9jcHVbYmVzdF9jcHVdJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJlc3RfY3B1O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBDcmVhdGUgYSBuZXcgSVJRIGZyb20gdGhlIHBvb2wgYW5kIGJpbmQgaXQgdG8gdGhlIHJlcXVlc3RlZCBtYXNrLiAqL1xuJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9wb29sX3JlcXVlc3RfaXJxKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSA9IHJlcV9tYXNrO1xuJiM0MztcdGNwdW1hc2tfdmFyX3QgYXV0b19tYXNrO1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xuJiM0MztcdHUzMiBpcnFfaW5kZXg7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2YXV0b19tYXNrLCBHRlBfS0VSTkVMKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB4YV9hbGxvYyhcdTAwMjZwb29sLVx1MDAzZWlycXMsIFx1MDAyNmlycV9pbmRleCwgTlVMTCwgcG9vbC1cdTAwM2V4YV9udW1faXJxcyxcbiYjNDM7XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpZiAoZXJyID09IC1FQlVTWSlcbiYjNDM7XHRcdFx0ZXJyID0gLUVVU0VSUztcbiYjNDM7XHRcdGdvdG8gZXJyX3hhO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNwdW1hc2tfd2VpZ2h0KHJlcV9tYXNrKSBcdTAwM2UgMSkge1xuJiM0MztcdFx0LyogQmluZCB0byB0aGUgbGVhc3QgbG9hZGVkIENQVSBvZiB0aGUgcmVxdWVzdC4gKi9cbiYjNDM7XHRcdGNwdW1hc2tfc2V0X2NwdSh6eGRoX2NwdV9nZXRfbGVhc3RfbG9hZGVkKHBvb2wsIHJlcV9tYXNrKSxcbiYjNDM7XHRcdFx0XHRhdXRvX21hc2spO1xuJiM0MztcdFx0YWZmaW5pdHkgPSBhdXRvX21hc2s7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHp4ZGhfY3B1X2dldChwb29sLCBjcHVtYXNrX2ZpcnN0KHJlcV9tYXNrKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpcnEgPSB6eGRoX2lycV9hbGxvYyhwb29sLCBpcnFfaW5kZXgsIGFmZmluaXR5KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGlycSkpXG4mIzQzO1x0XHRnb3RvIGVycl9hbGxvYztcbiYjNDM7XG4mIzQzO1x0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXJxO1xuJiM0MztcbiYjNDM7ZXJyX2FsbG9jOlxuJiM0MztcdC8qIFVuZG8gdGhlIHBlci1DUFUgYWNjb3VudGluZyBkb25lIGFib3ZlLiAqL1xuJiM0MztcdHp4ZGhfY3B1X3B1dChwb29sLCBjcHVtYXNrX2ZpcnN0KGFmZmluaXR5KSk7XG4mIzQzO1x0eGFfZXJhc2UoXHUwMDI2cG9vbC1cdTAwM2VpcnFzLCBpcnFfaW5kZXgpO1xuJiM0MztlcnJfeGE6XG4mIzQzO1x0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xuJiM0MztcdHJldHVybiBlcnIgPyBFUlJfUFRSKGVycikgOiBpcnE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIExvb2sgZm9yIHRoZSBJUlEgd2l0aCB0aGUgc21hbGxlc3QgcmVmY291bnQgd2hvc2UgYWZmaW5pdHkgbWFzayBpcyBhXG4mIzQzOyAqIHN1YnNldCBvZiB0aGUgcmVxdWVzdGVkIG1hc2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9wb29sX2ZpbmRfbGVhc3RfbG9hZGVkKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnEgKml0ZXI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbiYjNDM7XHRpbnQgaXRlcl9yZWZjb3VudDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdHhhX2Zvcl9lYWNoX3JhbmdlKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaW5kZXgsIGl0ZXIsXG4mIzQzO1x0XHRcdCAgcG9vbC1cdTAwM2V4YV9udW1faXJxcy5taW4sIHBvb2wtXHUwMDNleGFfbnVtX2lycXMubWF4KSB7XG4mIzQzO1x0XHRpdGVyX3JlZmNvdW50ID0gcmVmY291bnRfcmVhZChcdTAwMjZpdGVyLVx1MDAzZXJlZmNvdW50LnJlZmNvdW50KTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTa2lwIElSUXMgd2hvc2UgbWFzayBpcyBub3QgYSBzdWJzZXQgb2YgdGhlIHJlcXVlc3QuICovXG4mIzQzO1x0XHRpZiAoIWNwdW1hc2tfc3Vic2V0KGl0ZXItXHUwMDNlbWFzaywgcmVxX21hc2spKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdC8qIElSUSBiZWxvdyB0aGUgbWluaW11bSB0aHJlc2hvbGQgZm91bmQsIHRha2UgaXQuICovXG4mIzQzO1x0XHRpZiAoaXRlcl9yZWZjb3VudCBcdTAwM2MgcG9vbC1cdTAwM2VtaW5fdGhyZXNob2xkKVxuJiM0MztcdFx0XHRyZXR1cm4gaXRlcjtcbiYjNDM7XHRcdGlmICghaXJxIHx8XG4mIzQzO1x0XHQgICAgaXRlcl9yZWZjb3VudCBcdTAwM2MgcmVmY291bnRfcmVhZChcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQucmVmY291bnQpKVxuJiM0MztcdFx0XHRpcnEgPSBpdGVyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlycTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVxdWVzdCBhbiBJUlEgZm9yIHRoZSBnaXZlbiBtYXNrOiBzaGFyZSB0aGUgbGVhc3QgbG9hZGVkIGV4aXN0aW5nXG4mIzQzOyAqIG1hdGNoaW5nIElSUSBvbmNlIGl0IHBhc3NlcyB0aGUgcG9vbCBtaW5pbXVtIHRocmVzaG9sZCwgb3RoZXJ3aXNlXG4mIzQzOyAqIGNyZWF0ZSBhIG5ldyBvbmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9hZmZpbml0eV9yZXF1ZXN0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycSAqbGVhc3RfbG9hZGVkX2lycTtcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnEgKm5ld19pcnE7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bGVhc3RfbG9hZGVkX2lycSA9IHp4ZGhfaXJxX3Bvb2xfZmluZF9sZWFzdF9sb2FkZWQocG9vbCwgcmVxX21hc2spO1xuJiM0MztcdGlmIChsZWFzdF9sb2FkZWRfaXJxIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICByZWZjb3VudF9yZWFkKFx1MDAyNmxlYXN0X2xvYWRlZF9pcnEtXHUwMDNlcmVmY291bnQucmVmY291bnQpIFx1MDAzYyBwb29sLVx1MDAzZW1pbl90aHJlc2hvbGQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gSVJRIGJlbG93IHRoZSBtaW5pbXVtIHRocmVzaG9sZCwgdHJ5IHRvIGNyZWF0ZSBhIG5ldyBvbmUuICovXG4mIzQzO1x0bmV3X2lycSA9IHp4ZGhfaXJxX3Bvb2xfcmVxdWVzdF9pcnEocG9vbCwgcmVxX21hc2spO1xuJiM0MztcdGlmIChJU19FUlIobmV3X2lycSkpIHtcbiYjNDM7XHRcdGlmICghbGVhc3RfbG9hZGVkX2lycSkge1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIG5ld19pcnE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBDb3VsZCBub3QgY3JlYXRlIGEgbmV3IElSUSBmb3IgdGhlIHJlcXVlc3RlZCBhZmZpbml0eSxcbiYjNDM7XHRcdCAqIHNoYXJlIHRoZSBleGlzdGluZyBvbmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl93YXJuKHBvb2wtXHUwMDNlZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0IFwmIzM0O2lycSBwb29sICVzIGV4aGF1c3RlZCwgc2hhcmluZyBpcnFzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgcG9vbC1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVhc3RfbG9hZGVkX2lycSA9IG5ld19pcnE7XG4mIzQzO1x0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0LyogSG9sZGluZyBwb29sLVx1MDAzZWxvY2sga2VlcHMgdGhlIElSUSBhbGl2ZSwgc28gdGhpcyBjYW5ub3QgZmFpbC4gKi9cbiYjNDM7XHR6eGRoX2lycV9nZXQobGVhc3RfbG9hZGVkX2lycSk7XG4mIzQzO1x0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2bGVhc3RfbG9hZGVkX2lycS1cdTAwM2VyZWZjb3VudC5yZWZjb3VudCkgXHUwMDNlIHBvb2wtXHUwMDNlbWF4X3RocmVzaG9sZClcbiYjNDM7XHRcdGRldl93YXJuKHBvb2wtXHUwMDNlZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0IFwmIzM0O2lycSAldSBvdmVybG9hZGVkLCBwb29sICVzLCAldSByZWZzIG9uIHRoaXMgaXJxXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgcGNpX2lycV92ZWN0b3IocG9vbC1cdTAwM2VkZXYtXHUwMDNlcGRldixcbiYjNDM7XHRcdFx0XHRcdGxlYXN0X2xvYWRlZF9pcnEtXHUwMDNlaW5kZXgpLFxuJiM0MztcdFx0XHQgcG9vbC1cdTAwM2VuYW1lLFxuJiM0MztcdFx0XHQgcmVmY291bnRfcmVhZChcdTAwMjZsZWFzdF9sb2FkZWRfaXJxLVx1MDAzZXJlZmNvdW50LnJlZmNvdW50KSAvXG4mIzQzO1x0XHRcdCBaWERIX0VRX1JFRlNfUEVSX0lSUSk7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGxlYXN0X2xvYWRlZF9pcnE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlcXVlc3QgYW4gSVJRIGZyb20gdGhlIHBvb2wsIHNwcmVhZCBvdmVyIHRoZSBvbmxpbmUgQ1BVcy4gKi9cbiYjNDM7c3RydWN0IHp4ZGhfaXJxICp6eGRoX2dldF9pcnFfb2ZfcG9vbChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbClcbiYjNDM7e1xuJiM0MztcdGNwdW1hc2tfdmFyX3QgcmVxX21hc2s7XG4mIzQzO1x0c3RydWN0IHp4ZGhfaXJxICppcnE7XG4mIzQzO1xuJiM0MztcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJlcV9tYXNrLCBHRlBfS0VSTkVMKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGNwdW1hc2tfY29weShyZXFfbWFzaywgY3B1X29ubGluZV9tYXNrKTtcbiYjNDM7XG4mIzQzO1x0aXJxID0genhkaF9pcnFfYWZmaW5pdHlfcmVxdWVzdChwb29sLCByZXFfbWFzayk7XG4mIzQzO1xuJiM0MztcdGZyZWVfY3B1bWFza192YXIocmVxX21hc2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXJxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdFx0XHQgIHUzMiBtaW5fdGhyZXNob2xkLCB1MzIgbWF4X3RocmVzaG9sZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sO1xuJiM0MztcdHUxNiAqaXJxc19wZXJfY3B1O1xuJiM0MztcbiYjNDM7XHRpcnFzX3Blcl9jcHUgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqaXJxc19wZXJfY3B1KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFpcnFzX3Blcl9jcHUpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cG9vbCA9IGt2emFsbG9jX29iaigqcG9vbCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwb29sKSB7XG4mIzQzO1x0XHRrZnJlZShpcnFzX3Blcl9jcHUpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwb29sLVx1MDAzZWRldiA9IHp4ZGhfZGV2O1xuJiM0MztcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1ID0gaXJxc19wZXJfY3B1O1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR4YV9pbml0X2ZsYWdzKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgWEFfRkxBR1NfQUxMT0MpO1xuJiM0MztcdHBvb2wtXHUwMDNleGFfbnVtX2lycXMubWluID0gc3RhcnQ7XG4mIzQzO1x0cG9vbC1cdTAwM2V4YV9udW1faXJxcy5tYXggPSBzdGFydCAmIzQzOyBzaXplIC0gMTtcbiYjNDM7XHRzbnByaW50Zihwb29sLVx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcJiMzNDslc1wmIzM0OywgbmFtZSk7XG4mIzQzO1xuJiM0MztcdC8qIFRocmVzaG9sZHMgYXJlIGV4cHJlc3NlZCBpbiBxdWV1ZSByZWZlcmVuY2VzLCB0d28gcGVyIElSUS4gKi9cbiYjNDM7XHRwb29sLVx1MDAzZW1pbl90aHJlc2hvbGQgPSBtaW5fdGhyZXNob2xkICogWlhESF9FUV9SRUZTX1BFUl9JUlE7XG4mIzQzO1x0cG9vbC1cdTAwM2VtYXhfdGhyZXNob2xkID0gbWF4X3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJRO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG9vbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX2lycV9wb29sX2ZyZWUoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4O1xuJiM0MztcdHUzMiBjcHU7XG4mIzQzO1xuJiM0MztcdC8qIE9uIGEgZmFzdCB0ZWFyZG93biB0aGUgdGFibGUgbWF5IHN0aWxsIGhvbGQgSVJRczsgcmVsZWFzZVxuJiM0MztcdCAqIHdoYXRldmVyIGlzIGxlZnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaW5kZXgsIGlycSlcbiYjNDM7XHRcdHp4ZGhfaXJxX3JlbGVhc2UoXHUwMDI2aXJxLVx1MDAzZXJlZmNvdW50KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHR4YV9kZXN0cm95KFx1MDAyNnBvb2wtXHUwMDNlaXJxcyk7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHUpIHtcbiYjNDM7XHRcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuJiM0MztcdFx0XHRXQVJOX09OKHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0pO1xuJiM0MztcdFx0a2ZyZWUocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3ZmcmVlKHBvb2wpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44OWY0NmQ3YjExYzljXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oXG5AQCAtMCwwICYjNDM7MSw3MiBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIElSUSBwb29sIG1hbmFnZW1lbnRcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fWlhESF9JUlFfSF9fXG4mIzQzOyNkZWZpbmUgX19aWERIX0lSUV9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdW1hc2suaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2NvcmVfZGV2O1xuJiM0MztcbiYjNDM7LyogTnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgcGVyIHB1cnBvc2UuIFRoZSBsYXlvdXQgb2YgdGhlIHZlY3RvciBzcGFjZVxuJiM0MzsgKiBpcyBhIGhhcmR3YXJlIGludGVyZmFjZTpcbiYjNDM7ICogICBbMCwgOCkgICAgYXN5bmMgZXZlbnQgcXVldWVzXG4mIzQzOyAqICAgWzgsIDE0KSAgIHJlc2VydmVkIGZvciBSRE1BICh1bnVzZWQgZm9yIG5vdylcbiYjNDM7ICogICBbMTQsIDc4KSAgdnEgcngvdHggcXVldWUgcGFpcnNcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWlhESF9BU1lOQ19DSEFOTkVMU19OVU1cdFx0OFxuJiM0MzsjZGVmaW5lIFpYREhfUkRNQV9DSEFOTkVMU19OVU1cdFx0NlxuJiM0MzsjZGVmaW5lIFpYREhfVlFTX0NIQU5ORUxTX05VTVx0XHQ2NFxuJiM0MztcbiYjNDM7I2RlZmluZSBaWERIX01BWF9JUlFfTkFNRVx0MTAwXG4mIzQzOyNkZWZpbmUgWlhESF9FUV9SRUZTX1BFUl9JUlFcdDJcbiYjNDM7XG4mIzQzOy8qIFJlZmVyZW5jZSBjb3VudGVkIGludGVycnVwdC4gRXZlbnQgcXVldWVzIHNoYXJlIGFuIElSUSB0aHJvdWdoIHRoZVxuJiM0MzsgKiBub3RpZmllciBjaGFpbiwgd2hpY2ggaXMgZmlyZWQgZnJvbSBoYXJkIElSUSBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHp4ZGhfaXJxIHtcbiYjNDM7XHRzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgbmg7XG4mIzQzO1x0Y3B1bWFza192YXJfdCBtYXNrO1x0XHQvKiBpbnRlcnJ1cHQgYWZmaW5pdHkgKi9cbiYjNDM7XHRjaGFyIG5hbWVbWlhESF9NQVhfSVJRX05BTUVdO1xuJiM0MztcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sO1xuJiM0MztcdHUzMiBpbmRleDtcdFx0XHQvKiB2ZWN0b3IgaW5kZXggKi9cbiYjNDM7XHRpbnQgaXJxbjtcdFx0XHQvKiBMaW51eCBJUlEgbnVtYmVyICovXG4mIzQzO1x0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBQb29sIG9mIHZlY3RvcnMgZGVkaWNhdGVkIHRvIG9uZSBwdXJwb3NlLCBpZGVudGlmaWVkIGJ5IHRoZVxuJiM0MzsgKiBbeGFfbnVtX2lycXMubWluLCB4YV9udW1faXJxcy5tYXhdIHZlY3RvciByYW5nZS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6eGRoX2lycV9wb29sIHtcbiYjNDM7XHRjaGFyIG5hbWVbWlhESF9NQVhfSVJRX05BTUVdO1xuJiM0MztcdHN0cnVjdCB4YV9saW1pdCB4YV9udW1faXJxcztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jaztcdFx0Lyogc2VyaWFsaXplcyBJUlEgY3JlYXRpb24gKi9cbiYjNDM7XHRzdHJ1Y3QgeGFycmF5IGlycXM7XG4mIzQzO1x0dTMyIG1pbl90aHJlc2hvbGQ7XHRcdC8qIGluIHF1ZXVlIHJlZmVyZW5jZXMgKi9cbiYjNDM7XHR1MzIgbWF4X3RocmVzaG9sZDtcdFx0LyogaW4gcXVldWUgcmVmZXJlbmNlcyAqL1xuJiM0MztcdHUxNiAqaXJxc19wZXJfY3B1O1x0XHQvKiBudW1iZXIgb2YgSVJRcyBib3VuZCBwZXIgQ1BVICovXG4mIzQzO1x0c3RydWN0IHp4ZGhfY29yZV9kZXYgKmRldjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2lycV90YWJsZSB7XG4mIzQzO1x0dm9pZCAqcHJpdjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB6eGRoX2lycSAqenhkaF9nZXRfaXJxX29mX3Bvb2woc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpO1xuJiM0MztpbnQgenhkaF9pcnFfYXR0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbiYjNDM7aW50IHp4ZGhfaXJxX2RldGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG4mIzQzO3ZvaWQgenhkaF9pcnFzX3JlbGVhc2VfdmVjdG9ycyhzdHJ1Y3QgenhkaF9pcnEgKippcnFzLCBpbnQgbmlycXMpO1xuJiM0MztzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdFx0XHQgIHUzMiBtaW5fdGhyZXNob2xkLCB1MzIgbWF4X3RocmVzaG9sZCk7XG4mIzQzO3ZvaWQgenhkaF9pcnFfcG9vbF9mcmVlKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1pYREhfSVJRX0hfXyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpLyksIGFkZGluZyBJUlEgcG9vbCBtYW5hZ2VtZW50IGFuZCBldmVudCBxdWV1ZSBwbHVtYmluZyBmb3IgWlRFIERpbmdIYWkgUENJZSBhZGFwdGVycyAoUENJIHZlbmRvciBJRCAweDFjZjIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWUzZWY0OTZhOTM1ZDRmY2RjMzc0MTBiOTcwZTQ3M2Q4YjZiOWMwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA1OjAzOjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQppbmRleCBlMmY0ZGEzM2RmNTkzLi4yZGM2ZDY4Y2MwZTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQpAQCAtNCw0ICYjNDM7NCw0IEBACiAjCiAKIG9iai0kKENPTkZJR19ESU5HSEFJX1BGKSAmIzQzOz0gZGluZ2hhaTEwZS5vCi1kaW5naGFpMTBlLXkgOj0gZW5fcGYubwomIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vIHp4ZGhfaXJxLm8genhkaF9lcS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwppbmRleCA4NmQ0Mzc0MDg4MjAzLi5mZTM5MjRiODkwZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMKQEAgLTYsNiAmIzQzOzYsMTAgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKICNpbmNsdWRlICYjMzQ7ZW5fcGYuaCYjMzQ7CkBAIC0yNSw2ICYjNDM7MjksMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHp4ZGhfcGZfcGNpX3RhYmxlW10gPSB7CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7CiAKJiM0MztzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgewomIzQzOwlzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqYXN5bmNfcG9vbDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIElSUSBjb21wYWN0aW9uIHRocmVzaG9sZHMgb2YgdGhlIGFzeW5jIHBvb2wsIGluIG51bWJlciBvZiBxdWV1ZXMuICovCiYjNDM7I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NSU5fQ09NUAkwCiYjNDM7I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUAk3CiYjNDM7CiB2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKQogewogCXZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwpAQCAtMzY5LDYgJiM0MzszODEsMTc3IEBAIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qIFJlYWQgdGhlIGZpcm13YXJlIHZlcnNpb24gYmxvY2sgYW5kIHZlcmlmeSB0aGUgZHJpdmVyL2Zpcm13YXJlCiYjNDM7ICogdmVyc2lvbiBjb250cmFjdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfZndfY29tcGF0X2NoZWNrKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCB6eGRoX2Z3X2NvbXBhdCBfX2lvbWVtICpjb21wYXQ7CiYjNDM7CXN0cnVjdCB6eGRoX2Z3X2NvbXBhdCAqZndfY29tcGF0OwomIzQzOwl1MzIgZXJhc2VkOwomIzQzOwomIzQzOwlmd19jb21wYXQgPSAmYW1wO3BmX2Rldi0mZ3Q7ZndfY29tcGF0OwomIzQzOwljb21wYXQgPSBwZl9kZXYtJmd0O3BjaV9pb3JlbWFwX2FkZHJbMF0gJiM0MzsgWlhESF9GV19DT01QQVRfT0ZGU0VUOwomIzQzOwomIzQzOwkvKiBUaGUgcmVnaW9uIHJlYWRzIGFzIGFsbCBvbmVzIHVudGlsIHRoZSBmaXJtd2FyZSBwb3B1bGF0ZXMgaXQgYXQKJiM0MzsJICogdGhlIGVuZCBvZiBpdHMgYm9vdDsgYWxsb3cgdXAgdG8gMjAwIHMgZm9yIGEgY29sZCBib290LgomIzQzOwkgKi8KJiM0MzsJcmVhZHhfcG9sbF90aW1lb3V0KGlvcmVhZDMyLCBjb21wYXQsIGVyYXNlZCwgZXJhc2VkICE9IDB4ZmZmZmZmZmZVLAomIzQzOwkJCSAgIFVTRUNfUEVSX1NFQywKJiM0MzsJCQkgICBaWERIX0ZXX0NPTVBBVF9USU1FT1VUX1NFQyAqIFVTRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CS8qIEZpcm13YXJlIHByZWRhdGluZyB0aGUgY29tcGF0aWJpbGl0eSByZWdpb24ga2VlcHMgdGhlIGVyYXNlZAomIzQzOwkgKiBwYXR0ZXJuLCB3aGljaCBmYWlscyB0aGUgbW9kdWxlIGlkIGNoZWNrIGJlbG93IGFuZCBkZWZlcnMgdGhlCiYjNDM7CSAqIGRlY2lzaW9uIHRvIHRoZSByZWFkaW5lc3Mgd2FpdC4KJiM0MzsJICovCiYjNDM7CWZ3X2NvbXBhdC0mZ3Q7bW9kdWxlX2lkID0gaW9yZWFkOCgmYW1wO2NvbXBhdC0mZ3Q7bW9kdWxlX2lkKTsKJiM0MzsJZndfY29tcGF0LSZndDttYWpvciA9IGlvcmVhZDgoJmFtcDtjb21wYXQtJmd0O21ham9yKTsKJiM0MzsJZndfY29tcGF0LSZndDtmd19taW5vciA9IGlvcmVhZDgoJmFtcDtjb21wYXQtJmd0O2Z3X21pbm9yKTsKJiM0MzsJZndfY29tcGF0LSZndDtkcnZfbWlub3IgPSBpb3JlYWQ4KCZhbXA7Y29tcGF0LSZndDtkcnZfbWlub3IpOwomIzQzOwlmd19jb21wYXQtJmd0O3BhdGNoID0gaW9yZWFkMTYoJmFtcDtjb21wYXQtJmd0O3BhdGNoKTsKJiM0MzsKJiM0MzsJaWYgKGZ3X2NvbXBhdC0mZ3Q7bW9kdWxlX2lkICE9IFpYREhfTU9EVUxFX0lEKSB7CiYjNDM7CQlkZXZfaW5mbyh6eGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSAmIzM0O3Vua25vd24gbW9kdWxlIGlkICV1LCBza2lwIGZ3IGNvbXBhdCBjaGVja1xuJiMzNDssCiYjNDM7CQkJIGZ3X2NvbXBhdC0mZ3Q7bW9kdWxlX2lkKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmd19jb21wYXQtJmd0O21ham9yICE9IFpYREhfTUFKT1IpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2RyaXZlciBtYWpvciAldSBpbmNvbXBhdGlibGUgd2l0aCBmaXJtd2FyZSBtYWpvciAldVxuJiMzNDssCiYjNDM7CQkJWlhESF9NQUpPUiwgZndfY29tcGF0LSZndDttYWpvcik7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZndfY29tcGF0LSZndDtmd19taW5vciAmbHQ7IFpYREhfRldfTUlOT1IpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2Zpcm13YXJlIGZ3X21pbm9yICVkIG9sZGVyIHRoYW4gcmVxdWlyZWQgJXVcbiYjMzQ7LAomIzQzOwkJCWZ3X2NvbXBhdC0mZ3Q7ZndfbWlub3IsIFpYREhfRldfTUlOT1IpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZ3X2NvbXBhdC0mZ3Q7ZHJ2X21pbm9yICZndDsgWlhESF9EUlZfTUlOT1IpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O2RyaXZlciBkcnZfbWlub3IgJXUgb2xkZXIgdGhhbiByZXF1aXJlZCBieSBmaXJtd2FyZSAldVxuJiMzNDssCiYjNDM7CQkJWlhESF9EUlZfTUlOT1IsIGZ3X2NvbXBhdC0mZ3Q7ZHJ2X21pbm9yKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXYWl0IGZvciB0aGUgUklTQy1WIG1hbmFnZW1lbnQgY29yZSBvZiB0aGUgZmlybXdhcmUgdG8gZmluaXNoCiYjNDM7ICogYm9vdGluZywgc28gdGhhdCBsYXRlciBwcm9iZSBzdGVwcyBjYW4gdGFsayB0byBpdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIF9faW9tZW0gKmhiOwomIzQzOwl1OCBoZWFsdGhfdmVyc2lvbjsKJiM0MzsJdTggcG93ZXJfb247CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWhiID0gcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdICYjNDM7IFpYREhfUklTQ1ZfSEJfT0ZGU0VUOwomIzQzOwloZWFsdGhfdmVyc2lvbiA9IGlvcmVhZDgoJmFtcDtoYi0mZ3Q7aGVhbHRoX3ZlcnNpb24pOwomIzQzOwomIzQzOwkvKiBGaXJtd2FyZSBwcmVkYXRpbmcgdGhlIGhlYWx0aCBidWZmZXIgcHJvdG9jb2wgaGFzIG5laXRoZXIgYQomIzQzOwkgKiB2YWxpZCB2ZXJzaW9uIGJ5dGUgbm9yIGEgcG93ZXItb24gZmxhZyB0byB3YWl0IGZvci4KJiM0MzsJICovCiYjNDM7CWlmIChoZWFsdGhfdmVyc2lvbiAhPSAxICZhbXA7JmFtcDsKJiM0MzsJICAgIHBmX2Rldi0mZ3Q7ZndfY29tcGF0LnBhdGNoICZsdDsgWlhESF9IUElSUV9QQVRDSCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSByZWFkeF9wb2xsX3RpbWVvdXQoaW9yZWFkOCwgJmFtcDtoYi0mZ3Q7cmlzY3ZfcG93ZXJfb24sIHBvd2VyX29uLAomIzQzOwkJCQkgcG93ZXJfb24gPT0gMSwgVVNFQ19QRVJfU0VDLAomIzQzOwkJCQkgWlhESF9SSVNDVl9SRUFEWV9USU1FT1VUX1NFQyAqIFVTRUNfUEVSX1NFQyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmlzY3YgcG93ZXIgb25cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgenhkaF9wZl9pcnFfcG9vbHNfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnBmX2lycV90YWJsZSA9IHp4ZGhfZGV2LSZndDtpcnFfdGFibGUucHJpdjsKJiM0MzsJc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2w7CiYjNDM7CiYjNDM7CXBvb2wgPSB6eGRoX2lycV9wb29sX2FsbG9jKHp4ZGhfZGV2LCAwLCBaWERIX0FTWU5DX0NIQU5ORUxTX05VTSwKJiM0MzsJCQkJICAgJiMzNDt6eGRoX3BmX2FzeW5jJiMzNDssIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QLAomIzQzOwkJCQkgICBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUCk7CiYjNDM7CWlmIChJU19FUlIocG9vbCkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwb29sKTsKJiM0MzsKJiM0MzsJcGZfaXJxX3RhYmxlLSZndDthc3luY19wb29sID0gcG9vbDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfaXJxX3Bvb2xzX2Rlc3Ryb3koc3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUpCiYjNDM7ewomIzQzOwlpZiAocGZfaXJxX3RhYmxlLSZndDthc3luY19wb29sKQomIzQzOwkJenhkaF9pcnFfcG9vbF9mcmVlKHBmX2lycV90YWJsZS0mZ3Q7YXN5bmNfcG9vbCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX2lycV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2lycV90YWJsZSAqdGFibGUgPSAmYW1wO3p4ZGhfZGV2LSZndDtpcnFfdGFibGU7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcHJpdjsKJiM0MzsKJiM0MzsJcHJpdiA9IGt2emFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl0YWJsZS0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CWludCB0b3RhbF92ZWMgPSBaWERIX1ZRU19DSEFOTkVMU19OVU0gJiM0MzsgWlhESF9BU1lOQ19DSEFOTkVMU19OVU0gJiM0MzsKJiM0MzsJCQlaWERIX1JETUFfQ0hBTk5FTFNfTlVNOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwl0b3RhbF92ZWMgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoenhkaF9kZXYtJmd0O3BkZXYsIHRvdGFsX3ZlYywgdG90YWxfdmVjLAomIzQzOwkJCQkJICBQQ0lfSVJRX01TSVgpOwomIzQzOwlpZiAodG90YWxfdmVjICZsdDsgMCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BjaV9hbGxvY19pcnFfdmVjdG9ycyBmYWlsZWQ6ICVkXG4mIzM0OywKJiM0MzsJCQl0b3RhbF92ZWMpOwomIzQzOwkJcmV0dXJuIHRvdGFsX3ZlYzsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSB6eGRoX3BmX2lycV9wb29sc19pbml0KHp4ZGhfZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3p4ZGhfcGZfaXJxX3Bvb2xzX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssCiYjNDM7CQkJZXJyKTsKJiM0MzsJCXBjaV9mcmVlX2lycV92ZWN0b3JzKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfaXJxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfaXJxX3RhYmxlICp0YWJsZSA9ICZhbXA7enhkaF9kZXYtJmd0O2lycV90YWJsZTsKJiM0MzsKJiM0MzsJaWYgKHRhYmxlLSZndDtwcml2KQomIzQzOwkJenhkaF9wZl9pcnFfcG9vbHNfZGVzdHJveSh0YWJsZS0mZ3Q7cHJpdik7CiYjNDM7CWt2ZnJlZSh0YWJsZS0mZ3Q7cHJpdik7CiYjNDM7CXRhYmxlLSZndDtwcml2ID0gTlVMTDsKJiM0MzsJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBGZXRjaCBhIHZlY3RvciBmcm9tIHRoZSBhc3luYyBwb29sIGZvciBvbmUgYXN5bmMgZXZlbnQgcXVldWUuICovCiYjNDM7c3RydWN0IHp4ZGhfaXJxICp6eGRoX3BmX2FzeW5jX2lycV9yZXF1ZXN0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcGZfaXJxX3RhYmxlID0genhkaF9kZXYtJmd0O2lycV90YWJsZS5wcml2OwomIzQzOwomIzQzOwlyZXR1cm4genhkaF9nZXRfaXJxX29mX3Bvb2wocGZfaXJxX3RhYmxlLSZndDthc3luY19wb29sKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7CkBAIC00MDUsMTAgJiM0Mzs1ODgsNTAgQEAgc3RhdGljIGludCB6eGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJCWdvdG8gZXJyX2NmZ19pbml0OwogCX0KIAomIzQzOwlyZXQgPSB6eGRoX3BmX2Z3X2NvbXBhdF9jaGVjayh6eGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7enhkaF9wZl9md19jb21wYXRfY2hlY2sgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9jZmdfaW5pdDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX3dhaXRfcmlzY3ZfcmVhZHkoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeSBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2NmZ19pbml0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfaXJxX3RhYmxlX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfaXJxX3RhYmxlX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9jZmdfaW5pdDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZSBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2lycV90YWJsZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfZXFfdGFibGVfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2VxX3RhYmxlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfZXFfdGFibGVfY3JlYXRlKHp4ZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDt6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZSBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2VxX3RhYmxlOwomIzQzOwl9CiYjNDM7CiAJZGV2bGlua19yZWdpc3RlcihkZXZsaW5rKTsKIAogCXJldHVybiAwOwogCiYjNDM7ZXJyX2VxX3RhYmxlOgomIzQzOwl6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpOwomIzQzO2Vycl9pcnFfdGFibGU6CiYjNDM7CXp4ZGhfcGZfaXJxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpOwogZXJyX2NmZ19pbml0OgogCXp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTsKIGVycl9wY2lfaW5pdDoKQEAgLTQyNCw2ICYjNDM7NjQ3LDggQEAgc3RhdGljIHZvaWQgenhkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJc3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpOwogCiAJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwomIzQzOwl6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpOwomIzQzOwl6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTsKIAl6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTsKIAl6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7CiAJenhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaAppbmRleCA3MzczZGVlOGQxYTlmLi44OTRhMDVhMDlkOTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgKQEAgLTksNiAmIzQzOzksOSBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7enhkaF9lcS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3p4ZGhfaXJxLmgmIzM0OwomIzQzOwogI2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRAkweDFjZjIKICNkZWZpbmUgWlhESF9QRl9ERVZJQ0VfSUQJMHg4MDQwCiAjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lECTB4ODA0MQpAQCAtMjksMTAgJiM0MzszMiw1NyBAQAogI2RlZmluZSBaWERIX1BGX0FMSUdOMgkJCTIKICNkZWZpbmUgWlhESF9QRl9NQVBfTUlOTEVOMgkJMgogCiYjNDM7LyogRml4ZWQgb2Zmc2V0cyBvZiB0aGUgZmlybXdhcmUgaW50ZXJmYWNlIHJlZ2lvbnMgd2l0aGluIEJBUiAwLiAqLwomIzQzOyNkZWZpbmUgWlhESF9SSVNDVl9IQl9PRkZTRVQJMHg1MzAwCiYjNDM7I2RlZmluZSBaWERIX0ZXX0NPTVBBVF9PRkZTRVQJMHg1NDAwCiYjNDM7CiYjNDM7LyogRHJpdmVyL2Zpcm13YXJlIHZlcnNpb24gY29udHJhY3QuIFRoZSBmaXJtd2FyZSBwdWJsaXNoZXMgaXRzIHNpZGUgb2YKJiM0MzsgKiB0aGUgY29udHJhY3QgaW4gdGhlIHJlZ2lvbiBhdCBaWERIX0ZXX0NPTVBBVF9PRkZTRVQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaWERIX01PRFVMRV9JRAkJMQomIzQzOyNkZWZpbmUgWlhESF9NQUpPUgkJMQomIzQzOyNkZWZpbmUgWlhESF9GV19NSU5PUgkJMAomIzQzOyNkZWZpbmUgWlhESF9EUlZfTUlOT1IJCTAKJiM0MzsvKiBGaXJtd2FyZSBwYXRjaCBsZXZlbCB0aGF0IGludHJvZHVjZWQgdGhlIGhlYWx0aCBidWZmZXIgcHJvdG9jb2wuICovCiYjNDM7I2RlZmluZSBaWERIX0hQSVJRX1BBVENICTQKJiM0MzsKJiM0MzsjZGVmaW5lIFpYREhfRldfQ09NUEFUX1RJTUVPVVRfU0VDCTIwMAomIzQzOyNkZWZpbmUgWlhESF9SSVNDVl9SRUFEWV9USU1FT1VUX1NFQwk0MAomIzQzOwomIzQzOy8qIEZpcm13YXJlIHZlcnNpb24gY29tcGF0aWJpbGl0eSBibG9jayBhdCBaWERIX0ZXX0NPTVBBVF9PRkZTRVQuCiYjNDM7ICogRmllbGRzIGFyZSByZWFkIHRocm91Z2ggaW9yZWFkKigpLCB3aGljaCBjb252ZXJ0cyBmcm9tIGxpdHRsZS1lbmRpYW4uCiYjNDM7ICovCiYjNDM7c3RydWN0IHp4ZGhfZndfY29tcGF0IHsKJiM0MzsJdTggbW9kdWxlX2lkOwomIzQzOwl1OCBtYWpvcjsKJiM0MzsJczggZndfbWlub3I7CiYjNDM7CXU4IGRydl9taW5vcjsKJiM0MzsJdTE2IHBhdGNoOwomIzQzOwl1MTYgcnN2OwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7LyogSGVhbHRoIGJ1ZmZlciBhdCBaWERIX1JJU0NWX0hCX09GRlNFVCwgbWFpbnRhaW5lZCBieSB0aGUgUklTQy1WCiYjNDM7ICogbWFuYWdlbWVudCBjb3JlIG9mIHRoZSBmaXJtd2FyZS4gRmllbGRzIGFyZSByZWFkIHRocm91Z2ggaW9yZWFkKigpLgomIzQzOyAqLwomIzQzO3N0cnVjdCB6eGRoX2hlYWx0aF9idWZmZXIgewomIzQzOwl1MzIgc3luZDsJCS8qIEJpdG1hc2sgb2YgYWN0aXZlIHN5bmRyb21lIGZsYWdzLiAqLwomIzQzOwl1MzIgaGVhbHRoX2NvdW50ZXI7CS8qIEluY3JlbWVudGVkIGhlYXJ0YmVhdCBjb3VudGVyLiAqLwomIzQzOwl1OCBzdGF0dXM7CiYjNDM7CXU4IHJmcjsKJiM0MzsJdTggZndfZXhjZXB0aW9uOwomIzQzOwl1OCByaXNjdl9wb3dlcl9vbjsJLyogU2V0IHRvIDEgb25jZSB0aGUgY29yZSBmaW5pc2hlZCBib290aW5nLiAqLwomIzQzOwl1OCBmd192ZXJzaW9uWzMyXTsKJiM0MzsJdTggcGZfc3RhdHVzWzVdOwomIzQzOwl1OCBoZWFsdGhfdmVyc2lvbjsJLyogSGVhbHRoIGJ1ZmZlciBwcm90b2NvbCB2ZXJzaW9uLiAqLwomIzQzOwl1OCByc3YxWzMwXTsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwogc3RydWN0IHp4ZGhfY29yZV9kZXYgewogCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlzdHJ1Y3QgZGV2bGluayAqZGV2bGluazsKJiM0MzsJc3RydWN0IHp4ZGhfaXJxX3RhYmxlIGlycV90YWJsZTsKJiM0MzsJc3RydWN0IHp4ZGhfZXFfdGFibGUgZXFfdGFibGU7CiAJdm9pZCAqcHJpdjsKIH07CiAKQEAgLTU0LDYgJiM0MzsxMDQsNyBAQCBzdHJ1Y3QgenhkaF9wZl9kZXYgewogCXMzMiBtb2Rlcm5fYmFyczsKIAl2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07CiAJdTMyIGRldl9jZmdfYmFyX29mZjsKJiM0MzsJc3RydWN0IHp4ZGhfZndfY29tcGF0IGZ3X2NvbXBhdDsKIH07CiAKIHZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpOwpAQCAtNzIsNCAmIzQzOzEyMywxMCBAQCBpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKIHZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpOwogaW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiAKJiM0MzsvKiBQRiBJUlEgdGFibGUgKGVuX3BmLmMpICovCiYjNDM7aW50IHp4ZGhfcGZfaXJxX3RhYmxlX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MztpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7dm9pZCB6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7c3RydWN0IHp4ZGhfaXJxICp6eGRoX3BmX2FzeW5jX2lycV9yZXF1ZXN0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7CiAjZW5kaWYgLyogX19aWERIX0VOX1BGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmYxZDdlZWVjMWFlNGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmMKQEAgLTAsMCAmIzQzOzEsMTQ1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gZXZlbnQgcXVldWUgcGx1bWJpbmcKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogQXN5bmMgZXZlbnQgcXVldWVzIGFyZSB0aGUgZGVsaXZlcnkgcGF0aCBmb3IgZmlybXdhcmUgbm90aWZpY2F0aW9uczoKJiM0MzsgKiBhIHF1ZXVlIG93bnMgb25lIE1TSS1YIHZlY3RvciBvZiB0aGUgYXN5bmMgcG9vbCBhbmQgZmFucyBpbnRlcnJ1cHRzCiYjNDM7ICogb3V0IHRvIHRoZSBwZXItZXZlbnQtdHlwZSBub3RpZmllciBjaGFpbnMgb2YgdGhlIGV2ZW50IHF1ZXVlIHRhYmxlLgomIzQzOyAqIFRoZSBCQVIgbWVzc2FnZSBjaGFubmVsIGhhbmRzaGFrZSB0aGF0IHRlbGxzIHRoZSBmaXJtd2FyZSB3aGljaAomIzQzOyAqIHZlY3RvcnMgdG8gc2lnbmFsIGNvbWVzIHdpdGggdGhlIEJBUiBtZXNzYWdlIHN1YnN5c3RlbSBpbiBhIGxhdGVyCiYjNDM7ICogc2VyaWVzOyB0aGUgUEYgc2lkZSB3aXJlZCBoZXJlIGlzIGxpdmUgYXMgc29vbiBhcyB0aGF0IGNoYW5uZWwgaXMKJiM0MzsgKiBlbmFibGVkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbm90aWZpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fcGYuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt6eGRoX2VxLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7enhkaF9pcnEuaCYjMzQ7CiYjNDM7CiYjNDM7LyogUEYgc2lkZSBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGU6IG9uZSBhc3luYyBFUSBmZWQgYnkgdGhlIFJJU0MtVgomIzQzOyAqIG1hbmFnZW1lbnQgY29yZS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSB7CiYjNDM7CXN0cnVjdCB6eGRoX2VxX2FzeW5jIHJpc2N2X2VxOwomIzQzO307CiYjNDM7CiYjNDM7LyogRmV0Y2ggdGhlIGV2ZW50X2lkIHRoZSBSSVNDLVYgY29yZSBwb3N0ZWQgaW4gdGhlIFBGIHJlY2VpdmUKJiM0MzsgKiBzdWItY2hhbm5lbCBvZiB0aGUgQkFSIG1lc3NhZ2UgYXJlYS4gVGhlIGZpZWxkIGxpdmVzIGF0IGJ5dGUgb2Zmc2V0CiYjNDM7ICogMiBvZiB0aGUgMTItYnl0ZSBtZXNzYWdlIGhlYWRlciwgc28gYSBzaW5nbGUgMzItYml0IHJlYWQgb2YgdGhlCiYjNDM7ICogc3ViLWNoYW5uZWwgc3RhcnQgY292ZXJzIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MTYgenhkaF9lcV9ldmVudF9pZF9nZXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdm9pZCBfX2lvbWVtICpzdWJjaGFuOwomIzQzOwomIzQzOwlzdWJjaGFuID0gcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdICYjNDM7IFpYREhfQkFSX01TR19TVUJDSEFOX1JFQ1Y7CiYjNDM7CiYjNDM7CXJldHVybiBpb3JlYWQzMihzdWJjaGFuKSAmZ3Q7Jmd0OyAxNjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGVudW0genhkaF9lcV9ldmVudF90eXBlIHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQodTE2IGV2ZW50X2lkKQomIzQzO3sKJiM0MzsJaWYgKGV2ZW50X2lkID09IFpYREhfTVNHX01PRFVMRV9SSVNDX1JFQURZKQomIzQzOwkJcmV0dXJuIFpYREhfRVFfRVZFTlRfVFlQRV9SSVNDVl9SRUFEWTsKJiM0MzsKJiM0MzsJLyogT25seSB0aGUgUklTQy1WIHJlYWR5IG5vdGlmaWNhdGlvbiBpcyBkaXNwYXRjaGVkIGluIHRoaXMKJiM0MzsJICogc2VyaWVzOyB0aGUgcmVtYWluaW5nIGZpcm13YXJlIGV2ZW50cyBhcnJpdmUgd2l0aCB0aGUgQkFSCiYjNDM7CSAqIG1lc3NhZ2Ugc3Vic3lzdGVtLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIFpYREhfRVFfRVZFTlRfVFlQRV9NQVg7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgenhkaF9lcV9hc3luY19yaXNjdl9pbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9lcV9hc3luYyAqZXEgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCB6eGRoX2VxX2FzeW5jLCBpcnFfbmIpOwomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBlcS0mZ3Q7cHJpdjsKJiM0MzsJZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUgZXZlbnRfdHlwZTsKJiM0MzsKJiM0MzsJZXZlbnRfdHlwZSA9IHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQoenhkaF9lcV9ldmVudF9pZF9nZXQoenhkaF9kZXYpKTsKJiM0MzsJaWYgKGV2ZW50X3R5cGUgPT0gWlhESF9FUV9FVkVOVF9UWVBFX01BWCkKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsKJiM0MzsJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDt6eGRoX2Rldi0mZ3Q7ZXFfdGFibGUubmhbZXZlbnRfdHlwZV0sCiYjNDM7CQkJCSAgIGV2ZW50X3R5cGUsIE5VTEwpOwomIzQzOwomIzQzOwlyZXR1cm4gTk9USUZZX09LOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2VxX3RhYmxlICp0YWJsZSA9ICZhbXA7enhkaF9kZXYtJmd0O2VxX3RhYmxlOwomIzQzOwlzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcHJpdjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CXByaXYgPSBrdnphbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJdGFibGUtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwltdXRleF9pbml0KCZhbXA7dGFibGUtJmd0O2xvY2spOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWlhESF9FUV9FVkVOVF9UWVBFX01BWDsgaSYjNDM7JiM0MzspCiYjNDM7CQlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZhbXA7dGFibGUtJmd0O25oW2ldKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcGZfZXFfdGFibGUgPSB6eGRoX2Rldi0mZ3Q7ZXFfdGFibGUucHJpdjsKJiM0MzsJc3RydWN0IHp4ZGhfZXFfdGFibGUgKnRhYmxlID0gJmFtcDt6eGRoX2Rldi0mZ3Q7ZXFfdGFibGU7CiYjNDM7CXN0cnVjdCB6eGRoX2VxX2FzeW5jICplcSA9ICZhbXA7cGZfZXFfdGFibGUtJmd0O3Jpc2N2X2VxOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dGFibGUtJmd0O2xvY2spOwomIzQzOwomIzQzOwllcS0mZ3Q7cHJpdiA9IHp4ZGhfZGV2OwomIzQzOwllcS0mZ3Q7aXJxID0genhkaF9wZl9hc3luY19pcnFfcmVxdWVzdCh6eGRoX2Rldik7CiYjNDM7CWlmIChJU19FUlIoZXEtJmd0O2lycSkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIoZXEtJmd0O2lycSk7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwllcS0mZ3Q7aXJxX25iLm5vdGlmaWVyX2NhbGwgPSB6eGRoX2VxX2FzeW5jX3Jpc2N2X2ludDsKJiM0MzsJZXJyID0genhkaF9pcnFfYXR0YWNoX25iKGVxLSZndDtpcnEsICZhbXA7ZXEtJmd0O2lycV9uYik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoJmFtcDtlcS0mZ3Q7aXJxLCAxKTsKJiM0MzsJCWVxLSZndDtpcnEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDt0YWJsZS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9wZl9lcV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2VxX3RhYmxlICpwZl9lcV90YWJsZSA9IHp4ZGhfZGV2LSZndDtlcV90YWJsZS5wcml2OwomIzQzOwlzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSAmYW1wO3p4ZGhfZGV2LSZndDtlcV90YWJsZTsKJiM0MzsJc3RydWN0IHp4ZGhfZXFfYXN5bmMgKmVxOwomIzQzOwomIzQzOwlpZiAoIXBmX2VxX3RhYmxlKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcSA9ICZhbXA7cGZfZXFfdGFibGUtJmd0O3Jpc2N2X2VxOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7dGFibGUtJmd0O2xvY2spOwomIzQzOwlpZiAoZXEtJmd0O2lycSkgewomIzQzOwkJenhkaF9pcnFfZGV0YWNoX25iKGVxLSZndDtpcnEsICZhbXA7ZXEtJmd0O2lycV9uYik7CiYjNDM7CQl6eGRoX2lycXNfcmVsZWFzZV92ZWN0b3JzKCZhbXA7ZXEtJmd0O2lycSwgMSk7CiYjNDM7CQllcS0mZ3Q7aXJxID0gTlVMTDsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDt0YWJsZS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDt0YWJsZS0mZ3Q7bG9jayk7CiYjNDM7CWt2ZnJlZSh0YWJsZS0mZ3Q7cHJpdik7CiYjNDM7CXRhYmxlLSZndDtwcml2ID0gTlVMTDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNDk2NWNhMTU5MTJhYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuaApAQCAtMCwwICYjNDM7MSw2MSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIGV2ZW50IHF1ZXVlIGFic3RyYWN0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fWlhESF9FUV9IX18KJiM0MzsjZGVmaW5lIF9fWlhESF9FUV9IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbm90aWZpZXIuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9jb3JlX2RldjsKJiM0MztzdHJ1Y3QgenhkaF9pcnE7CiYjNDM7CiYjNDM7LyogQkFSIG1lc3NhZ2UgYXJlYTogc2hhcmVkLW1lbW9yeSBtYWlsYm94IGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlCiYjNDM7ICogZmlybXdhcmUsIHNwbGl0IGludG8gc3ViLWNoYW5uZWxzIG9mIDIwNDggYnl0ZXMuIE5vdGlmaWNhdGlvbnMgZnJvbQomIzQzOyAqIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIGFyZSBwb3N0ZWQgdG8gdGhlIFBGIHJlY2VpdmUgc3ViLWNoYW5uZWwsCiYjNDM7ICogb25lIGludGVydmFsIGFib3ZlIHRoZSBhcmVhIGJhc2UuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBaWERIX0JBUl9NU0dfT0ZGU0VUCQkweDIwMDAKJiM0MzsjZGVmaW5lIFpYREhfQkFSX01TR19TVUJDSEFOX0lOVEVSVkFMCTIwNDgKJiM0MzsjZGVmaW5lIFpYREhfQkFSX01TR19TVUJDSEFOX1JFQ1YJKFpYREhfQkFSX01TR19PRkZTRVQgJiM0MzsJXAomIzQzOwkJCQkJIFpYREhfQkFSX01TR19TVUJDSEFOX0lOVEVSVkFMKQomIzQzOwomIzQzOy8qIGV2ZW50X2lkIG9mIHRoZSAmIzM0O1JJU0MtViBjb3JlIHJlYWR5JiMzNDsgZmlybXdhcmUgbm90aWZpY2F0aW9uLCBjYXJyaWVkCiYjNDM7ICogYXQgYnl0ZSBvZmZzZXQgMiBvZiB0aGUgQkFSIG1lc3NhZ2UgaGVhZGVyLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWlhESF9NU0dfTU9EVUxFX1JJU0NfUkVBRFkJMTMKJiM0MzsKJiM0MzsvKiBFdmVudCB0eXBlcyB0aGUgdXBwZXIgbGF5ZXJzIGNhbiBzdWJzY3JpYmUgdG8gb3ZlciB0aGUgcGVyLXR5cGUKJiM0MzsgKiBub3RpZmllciBjaGFpbnMgb2YgdGhlIGV2ZW50IHF1ZXVlIHRhYmxlLiBUaGUgZnVsbCBjYXRhbG9ndWUgbGl2ZXMKJiM0MzsgKiBpbiB0aGUgZmlybXdhcmU7IG9ubHkgdGhlIG9uZXMgZGlzcGF0Y2hlZCBpbiB0aGlzIHNlcmllcyBhcmUgbmFtZWQuCiYjNDM7ICovCiYjNDM7ZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUgewomIzQzOwlaWERIX0VRX0VWRU5UX1RZUEVfUklTQ1ZfUkVBRFkgPSAwLAomIzQzOwlaWERIX0VRX0VWRU5UX1RZUEVfTUFYLAomIzQzO307CiYjNDM7CiYjNDM7LyogQXN5bmNocm9ub3VzIGV2ZW50IHF1ZXVlIGRlbGl2ZXJpbmcgZmlybXdhcmUgbm90aWZpY2F0aW9ucyB0byB0aGUKJiM0MzsgKiBkcml2ZXIgd2l0aG91dCBhIHJlcXVlc3QvcmVwbHkgaGFuZHNoYWtlLgomIzQzOyAqLwomIzQzO3N0cnVjdCB6eGRoX2VxX2FzeW5jIHsKJiM0MzsJc3RydWN0IHp4ZGhfaXJxICppcnE7CiYjNDM7CXN0cnVjdCBub3RpZmllcl9ibG9jayBpcnFfbmI7CiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9lcV90YWJsZSB7CiYjNDM7CS8qIE5vdGlmaWVyIGNoYWlucyBmYW5uZWQgb3V0IGJ5IGV2ZW50IHR5cGUuICovCiYjNDM7CXN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBuaFtaWERIX0VRX0VWRU5UX1RZUEVfTUFYXTsKJiM0MzsJLyogU2VyaWFsaXplcyBhc3luYyBFUSBjcmVhdGUvZGVzdHJveS4gKi8KJiM0MzsJc3RydWN0IG11dGV4IGxvY2s7CiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfZXFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7dm9pZCB6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19aWERIX0VRX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNDM3MzQ0MzI5YzdlOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmMKQEAgLTAsMCAmIzQzOzEsNDEyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gSVJRIHBvb2wgbWFuYWdlbWVudAomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBEZXZpY2UgdmVjdG9ycyBhcmUgbWFuYWdlZCBpbiBwZXItcHVycG9zZSBwb29scy4gQW4gSVJRIGNhcnJpZXMgYQomIzQzOyAqIHJlZmNvdW50IHNvIHRoYXQgc2V2ZXJhbCBldmVudCBxdWV1ZXMgY2FuIHNoYXJlIG9uZSB2ZWN0b3I7IG9uCiYjNDM7ICogcmFpc2UsIHRoZSBpbnRlcnJ1cHQgaXMgZmFubmVkIG91dCB0aHJvdWdoIGFuIGF0b21pYyBub3RpZmllciBjaGFpbgomIzQzOyAqIGF0dGFjaGVkIHRvIHRoZSBJUlEuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NwdW1hc2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgveGFycmF5LmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9wZi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3p4ZGhfaXJxLmgmIzM0OwomIzQzOwomIzQzOy8qIFJlbGVhc2UgY2FsbGJhY2sgb2YgdGhlIElSUSBrcmVmLCBjYWxsZWQgd2l0aCBwb29sLSZndDtsb2NrIGhlbGQuICovCiYjNDM7c3RhdGljIHZvaWQgenhkaF9pcnFfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXJxID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB6eGRoX2lycSwgcmVmY291bnQpOwomIzQzOwlzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS0mZ3Q7cG9vbDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3Bvb2wtJmd0O2xvY2spOwomIzQzOwl4YV9lcmFzZSgmYW1wO3Bvb2wtJmd0O2lycXMsIGlycS0mZ3Q7aW5kZXgpOwomIzQzOwkvKiBmcmVlX2lycSgpIHJlcXVpcmVzIHRoZSBhZmZpbml0eSBoaW50IHRvIGJlIGNsZWFyZWQgYmVmb3JlIGl0IGlzCiYjNDM7CSAqIGNhbGxlZDsgdGhlIGFzeW1tZXRyeSB3aXRoIHRoZSBzZXQgcGF0aCBpbiB6eGRoX2lycV9hbGxvYygpIGlzCiYjNDM7CSAqIGludGVudGlvbmFsLgomIzQzOwkgKi8KJiM0MzsJaXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS0mZ3Q7aXJxbiwgTlVMTCk7CiYjNDM7CWZyZWVfY3B1bWFza192YXIoaXJxLSZndDttYXNrKTsKJiM0MzsJZnJlZV9pcnEoaXJxLSZndDtpcnFuLCBpcnEpOwomIzQzOwlrZnJlZShpcnEpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEcm9wIG9uZSByZWZlcmVuY2U7IHJldHVybnMgMSBpZiB0aGUgSVJRIHdhcyByZWxlYXNlZC4gKi8KJiM0MztzdGF0aWMgaW50IHp4ZGhfaXJxX3B1dChzdHJ1Y3QgenhkaF9pcnEgKmlycSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sID0gaXJxLSZndDtwb29sOwomIzQzOwlpbnQgcmVsZWFzZWQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJcmVsZWFzZWQgPSBrcmVmX3B1dCgmYW1wO2lycS0mZ3Q7cmVmY291bnQsIHp4ZGhfaXJxX3JlbGVhc2UpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlbGVhc2VkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHp4ZGhfaXJxX2dldChzdHJ1Y3QgenhkaF9pcnEgKmlycSkKJiM0Mzt7CiYjNDM7CXJldHVybiBrcmVmX2dldF91bmxlc3NfemVybygmYW1wO2lycS0mZ3Q7cmVmY291bnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgenhkaF9pcnFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnEgPSBkYXRhOwomIzQzOwomIzQzOwlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3p4ZGhfaXJxLSZndDtuaCwgMCwgTlVMTCk7CiYjNDM7CiYjNDM7CXJldHVybiBJUlFfSEFORExFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfYWxsb2Moc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsIGludCB2ZWNpZHgsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWZmaW5pdHkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwb29sLSZndDtkZXY7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXJxOwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlpcnEgPSBremFsbG9jX29iaigqaXJxLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFpcnEpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJaXJxLSZndDtwb29sID0gcG9vbDsKJiM0MzsJaXJxLSZndDtpcnFuID0gcGNpX2lycV92ZWN0b3IoenhkaF9kZXYtJmd0O3BkZXYsIHZlY2lkeCk7CiYjNDM7CWlmIChpcnEtJmd0O2lycW4gJmx0OyAwKSB7CiYjNDM7CQllcnIgPSBpcnEtJmd0O2lycW47CiYjNDM7CQlnb3RvIGVycl9pcnFuOwomIzQzOwl9CiYjNDM7CiYjNDM7CUFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoJmFtcDtpcnEtJmd0O25oKTsKJiM0MzsJc25wcmludGYoaXJxLSZndDtuYW1lLCBaWERIX01BWF9JUlFfTkFNRSwgJiMzNDthc3luY18lZEBwY2k6JXMmIzM0OywgdmVjaWR4LAomIzQzOwkJIHBjaV9uYW1lKHp4ZGhfZGV2LSZndDtwZGV2KSk7CiYjNDM7CiYjNDM7CWVyciA9IHJlcXVlc3RfaXJxKGlycS0mZ3Q7aXJxbiwgenhkaF9pcnFfaW50X2hhbmRsZXIsIDAsIGlycS0mZ3Q7bmFtZSwgaXJxKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3JlcXVlc3RfaXJxIGZhaWxlZDogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZ290byBlcnJfaXJxbjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO2lycS0mZ3Q7bWFzaywgR0ZQX0tFUk5FTCkpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt6YWxsb2NfY3B1bWFza192YXIgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfY3B1bWFzazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYWZmaW5pdHkpIHsKJiM0MzsJCWNwdW1hc2tfY29weShpcnEtJmd0O21hc2ssIGFmZmluaXR5KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIE5vIHByZWZlcmVuY2UgcmVxdWVzdGVkOyBzcHJlYWQgb3ZlciBhbGwgb25saW5lIENQVXMuICovCiYjNDM7CQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKJiM0MzsJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBpcnEtJmd0O21hc2spOwomIzQzOwl9CiYjNDM7CWlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtJmd0O2lycW4sIGlycS0mZ3Q7bWFzayk7CiYjNDM7CiYjNDM7CWtyZWZfaW5pdCgmYW1wO2lycS0mZ3Q7cmVmY291bnQpOwomIzQzOwlpcnEtJmd0O2luZGV4ID0gdmVjaWR4OwomIzQzOwllcnIgPSB4YV9lcnIoeGFfc3RvcmUoJmFtcDtwb29sLSZndDtpcnFzLCBpcnEtJmd0O2luZGV4LCBpcnEsIEdGUF9LRVJORUwpKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3hhX3N0b3JlIGZhaWxlZCBmb3IgaXJxICV1OiAlZFxuJiMzNDssCiYjNDM7CQkJaXJxLSZndDtpbmRleCwgZXJyKTsKJiM0MzsJCWdvdG8gZXJyX3hhOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpcnE7CiYjNDM7CiYjNDM7ZXJyX3hhOgomIzQzOwlpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLSZndDtpcnFuLCBOVUxMKTsKJiM0MzsJZnJlZV9jcHVtYXNrX3ZhcihpcnEtJmd0O21hc2spOwomIzQzO2Vycl9jcHVtYXNrOgomIzQzOwlmcmVlX2lycShpcnEtJmd0O2lycW4sIGlycSk7CiYjNDM7ZXJyX2lycW46CiYjNDM7CWtmcmVlKGlycSk7CiYjNDM7CXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX2lycV9hdHRhY2hfbmIoc3RydWN0IHp4ZGhfaXJxICppcnEsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIXp4ZGhfaXJxX2dldChpcnEpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWVyciA9IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYW1wO2lycS0mZ3Q7bmgsIG5iKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXp4ZGhfaXJxX3B1dChpcnEpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgenhkaF9pcnFfZGV0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmFtcDtpcnEtJmd0O25oLCBuYik7CiYjNDM7CXp4ZGhfaXJxX3B1dChpcnEpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWxlYXNlIG9uZSBvciBtb3JlIElSUXMgYmFjayB0byB0aGVpciBwb29sLiAqLwomIzQzO3ZvaWQgenhkaF9pcnFzX3JlbGVhc2VfdmVjdG9ycyhzdHJ1Y3QgenhkaF9pcnEgKippcnFzLCBpbnQgbmlycXMpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5pcnFzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3luY2hyb25pemVfaXJxKGlycXNbaV0tJmd0O2lycW4pOwomIzQzOwkJenhkaF9pcnFfcHV0KGlycXNbaV0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHp4ZGhfY3B1X3B1dChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXBvb2wtJmd0O2lycXNfcGVyX2NwdVtjcHVdLS07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHp4ZGhfY3B1X2dldChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXBvb2wtJmd0O2lycXNfcGVyX2NwdVtjcHVdJiM0MzsmIzQzOzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRmluZCB0aGUgbGVhc3QgbG9hZGVkIENQVSwgaS5lLiB0aGUgQ1BVIHdpdGggdGhlIGZld2VzdCBJUlFzIGJvdW5kCiYjNDM7ICogdG8gaXQsIHdpdGhpbiB0aGUgcmVxdWVzdGVkIG1hc2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6eGRoX2NwdV9nZXRfbGVhc3RfbG9hZGVkKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaykKJiM0Mzt7CiYjNDM7CWludCBiZXN0X2NwdSA9IC0xOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgcmVxX21hc2ssIGNwdV9vbmxpbmVfbWFzaykgewomIzQzOwkJLyogVGhpcyBDUFUgaGFzIG5vIElSUXMgeWV0LCBubyBuZWVkIHRvIGxvb2sgZnVydGhlci4gKi8KJiM0MzsJCWlmICghcG9vbC0mZ3Q7aXJxc19wZXJfY3B1W2NwdV0pIHsKJiM0MzsJCQliZXN0X2NwdSA9IGNwdTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCWlmIChiZXN0X2NwdSAmbHQ7IDApCiYjNDM7CQkJYmVzdF9jcHUgPSBjcHU7CiYjNDM7CQlpZiAocG9vbC0mZ3Q7aXJxc19wZXJfY3B1W2NwdV0gJmx0OyBwb29sLSZndDtpcnFzX3Blcl9jcHVbYmVzdF9jcHVdKQomIzQzOwkJCWJlc3RfY3B1ID0gY3B1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChiZXN0X2NwdSAmbHQ7IDApIHsKJiM0MzsJCWRldl9lcnIocG9vbC0mZ3Q7ZGV2LSZndDtkZXZpY2UsCiYjNDM7CQkJJiMzNDtubyBvbmxpbmUgQ1BVIGluIGFmZmluaXR5IG1hc2sgKCUqcGJsKVxuJiMzNDssCiYjNDM7CQkJY3B1bWFza19wcl9hcmdzKHJlcV9tYXNrKSk7CiYjNDM7CQliZXN0X2NwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTsKJiM0MzsJfQomIzQzOwlwb29sLSZndDtpcnFzX3Blcl9jcHVbYmVzdF9jcHVdJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJcmV0dXJuIGJlc3RfY3B1OwomIzQzO30KJiM0MzsKJiM0MzsvKiBDcmVhdGUgYSBuZXcgSVJRIGZyb20gdGhlIHBvb2wgYW5kIGJpbmQgaXQgdG8gdGhlIHJlcXVlc3RlZCBtYXNrLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxX3Bvb2xfcmVxdWVzdF9pcnEoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsCiYjNDM7CQkJCQkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWZmaW5pdHkgPSByZXFfbWFzazsKJiM0MzsJY3B1bWFza192YXJfdCBhdXRvX21hc2s7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXJxOwomIzQzOwl1MzIgaXJxX2luZGV4OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO2F1dG9fbWFzaywgR0ZQX0tFUk5FTCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJZXJyID0geGFfYWxsb2MoJmFtcDtwb29sLSZndDtpcnFzLCAmYW1wO2lycV9pbmRleCwgTlVMTCwgcG9vbC0mZ3Q7eGFfbnVtX2lycXMsCiYjNDM7CQkgICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWlmIChlcnIgPT0gLUVCVVNZKQomIzQzOwkJCWVyciA9IC1FVVNFUlM7CiYjNDM7CQlnb3RvIGVycl94YTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY3B1bWFza193ZWlnaHQocmVxX21hc2spICZndDsgMSkgewomIzQzOwkJLyogQmluZCB0byB0aGUgbGVhc3QgbG9hZGVkIENQVSBvZiB0aGUgcmVxdWVzdC4gKi8KJiM0MzsJCWNwdW1hc2tfc2V0X2NwdSh6eGRoX2NwdV9nZXRfbGVhc3RfbG9hZGVkKHBvb2wsIHJlcV9tYXNrKSwKJiM0MzsJCQkJYXV0b19tYXNrKTsKJiM0MzsJCWFmZmluaXR5ID0gYXV0b19tYXNrOwomIzQzOwl9IGVsc2UgewomIzQzOwkJenhkaF9jcHVfZ2V0KHBvb2wsIGNwdW1hc2tfZmlyc3QocmVxX21hc2spKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpcnEgPSB6eGRoX2lycV9hbGxvYyhwb29sLCBpcnFfaW5kZXgsIGFmZmluaXR5KTsKJiM0MzsJaWYgKElTX0VSUihpcnEpKQomIzQzOwkJZ290byBlcnJfYWxsb2M7CiYjNDM7CiYjNDM7CWZyZWVfY3B1bWFza192YXIoYXV0b19tYXNrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlycTsKJiM0MzsKJiM0MztlcnJfYWxsb2M6CiYjNDM7CS8qIFVuZG8gdGhlIHBlci1DUFUgYWNjb3VudGluZyBkb25lIGFib3ZlLiAqLwomIzQzOwl6eGRoX2NwdV9wdXQocG9vbCwgY3B1bWFza19maXJzdChhZmZpbml0eSkpOwomIzQzOwl4YV9lcmFzZSgmYW1wO3Bvb2wtJmd0O2lycXMsIGlycV9pbmRleCk7CiYjNDM7ZXJyX3hhOgomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKGF1dG9fbWFzayk7CiYjNDM7CXJldHVybiBlcnIgPyBFUlJfUFRSKGVycikgOiBpcnE7CiYjNDM7fQomIzQzOwomIzQzOy8qIExvb2sgZm9yIHRoZSBJUlEgd2l0aCB0aGUgc21hbGxlc3QgcmVmY291bnQgd2hvc2UgYWZmaW5pdHkgbWFzayBpcyBhCiYjNDM7ICogc3Vic2V0IG9mIHRoZSByZXF1ZXN0ZWQgbWFzay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9wb29sX2ZpbmRfbGVhc3RfbG9hZGVkKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLAomIzQzOwkJCQkJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9pcnEgKmlycSA9IE5VTEw7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXRlcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleDsKJiM0MzsJaW50IGl0ZXJfcmVmY291bnQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJeGFfZm9yX2VhY2hfcmFuZ2UoJmFtcDtwb29sLSZndDtpcnFzLCBpbmRleCwgaXRlciwKJiM0MzsJCQkgIHBvb2wtJmd0O3hhX251bV9pcnFzLm1pbiwgcG9vbC0mZ3Q7eGFfbnVtX2lycXMubWF4KSB7CiYjNDM7CQlpdGVyX3JlZmNvdW50ID0gcmVmY291bnRfcmVhZCgmYW1wO2l0ZXItJmd0O3JlZmNvdW50LnJlZmNvdW50KTsKJiM0MzsKJiM0MzsJCS8qIFNraXAgSVJRcyB3aG9zZSBtYXNrIGlzIG5vdCBhIHN1YnNldCBvZiB0aGUgcmVxdWVzdC4gKi8KJiM0MzsJCWlmICghY3B1bWFza19zdWJzZXQoaXRlci0mZ3Q7bWFzaywgcmVxX21hc2spKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJLyogSVJRIGJlbG93IHRoZSBtaW5pbXVtIHRocmVzaG9sZCBmb3VuZCwgdGFrZSBpdC4gKi8KJiM0MzsJCWlmIChpdGVyX3JlZmNvdW50ICZsdDsgcG9vbC0mZ3Q7bWluX3RocmVzaG9sZCkKJiM0MzsJCQlyZXR1cm4gaXRlcjsKJiM0MzsJCWlmICghaXJxIHx8CiYjNDM7CQkgICAgaXRlcl9yZWZjb3VudCAmbHQ7IHJlZmNvdW50X3JlYWQoJmFtcDtpcnEtJmd0O3JlZmNvdW50LnJlZmNvdW50KSkKJiM0MzsJCQlpcnEgPSBpdGVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpcnE7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlcXVlc3QgYW4gSVJRIGZvciB0aGUgZ2l2ZW4gbWFzazogc2hhcmUgdGhlIGxlYXN0IGxvYWRlZCBleGlzdGluZwomIzQzOyAqIG1hdGNoaW5nIElSUSBvbmNlIGl0IHBhc3NlcyB0aGUgcG9vbCBtaW5pbXVtIHRocmVzaG9sZCwgb3RoZXJ3aXNlCiYjNDM7ICogY3JlYXRlIGEgbmV3IG9uZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9hZmZpbml0eV9yZXF1ZXN0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLAomIzQzOwkJCQkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfaXJxICpsZWFzdF9sb2FkZWRfaXJxOwomIzQzOwlzdHJ1Y3QgenhkaF9pcnEgKm5ld19pcnE7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJbGVhc3RfbG9hZGVkX2lycSA9IHp4ZGhfaXJxX3Bvb2xfZmluZF9sZWFzdF9sb2FkZWQocG9vbCwgcmVxX21hc2spOwomIzQzOwlpZiAobGVhc3RfbG9hZGVkX2lycSAmYW1wOyZhbXA7CiYjNDM7CSAgICByZWZjb3VudF9yZWFkKCZhbXA7bGVhc3RfbG9hZGVkX2lycS0mZ3Q7cmVmY291bnQucmVmY291bnQpICZsdDsgcG9vbC0mZ3Q7bWluX3RocmVzaG9sZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBObyBJUlEgYmVsb3cgdGhlIG1pbmltdW0gdGhyZXNob2xkLCB0cnkgdG8gY3JlYXRlIGEgbmV3IG9uZS4gKi8KJiM0MzsJbmV3X2lycSA9IHp4ZGhfaXJxX3Bvb2xfcmVxdWVzdF9pcnEocG9vbCwgcmVxX21hc2spOwomIzQzOwlpZiAoSVNfRVJSKG5ld19pcnEpKSB7CiYjNDM7CQlpZiAoIWxlYXN0X2xvYWRlZF9pcnEpIHsKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJCQlyZXR1cm4gbmV3X2lycTsKJiM0MzsJCX0KJiM0MzsJCS8qIENvdWxkIG5vdCBjcmVhdGUgYSBuZXcgSVJRIGZvciB0aGUgcmVxdWVzdGVkIGFmZmluaXR5LAomIzQzOwkJICogc2hhcmUgdGhlIGV4aXN0aW5nIG9uZS4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X3dhcm4ocG9vbC0mZ3Q7ZGV2LSZndDtkZXZpY2UsCiYjNDM7CQkJICYjMzQ7aXJxIHBvb2wgJXMgZXhoYXVzdGVkLCBzaGFyaW5nIGlycXNcbiYjMzQ7LAomIzQzOwkJCSBwb29sLSZndDtuYW1lKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWxlYXN0X2xvYWRlZF9pcnEgPSBuZXdfaXJxOwomIzQzOwlnb3RvIHVubG9jazsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CS8qIEhvbGRpbmcgcG9vbC0mZ3Q7bG9jayBrZWVwcyB0aGUgSVJRIGFsaXZlLCBzbyB0aGlzIGNhbm5vdCBmYWlsLiAqLwomIzQzOwl6eGRoX2lycV9nZXQobGVhc3RfbG9hZGVkX2lycSk7CiYjNDM7CWlmIChyZWZjb3VudF9yZWFkKCZhbXA7bGVhc3RfbG9hZGVkX2lycS0mZ3Q7cmVmY291bnQucmVmY291bnQpICZndDsgcG9vbC0mZ3Q7bWF4X3RocmVzaG9sZCkKJiM0MzsJCWRldl93YXJuKHBvb2wtJmd0O2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSAmIzM0O2lycSAldSBvdmVybG9hZGVkLCBwb29sICVzLCAldSByZWZzIG9uIHRoaXMgaXJxXG4mIzM0OywKJiM0MzsJCQkgcGNpX2lycV92ZWN0b3IocG9vbC0mZ3Q7ZGV2LSZndDtwZGV2LAomIzQzOwkJCQkJbGVhc3RfbG9hZGVkX2lycS0mZ3Q7aW5kZXgpLAomIzQzOwkJCSBwb29sLSZndDtuYW1lLAomIzQzOwkJCSByZWZjb3VudF9yZWFkKCZhbXA7bGVhc3RfbG9hZGVkX2lycS0mZ3Q7cmVmY291bnQucmVmY291bnQpIC8KJiM0MzsJCQkgWlhESF9FUV9SRUZTX1BFUl9JUlEpOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBsZWFzdF9sb2FkZWRfaXJxOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXF1ZXN0IGFuIElSUSBmcm9tIHRoZSBwb29sLCBzcHJlYWQgb3ZlciB0aGUgb25saW5lIENQVXMuICovCiYjNDM7c3RydWN0IHp4ZGhfaXJxICp6eGRoX2dldF9pcnFfb2ZfcG9vbChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCkKJiM0Mzt7CiYjNDM7CWNwdW1hc2tfdmFyX3QgcmVxX21hc2s7CiYjNDM7CXN0cnVjdCB6eGRoX2lycSAqaXJxOwomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO3JlcV9tYXNrLCBHRlBfS0VSTkVMKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwljcHVtYXNrX2NvcHkocmVxX21hc2ssIGNwdV9vbmxpbmVfbWFzayk7CiYjNDM7CiYjNDM7CWlycSA9IHp4ZGhfaXJxX2FmZmluaXR5X3JlcXVlc3QocG9vbCwgcmVxX21hc2spOwomIzQzOwomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKHJlcV9tYXNrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlycTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnp4ZGhfaXJxX3Bvb2xfYWxsb2Moc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LAomIzQzOwkJCQkJICBpbnQgc3RhcnQsIGludCBzaXplLCBjb25zdCBjaGFyICpuYW1lLAomIzQzOwkJCQkJICB1MzIgbWluX3RocmVzaG9sZCwgdTMyIG1heF90aHJlc2hvbGQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbDsKJiM0MzsJdTE2ICppcnFzX3Blcl9jcHU7CiYjNDM7CiYjNDM7CWlycXNfcGVyX2NwdSA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCppcnFzX3Blcl9jcHUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFpcnFzX3Blcl9jcHUpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJcG9vbCA9IGt2emFsbG9jX29iaigqcG9vbCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcG9vbCkgewomIzQzOwkJa2ZyZWUoaXJxc19wZXJfY3B1KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBvb2wtJmd0O2RldiA9IHp4ZGhfZGV2OwomIzQzOwlwb29sLSZndDtpcnFzX3Blcl9jcHUgPSBpcnFzX3Blcl9jcHU7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwb29sLSZndDtsb2NrKTsKJiM0MzsJeGFfaW5pdF9mbGFncygmYW1wO3Bvb2wtJmd0O2lycXMsIFhBX0ZMQUdTX0FMTE9DKTsKJiM0MzsJcG9vbC0mZ3Q7eGFfbnVtX2lycXMubWluID0gc3RhcnQ7CiYjNDM7CXBvb2wtJmd0O3hhX251bV9pcnFzLm1heCA9IHN0YXJ0ICYjNDM7IHNpemUgLSAxOwomIzQzOwlzbnByaW50Zihwb29sLSZndDtuYW1lLCBaWERIX01BWF9JUlFfTkFNRSwgJiMzNDslcyYjMzQ7LCBuYW1lKTsKJiM0MzsKJiM0MzsJLyogVGhyZXNob2xkcyBhcmUgZXhwcmVzc2VkIGluIHF1ZXVlIHJlZmVyZW5jZXMsIHR3byBwZXIgSVJRLiAqLwomIzQzOwlwb29sLSZndDttaW5fdGhyZXNob2xkID0gbWluX3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJROwomIzQzOwlwb29sLSZndDttYXhfdGhyZXNob2xkID0gbWF4X3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJROwomIzQzOwomIzQzOwlyZXR1cm4gcG9vbDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB6eGRoX2lycV9wb29sX2ZyZWUoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9pcnEgKmlycTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleDsKJiM0MzsJdTMyIGNwdTsKJiM0MzsKJiM0MzsJLyogT24gYSBmYXN0IHRlYXJkb3duIHRoZSB0YWJsZSBtYXkgc3RpbGwgaG9sZCBJUlFzOyByZWxlYXNlCiYjNDM7CSAqIHdoYXRldmVyIGlzIGxlZnQuCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7CiYjNDM7CXhhX2Zvcl9lYWNoKCZhbXA7cG9vbC0mZ3Q7aXJxcywgaW5kZXgsIGlycSkKJiM0MzsJCXp4ZGhfaXJxX3JlbGVhc2UoJmFtcDtpcnEtJmd0O3JlZmNvdW50KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7CiYjNDM7CXhhX2Rlc3Ryb3koJmFtcDtwb29sLSZndDtpcnFzKTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3Bvb2wtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAocG9vbC0mZ3Q7aXJxc19wZXJfY3B1KSB7CiYjNDM7CQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKJiM0MzsJCQlXQVJOX09OKHBvb2wtJmd0O2lycXNfcGVyX2NwdVtjcHVdKTsKJiM0MzsJCWtmcmVlKHBvb2wtJmd0O2lycXNfcGVyX2NwdSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3ZmcmVlKHBvb2wpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjg5ZjQ2ZDdiMTFjOWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oCkBAIC0wLDAgJiM0MzsxLDcyIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gSVJRIHBvb2wgbWFuYWdlbWVudAomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX1pYREhfSVJRX0hfXwomIzQzOyNkZWZpbmUgX19aWERIX0lSUV9IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3B1bWFzay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rcmVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCB6eGRoX2NvcmVfZGV2OwomIzQzOwomIzQzOy8qIE51bWJlciBvZiBNU0ktWCB2ZWN0b3JzIHBlciBwdXJwb3NlLiBUaGUgbGF5b3V0IG9mIHRoZSB2ZWN0b3Igc3BhY2UKJiM0MzsgKiBpcyBhIGhhcmR3YXJlIGludGVyZmFjZToKJiM0MzsgKiAgIFswLCA4KSAgICBhc3luYyBldmVudCBxdWV1ZXMKJiM0MzsgKiAgIFs4LCAxNCkgICByZXNlcnZlZCBmb3IgUkRNQSAodW51c2VkIGZvciBub3cpCiYjNDM7ICogICBbMTQsIDc4KSAgdnEgcngvdHggcXVldWUgcGFpcnMKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFpYREhfQVNZTkNfQ0hBTk5FTFNfTlVNCQk4CiYjNDM7I2RlZmluZSBaWERIX1JETUFfQ0hBTk5FTFNfTlVNCQk2CiYjNDM7I2RlZmluZSBaWERIX1ZRU19DSEFOTkVMU19OVU0JCTY0CiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX01BWF9JUlFfTkFNRQkxMDAKJiM0MzsjZGVmaW5lIFpYREhfRVFfUkVGU19QRVJfSVJRCTIKJiM0MzsKJiM0MzsvKiBSZWZlcmVuY2UgY291bnRlZCBpbnRlcnJ1cHQuIEV2ZW50IHF1ZXVlcyBzaGFyZSBhbiBJUlEgdGhyb3VnaCB0aGUKJiM0MzsgKiBub3RpZmllciBjaGFpbiwgd2hpY2ggaXMgZmlyZWQgZnJvbSBoYXJkIElSUSBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0cnVjdCB6eGRoX2lycSB7CiYjNDM7CXN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBuaDsKJiM0MzsJY3B1bWFza192YXJfdCBtYXNrOwkJLyogaW50ZXJydXB0IGFmZmluaXR5ICovCiYjNDM7CWNoYXIgbmFtZVtaWERIX01BWF9JUlFfTkFNRV07CiYjNDM7CXN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sOwomIzQzOwl1MzIgaW5kZXg7CQkJLyogdmVjdG9yIGluZGV4ICovCiYjNDM7CWludCBpcnFuOwkJCS8qIExpbnV4IElSUSBudW1iZXIgKi8KJiM0MzsJc3RydWN0IGtyZWYgcmVmY291bnQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBQb29sIG9mIHZlY3RvcnMgZGVkaWNhdGVkIHRvIG9uZSBwdXJwb3NlLCBpZGVudGlmaWVkIGJ5IHRoZQomIzQzOyAqIFt4YV9udW1faXJxcy5taW4sIHhhX251bV9pcnFzLm1heF0gdmVjdG9yIHJhbmdlLgomIzQzOyAqLwomIzQzO3N0cnVjdCB6eGRoX2lycV9wb29sIHsKJiM0MzsJY2hhciBuYW1lW1pYREhfTUFYX0lSUV9OQU1FXTsKJiM0MzsJc3RydWN0IHhhX2xpbWl0IHhhX251bV9pcnFzOwomIzQzOwlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIHNlcmlhbGl6ZXMgSVJRIGNyZWF0aW9uICovCiYjNDM7CXN0cnVjdCB4YXJyYXkgaXJxczsKJiM0MzsJdTMyIG1pbl90aHJlc2hvbGQ7CQkvKiBpbiBxdWV1ZSByZWZlcmVuY2VzICovCiYjNDM7CXUzMiBtYXhfdGhyZXNob2xkOwkJLyogaW4gcXVldWUgcmVmZXJlbmNlcyAqLwomIzQzOwl1MTYgKmlycXNfcGVyX2NwdTsJCS8qIG51bWJlciBvZiBJUlFzIGJvdW5kIHBlciBDUFUgKi8KJiM0MzsJc3RydWN0IHp4ZGhfY29yZV9kZXYgKmRldjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB6eGRoX2lycV90YWJsZSB7CiYjNDM7CXZvaWQgKnByaXY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfZ2V0X2lycV9vZl9wb29sKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTsKJiM0MztpbnQgenhkaF9pcnFfYXR0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKJiM0MztpbnQgenhkaF9pcnFfZGV0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKJiM0Mzt2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKTsKJiM0MztzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsCiYjNDM7CQkJCQkgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJCQkgIHUzMiBtaW5fdGhyZXNob2xkLCB1MzIgbWF4X3RocmVzaG9sZCk7CiYjNDM7dm9pZCB6eGRoX2lycV9wb29sX2ZyZWUoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfX1pYREhfSVJRX0hfXyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE2NAoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDI3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpURSBEaW5nSGFpIEV0aGVybmV0IERyaXZlciBQYXRjaCBmb3IgU3l6a2FsbGVyIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGUgdGFzayBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMga2VybmVsIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgcGF0Y2ggYWRkcyBhIGJ1bmNoIG9mIGZpbGVzIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaWAuICBTcGVjaWZpY2FsbHk6ICBgTWFrZWZpbGVgLCBgZW5fcGYuY2AsIGBlbl9wZi5oYCwgYHp4ZGhfZXEuY2AsIGB6eGRoX2VxLmhgLCBgenhkaF9pcnEuY2AsIGFuZCBgenhkaF9pcnEuaGAuICBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBlc3RhYmxpc2ggdGhlIGNvbnRleHQgb2YgdGhpcyBkcml2ZXIuICBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBwaHlzaWNhbCBQQ0kgZGV2aWNlLCBhbiBBU0lDLCBvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBlbXVsYXRlZCBvciBhY2Nlc3NpYmxlIGluIHNvbWUgd2F5LiAgVGhlIGRlY2lkaW5nIGZhY3RvciBpcyB3aGV0aGVyIGl0IGlzIGEgcGh5c2ljYWwgZGV2aWNlLCBhbmQgaWYgc28sIGhvdyBhY2Nlc3NpYmxlIGl0IGlzLiAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoYXQuIFRoYXQgd2lsbCBkaWN0YXRlIHRoZSBmdXp6aW5nIGFwcHJvYWNoIGFuZCB0aGUgb3ZlcmFsbCB2YWx1ZSBvZiBmdXp6aW5nIHRoaXMgcGFydGljdWxhciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RJTkdIQUkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9MzAxOTU9RjpcdHNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jXG5NQUlOVEFJTkVSUy0zMDE5Ni1cbk1BSU5UQUlORVJTOjMwMTk3OlpURSBESU5HSEFJIEVUSEVSTkVUIERSSVZFUlxuTUFJTlRBSU5FUlMtMzAxOTgtTTpcdEp1bnlhbmcgSGFuIFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ESU5HSEFJKSAmIzQzOz0gZGluZ2hhaS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnOjY6Y29uZmlnIERJTkdIQUlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctNy0gICAgYm9vbCBcJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzoyMTppZiBESU5HSEFJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTIyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzoyMzpjb25maWcgRElOR0hBSV9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy0yNC0gICAgdHJpc3RhdGUgXCYjMzQ7WlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzozNDplbmRpZiAjIERJTkdIQUlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRElOR0hBSV9QRikgJiM0Mzs9IGRpbmdoYWkxMGUub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUtNy1kaW5naGFpMTBlLXkgOj0gZW5fcGYubyB6eGRoX2lycS5vIHp4ZGhfZXEub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTcwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZToKCioqRGl2aW5nIGludG8gdGhlIFpURSBEaW5naGFpIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdgLiBSaWdodCBhd2F5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG5ldHdvcmsgZHJpdmVyIHNwZWNpZmljIHRvIFpURSYjMzk7cyBEaW5naGFpIHBsYXRmb3JtLiBHaXZlbiB0aGUgcGF0aCwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IG1vZHVsZSBlbmFibGUgZmxhZ3MsIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgRE1BIHNldHRpbmdzIG9yIFBIWSBjb25maWd1cmF0aW9ucywgcGVyaGFwcyBldmVuIHBsYXRmb3JtIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIEtjb25maWcgYW5kIHRoZSBvdGhlciBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBkcml2ZXJzIG9yIHN1YnN5c3RlbXM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgaW5jbHVkZXMgYmFzZWQgb24gc3BlY2lmaWMgYm9hcmQgcmV2aXNpb25zIG9yIGhhcmR3YXJlIHJldmlzaW9ucyB3aXRoaW4gdGhlIERpbmdoYWkgZmFtaWx5PyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgY29uZmlnIFpURV9ESU5HSEFJYCBhcyBhIHRvcC1sZXZlbCBzeW1ib2wsIGFuZCB0aGVuIG5lc3RlZCBvcHRpb25zIGRldGFpbGluZyB0aGluZ3MgbGlrZSBkaWZmZXJlbnQgTUFDIGFkZHJlc3Nlcywgc3BlY2lmaWMgUEhZIHN1cHBvcnQgKGxpa2UgYENPTkZJR19QSFlfWFhYWGApLCBhbnkgZGV2aWNlLXRyZWUtcmVsYXRlZCBzZXR0aW5ncywgb3IgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLiBBbnkgdXNlIG9mIGBzZWxlY3RgIHN0YXRlbWVudHMgdG8gcHVsbCBpbiBvdGhlciBzdXBwb3J0aW5nIG1vZHVsZXMgd2lsbCBiZSBpbXBvcnRhbnQgdG8gbm90ZS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgYmUgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gWlRFJiMzOTtzIGRlc2lnbiBjaG9pY2VzIG9yIGN1c3RvbWl6YXRpb25zLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHNjYW4sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGtleSBjb25maWd1cmFibGUgZWxlbWVudHMgdGhhdCBjb250cm9sIHRoaXMgZHJpdmVyJiMzOTtzIGJlaGF2aW9yIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCBjYW4gYmUgZW5hYmxlZC4gVWx0aW1hdGVseSwgdGhlIGdvYWwgaXMgdG8gZnVsbHkgZ3Jhc3Agd2hhdCBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgdmlhIHRoaXMgY29uZmlnIGZpbGUgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZXRoZXJuZXQgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBESU5HSEFJXG4gICA3Olx0ICAgIGJvb2wgXCYjMzQ7WlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG4gICA4Olx0ICAgIGRlcGVuZHMgb24gUENJXG4gICA5Olx0ICAgIHNlbGVjdCBORVRfREVWTElOS1xuICAxMDpcdCAgICBoZWxwXG4gIDExOlx0ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZGV2aWNlcy5cbiAgMTI6XHRcbiAgMTM6XHQgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHNcbiAgMTQ6XHQgICAgICBtdWx0aXBsZSBmZWF0dXJlcyBpbmNsdWRpbmcgaGFyZHdhcmUgb2ZmbG9hZGluZywgU1ItSU9WLCBhbmRcbiAgMTU6XHQgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXG4gIDE2Olx0XG4gIDE3Olx0ICAgICAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gc2VsZWN0IHNwZWNpZmljIGRyaXZlciB2YXJpYW50cyBiZWxvdy5cbiAgMTg6XHRcbiAgMTk6XHQgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuICAyMDpcdFxuICAyMTpcdGlmIERJTkdIQUlcbiAgMjI6XHRcbiAgMjM6XHRjb25maWcgRElOR0hBSV9QRlxuICAyNDpcdCAgICB0cmlzdGF0ZSBcJiMzNDtaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwmIzM0O1xuICAyNTpcdCAgICBoZWxwXG4gIDI2Olx0ICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgWlRFIERpbmdIYWkgUENJIEV4cHJlc3MgRXRoZXJuZXRcbiAgMjc6XHQgICAgICBhZGFwdGVycyAoUEYpLlxuICAyODpcdFxuICAyOTpcdCAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgMzA6XHQgICAgICB3aWxsIGJlIG5hbWVkIGRpbmdoYWkxMGUuXG4gIDMxOlx0XG4gIDMyOlx0ICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzM6XHRcbiAgMzQ6XHRlbmRpZiAjIERJTkdIQUlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFdvcnRoRnV6emluZyBmb3IgdGhlIFpURSBEaW5nSGFpIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNvbnNpZGVyIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgbW9kaWZpZWQgY29kZSBmYWxscyBpbnRvIGNlcnRhaW4gbmVnYXRpdmUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIuIExvb2tpbmcgYXQgdGhhdCBzZWN0aW9uLCBJIG5lZWQgdG8gc2VlIGlmIHRoZSBjaGFuZ2VzIHRvdWNoIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuCgpGaXJzdCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiBaVEUgRGluZ0hhaSBmYWxscyB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgVGhlIGNyaXRlcmlhIHNwZWNpZnkgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLiBCYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGF0Y2ggYW5kIG15IGtub3dsZWRnZSwgaXQgbG9va3MgbGlrZToKCiogICBUaGUgZHJpdmVyIHVzZXMgUENJIHZlbmRvciBJRCBgMHgxY2YyYCAoWlRFIENvcnBvcmF0aW9uKSwgd2hpY2ggaXMgYSBjbGVhciBpbmRpY2F0aW9uIG9mIGEgdmVuZG9yLXNwZWNpZmljIGRldmljZS4KKiAgIEl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYSBQQ0kgZHJpdmVyIHZpYSBgbW9kdWxlX3BjaV9kcml2ZXJgLCBjb21tdW5pY2F0aW5nIHZpYSBCQVIgcmVnaXN0ZXJzLCBNU0ktWCBpbnRlcnJ1cHRzLCBhbmQgbGlrZWx5IHdpdGggb24tY2hpcCBmaXJtd2FyZS4KKiAgIENydWNpYWxseSwgdGhlIHByb21wdCBzdGF0ZXMgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgWlRFIERpbmdIYWkgUENJIE5JQ3MuCgpUaGVyZWZvcmUsICpwcmltYSBmYWNpZSosIHRoaXMgWlRFIERpbmdIYWkgZHJpdmVyIGFwcGVhcnMgdG8gYmUgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIFNtYXJ0TklDIC8gRXRoZXJuZXQgY29udHJvbGxlciBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24uIEl0IHNhdGlzZmllcyB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjcml0ZXJpYS4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHZpcnR1YWwgYnVzLCBzb2Z0d2FyZSBtb2NrLCBvciBzdGFuZGFyZCB2aXJ0dWFsIGRldmljZSB0aGF0IGNvdWxkIGluc3RhbnRpYXRlIG9yIHJlYWNoIHRoaXMgZHJpdmVyIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgZW5fcGYuY2AsIGJ1dCBiYXNlZCBvbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBhbnN3ZXIgaXMgbm8uIFVubGVzcyBJIGZpbmQgc29tZXRoaW5nIHVuZXhwZWN0ZWQsIG15IGluaXRpYWwgYXNzZXNzbWVudCBzdGFuZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlcnxtb2R1bGVfcGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM9NjY2PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB6eGRoX3BmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY3My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Njc0Om1vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkwMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFBDSSBUYWJsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGB6eGRoX3BmX3BjaV90YWJsZWAgd2l0aGluIGBlbl9wZi5jYC4gVGhhdCB0YWJsZSBpcyB1c3VhbGx5IHdoZXJlIEkgZmluZCB0aGUgY29yZSBtYXBwaW5ncyBhbmQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBQQ0kgZGV2aWNlcyB3aXRoaW4gdGhlIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgY29udGV4dC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSByZWxldmFudCBlbnRyaWVzIHRoYXQgZGVmaW5lIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaW50ZXJydXB0cyBhcmUgcm91dGVkLCBkZXZpY2UgSURzIGFuZCBtYXliZSBldmVuIERNQSBzZXR0aW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFBDSSBkZXZpY2VzIGFyZSBiZWluZyBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCBoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgdGFibGUgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdCNpbmNsdWRlIFwmIzM0O2VuX3BmLmhcJiMzNDtcbiAgMTY6XHQjaW5jbHVkZSBcJiMzNDtkaF9xdWV1ZS5oXCYjMzQ7XG4gIDE3Olx0XG4gIDE4Olx0TU9EVUxFX0FVVEhPUihcJiMzNDtKdW55YW5nIEhhbiBcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXHUwMDNlXCYjMzQ7KTtcbiAgMTk6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WlRFIERpbmdIYWkgc2VyaWVzIEV0aGVybmV0IGRyaXZlclwmIzM0Oyk7XG4gIDIwOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIHp4ZGhfcGZfZGV2bGlua19vcHMgPSB7fTtcbiAgMjM6XHRcbiAgMjQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcbiAgMjU6XHRcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9QRl9ERVZJQ0VfSUQpIH0sXG4gIDI2Olx0XHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfVkZfREVWSUNFX0lEKSB9LFxuICAyNzpcdFx0eyB9XG4gIDI4Olx0fTtcbiAgMjk6XHRcbiAgMzA6XHRNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenhkaF9wZl9wY2lfdGFibGUpO1xuICAzMTpcdFxuICAzMjpcdHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSB7XG4gIDMzOlx0XHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqYXN5bmNfcG9vbDtcbiAgMzQ6XHR9O1xuICAzNTpcdFxuICAzNjpcdC8qIElSUSBjb21wYWN0aW9uIHRocmVzaG9sZHMgb2YgdGhlIGFzeW5jIHBvb2wsIGluIG51bWJlciBvZiBxdWV1ZXMuICovXG4gIDM3Olx0I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NSU5fQ09NUFx0MFxuICAzODpcdCNkZWZpbmUgWlhESF9QRl9BU1lOQ19JUlFfTUFYX0NPTVBcdDdcbiAgMzk6XHRcbiAgNDA6XHR2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKVxuICA0MTpcdHtcbiAgNDI6XHRcdHZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuICA0MzpcdFxuICA0NDpcdFx0aWYgKHByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjE2CgkJCQkJCQlvdXRwdXQ6IDEyMQoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBhZmZlY3RpbmcgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9gLiBMb29raW5nIGF0IHRoZSBmaWxlbmFtZXMsIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgZm9yIGEgc3BlY2lmaWMgUENJZSBOSUMsIGFuZCBmcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGlzbiYjMzk7dCBzb21ldGhpbmcgdGhhdCYjMzk7cyBlbXVsYXRlZCBpbiB5b3VyIHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzIGxpa2UgUUVNVSBvciBHQ0UuCgpHaXZlbiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhpcyBjb2RlIGlzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGR1cmluZyBvdXIgdHlwaWNhbCBmdXp6aW5nIHByb2Nlc3Nlcy4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGF0IGhhcmQgZmFjdCwgdGhlcmUgaXMgbm8gdmFsdWUgaW4gbWFraW5nIGFueSBmdXp6aW5nIGFkanVzdG1lbnRzIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIFRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGNyZWF0aW5nIGZ1enppbmcgc3ltYm9scyBvciBlbmFibGluZyBjb25maWd1cmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgcGF0Y2gsIGFzIGl0IGlzLiBUaGVyZWZvcmUsIGJvdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIHNldCB0byBlbXB0eSBhcnJheXMuIEkmIzM5O3ZlIGdvdCBteSByZWFzb25pbmcgbGFpZCBvdXQgcHJldHR5IGNsZWFybHk6IHRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGlzIERpbmdIYWkgZHJpdmVyIGZvciBzcGVjaWZpYyBQQ0llIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGFjY2Vzc2libGUgaW4gZnV6emluZy4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDU6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS8pLCBhZGRpbmcgSVJRIHBvb2wgbWFuYWdlbWVudCBhbmQgZXZlbnQgcXVldWUgcGx1bWJpbmcgZm9yIFpURSBEaW5nSGFpIFBDSWUgYWRhcHRlcnMgKFBDSSB2ZW5kb3IgSUQgMHgxY2YyKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvKSwgYWRkaW5nIElSUSBwb29sIG1hbmFnZW1lbnQgYW5kIGV2ZW50IHF1ZXVlIHBsdW1iaW5nIGZvciBaVEUgRGluZ0hhaSBQQ0llIGFkYXB0ZXJzIChQQ0kgdmVuZG9yIElEIDB4MWNmMikuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA1OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoxMi4xMjQ3NTMwNzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjEwNTI3NjMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpLyksIGFkZGluZyBJUlEgcG9vbCBtYW5hZ2VtZW50IGFuZCBldmVudCBxdWV1ZSBwbHVtYmluZyBmb3IgWlRFIERpbmdIYWkgUENJZSBhZGFwdGVycyAoUENJIHZlbmRvciBJRCAweDFjZjIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoxMi4xMjQ3NTg4NDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODA0NDQ2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZTNlZjQ5NmE5MzVkNGZjZGMzNzQxMGI5NzBlNDczZDhiNmI5YzAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA1OjAzOjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcXG5pbmRleCBlMmY0ZGEzM2RmNTkzLi4yZGM2ZDY4Y2MwZTEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcXG5AQCAtNCw0ICs0LDQgQEBcXG4gI1xcbiBcXG4gb2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICs9IGRpbmdoYWkxMGUub1xcbi1kaW5naGFpMTBlLXkgOj0gZW5fcGYub1xcbitkaW5naGFpMTBlLXkgOj0gZW5fcGYubyB6eGRoX2lycS5vIHp4ZGhfZXEub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xcbmluZGV4IDg2ZDQzNzQwODgyMDMuLmZlMzkyNGI4OTBkMTcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcXG5AQCAtNiw2ICs2LDEwIEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImVuX3BmLmhcXFwiXFxuQEAgLTI1LDYgKzI5LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xcbiBcXG4gTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHp4ZGhfcGZfcGNpX3RhYmxlKTtcXG4gXFxuK3N0cnVjdCB6eGRoX3BmX2lycV90YWJsZSB7XFxuK1xcdHN0cnVjdCB6eGRoX2lycV9wb29sICphc3luY19wb29sO1xcbit9O1xcbitcXG4rLyogSVJRIGNvbXBhY3Rpb24gdGhyZXNob2xkcyBvZiB0aGUgYXN5bmMgcG9vbCwgaW4gbnVtYmVyIG9mIHF1ZXVlcy4gKi9cXG4rI2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NSU5fQ09NUFxcdDBcXG4rI2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUFxcdDdcXG4rXFxuIHZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXFxuIHtcXG4gXFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuQEAgLTM2OSw2ICszODEsMTc3IEBAIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qIFJlYWQgdGhlIGZpcm13YXJlIHZlcnNpb24gYmxvY2sgYW5kIHZlcmlmeSB0aGUgZHJpdmVyL2Zpcm13YXJlXFxuKyAqIHZlcnNpb24gY29udHJhY3QuXFxuKyAqL1xcbitzdGF0aWMgaW50IHp4ZGhfcGZfZndfY29tcGF0X2NoZWNrKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgenhkaF9md19jb21wYXQgX19pb21lbSAqY29tcGF0O1xcbitcXHRzdHJ1Y3QgenhkaF9md19jb21wYXQgKmZ3X2NvbXBhdDtcXG4rXFx0dTMyIGVyYXNlZDtcXG4rXFxuK1xcdGZ3X2NvbXBhdCA9IFxcdTAwMjZwZl9kZXYtXFx1MDAzZWZ3X2NvbXBhdDtcXG4rXFx0Y29tcGF0ID0gcGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdICsgWlhESF9GV19DT01QQVRfT0ZGU0VUO1xcbitcXG4rXFx0LyogVGhlIHJlZ2lvbiByZWFkcyBhcyBhbGwgb25lcyB1bnRpbCB0aGUgZmlybXdhcmUgcG9wdWxhdGVzIGl0IGF0XFxuK1xcdCAqIHRoZSBlbmQgb2YgaXRzIGJvb3Q7IGFsbG93IHVwIHRvIDIwMCBzIGZvciBhIGNvbGQgYm9vdC5cXG4rXFx0ICovXFxuK1xcdHJlYWR4X3BvbGxfdGltZW91dChpb3JlYWQzMiwgY29tcGF0LCBlcmFzZWQsIGVyYXNlZCAhPSAweGZmZmZmZmZmVSxcXG4rXFx0XFx0XFx0ICAgVVNFQ19QRVJfU0VDLFxcbitcXHRcXHRcXHQgICBaWERIX0ZXX0NPTVBBVF9USU1FT1VUX1NFQyAqIFVTRUNfUEVSX1NFQyk7XFxuK1xcbitcXHQvKiBGaXJtd2FyZSBwcmVkYXRpbmcgdGhlIGNvbXBhdGliaWxpdHkgcmVnaW9uIGtlZXBzIHRoZSBlcmFzZWRcXG4rXFx0ICogcGF0dGVybiwgd2hpY2ggZmFpbHMgdGhlIG1vZHVsZSBpZCBjaGVjayBiZWxvdyBhbmQgZGVmZXJzIHRoZVxcbitcXHQgKiBkZWNpc2lvbiB0byB0aGUgcmVhZGluZXNzIHdhaXQuXFxuK1xcdCAqL1xcbitcXHRmd19jb21wYXQtXFx1MDAzZW1vZHVsZV9pZCA9IGlvcmVhZDgoXFx1MDAyNmNvbXBhdC1cXHUwMDNlbW9kdWxlX2lkKTtcXG4rXFx0ZndfY29tcGF0LVxcdTAwM2VtYWpvciA9IGlvcmVhZDgoXFx1MDAyNmNvbXBhdC1cXHUwMDNlbWFqb3IpO1xcbitcXHRmd19jb21wYXQtXFx1MDAzZWZ3X21pbm9yID0gaW9yZWFkOChcXHUwMDI2Y29tcGF0LVxcdTAwM2Vmd19taW5vcik7XFxuK1xcdGZ3X2NvbXBhdC1cXHUwMDNlZHJ2X21pbm9yID0gaW9yZWFkOChcXHUwMDI2Y29tcGF0LVxcdTAwM2VkcnZfbWlub3IpO1xcbitcXHRmd19jb21wYXQtXFx1MDAzZXBhdGNoID0gaW9yZWFkMTYoXFx1MDAyNmNvbXBhdC1cXHUwMDNlcGF0Y2gpO1xcbitcXG4rXFx0aWYgKGZ3X2NvbXBhdC1cXHUwMDNlbW9kdWxlX2lkICE9IFpYREhfTU9EVUxFX0lEKSB7XFxuK1xcdFxcdGRldl9pbmZvKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdCBcXFwidW5rbm93biBtb2R1bGUgaWQgJXUsIHNraXAgZncgY29tcGF0IGNoZWNrXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgZndfY29tcGF0LVxcdTAwM2Vtb2R1bGVfaWQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZ3X2NvbXBhdC1cXHUwMDNlbWFqb3IgIT0gWlhESF9NQUpPUikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdFxcXCJkcml2ZXIgbWFqb3IgJXUgaW5jb21wYXRpYmxlIHdpdGggZmlybXdhcmUgbWFqb3IgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFpYREhfTUFKT1IsIGZ3X2NvbXBhdC1cXHUwMDNlbWFqb3IpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZ3X2NvbXBhdC1cXHUwMDNlZndfbWlub3IgXFx1MDAzYyBaWERIX0ZXX01JTk9SKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcImZpcm13YXJlIGZ3X21pbm9yICVkIG9sZGVyIHRoYW4gcmVxdWlyZWQgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGZ3X2NvbXBhdC1cXHUwMDNlZndfbWlub3IsIFpYREhfRldfTUlOT1IpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZ3X2NvbXBhdC1cXHUwMDNlZHJ2X21pbm9yIFxcdTAwM2UgWlhESF9EUlZfTUlOT1IpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHRcXFwiZHJpdmVyIGRydl9taW5vciAldSBvbGRlciB0aGFuIHJlcXVpcmVkIGJ5IGZpcm13YXJlICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRaWERIX0RSVl9NSU5PUiwgZndfY29tcGF0LVxcdTAwM2VkcnZfbWlub3IpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFdhaXQgZm9yIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIG9mIHRoZSBmaXJtd2FyZSB0byBmaW5pc2hcXG4rICogYm9vdGluZywgc28gdGhhdCBsYXRlciBwcm9iZSBzdGVwcyBjYW4gdGFsayB0byBpdC5cXG4rICovXFxuK3N0YXRpYyBpbnQgenhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIF9faW9tZW0gKmhiO1xcbitcXHR1OCBoZWFsdGhfdmVyc2lvbjtcXG4rXFx0dTggcG93ZXJfb247XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRoYiA9IHBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSArIFpYREhfUklTQ1ZfSEJfT0ZGU0VUO1xcbitcXHRoZWFsdGhfdmVyc2lvbiA9IGlvcmVhZDgoXFx1MDAyNmhiLVxcdTAwM2VoZWFsdGhfdmVyc2lvbik7XFxuK1xcbitcXHQvKiBGaXJtd2FyZSBwcmVkYXRpbmcgdGhlIGhlYWx0aCBidWZmZXIgcHJvdG9jb2wgaGFzIG5laXRoZXIgYVxcbitcXHQgKiB2YWxpZCB2ZXJzaW9uIGJ5dGUgbm9yIGEgcG93ZXItb24gZmxhZyB0byB3YWl0IGZvci5cXG4rXFx0ICovXFxuK1xcdGlmIChoZWFsdGhfdmVyc2lvbiAhPSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwZl9kZXYtXFx1MDAzZWZ3X2NvbXBhdC5wYXRjaCBcXHUwMDNjIFpYREhfSFBJUlFfUEFUQ0gpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZXJyID0gcmVhZHhfcG9sbF90aW1lb3V0KGlvcmVhZDgsIFxcdTAwMjZoYi1cXHUwMDNlcmlzY3ZfcG93ZXJfb24sIHBvd2VyX29uLFxcbitcXHRcXHRcXHRcXHQgcG93ZXJfb24gPT0gMSwgVVNFQ19QRVJfU0VDLFxcbitcXHRcXHRcXHRcXHQgWlhESF9SSVNDVl9SRUFEWV9USU1FT1VUX1NFQyAqIFVTRUNfUEVSX1NFQyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwidGltZWQgb3V0IHdhaXRpbmcgZm9yIHJpc2N2IHBvd2VyIG9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgenhkaF9wZl9pcnFfcG9vbHNfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUgPSB6eGRoX2Rldi1cXHUwMDNlaXJxX3RhYmxlLnByaXY7XFxuK1xcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sO1xcbitcXG4rXFx0cG9vbCA9IHp4ZGhfaXJxX3Bvb2xfYWxsb2MoenhkaF9kZXYsIDAsIFpYREhfQVNZTkNfQ0hBTk5FTFNfTlVNLFxcbitcXHRcXHRcXHRcXHQgICBcXFwienhkaF9wZl9hc3luY1xcXCIsIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QLFxcbitcXHRcXHRcXHRcXHQgICBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUCk7XFxuK1xcdGlmIChJU19FUlIocG9vbCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHBvb2wpO1xcbitcXG4rXFx0cGZfaXJxX3RhYmxlLVxcdTAwM2Vhc3luY19wb29sID0gcG9vbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB6eGRoX3BmX2lycV9wb29sc19kZXN0cm95KHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcGZfaXJxX3RhYmxlKVxcbit7XFxuK1xcdGlmIChwZl9pcnFfdGFibGUtXFx1MDAzZWFzeW5jX3Bvb2wpXFxuK1xcdFxcdHp4ZGhfaXJxX3Bvb2xfZnJlZShwZl9pcnFfdGFibGUtXFx1MDAzZWFzeW5jX3Bvb2wpO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9pcnFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfaXJxX3RhYmxlICp0YWJsZSA9IFxcdTAwMjZ6eGRoX2Rldi1cXHUwMDNlaXJxX3RhYmxlO1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnByaXY7XFxuK1xcbitcXHRwcml2ID0ga3Z6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0dGFibGUtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdGludCB0b3RhbF92ZWMgPSBaWERIX1ZRU19DSEFOTkVMU19OVU0gKyBaWERIX0FTWU5DX0NIQU5ORUxTX05VTSArXFxuK1xcdFxcdFxcdFpYREhfUkRNQV9DSEFOTkVMU19OVU07XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHR0b3RhbF92ZWMgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsIHRvdGFsX3ZlYywgdG90YWxfdmVjLFxcbitcXHRcXHRcXHRcXHRcXHQgIFBDSV9JUlFfTVNJWCk7XFxuK1xcdGlmICh0b3RhbF92ZWMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9hbGxvY19pcnFfdmVjdG9ycyBmYWlsZWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR0b3RhbF92ZWMpO1xcbitcXHRcXHRyZXR1cm4gdG90YWxfdmVjO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSB6eGRoX3BmX2lycV9wb29sc19pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX2lycV9wb29sc19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVycik7XFxuK1xcdFxcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rdm9pZCB6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9pcnFfdGFibGUgKnRhYmxlID0gXFx1MDAyNnp4ZGhfZGV2LVxcdTAwM2VpcnFfdGFibGU7XFxuK1xcbitcXHRpZiAodGFibGUtXFx1MDAzZXByaXYpXFxuK1xcdFxcdHp4ZGhfcGZfaXJxX3Bvb2xzX2Rlc3Ryb3kodGFibGUtXFx1MDAzZXByaXYpO1xcbitcXHRrdmZyZWUodGFibGUtXFx1MDAzZXByaXYpO1xcbitcXHR0YWJsZS1cXHUwMDNlcHJpdiA9IE5VTEw7XFxuK1xcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2KTtcXG4rfVxcbitcXG4rLyogRmV0Y2ggYSB2ZWN0b3IgZnJvbSB0aGUgYXN5bmMgcG9vbCBmb3Igb25lIGFzeW5jIGV2ZW50IHF1ZXVlLiAqL1xcbitzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfcGZfYXN5bmNfaXJxX3JlcXVlc3Qoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcGZfaXJxX3RhYmxlID0genhkaF9kZXYtXFx1MDAzZWlycV90YWJsZS5wcml2O1xcbitcXG4rXFx0cmV0dXJuIHp4ZGhfZ2V0X2lycV9vZl9wb29sKHBmX2lycV90YWJsZS1cXHUwMDNlYXN5bmNfcG9vbCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgenhkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiB7XFxuIFxcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcXG5AQCAtNDA1LDEwICs1ODgsNTAgQEAgc3RhdGljIGludCB6eGRoX3BmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuIFxcdFxcdGdvdG8gZXJyX2NmZ19pbml0O1xcbiBcXHR9XFxuIFxcbitcXHRyZXQgPSB6eGRoX3BmX2Z3X2NvbXBhdF9jaGVjayh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9md19jb21wYXRfY2hlY2sgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfY2ZnX2luaXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeSh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX2NmZ19pbml0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ6eGRoX3BmX2lycV90YWJsZV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX2NmZ19pbml0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInp4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9pcnFfdGFibGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfZXFfdGFibGVfaW5pdCh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9lcV90YWJsZV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX2VxX3RhYmxlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZSh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9lcV90YWJsZV9jcmVhdGUgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfZXFfdGFibGU7XFxuK1xcdH1cXG4rXFxuIFxcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9lcV90YWJsZTpcXG4rXFx0enhkaF9wZl9lcV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTtcXG4rZXJyX2lycV90YWJsZTpcXG4rXFx0enhkaF9wZl9pcnFfdGFibGVfZGVzdHJveSh6eGRoX2Rldik7XFxuIGVycl9jZmdfaW5pdDpcXG4gXFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xcbiBlcnJfcGNpX2luaXQ6XFxuQEAgLTQyNCw2ICs2NDcsOCBAQCBzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpO1xcbiBcXG4gXFx0ZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspO1xcbitcXHR6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xcbitcXHR6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTtcXG4gXFx0enhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdCh6eGRoX2Rldik7XFxuIFxcdHp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTtcXG4gXFx0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXFxuaW5kZXggNzM3M2RlZThkMWE5Zi4uODk0YTA1YTA5ZDk2MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaFxcbkBAIC05LDYgKzksOSBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwienhkaF9lcS5oXFxcIlxcbisjaW5jbHVkZSBcXFwienhkaF9pcnEuaFxcXCJcXG4rXFxuICNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcXHQweDFjZjJcXG4gI2RlZmluZSBaWERIX1BGX0RFVklDRV9JRFxcdDB4ODA0MFxcbiAjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lEXFx0MHg4MDQxXFxuQEAgLTI5LDEwICszMiw1NyBAQFxcbiAjZGVmaW5lIFpYREhfUEZfQUxJR04yXFx0XFx0XFx0MlxcbiAjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjJcXHRcXHQyXFxuIFxcbisvKiBGaXhlZCBvZmZzZXRzIG9mIHRoZSBmaXJtd2FyZSBpbnRlcmZhY2UgcmVnaW9ucyB3aXRoaW4gQkFSIDAuICovXFxuKyNkZWZpbmUgWlhESF9SSVNDVl9IQl9PRkZTRVRcXHQweDUzMDBcXG4rI2RlZmluZSBaWERIX0ZXX0NPTVBBVF9PRkZTRVRcXHQweDU0MDBcXG4rXFxuKy8qIERyaXZlci9maXJtd2FyZSB2ZXJzaW9uIGNvbnRyYWN0LiBUaGUgZmlybXdhcmUgcHVibGlzaGVzIGl0cyBzaWRlIG9mXFxuKyAqIHRoZSBjb250cmFjdCBpbiB0aGUgcmVnaW9uIGF0IFpYREhfRldfQ09NUEFUX09GRlNFVC5cXG4rICovXFxuKyNkZWZpbmUgWlhESF9NT0RVTEVfSURcXHRcXHQxXFxuKyNkZWZpbmUgWlhESF9NQUpPUlxcdFxcdDFcXG4rI2RlZmluZSBaWERIX0ZXX01JTk9SXFx0XFx0MFxcbisjZGVmaW5lIFpYREhfRFJWX01JTk9SXFx0XFx0MFxcbisvKiBGaXJtd2FyZSBwYXRjaCBsZXZlbCB0aGF0IGludHJvZHVjZWQgdGhlIGhlYWx0aCBidWZmZXIgcHJvdG9jb2wuICovXFxuKyNkZWZpbmUgWlhESF9IUElSUV9QQVRDSFxcdDRcXG4rXFxuKyNkZWZpbmUgWlhESF9GV19DT01QQVRfVElNRU9VVF9TRUNcXHQyMDBcXG4rI2RlZmluZSBaWERIX1JJU0NWX1JFQURZX1RJTUVPVVRfU0VDXFx0NDBcXG4rXFxuKy8qIEZpcm13YXJlIHZlcnNpb24gY29tcGF0aWJpbGl0eSBibG9jayBhdCBaWERIX0ZXX0NPTVBBVF9PRkZTRVQuXFxuKyAqIEZpZWxkcyBhcmUgcmVhZCB0aHJvdWdoIGlvcmVhZCooKSwgd2hpY2ggY29udmVydHMgZnJvbSBsaXR0bGUtZW5kaWFuLlxcbisgKi9cXG4rc3RydWN0IHp4ZGhfZndfY29tcGF0IHtcXG4rXFx0dTggbW9kdWxlX2lkO1xcbitcXHR1OCBtYWpvcjtcXG4rXFx0czggZndfbWlub3I7XFxuK1xcdHU4IGRydl9taW5vcjtcXG4rXFx0dTE2IHBhdGNoO1xcbitcXHR1MTYgcnN2O1xcbit9IF9fcGFja2VkO1xcbitcXG4rLyogSGVhbHRoIGJ1ZmZlciBhdCBaWERIX1JJU0NWX0hCX09GRlNFVCwgbWFpbnRhaW5lZCBieSB0aGUgUklTQy1WXFxuKyAqIG1hbmFnZW1lbnQgY29yZSBvZiB0aGUgZmlybXdhcmUuIEZpZWxkcyBhcmUgcmVhZCB0aHJvdWdoIGlvcmVhZCooKS5cXG4rICovXFxuK3N0cnVjdCB6eGRoX2hlYWx0aF9idWZmZXIge1xcbitcXHR1MzIgc3luZDtcXHRcXHQvKiBCaXRtYXNrIG9mIGFjdGl2ZSBzeW5kcm9tZSBmbGFncy4gKi9cXG4rXFx0dTMyIGhlYWx0aF9jb3VudGVyO1xcdC8qIEluY3JlbWVudGVkIGhlYXJ0YmVhdCBjb3VudGVyLiAqL1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHJmcjtcXG4rXFx0dTggZndfZXhjZXB0aW9uO1xcbitcXHR1OCByaXNjdl9wb3dlcl9vbjtcXHQvKiBTZXQgdG8gMSBvbmNlIHRoZSBjb3JlIGZpbmlzaGVkIGJvb3RpbmcuICovXFxuK1xcdHU4IGZ3X3ZlcnNpb25bMzJdO1xcbitcXHR1OCBwZl9zdGF0dXNbNV07XFxuK1xcdHU4IGhlYWx0aF92ZXJzaW9uO1xcdC8qIEhlYWx0aCBidWZmZXIgcHJvdG9jb2wgdmVyc2lvbi4gKi9cXG4rXFx0dTggcnN2MVszMF07XFxuK30gX19wYWNrZWQ7XFxuK1xcbiBzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldmljZTtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XFxuIFxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xcbitcXHRzdHJ1Y3QgenhkaF9pcnFfdGFibGUgaXJxX3RhYmxlO1xcbitcXHRzdHJ1Y3QgenhkaF9lcV90YWJsZSBlcV90YWJsZTtcXG4gXFx0dm9pZCAqcHJpdjtcXG4gfTtcXG4gXFxuQEAgLTU0LDYgKzEwNCw3IEBAIHN0cnVjdCB6eGRoX3BmX2RldiB7XFxuIFxcdHMzMiBtb2Rlcm5fYmFycztcXG4gXFx0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xcbiBcXHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xcbitcXHRzdHJ1Y3QgenhkaF9md19jb21wYXQgZndfY29tcGF0O1xcbiB9O1xcbiBcXG4gdm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSk7XFxuQEAgLTcyLDQgKzEyMywxMCBAQCBpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4gdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuIGludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbiBcXG4rLyogUEYgSVJRIHRhYmxlIChlbl9wZi5jKSAqL1xcbitpbnQgenhkaF9wZl9pcnFfdGFibGVfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK3ZvaWQgenhkaF9wZl9pcnFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfcGZfYXN5bmNfaXJxX3JlcXVlc3Qoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4rXFxuICNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfZXEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjFkN2VlZWMxYWU0ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmNcXG5AQCAtMCwwICsxLDE0NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIGV2ZW50IHF1ZXVlIHBsdW1iaW5nXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXFxuKyAqXFxuKyAqIEFzeW5jIGV2ZW50IHF1ZXVlcyBhcmUgdGhlIGRlbGl2ZXJ5IHBhdGggZm9yIGZpcm13YXJlIG5vdGlmaWNhdGlvbnM6XFxuKyAqIGEgcXVldWUgb3ducyBvbmUgTVNJLVggdmVjdG9yIG9mIHRoZSBhc3luYyBwb29sIGFuZCBmYW5zIGludGVycnVwdHNcXG4rICogb3V0IHRvIHRoZSBwZXItZXZlbnQtdHlwZSBub3RpZmllciBjaGFpbnMgb2YgdGhlIGV2ZW50IHF1ZXVlIHRhYmxlLlxcbisgKiBUaGUgQkFSIG1lc3NhZ2UgY2hhbm5lbCBoYW5kc2hha2UgdGhhdCB0ZWxscyB0aGUgZmlybXdhcmUgd2hpY2hcXG4rICogdmVjdG9ycyB0byBzaWduYWwgY29tZXMgd2l0aCB0aGUgQkFSIG1lc3NhZ2Ugc3Vic3lzdGVtIGluIGEgbGF0ZXJcXG4rICogc2VyaWVzOyB0aGUgUEYgc2lkZSB3aXJlZCBoZXJlIGlzIGxpdmUgYXMgc29vbiBhcyB0aGF0IGNoYW5uZWwgaXNcXG4rICogZW5hYmxlZC5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZW5fcGYuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInp4ZGhfZXEuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInp4ZGhfaXJxLmhcXFwiXFxuK1xcbisvKiBQRiBzaWRlIG9mIHRoZSBldmVudCBxdWV1ZSB0YWJsZTogb25lIGFzeW5jIEVRIGZlZCBieSB0aGUgUklTQy1WXFxuKyAqIG1hbmFnZW1lbnQgY29yZS5cXG4rICovXFxuK3N0cnVjdCB6eGRoX3BmX2VxX3RhYmxlIHtcXG4rXFx0c3RydWN0IHp4ZGhfZXFfYXN5bmMgcmlzY3ZfZXE7XFxuK307XFxuK1xcbisvKiBGZXRjaCB0aGUgZXZlbnRfaWQgdGhlIFJJU0MtViBjb3JlIHBvc3RlZCBpbiB0aGUgUEYgcmVjZWl2ZVxcbisgKiBzdWItY2hhbm5lbCBvZiB0aGUgQkFSIG1lc3NhZ2UgYXJlYS4gVGhlIGZpZWxkIGxpdmVzIGF0IGJ5dGUgb2Zmc2V0XFxuKyAqIDIgb2YgdGhlIDEyLWJ5dGUgbWVzc2FnZSBoZWFkZXIsIHNvIGEgc2luZ2xlIDMyLWJpdCByZWFkIG9mIHRoZVxcbisgKiBzdWItY2hhbm5lbCBzdGFydCBjb3ZlcnMgaXQuXFxuKyAqL1xcbitzdGF0aWMgdTE2IHp4ZGhfZXFfZXZlbnRfaWRfZ2V0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR2b2lkIF9faW9tZW0gKnN1YmNoYW47XFxuK1xcbitcXHRzdWJjaGFuID0gcGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdICsgWlhESF9CQVJfTVNHX1NVQkNIQU5fUkVDVjtcXG4rXFxuK1xcdHJldHVybiBpb3JlYWQzMihzdWJjaGFuKSBcXHUwMDNlXFx1MDAzZSAxNjtcXG4rfVxcbitcXG4rc3RhdGljIGVudW0genhkaF9lcV9ldmVudF90eXBlIHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQodTE2IGV2ZW50X2lkKVxcbit7XFxuK1xcdGlmIChldmVudF9pZCA9PSBaWERIX01TR19NT0RVTEVfUklTQ19SRUFEWSlcXG4rXFx0XFx0cmV0dXJuIFpYREhfRVFfRVZFTlRfVFlQRV9SSVNDVl9SRUFEWTtcXG4rXFxuK1xcdC8qIE9ubHkgdGhlIFJJU0MtViByZWFkeSBub3RpZmljYXRpb24gaXMgZGlzcGF0Y2hlZCBpbiB0aGlzXFxuK1xcdCAqIHNlcmllczsgdGhlIHJlbWFpbmluZyBmaXJtd2FyZSBldmVudHMgYXJyaXZlIHdpdGggdGhlIEJBUlxcbitcXHQgKiBtZXNzYWdlIHN1YnN5c3RlbS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBaWERIX0VRX0VWRU5UX1RZUEVfTUFYO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHp4ZGhfZXFfYXN5bmNfcmlzY3ZfaW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2VxX2FzeW5jICplcSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHp4ZGhfZXFfYXN5bmMsIGlycV9uYik7XFxuK1xcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IGVxLVxcdTAwM2Vwcml2O1xcbitcXHRlbnVtIHp4ZGhfZXFfZXZlbnRfdHlwZSBldmVudF90eXBlO1xcbitcXG4rXFx0ZXZlbnRfdHlwZSA9IHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQoenhkaF9lcV9ldmVudF9pZF9nZXQoenhkaF9kZXYpKTtcXG4rXFx0aWYgKGV2ZW50X3R5cGUgPT0gWlhESF9FUV9FVkVOVF9UWVBFX01BWClcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXG4rXFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXFx1MDAyNnp4ZGhfZGV2LVxcdTAwM2VlcV90YWJsZS5uaFtldmVudF90eXBlXSxcXG4rXFx0XFx0XFx0XFx0ICAgZXZlbnRfdHlwZSwgTlVMTCk7XFxuK1xcbitcXHRyZXR1cm4gTk9USUZZX09LO1xcbit9XFxuK1xcbitpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSBcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWVxX3RhYmxlO1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcHJpdjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRwcml2ID0ga3Z6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0dGFibGUtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2dGFibGUtXFx1MDAzZWxvY2spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWlhESF9FUV9FVkVOVF9UWVBFX01BWDsgaSsrKVxcbitcXHRcXHRBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbmhbaV0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZXFfdGFibGUgKnBmX2VxX3RhYmxlID0genhkaF9kZXYtXFx1MDAzZWVxX3RhYmxlLnByaXY7XFxuK1xcdHN0cnVjdCB6eGRoX2VxX3RhYmxlICp0YWJsZSA9IFxcdTAwMjZ6eGRoX2Rldi1cXHUwMDNlZXFfdGFibGU7XFxuK1xcdHN0cnVjdCB6eGRoX2VxX2FzeW5jICplcSA9IFxcdTAwMjZwZl9lcV90YWJsZS1cXHUwMDNlcmlzY3ZfZXE7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRlcS1cXHUwMDNlcHJpdiA9IHp4ZGhfZGV2O1xcbitcXHRlcS1cXHUwMDNlaXJxID0genhkaF9wZl9hc3luY19pcnFfcmVxdWVzdCh6eGRoX2Rldik7XFxuK1xcdGlmIChJU19FUlIoZXEtXFx1MDAzZWlycSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihlcS1cXHUwMDNlaXJxKTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGVxLVxcdTAwM2VpcnFfbmIubm90aWZpZXJfY2FsbCA9IHp4ZGhfZXFfYXN5bmNfcmlzY3ZfaW50O1xcbitcXHRlcnIgPSB6eGRoX2lycV9hdHRhY2hfbmIoZXEtXFx1MDAzZWlycSwgXFx1MDAyNmVxLVxcdTAwM2VpcnFfbmIpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoXFx1MDAyNmVxLVxcdTAwM2VpcnEsIDEpO1xcbitcXHRcXHRlcS1cXHUwMDNlaXJxID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnRhYmxlLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9lcV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcGZfZXFfdGFibGUgPSB6eGRoX2Rldi1cXHUwMDNlZXFfdGFibGUucHJpdjtcXG4rXFx0c3RydWN0IHp4ZGhfZXFfdGFibGUgKnRhYmxlID0gXFx1MDAyNnp4ZGhfZGV2LVxcdTAwM2VlcV90YWJsZTtcXG4rXFx0c3RydWN0IHp4ZGhfZXFfYXN5bmMgKmVxO1xcbitcXG4rXFx0aWYgKCFwZl9lcV90YWJsZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXEgPSBcXHUwMDI2cGZfZXFfdGFibGUtXFx1MDAzZXJpc2N2X2VxO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dGFibGUtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoZXEtXFx1MDAzZWlycSkge1xcbitcXHRcXHR6eGRoX2lycV9kZXRhY2hfbmIoZXEtXFx1MDAzZWlycSwgXFx1MDAyNmVxLVxcdTAwM2VpcnFfbmIpO1xcbitcXHRcXHR6eGRoX2lycXNfcmVsZWFzZV92ZWN0b3JzKFxcdTAwMjZlcS1cXHUwMDNlaXJxLCAxKTtcXG4rXFx0XFx0ZXEtXFx1MDAzZWlycSA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ0YWJsZS1cXHUwMDNlbG9jayk7XFxuK1xcdGt2ZnJlZSh0YWJsZS1cXHUwMDNlcHJpdik7XFxuK1xcdHRhYmxlLVxcdTAwM2Vwcml2ID0gTlVMTDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ5NjVjYTE1OTEyYWNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5oXFxuQEAgLTAsMCArMSw2MSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIGV2ZW50IHF1ZXVlIGFic3RyYWN0aW9uXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX1pYREhfRVFfSF9fXFxuKyNkZWZpbmUgX19aWERIX0VRX0hfX1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3RpZmllci5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHp4ZGhfY29yZV9kZXY7XFxuK3N0cnVjdCB6eGRoX2lycTtcXG4rXFxuKy8qIEJBUiBtZXNzYWdlIGFyZWE6IHNoYXJlZC1tZW1vcnkgbWFpbGJveCBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZVxcbisgKiBmaXJtd2FyZSwgc3BsaXQgaW50byBzdWItY2hhbm5lbHMgb2YgMjA0OCBieXRlcy4gTm90aWZpY2F0aW9ucyBmcm9tXFxuKyAqIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIGFyZSBwb3N0ZWQgdG8gdGhlIFBGIHJlY2VpdmUgc3ViLWNoYW5uZWwsXFxuKyAqIG9uZSBpbnRlcnZhbCBhYm92ZSB0aGUgYXJlYSBiYXNlLlxcbisgKi9cXG4rI2RlZmluZSBaWERIX0JBUl9NU0dfT0ZGU0VUXFx0XFx0MHgyMDAwXFxuKyNkZWZpbmUgWlhESF9CQVJfTVNHX1NVQkNIQU5fSU5URVJWQUxcXHQyMDQ4XFxuKyNkZWZpbmUgWlhESF9CQVJfTVNHX1NVQkNIQU5fUkVDVlxcdChaWERIX0JBUl9NU0dfT0ZGU0VUICtcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBaWERIX0JBUl9NU0dfU1VCQ0hBTl9JTlRFUlZBTClcXG4rXFxuKy8qIGV2ZW50X2lkIG9mIHRoZSBcXFwiUklTQy1WIGNvcmUgcmVhZHlcXFwiIGZpcm13YXJlIG5vdGlmaWNhdGlvbiwgY2FycmllZFxcbisgKiBhdCBieXRlIG9mZnNldCAyIG9mIHRoZSBCQVIgbWVzc2FnZSBoZWFkZXIuXFxuKyAqL1xcbisjZGVmaW5lIFpYREhfTVNHX01PRFVMRV9SSVNDX1JFQURZXFx0MTNcXG4rXFxuKy8qIEV2ZW50IHR5cGVzIHRoZSB1cHBlciBsYXllcnMgY2FuIHN1YnNjcmliZSB0byBvdmVyIHRoZSBwZXItdHlwZVxcbisgKiBub3RpZmllciBjaGFpbnMgb2YgdGhlIGV2ZW50IHF1ZXVlIHRhYmxlLiBUaGUgZnVsbCBjYXRhbG9ndWUgbGl2ZXNcXG4rICogaW4gdGhlIGZpcm13YXJlOyBvbmx5IHRoZSBvbmVzIGRpc3BhdGNoZWQgaW4gdGhpcyBzZXJpZXMgYXJlIG5hbWVkLlxcbisgKi9cXG4rZW51bSB6eGRoX2VxX2V2ZW50X3R5cGUge1xcbitcXHRaWERIX0VRX0VWRU5UX1RZUEVfUklTQ1ZfUkVBRFkgPSAwLFxcbitcXHRaWERIX0VRX0VWRU5UX1RZUEVfTUFYLFxcbit9O1xcbitcXG4rLyogQXN5bmNocm9ub3VzIGV2ZW50IHF1ZXVlIGRlbGl2ZXJpbmcgZmlybXdhcmUgbm90aWZpY2F0aW9ucyB0byB0aGVcXG4rICogZHJpdmVyIHdpdGhvdXQgYSByZXF1ZXN0L3JlcGx5IGhhbmRzaGFrZS5cXG4rICovXFxuK3N0cnVjdCB6eGRoX2VxX2FzeW5jIHtcXG4rXFx0c3RydWN0IHp4ZGhfaXJxICppcnE7XFxuK1xcdHN0cnVjdCBub3RpZmllcl9ibG9jayBpcnFfbmI7XFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9lcV90YWJsZSB7XFxuK1xcdC8qIE5vdGlmaWVyIGNoYWlucyBmYW5uZWQgb3V0IGJ5IGV2ZW50IHR5cGUuICovXFxuK1xcdHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBuaFtaWERIX0VRX0VWRU5UX1RZUEVfTUFYXTtcXG4rXFx0LyogU2VyaWFsaXplcyBhc3luYyBFUSBjcmVhdGUvZGVzdHJveS4gKi9cXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7XFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbit2b2lkIHp4ZGhfcGZfZXFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitcXG4rI2VuZGlmIC8qIF9fWlhESF9FUV9IX18gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQzNzM0NDMyOWM3ZThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuY1xcbkBAIC0wLDAgKzEsNDEyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gSVJRIHBvb2wgbWFuYWdlbWVudFxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKlxcbisgKiBEZXZpY2UgdmVjdG9ycyBhcmUgbWFuYWdlZCBpbiBwZXItcHVycG9zZSBwb29scy4gQW4gSVJRIGNhcnJpZXMgYVxcbisgKiByZWZjb3VudCBzbyB0aGF0IHNldmVyYWwgZXZlbnQgcXVldWVzIGNhbiBzaGFyZSBvbmUgdmVjdG9yOyBvblxcbisgKiByYWlzZSwgdGhlIGludGVycnVwdCBpcyBmYW5uZWQgb3V0IHRocm91Z2ggYW4gYXRvbWljIG5vdGlmaWVyIGNoYWluXFxuKyAqIGF0dGFjaGVkIHRvIHRoZSBJUlEuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdW1hc2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZW5fcGYuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInp4ZGhfaXJxLmhcXFwiXFxuK1xcbisvKiBSZWxlYXNlIGNhbGxiYWNrIG9mIHRoZSBJUlEga3JlZiwgY2FsbGVkIHdpdGggcG9vbC1cXHUwMDNlbG9jayBoZWxkLiAqL1xcbitzdGF0aWMgdm9pZCB6eGRoX2lycV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB6eGRoX2lycSwgcmVmY291bnQpO1xcbitcXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS1cXHUwMDNlcG9vbDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXHR4YV9lcmFzZShcXHUwMDI2cG9vbC1cXHUwMDNlaXJxcywgaXJxLVxcdTAwM2VpbmRleCk7XFxuK1xcdC8qIGZyZWVfaXJxKCkgcmVxdWlyZXMgdGhlIGFmZmluaXR5IGhpbnQgdG8gYmUgY2xlYXJlZCBiZWZvcmUgaXQgaXNcXG4rXFx0ICogY2FsbGVkOyB0aGUgYXN5bW1ldHJ5IHdpdGggdGhlIHNldCBwYXRoIGluIHp4ZGhfaXJxX2FsbG9jKCkgaXNcXG4rXFx0ICogaW50ZW50aW9uYWwuXFxuK1xcdCAqL1xcbitcXHRpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVxcdTAwM2VpcnFuLCBOVUxMKTtcXG4rXFx0ZnJlZV9jcHVtYXNrX3ZhcihpcnEtXFx1MDAzZW1hc2spO1xcbitcXHRmcmVlX2lycShpcnEtXFx1MDAzZWlycW4sIGlycSk7XFxuK1xcdGtmcmVlKGlycSk7XFxuK31cXG4rXFxuKy8qIERyb3Agb25lIHJlZmVyZW5jZTsgcmV0dXJucyAxIGlmIHRoZSBJUlEgd2FzIHJlbGVhc2VkLiAqL1xcbitzdGF0aWMgaW50IHp4ZGhfaXJxX3B1dChzdHJ1Y3QgenhkaF9pcnEgKmlycSlcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS1cXHUwMDNlcG9vbDtcXG4rXFx0aW50IHJlbGVhc2VkO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlbGVhc2VkID0ga3JlZl9wdXQoXFx1MDAyNmlycS1cXHUwMDNlcmVmY291bnQsIHp4ZGhfaXJxX3JlbGVhc2UpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlbGVhc2VkO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHp4ZGhfaXJxX2dldChzdHJ1Y3QgenhkaF9pcnEgKmlycSlcXG4re1xcbitcXHRyZXR1cm4ga3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNmlycS1cXHUwMDNlcmVmY291bnQpO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgenhkaF9pcnFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxID0gZGF0YTtcXG4rXFxuK1xcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFxcdTAwMjZ6eGRoX2lycS1cXHUwMDNlbmgsIDAsIE5VTEwpO1xcbitcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9hbGxvYyhzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IHZlY2lkeCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSlcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwb29sLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0aXJxID0ga3phbGxvY19vYmooKmlycSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghaXJxKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGlycS1cXHUwMDNlcG9vbCA9IHBvb2w7XFxuK1xcdGlycS1cXHUwMDNlaXJxbiA9IHBjaV9pcnFfdmVjdG9yKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCB2ZWNpZHgpO1xcbitcXHRpZiAoaXJxLVxcdTAwM2VpcnFuIFxcdTAwM2MgMCkge1xcbitcXHRcXHRlcnIgPSBpcnEtXFx1MDAzZWlycW47XFxuK1xcdFxcdGdvdG8gZXJyX2lycW47XFxuK1xcdH1cXG4rXFxuK1xcdEFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoXFx1MDAyNmlycS1cXHUwMDNlbmgpO1xcbitcXHRzbnByaW50ZihpcnEtXFx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcXFwiYXN5bmNfJWRAcGNpOiVzXFxcIiwgdmVjaWR4LFxcbitcXHRcXHQgcGNpX25hbWUoenhkaF9kZXYtXFx1MDAzZXBkZXYpKTtcXG4rXFxuK1xcdGVyciA9IHJlcXVlc3RfaXJxKGlycS1cXHUwMDNlaXJxbiwgenhkaF9pcnFfaW50X2hhbmRsZXIsIDAsIGlycS1cXHUwMDNlbmFtZSwgaXJxKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJyZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRnb3RvIGVycl9pcnFuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcXHUwMDI2aXJxLVxcdTAwM2VtYXNrLCBHRlBfS0VSTkVMKSkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6YWxsb2NfY3B1bWFza192YXIgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfY3B1bWFzaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFmZmluaXR5KSB7XFxuK1xcdFxcdGNwdW1hc2tfY29weShpcnEtXFx1MDAzZW1hc2ssIGFmZmluaXR5KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogTm8gcHJlZmVyZW5jZSByZXF1ZXN0ZWQ7IHNwcmVhZCBvdmVyIGFsbCBvbmxpbmUgQ1BVcy4gKi9cXG4rXFx0XFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXFxuK1xcdFxcdFxcdGNwdW1hc2tfc2V0X2NwdShjcHUsIGlycS1cXHUwMDNlbWFzayk7XFxuK1xcdH1cXG4rXFx0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cXHUwMDNlaXJxbiwgaXJxLVxcdTAwM2VtYXNrKTtcXG4rXFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2aXJxLVxcdTAwM2VyZWZjb3VudCk7XFxuK1xcdGlycS1cXHUwMDNlaW5kZXggPSB2ZWNpZHg7XFxuK1xcdGVyciA9IHhhX2Vycih4YV9zdG9yZShcXHUwMDI2cG9vbC1cXHUwMDNlaXJxcywgaXJxLVxcdTAwM2VpbmRleCwgaXJxLCBHRlBfS0VSTkVMKSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwieGFfc3RvcmUgZmFpbGVkIGZvciBpcnEgJXU6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRpcnEtXFx1MDAzZWluZGV4LCBlcnIpO1xcbitcXHRcXHRnb3RvIGVycl94YTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGlycTtcXG4rXFxuK2Vycl94YTpcXG4rXFx0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cXHUwMDNlaXJxbiwgTlVMTCk7XFxuK1xcdGZyZWVfY3B1bWFza192YXIoaXJxLVxcdTAwM2VtYXNrKTtcXG4rZXJyX2NwdW1hc2s6XFxuK1xcdGZyZWVfaXJxKGlycS1cXHUwMDNlaXJxbiwgaXJxKTtcXG4rZXJyX2lycW46XFxuK1xcdGtmcmVlKGlycSk7XFxuK1xcdHJldHVybiBFUlJfUFRSKGVycik7XFxuK31cXG4rXFxuK2ludCB6eGRoX2lycV9hdHRhY2hfbmIoc3RydWN0IHp4ZGhfaXJxICppcnEsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghenhkaF9pcnFfZ2V0KGlycSkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0ZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFxcdTAwMjZpcnEtXFx1MDAzZW5oLCBuYik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHp4ZGhfaXJxX3B1dChpcnEpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IHp4ZGhfaXJxX2RldGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXFx1MDAyNmlycS1cXHUwMDNlbmgsIG5iKTtcXG4rXFx0enhkaF9pcnFfcHV0KGlycSk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbisvKiBSZWxlYXNlIG9uZSBvciBtb3JlIElSUXMgYmFjayB0byB0aGVpciBwb29sLiAqL1xcbit2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5pcnFzOyBpKyspIHtcXG4rXFx0XFx0c3luY2hyb25pemVfaXJxKGlycXNbaV0tXFx1MDAzZWlycW4pO1xcbitcXHRcXHR6eGRoX2lycV9wdXQoaXJxc1tpXSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgenhkaF9jcHVfcHV0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLCBpbnQgY3B1KVxcbit7XFxuK1xcdHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdVtjcHVdLS07XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfY3B1X2dldChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCwgaW50IGNwdSlcXG4re1xcbitcXHRwb29sLVxcdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSsrO1xcbit9XFxuK1xcbisvKiBGaW5kIHRoZSBsZWFzdCBsb2FkZWQgQ1BVLCBpLmUuIHRoZSBDUFUgd2l0aCB0aGUgZmV3ZXN0IElSUXMgYm91bmRcXG4rICogdG8gaXQsIHdpdGhpbiB0aGUgcmVxdWVzdGVkIG1hc2suXFxuKyAqL1xcbitzdGF0aWMgaW50IHp4ZGhfY3B1X2dldF9sZWFzdF9sb2FkZWQoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKVxcbit7XFxuK1xcdGludCBiZXN0X2NwdSA9IC0xO1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0Zm9yX2VhY2hfY3B1X2FuZChjcHUsIHJlcV9tYXNrLCBjcHVfb25saW5lX21hc2spIHtcXG4rXFx0XFx0LyogVGhpcyBDUFUgaGFzIG5vIElSUXMgeWV0LCBubyBuZWVkIHRvIGxvb2sgZnVydGhlci4gKi9cXG4rXFx0XFx0aWYgKCFwb29sLVxcdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSkge1xcbitcXHRcXHRcXHRiZXN0X2NwdSA9IGNwdTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGJlc3RfY3B1IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YmVzdF9jcHUgPSBjcHU7XFxuK1xcdFxcdGlmIChwb29sLVxcdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSBcXHUwMDNjIHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdVtiZXN0X2NwdV0pXFxuK1xcdFxcdFxcdGJlc3RfY3B1ID0gY3B1O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoYmVzdF9jcHUgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl9lcnIocG9vbC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdFxcXCJubyBvbmxpbmUgQ1BVIGluIGFmZmluaXR5IG1hc2sgKCUqcGJsKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKHJlcV9tYXNrKSk7XFxuK1xcdFxcdGJlc3RfY3B1ID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spO1xcbitcXHR9XFxuK1xcdHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdVtiZXN0X2NwdV0rKztcXG4rXFxuK1xcdHJldHVybiBiZXN0X2NwdTtcXG4rfVxcbitcXG4rLyogQ3JlYXRlIGEgbmV3IElSUSBmcm9tIHRoZSBwb29sIGFuZCBiaW5kIGl0IHRvIHRoZSByZXF1ZXN0ZWQgbWFzay4gKi9cXG4rc3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfcG9vbF9yZXF1ZXN0X2lycShzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5ID0gcmVxX21hc2s7XFxuK1xcdGNwdW1hc2tfdmFyX3QgYXV0b19tYXNrO1xcbitcXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcXG4rXFx0dTMyIGlycV9pbmRleDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFxcdTAwMjZhdXRvX21hc2ssIEdGUF9LRVJORUwpKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGVyciA9IHhhX2FsbG9jKFxcdTAwMjZwb29sLVxcdTAwM2VpcnFzLCBcXHUwMDI2aXJxX2luZGV4LCBOVUxMLCBwb29sLVxcdTAwM2V4YV9udW1faXJxcyxcXG4rXFx0XFx0ICAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChlcnIgPT0gLUVCVVNZKVxcbitcXHRcXHRcXHRlcnIgPSAtRVVTRVJTO1xcbitcXHRcXHRnb3RvIGVycl94YTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNwdW1hc2tfd2VpZ2h0KHJlcV9tYXNrKSBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0LyogQmluZCB0byB0aGUgbGVhc3QgbG9hZGVkIENQVSBvZiB0aGUgcmVxdWVzdC4gKi9cXG4rXFx0XFx0Y3B1bWFza19zZXRfY3B1KHp4ZGhfY3B1X2dldF9sZWFzdF9sb2FkZWQocG9vbCwgcmVxX21hc2spLFxcbitcXHRcXHRcXHRcXHRhdXRvX21hc2spO1xcbitcXHRcXHRhZmZpbml0eSA9IGF1dG9fbWFzaztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0enhkaF9jcHVfZ2V0KHBvb2wsIGNwdW1hc2tfZmlyc3QocmVxX21hc2spKTtcXG4rXFx0fVxcbitcXG4rXFx0aXJxID0genhkaF9pcnFfYWxsb2MocG9vbCwgaXJxX2luZGV4LCBhZmZpbml0eSk7XFxuK1xcdGlmIChJU19FUlIoaXJxKSlcXG4rXFx0XFx0Z290byBlcnJfYWxsb2M7XFxuK1xcbitcXHRmcmVlX2NwdW1hc2tfdmFyKGF1dG9fbWFzayk7XFxuK1xcbitcXHRyZXR1cm4gaXJxO1xcbitcXG4rZXJyX2FsbG9jOlxcbitcXHQvKiBVbmRvIHRoZSBwZXItQ1BVIGFjY291bnRpbmcgZG9uZSBhYm92ZS4gKi9cXG4rXFx0enhkaF9jcHVfcHV0KHBvb2wsIGNwdW1hc2tfZmlyc3QoYWZmaW5pdHkpKTtcXG4rXFx0eGFfZXJhc2UoXFx1MDAyNnBvb2wtXFx1MDAzZWlycXMsIGlycV9pbmRleCk7XFxuK2Vycl94YTpcXG4rXFx0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xcbitcXHRyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogaXJxO1xcbit9XFxuK1xcbisvKiBMb29rIGZvciB0aGUgSVJRIHdpdGggdGhlIHNtYWxsZXN0IHJlZmNvdW50IHdob3NlIGFmZmluaXR5IG1hc2sgaXMgYVxcbisgKiBzdWJzZXQgb2YgdGhlIHJlcXVlc3RlZCBtYXNrLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfcG9vbF9maW5kX2xlYXN0X2xvYWRlZChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gTlVMTDtcXG4rXFx0c3RydWN0IHp4ZGhfaXJxICppdGVyO1xcbitcXHR1bnNpZ25lZCBsb25nIGluZGV4O1xcbitcXHRpbnQgaXRlcl9yZWZjb3VudDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXHR4YV9mb3JfZWFjaF9yYW5nZShcXHUwMDI2cG9vbC1cXHUwMDNlaXJxcywgaW5kZXgsIGl0ZXIsXFxuK1xcdFxcdFxcdCAgcG9vbC1cXHUwMDNleGFfbnVtX2lycXMubWluLCBwb29sLVxcdTAwM2V4YV9udW1faXJxcy5tYXgpIHtcXG4rXFx0XFx0aXRlcl9yZWZjb3VudCA9IHJlZmNvdW50X3JlYWQoXFx1MDAyNml0ZXItXFx1MDAzZXJlZmNvdW50LnJlZmNvdW50KTtcXG4rXFxuK1xcdFxcdC8qIFNraXAgSVJRcyB3aG9zZSBtYXNrIGlzIG5vdCBhIHN1YnNldCBvZiB0aGUgcmVxdWVzdC4gKi9cXG4rXFx0XFx0aWYgKCFjcHVtYXNrX3N1YnNldChpdGVyLVxcdTAwM2VtYXNrLCByZXFfbWFzaykpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHQvKiBJUlEgYmVsb3cgdGhlIG1pbmltdW0gdGhyZXNob2xkIGZvdW5kLCB0YWtlIGl0LiAqL1xcbitcXHRcXHRpZiAoaXRlcl9yZWZjb3VudCBcXHUwMDNjIHBvb2wtXFx1MDAzZW1pbl90aHJlc2hvbGQpXFxuK1xcdFxcdFxcdHJldHVybiBpdGVyO1xcbitcXHRcXHRpZiAoIWlycSB8fFxcbitcXHRcXHQgICAgaXRlcl9yZWZjb3VudCBcXHUwMDNjIHJlZmNvdW50X3JlYWQoXFx1MDAyNmlycS1cXHUwMDNlcmVmY291bnQucmVmY291bnQpKVxcbitcXHRcXHRcXHRpcnEgPSBpdGVyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaXJxO1xcbit9XFxuK1xcbisvKiBSZXF1ZXN0IGFuIElSUSBmb3IgdGhlIGdpdmVuIG1hc2s6IHNoYXJlIHRoZSBsZWFzdCBsb2FkZWQgZXhpc3RpbmdcXG4rICogbWF0Y2hpbmcgSVJRIG9uY2UgaXQgcGFzc2VzIHRoZSBwb29sIG1pbmltdW0gdGhyZXNob2xkLCBvdGhlcndpc2VcXG4rICogY3JlYXRlIGEgbmV3IG9uZS5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxX2FmZmluaXR5X3JlcXVlc3Qoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2lycSAqbGVhc3RfbG9hZGVkX2lycTtcXG4rXFx0c3RydWN0IHp4ZGhfaXJxICpuZXdfaXJxO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRsZWFzdF9sb2FkZWRfaXJxID0genhkaF9pcnFfcG9vbF9maW5kX2xlYXN0X2xvYWRlZChwb29sLCByZXFfbWFzayk7XFxuK1xcdGlmIChsZWFzdF9sb2FkZWRfaXJxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICByZWZjb3VudF9yZWFkKFxcdTAwMjZsZWFzdF9sb2FkZWRfaXJxLVxcdTAwM2VyZWZjb3VudC5yZWZjb3VudCkgXFx1MDAzYyBwb29sLVxcdTAwM2VtaW5fdGhyZXNob2xkKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIE5vIElSUSBiZWxvdyB0aGUgbWluaW11bSB0aHJlc2hvbGQsIHRyeSB0byBjcmVhdGUgYSBuZXcgb25lLiAqL1xcbitcXHRuZXdfaXJxID0genhkaF9pcnFfcG9vbF9yZXF1ZXN0X2lycShwb29sLCByZXFfbWFzayk7XFxuK1xcdGlmIChJU19FUlIobmV3X2lycSkpIHtcXG4rXFx0XFx0aWYgKCFsZWFzdF9sb2FkZWRfaXJxKSB7XFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdHJldHVybiBuZXdfaXJxO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIENvdWxkIG5vdCBjcmVhdGUgYSBuZXcgSVJRIGZvciB0aGUgcmVxdWVzdGVkIGFmZmluaXR5LFxcbitcXHRcXHQgKiBzaGFyZSB0aGUgZXhpc3Rpbmcgb25lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X3dhcm4ocG9vbC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdFxcdCBcXFwiaXJxIHBvb2wgJXMgZXhoYXVzdGVkLCBzaGFyaW5nIGlycXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBwb29sLVxcdTAwM2VuYW1lKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGxlYXN0X2xvYWRlZF9pcnEgPSBuZXdfaXJxO1xcbitcXHRnb3RvIHVubG9jaztcXG4rXFxuK291dDpcXG4rXFx0LyogSG9sZGluZyBwb29sLVxcdTAwM2Vsb2NrIGtlZXBzIHRoZSBJUlEgYWxpdmUsIHNvIHRoaXMgY2Fubm90IGZhaWwuICovXFxuK1xcdHp4ZGhfaXJxX2dldChsZWFzdF9sb2FkZWRfaXJxKTtcXG4rXFx0aWYgKHJlZmNvdW50X3JlYWQoXFx1MDAyNmxlYXN0X2xvYWRlZF9pcnEtXFx1MDAzZXJlZmNvdW50LnJlZmNvdW50KSBcXHUwMDNlIHBvb2wtXFx1MDAzZW1heF90aHJlc2hvbGQpXFxuK1xcdFxcdGRldl93YXJuKHBvb2wtXFx1MDAzZWRldi1cXHUwMDNlZGV2aWNlLFxcbitcXHRcXHRcXHQgXFxcImlycSAldSBvdmVybG9hZGVkLCBwb29sICVzLCAldSByZWZzIG9uIHRoaXMgaXJxXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcGNpX2lycV92ZWN0b3IocG9vbC1cXHUwMDNlZGV2LVxcdTAwM2VwZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRsZWFzdF9sb2FkZWRfaXJxLVxcdTAwM2VpbmRleCksXFxuK1xcdFxcdFxcdCBwb29sLVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHQgcmVmY291bnRfcmVhZChcXHUwMDI2bGVhc3RfbG9hZGVkX2lycS1cXHUwMDNlcmVmY291bnQucmVmY291bnQpIC9cXG4rXFx0XFx0XFx0IFpYREhfRVFfUkVGU19QRVJfSVJRKTtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGxlYXN0X2xvYWRlZF9pcnE7XFxuK31cXG4rXFxuKy8qIFJlcXVlc3QgYW4gSVJRIGZyb20gdGhlIHBvb2wsIHNwcmVhZCBvdmVyIHRoZSBvbmxpbmUgQ1BVcy4gKi9cXG4rc3RydWN0IHp4ZGhfaXJxICp6eGRoX2dldF9pcnFfb2ZfcG9vbChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbClcXG4re1xcbitcXHRjcHVtYXNrX3Zhcl90IHJlcV9tYXNrO1xcbitcXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcXG4rXFxuK1xcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFxcdTAwMjZyZXFfbWFzaywgR0ZQX0tFUk5FTCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRjcHVtYXNrX2NvcHkocmVxX21hc2ssIGNwdV9vbmxpbmVfbWFzayk7XFxuK1xcbitcXHRpcnEgPSB6eGRoX2lycV9hZmZpbml0eV9yZXF1ZXN0KHBvb2wsIHJlcV9tYXNrKTtcXG4rXFxuK1xcdGZyZWVfY3B1bWFza192YXIocmVxX21hc2spO1xcbitcXG4rXFx0cmV0dXJuIGlycTtcXG4rfVxcbitcXG4rc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnp4ZGhfaXJxX3Bvb2xfYWxsb2Moc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIG1pbl90aHJlc2hvbGQsIHUzMiBtYXhfdGhyZXNob2xkKVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sO1xcbitcXHR1MTYgKmlycXNfcGVyX2NwdTtcXG4rXFxuK1xcdGlycXNfcGVyX2NwdSA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCppcnFzX3Blcl9jcHUpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFpcnFzX3Blcl9jcHUpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0cG9vbCA9IGt2emFsbG9jX29iaigqcG9vbCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcG9vbCkge1xcbitcXHRcXHRrZnJlZShpcnFzX3Blcl9jcHUpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0fVxcbitcXG4rXFx0cG9vbC1cXHUwMDNlZGV2ID0genhkaF9kZXY7XFxuK1xcdHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdSA9IGlycXNfcGVyX2NwdTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdHhhX2luaXRfZmxhZ3MoXFx1MDAyNnBvb2wtXFx1MDAzZWlycXMsIFhBX0ZMQUdTX0FMTE9DKTtcXG4rXFx0cG9vbC1cXHUwMDNleGFfbnVtX2lycXMubWluID0gc3RhcnQ7XFxuK1xcdHBvb2wtXFx1MDAzZXhhX251bV9pcnFzLm1heCA9IHN0YXJ0ICsgc2l6ZSAtIDE7XFxuK1xcdHNucHJpbnRmKHBvb2wtXFx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcXFwiJXNcXFwiLCBuYW1lKTtcXG4rXFxuK1xcdC8qIFRocmVzaG9sZHMgYXJlIGV4cHJlc3NlZCBpbiBxdWV1ZSByZWZlcmVuY2VzLCB0d28gcGVyIElSUS4gKi9cXG4rXFx0cG9vbC1cXHUwMDNlbWluX3RocmVzaG9sZCA9IG1pbl90aHJlc2hvbGQgKiBaWERIX0VRX1JFRlNfUEVSX0lSUTtcXG4rXFx0cG9vbC1cXHUwMDNlbWF4X3RocmVzaG9sZCA9IG1heF90aHJlc2hvbGQgKiBaWERIX0VRX1JFRlNfUEVSX0lSUTtcXG4rXFxuK1xcdHJldHVybiBwb29sO1xcbit9XFxuK1xcbit2b2lkIHp4ZGhfaXJxX3Bvb2xfZnJlZShzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbClcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4rXFx0dTMyIGNwdTtcXG4rXFxuK1xcdC8qIE9uIGEgZmFzdCB0ZWFyZG93biB0aGUgdGFibGUgbWF5IHN0aWxsIGhvbGQgSVJRczsgcmVsZWFzZVxcbitcXHQgKiB3aGF0ZXZlciBpcyBsZWZ0LlxcbitcXHQgKi9cXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlbG9jayk7XFxuK1xcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwb29sLVxcdTAwM2VpcnFzLCBpbmRleCwgaXJxKVxcbitcXHRcXHR6eGRoX2lycV9yZWxlYXNlKFxcdTAwMjZpcnEtXFx1MDAzZXJlZmNvdW50KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrKTtcXG4rXFx0eGFfZGVzdHJveShcXHUwMDI2cG9vbC1cXHUwMDNlaXJxcyk7XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0aWYgKHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdSkge1xcbitcXHRcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcXG4rXFx0XFx0XFx0V0FSTl9PTihwb29sLVxcdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSk7XFxuK1xcdFxcdGtmcmVlKHBvb2wtXFx1MDAzZWlycXNfcGVyX2NwdSk7XFxuK1xcdH1cXG4rXFxuK1xcdGt2ZnJlZShwb29sKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODlmNDZkN2IxMWM5Y1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oXFxuQEAgLTAsMCArMSw3MiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIElSUSBwb29sIG1hbmFnZW1lbnRcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fWlhESF9JUlFfSF9fXFxuKyNkZWZpbmUgX19aWERIX0lSUV9IX19cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVtYXNrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rcmVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXJyYXkuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCB6eGRoX2NvcmVfZGV2O1xcbitcXG4rLyogTnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgcGVyIHB1cnBvc2UuIFRoZSBsYXlvdXQgb2YgdGhlIHZlY3RvciBzcGFjZVxcbisgKiBpcyBhIGhhcmR3YXJlIGludGVyZmFjZTpcXG4rICogICBbMCwgOCkgICAgYXN5bmMgZXZlbnQgcXVldWVzXFxuKyAqICAgWzgsIDE0KSAgIHJlc2VydmVkIGZvciBSRE1BICh1bnVzZWQgZm9yIG5vdylcXG4rICogICBbMTQsIDc4KSAgdnEgcngvdHggcXVldWUgcGFpcnNcXG4rICovXFxuKyNkZWZpbmUgWlhESF9BU1lOQ19DSEFOTkVMU19OVU1cXHRcXHQ4XFxuKyNkZWZpbmUgWlhESF9SRE1BX0NIQU5ORUxTX05VTVxcdFxcdDZcXG4rI2RlZmluZSBaWERIX1ZRU19DSEFOTkVMU19OVU1cXHRcXHQ2NFxcbitcXG4rI2RlZmluZSBaWERIX01BWF9JUlFfTkFNRVxcdDEwMFxcbisjZGVmaW5lIFpYREhfRVFfUkVGU19QRVJfSVJRXFx0MlxcbitcXG4rLyogUmVmZXJlbmNlIGNvdW50ZWQgaW50ZXJydXB0LiBFdmVudCBxdWV1ZXMgc2hhcmUgYW4gSVJRIHRocm91Z2ggdGhlXFxuKyAqIG5vdGlmaWVyIGNoYWluLCB3aGljaCBpcyBmaXJlZCBmcm9tIGhhcmQgSVJRIGNvbnRleHQuXFxuKyAqL1xcbitzdHJ1Y3QgenhkaF9pcnEge1xcbitcXHRzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgbmg7XFxuK1xcdGNwdW1hc2tfdmFyX3QgbWFzaztcXHRcXHQvKiBpbnRlcnJ1cHQgYWZmaW5pdHkgKi9cXG4rXFx0Y2hhciBuYW1lW1pYREhfTUFYX0lSUV9OQU1FXTtcXG4rXFx0c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2w7XFxuK1xcdHUzMiBpbmRleDtcXHRcXHRcXHQvKiB2ZWN0b3IgaW5kZXggKi9cXG4rXFx0aW50IGlycW47XFx0XFx0XFx0LyogTGludXggSVJRIG51bWJlciAqL1xcbitcXHRzdHJ1Y3Qga3JlZiByZWZjb3VudDtcXG4rfTtcXG4rXFxuKy8qIFBvb2wgb2YgdmVjdG9ycyBkZWRpY2F0ZWQgdG8gb25lIHB1cnBvc2UsIGlkZW50aWZpZWQgYnkgdGhlXFxuKyAqIFt4YV9udW1faXJxcy5taW4sIHhhX251bV9pcnFzLm1heF0gdmVjdG9yIHJhbmdlLlxcbisgKi9cXG4rc3RydWN0IHp4ZGhfaXJxX3Bvb2wge1xcbitcXHRjaGFyIG5hbWVbWlhESF9NQVhfSVJRX05BTUVdO1xcbitcXHRzdHJ1Y3QgeGFfbGltaXQgeGFfbnVtX2lycXM7XFxuK1xcdHN0cnVjdCBtdXRleCBsb2NrO1xcdFxcdC8qIHNlcmlhbGl6ZXMgSVJRIGNyZWF0aW9uICovXFxuK1xcdHN0cnVjdCB4YXJyYXkgaXJxcztcXG4rXFx0dTMyIG1pbl90aHJlc2hvbGQ7XFx0XFx0LyogaW4gcXVldWUgcmVmZXJlbmNlcyAqL1xcbitcXHR1MzIgbWF4X3RocmVzaG9sZDtcXHRcXHQvKiBpbiBxdWV1ZSByZWZlcmVuY2VzICovXFxuK1xcdHUxNiAqaXJxc19wZXJfY3B1O1xcdFxcdC8qIG51bWJlciBvZiBJUlFzIGJvdW5kIHBlciBDUFUgKi9cXG4rXFx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKmRldjtcXG4rfTtcXG4rXFxuK3N0cnVjdCB6eGRoX2lycV90YWJsZSB7XFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfZ2V0X2lycV9vZl9wb29sKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTtcXG4raW50IHp4ZGhfaXJxX2F0dGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XFxuK2ludCB6eGRoX2lycV9kZXRhY2hfbmIoc3RydWN0IHp4ZGhfaXJxICppcnEsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xcbit2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKTtcXG4rc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnp4ZGhfaXJxX3Bvb2xfYWxsb2Moc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIG1pbl90aHJlc2hvbGQsIHUzMiBtYXhfdGhyZXNob2xkKTtcXG4rdm9pZCB6eGRoX2lycV9wb29sX2ZyZWUoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpO1xcbitcXG4rI2VuZGlmIC8qIF9fWlhESF9JUlFfSF9fICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA1OjAzOjEzLjgwNjAyNzc1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ0MjM5ODk4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpLyksIGFkZGluZyBJUlEgcG9vbCBtYW5hZ2VtZW50IGFuZCBldmVudCBxdWV1ZSBwbHVtYmluZyBmb3IgWlRFIERpbmdIYWkgUENJZSBhZGFwdGVycyAoUENJIHZlbmRvciBJRCAweDFjZjIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVlM2VmNDk2YTkzNWQ0ZmNkYzM3NDEwYjk3MGU0NzNkOGI2YjljMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNTowMzoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbmluZGV4IGUyZjRkYTMzZGY1OTMuLjJkYzZkNjhjYzBlMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbkBAIC00LDQgKzQsNCBAQFxuICNcbiBcbiBvYmotJChDT05GSUdfRElOR0hBSV9QRikgKz0gZGluZ2hhaTEwZS5vXG4tZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cbitkaW5naGFpMTBlLXkgOj0gZW5fcGYubyB6eGRoX2lycS5vIHp4ZGhfZXEub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5pbmRleCA4NmQ0Mzc0MDg4MjAzLi5mZTM5MjRiODkwZDE3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xuQEAgLTYsNiArNiwxMCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcImVuX3BmLmhcIlxuQEAgLTI1LDYgKzI5LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xuIFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XG4gXG4rc3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlIHtcbitcdHN0cnVjdCB6eGRoX2lycV9wb29sICphc3luY19wb29sO1xuK307XG4rXG4rLyogSVJRIGNvbXBhY3Rpb24gdGhyZXNob2xkcyBvZiB0aGUgYXN5bmMgcG9vbCwgaW4gbnVtYmVyIG9mIHF1ZXVlcy4gKi9cbisjZGVmaW5lIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QXHQwXG4rI2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUFx0N1xuK1xuIHZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXG4ge1xuIFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG5AQCAtMzY5LDYgKzM4MSwxNzcgQEAgaW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qIFJlYWQgdGhlIGZpcm13YXJlIHZlcnNpb24gYmxvY2sgYW5kIHZlcmlmeSB0aGUgZHJpdmVyL2Zpcm13YXJlXG4rICogdmVyc2lvbiBjb250cmFjdC5cbisgKi9cbitzdGF0aWMgaW50IHp4ZGhfcGZfZndfY29tcGF0X2NoZWNrKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgenhkaF9md19jb21wYXQgX19pb21lbSAqY29tcGF0O1xuK1x0c3RydWN0IHp4ZGhfZndfY29tcGF0ICpmd19jb21wYXQ7XG4rXHR1MzIgZXJhc2VkO1xuK1xuK1x0ZndfY29tcGF0ID0gXHUwMDI2cGZfZGV2LVx1MDAzZWZ3X2NvbXBhdDtcbitcdGNvbXBhdCA9IHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdICsgWlhESF9GV19DT01QQVRfT0ZGU0VUO1xuK1xuK1x0LyogVGhlIHJlZ2lvbiByZWFkcyBhcyBhbGwgb25lcyB1bnRpbCB0aGUgZmlybXdhcmUgcG9wdWxhdGVzIGl0IGF0XG4rXHQgKiB0aGUgZW5kIG9mIGl0cyBib290OyBhbGxvdyB1cCB0byAyMDAgcyBmb3IgYSBjb2xkIGJvb3QuXG4rXHQgKi9cbitcdHJlYWR4X3BvbGxfdGltZW91dChpb3JlYWQzMiwgY29tcGF0LCBlcmFzZWQsIGVyYXNlZCAhPSAweGZmZmZmZmZmVSxcbitcdFx0XHQgICBVU0VDX1BFUl9TRUMsXG4rXHRcdFx0ICAgWlhESF9GV19DT01QQVRfVElNRU9VVF9TRUMgKiBVU0VDX1BFUl9TRUMpO1xuK1xuK1x0LyogRmlybXdhcmUgcHJlZGF0aW5nIHRoZSBjb21wYXRpYmlsaXR5IHJlZ2lvbiBrZWVwcyB0aGUgZXJhc2VkXG4rXHQgKiBwYXR0ZXJuLCB3aGljaCBmYWlscyB0aGUgbW9kdWxlIGlkIGNoZWNrIGJlbG93IGFuZCBkZWZlcnMgdGhlXG4rXHQgKiBkZWNpc2lvbiB0byB0aGUgcmVhZGluZXNzIHdhaXQuXG4rXHQgKi9cbitcdGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQgPSBpb3JlYWQ4KFx1MDAyNmNvbXBhdC1cdTAwM2Vtb2R1bGVfaWQpO1xuK1x0ZndfY29tcGF0LVx1MDAzZW1ham9yID0gaW9yZWFkOChcdTAwMjZjb21wYXQtXHUwMDNlbWFqb3IpO1xuK1x0ZndfY29tcGF0LVx1MDAzZWZ3X21pbm9yID0gaW9yZWFkOChcdTAwMjZjb21wYXQtXHUwMDNlZndfbWlub3IpO1xuK1x0ZndfY29tcGF0LVx1MDAzZWRydl9taW5vciA9IGlvcmVhZDgoXHUwMDI2Y29tcGF0LVx1MDAzZWRydl9taW5vcik7XG4rXHRmd19jb21wYXQtXHUwMDNlcGF0Y2ggPSBpb3JlYWQxNihcdTAwMjZjb21wYXQtXHUwMDNlcGF0Y2gpO1xuK1xuK1x0aWYgKGZ3X2NvbXBhdC1cdTAwM2Vtb2R1bGVfaWQgIT0gWlhESF9NT0RVTEVfSUQpIHtcbitcdFx0ZGV2X2luZm8oenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdCBcInVua25vd24gbW9kdWxlIGlkICV1LCBza2lwIGZ3IGNvbXBhdCBjaGVja1xcblwiLFxuK1x0XHRcdCBmd19jb21wYXQtXHUwMDNlbW9kdWxlX2lkKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoZndfY29tcGF0LVx1MDAzZW1ham9yICE9IFpYREhfTUFKT1IpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJkcml2ZXIgbWFqb3IgJXUgaW5jb21wYXRpYmxlIHdpdGggZmlybXdhcmUgbWFqb3IgJXVcXG5cIixcbitcdFx0XHRaWERIX01BSk9SLCBmd19jb21wYXQtXHUwMDNlbWFqb3IpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChmd19jb21wYXQtXHUwMDNlZndfbWlub3IgXHUwMDNjIFpYREhfRldfTUlOT1IpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJmaXJtd2FyZSBmd19taW5vciAlZCBvbGRlciB0aGFuIHJlcXVpcmVkICV1XFxuXCIsXG4rXHRcdFx0ZndfY29tcGF0LVx1MDAzZWZ3X21pbm9yLCBaWERIX0ZXX01JTk9SKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoZndfY29tcGF0LVx1MDAzZWRydl9taW5vciBcdTAwM2UgWlhESF9EUlZfTUlOT1IpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4rXHRcdFx0XCJkcml2ZXIgZHJ2X21pbm9yICV1IG9sZGVyIHRoYW4gcmVxdWlyZWQgYnkgZmlybXdhcmUgJXVcXG5cIixcbitcdFx0XHRaWERIX0RSVl9NSU5PUiwgZndfY29tcGF0LVx1MDAzZWRydl9taW5vcik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFdhaXQgZm9yIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIG9mIHRoZSBmaXJtd2FyZSB0byBmaW5pc2hcbisgKiBib290aW5nLCBzbyB0aGF0IGxhdGVyIHByb2JlIHN0ZXBzIGNhbiB0YWxrIHRvIGl0LlxuKyAqL1xuK3N0YXRpYyBpbnQgenhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgenhkaF9oZWFsdGhfYnVmZmVyIF9faW9tZW0gKmhiO1xuK1x0dTggaGVhbHRoX3ZlcnNpb247XG4rXHR1OCBwb3dlcl9vbjtcbitcdGludCBlcnI7XG4rXG4rXHRoYiA9IHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdICsgWlhESF9SSVNDVl9IQl9PRkZTRVQ7XG4rXHRoZWFsdGhfdmVyc2lvbiA9IGlvcmVhZDgoXHUwMDI2aGItXHUwMDNlaGVhbHRoX3ZlcnNpb24pO1xuK1xuK1x0LyogRmlybXdhcmUgcHJlZGF0aW5nIHRoZSBoZWFsdGggYnVmZmVyIHByb3RvY29sIGhhcyBuZWl0aGVyIGFcbitcdCAqIHZhbGlkIHZlcnNpb24gYnl0ZSBub3IgYSBwb3dlci1vbiBmbGFnIHRvIHdhaXQgZm9yLlxuK1x0ICovXG4rXHRpZiAoaGVhbHRoX3ZlcnNpb24gIT0gMSBcdTAwMjZcdTAwMjZcbitcdCAgICBwZl9kZXYtXHUwMDNlZndfY29tcGF0LnBhdGNoIFx1MDAzYyBaWERIX0hQSVJRX1BBVENIKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVyciA9IHJlYWR4X3BvbGxfdGltZW91dChpb3JlYWQ4LCBcdTAwMjZoYi1cdTAwM2VyaXNjdl9wb3dlcl9vbiwgcG93ZXJfb24sXG4rXHRcdFx0XHQgcG93ZXJfb24gPT0gMSwgVVNFQ19QRVJfU0VDLFxuK1x0XHRcdFx0IFpYREhfUklTQ1ZfUkVBRFlfVElNRU9VVF9TRUMgKiBVU0VDX1BFUl9TRUMpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmlzY3YgcG93ZXIgb25cXG5cIik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB6eGRoX3BmX2lycV9wb29sc19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnBmX2lycV90YWJsZSA9IHp4ZGhfZGV2LVx1MDAzZWlycV90YWJsZS5wcml2O1xuK1x0c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2w7XG4rXG4rXHRwb29sID0genhkaF9pcnFfcG9vbF9hbGxvYyh6eGRoX2RldiwgMCwgWlhESF9BU1lOQ19DSEFOTkVMU19OVU0sXG4rXHRcdFx0XHQgICBcInp4ZGhfcGZfYXN5bmNcIiwgWlhESF9QRl9BU1lOQ19JUlFfTUlOX0NPTVAsXG4rXHRcdFx0XHQgICBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUCk7XG4rXHRpZiAoSVNfRVJSKHBvb2wpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihwb29sKTtcbitcbitcdHBmX2lycV90YWJsZS1cdTAwM2Vhc3luY19wb29sID0gcG9vbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB6eGRoX3BmX2lycV9wb29sc19kZXN0cm95KHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSAqcGZfaXJxX3RhYmxlKVxuK3tcbitcdGlmIChwZl9pcnFfdGFibGUtXHUwMDNlYXN5bmNfcG9vbClcbitcdFx0enhkaF9pcnFfcG9vbF9mcmVlKHBmX2lycV90YWJsZS1cdTAwM2Vhc3luY19wb29sKTtcbit9XG4rXG4raW50IHp4ZGhfcGZfaXJxX3RhYmxlX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX2lycV90YWJsZSAqdGFibGUgPSBcdTAwMjZ6eGRoX2Rldi1cdTAwM2VpcnFfdGFibGU7XG4rXHRzdHJ1Y3QgenhkaF9wZl9pcnFfdGFibGUgKnByaXY7XG4rXG4rXHRwcml2ID0ga3Z6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR0YWJsZS1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgenhkaF9wZl9pcnFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRpbnQgdG90YWxfdmVjID0gWlhESF9WUVNfQ0hBTk5FTFNfTlVNICsgWlhESF9BU1lOQ19DSEFOTkVMU19OVU0gK1xuK1x0XHRcdFpYREhfUkRNQV9DSEFOTkVMU19OVU07XG4rXHRpbnQgZXJyO1xuK1xuK1x0dG90YWxfdmVjID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIHRvdGFsX3ZlYywgdG90YWxfdmVjLFxuK1x0XHRcdFx0XHQgIFBDSV9JUlFfTVNJWCk7XG4rXHRpZiAodG90YWxfdmVjIFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9hbGxvY19pcnFfdmVjdG9ycyBmYWlsZWQ6ICVkXFxuXCIsXG4rXHRcdFx0dG90YWxfdmVjKTtcbitcdFx0cmV0dXJuIHRvdGFsX3ZlYztcbitcdH1cbitcbitcdGVyciA9IHp4ZGhfcGZfaXJxX3Bvb2xzX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ6eGRoX3BmX2lycV9wb29sc19pbml0IGZhaWxlZDogJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRwY2lfZnJlZV9pcnFfdmVjdG9ycyh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9pcnFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfaXJxX3RhYmxlICp0YWJsZSA9IFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWlycV90YWJsZTtcbitcbitcdGlmICh0YWJsZS1cdTAwM2Vwcml2KVxuK1x0XHR6eGRoX3BmX2lycV9wb29sc19kZXN0cm95KHRhYmxlLVx1MDAzZXByaXYpO1xuK1x0a3ZmcmVlKHRhYmxlLVx1MDAzZXByaXYpO1xuK1x0dGFibGUtXHUwMDNlcHJpdiA9IE5VTEw7XG4rXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbit9XG4rXG4rLyogRmV0Y2ggYSB2ZWN0b3IgZnJvbSB0aGUgYXN5bmMgcG9vbCBmb3Igb25lIGFzeW5jIGV2ZW50IHF1ZXVlLiAqL1xuK3N0cnVjdCB6eGRoX2lycSAqenhkaF9wZl9hc3luY19pcnFfcmVxdWVzdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfaXJxX3RhYmxlICpwZl9pcnFfdGFibGUgPSB6eGRoX2Rldi1cdTAwM2VpcnFfdGFibGUucHJpdjtcbitcbitcdHJldHVybiB6eGRoX2dldF9pcnFfb2ZfcG9vbChwZl9pcnFfdGFibGUtXHUwMDNlYXN5bmNfcG9vbCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgenhkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIHtcbiBcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcbkBAIC00MDUsMTAgKzU4OCw1MCBAQCBzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4gXHR9XG4gXG4rXHRyZXQgPSB6eGRoX3BmX2Z3X2NvbXBhdF9jaGVjayh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9md19jb21wYXRfY2hlY2sgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9jZmdfaW5pdDtcbitcdH1cbitcbitcdHJldCA9IHp4ZGhfcGZfd2FpdF9yaXNjdl9yZWFkeSh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl93YWl0X3Jpc2N2X3JlYWR5IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9pbml0KHp4ZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJ6eGRoX3BmX2lycV90YWJsZV9pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX2lycV90YWJsZV9jcmVhdGUoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInp4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZXJyX2lycV90YWJsZTtcbitcdH1cbitcbitcdHJldCA9IHp4ZGhfcGZfZXFfdGFibGVfaW5pdCh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9lcV90YWJsZV9pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfZXFfdGFibGU7XG4rXHR9XG4rXG4rXHRyZXQgPSB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZSh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9lcV90YWJsZV9jcmVhdGUgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9lcV90YWJsZTtcbitcdH1cbitcbiBcdGRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfZXFfdGFibGU6XG4rXHR6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koenhkaF9kZXYpO1xuK2Vycl9pcnFfdGFibGU6XG4rXHR6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTtcbiBlcnJfY2ZnX2luaXQ6XG4gXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4gZXJyX3BjaV9pbml0OlxuQEAgLTQyNCw2ICs2NDcsOCBAQCBzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTtcbiBcbiBcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbitcdHp4ZGhfcGZfZXFfdGFibGVfZGVzdHJveSh6eGRoX2Rldik7XG4rXHR6eGRoX3BmX2lycV90YWJsZV9kZXN0cm95KHp4ZGhfZGV2KTtcbiBcdHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoenhkaF9kZXYpO1xuIFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuIFx0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbmluZGV4IDczNzNkZWU4ZDFhOWYuLjg5NGEwNWEwOWQ5NjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXG5AQCAtOSw2ICs5LDkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXCJ6eGRoX2VxLmhcIlxuKyNpbmNsdWRlIFwienhkaF9pcnEuaFwiXG4rXG4gI2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRFx0MHgxY2YyXG4gI2RlZmluZSBaWERIX1BGX0RFVklDRV9JRFx0MHg4MDQwXG4gI2RlZmluZSBaWERIX1ZGX0RFVklDRV9JRFx0MHg4MDQxXG5AQCAtMjksMTAgKzMyLDU3IEBAXG4gI2RlZmluZSBaWERIX1BGX0FMSUdOMlx0XHRcdDJcbiAjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjJcdFx0MlxuIFxuKy8qIEZpeGVkIG9mZnNldHMgb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSByZWdpb25zIHdpdGhpbiBCQVIgMC4gKi9cbisjZGVmaW5lIFpYREhfUklTQ1ZfSEJfT0ZGU0VUXHQweDUzMDBcbisjZGVmaW5lIFpYREhfRldfQ09NUEFUX09GRlNFVFx0MHg1NDAwXG4rXG4rLyogRHJpdmVyL2Zpcm13YXJlIHZlcnNpb24gY29udHJhY3QuIFRoZSBmaXJtd2FyZSBwdWJsaXNoZXMgaXRzIHNpZGUgb2ZcbisgKiB0aGUgY29udHJhY3QgaW4gdGhlIHJlZ2lvbiBhdCBaWERIX0ZXX0NPTVBBVF9PRkZTRVQuXG4rICovXG4rI2RlZmluZSBaWERIX01PRFVMRV9JRFx0XHQxXG4rI2RlZmluZSBaWERIX01BSk9SXHRcdDFcbisjZGVmaW5lIFpYREhfRldfTUlOT1JcdFx0MFxuKyNkZWZpbmUgWlhESF9EUlZfTUlOT1JcdFx0MFxuKy8qIEZpcm13YXJlIHBhdGNoIGxldmVsIHRoYXQgaW50cm9kdWNlZCB0aGUgaGVhbHRoIGJ1ZmZlciBwcm90b2NvbC4gKi9cbisjZGVmaW5lIFpYREhfSFBJUlFfUEFUQ0hcdDRcbitcbisjZGVmaW5lIFpYREhfRldfQ09NUEFUX1RJTUVPVVRfU0VDXHQyMDBcbisjZGVmaW5lIFpYREhfUklTQ1ZfUkVBRFlfVElNRU9VVF9TRUNcdDQwXG4rXG4rLyogRmlybXdhcmUgdmVyc2lvbiBjb21wYXRpYmlsaXR5IGJsb2NrIGF0IFpYREhfRldfQ09NUEFUX09GRlNFVC5cbisgKiBGaWVsZHMgYXJlIHJlYWQgdGhyb3VnaCBpb3JlYWQqKCksIHdoaWNoIGNvbnZlcnRzIGZyb20gbGl0dGxlLWVuZGlhbi5cbisgKi9cbitzdHJ1Y3QgenhkaF9md19jb21wYXQge1xuK1x0dTggbW9kdWxlX2lkO1xuK1x0dTggbWFqb3I7XG4rXHRzOCBmd19taW5vcjtcbitcdHU4IGRydl9taW5vcjtcbitcdHUxNiBwYXRjaDtcbitcdHUxNiByc3Y7XG4rfSBfX3BhY2tlZDtcbitcbisvKiBIZWFsdGggYnVmZmVyIGF0IFpYREhfUklTQ1ZfSEJfT0ZGU0VULCBtYWludGFpbmVkIGJ5IHRoZSBSSVNDLVZcbisgKiBtYW5hZ2VtZW50IGNvcmUgb2YgdGhlIGZpcm13YXJlLiBGaWVsZHMgYXJlIHJlYWQgdGhyb3VnaCBpb3JlYWQqKCkuXG4rICovXG4rc3RydWN0IHp4ZGhfaGVhbHRoX2J1ZmZlciB7XG4rXHR1MzIgc3luZDtcdFx0LyogQml0bWFzayBvZiBhY3RpdmUgc3luZHJvbWUgZmxhZ3MuICovXG4rXHR1MzIgaGVhbHRoX2NvdW50ZXI7XHQvKiBJbmNyZW1lbnRlZCBoZWFydGJlYXQgY291bnRlci4gKi9cbitcdHU4IHN0YXR1cztcbitcdHU4IHJmcjtcbitcdHU4IGZ3X2V4Y2VwdGlvbjtcbitcdHU4IHJpc2N2X3Bvd2VyX29uO1x0LyogU2V0IHRvIDEgb25jZSB0aGUgY29yZSBmaW5pc2hlZCBib290aW5nLiAqL1xuK1x0dTggZndfdmVyc2lvblszMl07XG4rXHR1OCBwZl9zdGF0dXNbNV07XG4rXHR1OCBoZWFsdGhfdmVyc2lvbjtcdC8qIEhlYWx0aCBidWZmZXIgcHJvdG9jb2wgdmVyc2lvbi4gKi9cbitcdHU4IHJzdjFbMzBdO1xuK30gX19wYWNrZWQ7XG4rXG4gc3RydWN0IHp4ZGhfY29yZV9kZXYge1xuIFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xuIFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbitcdHN0cnVjdCB6eGRoX2lycV90YWJsZSBpcnFfdGFibGU7XG4rXHRzdHJ1Y3QgenhkaF9lcV90YWJsZSBlcV90YWJsZTtcbiBcdHZvaWQgKnByaXY7XG4gfTtcbiBcbkBAIC01NCw2ICsxMDQsNyBAQCBzdHJ1Y3QgenhkaF9wZl9kZXYge1xuIFx0czMyIG1vZGVybl9iYXJzO1xuIFx0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xuIFx0dTMyIGRldl9jZmdfYmFyX29mZjtcbitcdHN0cnVjdCB6eGRoX2Z3X2NvbXBhdCBmd19jb21wYXQ7XG4gfTtcbiBcbiB2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTtcbkBAIC03Miw0ICsxMjMsMTAgQEAgaW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4gdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4gaW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4gXG4rLyogUEYgSVJRIHRhYmxlIChlbl9wZi5jKSAqL1xuK2ludCB6eGRoX3BmX2lycV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfaXJxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK3ZvaWQgenhkaF9wZl9pcnFfdGFibGVfZGVzdHJveShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK3N0cnVjdCB6eGRoX2lycSAqenhkaF9wZl9hc3luY19pcnFfcmVxdWVzdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK1xuICNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjFkN2VlZWMxYWU0ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9lcS5jXG5AQCAtMCwwICsxLDE0NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIGV2ZW50IHF1ZXVlIHBsdW1iaW5nXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKlxuKyAqIEFzeW5jIGV2ZW50IHF1ZXVlcyBhcmUgdGhlIGRlbGl2ZXJ5IHBhdGggZm9yIGZpcm13YXJlIG5vdGlmaWNhdGlvbnM6XG4rICogYSBxdWV1ZSBvd25zIG9uZSBNU0ktWCB2ZWN0b3Igb2YgdGhlIGFzeW5jIHBvb2wgYW5kIGZhbnMgaW50ZXJydXB0c1xuKyAqIG91dCB0byB0aGUgcGVyLWV2ZW50LXR5cGUgbm90aWZpZXIgY2hhaW5zIG9mIHRoZSBldmVudCBxdWV1ZSB0YWJsZS5cbisgKiBUaGUgQkFSIG1lc3NhZ2UgY2hhbm5lbCBoYW5kc2hha2UgdGhhdCB0ZWxscyB0aGUgZmlybXdhcmUgd2hpY2hcbisgKiB2ZWN0b3JzIHRvIHNpZ25hbCBjb21lcyB3aXRoIHRoZSBCQVIgbWVzc2FnZSBzdWJzeXN0ZW0gaW4gYSBsYXRlclxuKyAqIHNlcmllczsgdGhlIFBGIHNpZGUgd2lyZWQgaGVyZSBpcyBsaXZlIGFzIHNvb24gYXMgdGhhdCBjaGFubmVsIGlzXG4rICogZW5hYmxlZC5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZW5fcGYuaFwiXG4rI2luY2x1ZGUgXCJ6eGRoX2VxLmhcIlxuKyNpbmNsdWRlIFwienhkaF9pcnEuaFwiXG4rXG4rLyogUEYgc2lkZSBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGU6IG9uZSBhc3luYyBFUSBmZWQgYnkgdGhlIFJJU0MtVlxuKyAqIG1hbmFnZW1lbnQgY29yZS5cbisgKi9cbitzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSB7XG4rXHRzdHJ1Y3QgenhkaF9lcV9hc3luYyByaXNjdl9lcTtcbit9O1xuK1xuKy8qIEZldGNoIHRoZSBldmVudF9pZCB0aGUgUklTQy1WIGNvcmUgcG9zdGVkIGluIHRoZSBQRiByZWNlaXZlXG4rICogc3ViLWNoYW5uZWwgb2YgdGhlIEJBUiBtZXNzYWdlIGFyZWEuIFRoZSBmaWVsZCBsaXZlcyBhdCBieXRlIG9mZnNldFxuKyAqIDIgb2YgdGhlIDEyLWJ5dGUgbWVzc2FnZSBoZWFkZXIsIHNvIGEgc2luZ2xlIDMyLWJpdCByZWFkIG9mIHRoZVxuKyAqIHN1Yi1jaGFubmVsIHN0YXJ0IGNvdmVycyBpdC5cbisgKi9cbitzdGF0aWMgdTE2IHp4ZGhfZXFfZXZlbnRfaWRfZ2V0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHR2b2lkIF9faW9tZW0gKnN1YmNoYW47XG4rXG4rXHRzdWJjaGFuID0gcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gKyBaWERIX0JBUl9NU0dfU1VCQ0hBTl9SRUNWO1xuK1xuK1x0cmV0dXJuIGlvcmVhZDMyKHN1YmNoYW4pIFx1MDAzZVx1MDAzZSAxNjtcbit9XG4rXG4rc3RhdGljIGVudW0genhkaF9lcV9ldmVudF90eXBlIHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQodTE2IGV2ZW50X2lkKVxuK3tcbitcdGlmIChldmVudF9pZCA9PSBaWERIX01TR19NT0RVTEVfUklTQ19SRUFEWSlcbitcdFx0cmV0dXJuIFpYREhfRVFfRVZFTlRfVFlQRV9SSVNDVl9SRUFEWTtcbitcbitcdC8qIE9ubHkgdGhlIFJJU0MtViByZWFkeSBub3RpZmljYXRpb24gaXMgZGlzcGF0Y2hlZCBpbiB0aGlzXG4rXHQgKiBzZXJpZXM7IHRoZSByZW1haW5pbmcgZmlybXdhcmUgZXZlbnRzIGFycml2ZSB3aXRoIHRoZSBCQVJcbitcdCAqIG1lc3NhZ2Ugc3Vic3lzdGVtLlxuK1x0ICovXG4rXHRyZXR1cm4gWlhESF9FUV9FVkVOVF9UWVBFX01BWDtcbit9XG4rXG4rc3RhdGljIGludCB6eGRoX2VxX2FzeW5jX3Jpc2N2X2ludChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHp4ZGhfZXFfYXN5bmMgKmVxID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgenhkaF9lcV9hc3luYywgaXJxX25iKTtcbitcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IGVxLVx1MDAzZXByaXY7XG4rXHRlbnVtIHp4ZGhfZXFfZXZlbnRfdHlwZSBldmVudF90eXBlO1xuK1xuK1x0ZXZlbnRfdHlwZSA9IHp4ZGhfZXFfZXZlbnRfdHlwZV9nZXQoenhkaF9lcV9ldmVudF9pZF9nZXQoenhkaF9kZXYpKTtcbitcdGlmIChldmVudF90eXBlID09IFpYREhfRVFfRVZFTlRfVFlQRV9NQVgpXG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcbitcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWVxX3RhYmxlLm5oW2V2ZW50X3R5cGVdLFxuK1x0XHRcdFx0ICAgZXZlbnRfdHlwZSwgTlVMTCk7XG4rXG4rXHRyZXR1cm4gTk9USUZZX09LO1xuK31cbitcbitpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9lcV90YWJsZSAqdGFibGUgPSBcdTAwMjZ6eGRoX2Rldi1cdTAwM2VlcV90YWJsZTtcbitcdHN0cnVjdCB6eGRoX3BmX2VxX3RhYmxlICpwcml2O1xuK1x0aW50IGk7XG4rXG4rXHRwcml2ID0ga3Z6YWxsb2Nfb2JqKCpwcml2LCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR0YWJsZS1cdTAwM2Vwcml2ID0gcHJpdjtcbitcbitcdG11dGV4X2luaXQoXHUwMDI2dGFibGUtXHUwMDNlbG9jayk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBaWERIX0VRX0VWRU5UX1RZUEVfTUFYOyBpKyspXG4rXHRcdEFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlbmhbaV0pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB6eGRoX3BmX2VxX3RhYmxlX2NyZWF0ZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZXFfdGFibGUgKnBmX2VxX3RhYmxlID0genhkaF9kZXYtXHUwMDNlZXFfdGFibGUucHJpdjtcbitcdHN0cnVjdCB6eGRoX2VxX3RhYmxlICp0YWJsZSA9IFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWVxX3RhYmxlO1xuK1x0c3RydWN0IHp4ZGhfZXFfYXN5bmMgKmVxID0gXHUwMDI2cGZfZXFfdGFibGUtXHUwMDNlcmlzY3ZfZXE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbitcbitcdGVxLVx1MDAzZXByaXYgPSB6eGRoX2RldjtcbitcdGVxLVx1MDAzZWlycSA9IHp4ZGhfcGZfYXN5bmNfaXJxX3JlcXVlc3QoenhkaF9kZXYpO1xuK1x0aWYgKElTX0VSUihlcS1cdTAwM2VpcnEpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoZXEtXHUwMDNlaXJxKTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRlcS1cdTAwM2VpcnFfbmIubm90aWZpZXJfY2FsbCA9IHp4ZGhfZXFfYXN5bmNfcmlzY3ZfaW50O1xuK1x0ZXJyID0genhkaF9pcnFfYXR0YWNoX25iKGVxLVx1MDAzZWlycSwgXHUwMDI2ZXEtXHUwMDNlaXJxX25iKTtcbitcdGlmIChlcnIpIHtcbitcdFx0enhkaF9pcnFzX3JlbGVhc2VfdmVjdG9ycyhcdTAwMjZlcS1cdTAwM2VpcnEsIDEpO1xuK1x0XHRlcS1cdTAwM2VpcnEgPSBOVUxMO1xuK1x0fVxuK1xuK3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9lcV90YWJsZV9kZXN0cm95KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9lcV90YWJsZSAqcGZfZXFfdGFibGUgPSB6eGRoX2Rldi1cdTAwM2VlcV90YWJsZS5wcml2O1xuK1x0c3RydWN0IHp4ZGhfZXFfdGFibGUgKnRhYmxlID0gXHUwMDI2enhkaF9kZXYtXHUwMDNlZXFfdGFibGU7XG4rXHRzdHJ1Y3QgenhkaF9lcV9hc3luYyAqZXE7XG4rXG4rXHRpZiAoIXBmX2VxX3RhYmxlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcSA9IFx1MDAyNnBmX2VxX3RhYmxlLVx1MDAzZXJpc2N2X2VxO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbitcdGlmIChlcS1cdTAwM2VpcnEpIHtcbitcdFx0enhkaF9pcnFfZGV0YWNoX25iKGVxLVx1MDAzZWlycSwgXHUwMDI2ZXEtXHUwMDNlaXJxX25iKTtcbitcdFx0enhkaF9pcnFzX3JlbGVhc2VfdmVjdG9ycyhcdTAwMjZlcS1cdTAwM2VpcnEsIDEpO1xuK1x0XHRlcS1cdTAwM2VpcnEgPSBOVUxMO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnRhYmxlLVx1MDAzZWxvY2spO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ0YWJsZS1cdTAwM2Vsb2NrKTtcbitcdGt2ZnJlZSh0YWJsZS1cdTAwM2Vwcml2KTtcbitcdHRhYmxlLVx1MDAzZXByaXYgPSBOVUxMO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40OTY1Y2ExNTkxMmFjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2VxLmhcbkBAIC0wLDAgKzEsNjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBldmVudCBxdWV1ZSBhYnN0cmFjdGlvblxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2lmbmRlZiBfX1pYREhfRVFfSF9fXG4rI2RlZmluZSBfX1pYREhfRVFfSF9fXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbitcbitzdHJ1Y3QgenhkaF9jb3JlX2RldjtcbitzdHJ1Y3QgenhkaF9pcnE7XG4rXG4rLyogQkFSIG1lc3NhZ2UgYXJlYTogc2hhcmVkLW1lbW9yeSBtYWlsYm94IGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlXG4rICogZmlybXdhcmUsIHNwbGl0IGludG8gc3ViLWNoYW5uZWxzIG9mIDIwNDggYnl0ZXMuIE5vdGlmaWNhdGlvbnMgZnJvbVxuKyAqIHRoZSBSSVNDLVYgbWFuYWdlbWVudCBjb3JlIGFyZSBwb3N0ZWQgdG8gdGhlIFBGIHJlY2VpdmUgc3ViLWNoYW5uZWwsXG4rICogb25lIGludGVydmFsIGFib3ZlIHRoZSBhcmVhIGJhc2UuXG4rICovXG4rI2RlZmluZSBaWERIX0JBUl9NU0dfT0ZGU0VUXHRcdDB4MjAwMFxuKyNkZWZpbmUgWlhESF9CQVJfTVNHX1NVQkNIQU5fSU5URVJWQUxcdDIwNDhcbisjZGVmaW5lIFpYREhfQkFSX01TR19TVUJDSEFOX1JFQ1ZcdChaWERIX0JBUl9NU0dfT0ZGU0VUICtcdFxcXG4rXHRcdFx0XHRcdCBaWERIX0JBUl9NU0dfU1VCQ0hBTl9JTlRFUlZBTClcbitcbisvKiBldmVudF9pZCBvZiB0aGUgXCJSSVNDLVYgY29yZSByZWFkeVwiIGZpcm13YXJlIG5vdGlmaWNhdGlvbiwgY2FycmllZFxuKyAqIGF0IGJ5dGUgb2Zmc2V0IDIgb2YgdGhlIEJBUiBtZXNzYWdlIGhlYWRlci5cbisgKi9cbisjZGVmaW5lIFpYREhfTVNHX01PRFVMRV9SSVNDX1JFQURZXHQxM1xuK1xuKy8qIEV2ZW50IHR5cGVzIHRoZSB1cHBlciBsYXllcnMgY2FuIHN1YnNjcmliZSB0byBvdmVyIHRoZSBwZXItdHlwZVxuKyAqIG5vdGlmaWVyIGNoYWlucyBvZiB0aGUgZXZlbnQgcXVldWUgdGFibGUuIFRoZSBmdWxsIGNhdGFsb2d1ZSBsaXZlc1xuKyAqIGluIHRoZSBmaXJtd2FyZTsgb25seSB0aGUgb25lcyBkaXNwYXRjaGVkIGluIHRoaXMgc2VyaWVzIGFyZSBuYW1lZC5cbisgKi9cbitlbnVtIHp4ZGhfZXFfZXZlbnRfdHlwZSB7XG4rXHRaWERIX0VRX0VWRU5UX1RZUEVfUklTQ1ZfUkVBRFkgPSAwLFxuK1x0WlhESF9FUV9FVkVOVF9UWVBFX01BWCxcbit9O1xuK1xuKy8qIEFzeW5jaHJvbm91cyBldmVudCBxdWV1ZSBkZWxpdmVyaW5nIGZpcm13YXJlIG5vdGlmaWNhdGlvbnMgdG8gdGhlXG4rICogZHJpdmVyIHdpdGhvdXQgYSByZXF1ZXN0L3JlcGx5IGhhbmRzaGFrZS5cbisgKi9cbitzdHJ1Y3QgenhkaF9lcV9hc3luYyB7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcbitcdHN0cnVjdCBub3RpZmllcl9ibG9jayBpcnFfbmI7XG4rXHR2b2lkICpwcml2O1xuK307XG4rXG4rc3RydWN0IHp4ZGhfZXFfdGFibGUge1xuK1x0LyogTm90aWZpZXIgY2hhaW5zIGZhbm5lZCBvdXQgYnkgZXZlbnQgdHlwZS4gKi9cbitcdHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBuaFtaWERIX0VRX0VWRU5UX1RZUEVfTUFYXTtcbitcdC8qIFNlcmlhbGl6ZXMgYXN5bmMgRVEgY3JlYXRlL2Rlc3Ryb3kuICovXG4rXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbitcdHZvaWQgKnByaXY7XG4rfTtcbitcbitpbnQgenhkaF9wZl9lcV90YWJsZV9pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfZXFfdGFibGVfY3JlYXRlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4rdm9pZCB6eGRoX3BmX2VxX3RhYmxlX2Rlc3Ryb3koc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbitcbisjZW5kaWYgLyogX19aWERIX0VRX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDM3MzQ0MzI5YzdlOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuY1xuQEAgLTAsMCArMSw0MTIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBJUlEgcG9vbCBtYW5hZ2VtZW50XG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKlxuKyAqIERldmljZSB2ZWN0b3JzIGFyZSBtYW5hZ2VkIGluIHBlci1wdXJwb3NlIHBvb2xzLiBBbiBJUlEgY2FycmllcyBhXG4rICogcmVmY291bnQgc28gdGhhdCBzZXZlcmFsIGV2ZW50IHF1ZXVlcyBjYW4gc2hhcmUgb25lIHZlY3Rvcjsgb25cbisgKiByYWlzZSwgdGhlIGludGVycnVwdCBpcyBmYW5uZWQgb3V0IHRocm91Z2ggYW4gYXRvbWljIG5vdGlmaWVyIGNoYWluXG4rICogYXR0YWNoZWQgdG8gdGhlIElSUS5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVtYXNrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJlbl9wZi5oXCJcbisjaW5jbHVkZSBcInp4ZGhfaXJxLmhcIlxuK1xuKy8qIFJlbGVhc2UgY2FsbGJhY2sgb2YgdGhlIElSUSBrcmVmLCBjYWxsZWQgd2l0aCBwb29sLVx1MDAzZWxvY2sgaGVsZC4gKi9cbitzdGF0aWMgdm9pZCB6eGRoX2lycV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCB6eGRoX2lycSAqaXJxID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB6eGRoX2lycSwgcmVmY291bnQpO1xuK1x0c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wgPSBpcnEtXHUwMDNlcG9vbDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbitcdHhhX2VyYXNlKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaXJxLVx1MDAzZWluZGV4KTtcbitcdC8qIGZyZWVfaXJxKCkgcmVxdWlyZXMgdGhlIGFmZmluaXR5IGhpbnQgdG8gYmUgY2xlYXJlZCBiZWZvcmUgaXQgaXNcbitcdCAqIGNhbGxlZDsgdGhlIGFzeW1tZXRyeSB3aXRoIHRoZSBzZXQgcGF0aCBpbiB6eGRoX2lycV9hbGxvYygpIGlzXG4rXHQgKiBpbnRlbnRpb25hbC5cbitcdCAqL1xuK1x0aXJxX3VwZGF0ZV9hZmZpbml0eV9oaW50KGlycS1cdTAwM2VpcnFuLCBOVUxMKTtcbitcdGZyZWVfY3B1bWFza192YXIoaXJxLVx1MDAzZW1hc2spO1xuK1x0ZnJlZV9pcnEoaXJxLVx1MDAzZWlycW4sIGlycSk7XG4rXHRrZnJlZShpcnEpO1xuK31cbitcbisvKiBEcm9wIG9uZSByZWZlcmVuY2U7IHJldHVybnMgMSBpZiB0aGUgSVJRIHdhcyByZWxlYXNlZC4gKi9cbitzdGF0aWMgaW50IHp4ZGhfaXJxX3B1dChzdHJ1Y3QgenhkaF9pcnEgKmlycSlcbit7XG4rXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCA9IGlycS1cdTAwM2Vwb29sO1xuK1x0aW50IHJlbGVhc2VkO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0cmVsZWFzZWQgPSBrcmVmX3B1dChcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQsIHp4ZGhfaXJxX3JlbGVhc2UpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVsZWFzZWQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgenhkaF9pcnFfZ2V0KHN0cnVjdCB6eGRoX2lycSAqaXJxKVxuK3tcbitcdHJldHVybiBrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQpO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgenhkaF9pcnFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxID0gZGF0YTtcbitcbitcdGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnp4ZGhfaXJxLVx1MDAzZW5oLCAwLCBOVUxMKTtcbitcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfYWxsb2Moc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsIGludCB2ZWNpZHgsXG4rXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KVxuK3tcbitcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBvb2wtXHUwMDNlZGV2O1xuK1x0c3RydWN0IHp4ZGhfaXJxICppcnE7XG4rXHRpbnQgZXJyO1xuK1x0aW50IGNwdTtcbitcbitcdGlycSA9IGt6YWxsb2Nfb2JqKCppcnEsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFpcnEpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0aXJxLVx1MDAzZXBvb2wgPSBwb29sO1xuK1x0aXJxLVx1MDAzZWlycW4gPSBwY2lfaXJxX3ZlY3Rvcih6eGRoX2Rldi1cdTAwM2VwZGV2LCB2ZWNpZHgpO1xuK1x0aWYgKGlycS1cdTAwM2VpcnFuIFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IGlycS1cdTAwM2VpcnFuO1xuK1x0XHRnb3RvIGVycl9pcnFuO1xuK1x0fVxuK1xuK1x0QVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRChcdTAwMjZpcnEtXHUwMDNlbmgpO1xuK1x0c25wcmludGYoaXJxLVx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcImFzeW5jXyVkQHBjaTolc1wiLCB2ZWNpZHgsXG4rXHRcdCBwY2lfbmFtZSh6eGRoX2Rldi1cdTAwM2VwZGV2KSk7XG4rXG4rXHRlcnIgPSByZXF1ZXN0X2lycShpcnEtXHUwMDNlaXJxbiwgenhkaF9pcnFfaW50X2hhbmRsZXIsIDAsIGlycS1cdTAwM2VuYW1lLCBpcnEpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJyZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXFxuXCIsIGVycik7XG4rXHRcdGdvdG8gZXJyX2lycW47XG4rXHR9XG4rXG4rXHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZpcnEtXHUwMDNlbWFzaywgR0ZQX0tFUk5FTCkpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwiemFsbG9jX2NwdW1hc2tfdmFyIGZhaWxlZFxcblwiKTtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfY3B1bWFzaztcbitcdH1cbitcbitcdGlmIChhZmZpbml0eSkge1xuK1x0XHRjcHVtYXNrX2NvcHkoaXJxLVx1MDAzZW1hc2ssIGFmZmluaXR5KTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIE5vIHByZWZlcmVuY2UgcmVxdWVzdGVkOyBzcHJlYWQgb3ZlciBhbGwgb25saW5lIENQVXMuICovXG4rXHRcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuK1x0XHRcdGNwdW1hc2tfc2V0X2NwdShjcHUsIGlycS1cdTAwM2VtYXNrKTtcbitcdH1cbitcdGlycV91cGRhdGVfYWZmaW5pdHlfaGludChpcnEtXHUwMDNlaXJxbiwgaXJxLVx1MDAzZW1hc2spO1xuK1xuK1x0a3JlZl9pbml0KFx1MDAyNmlycS1cdTAwM2VyZWZjb3VudCk7XG4rXHRpcnEtXHUwMDNlaW5kZXggPSB2ZWNpZHg7XG4rXHRlcnIgPSB4YV9lcnIoeGFfc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VpcnFzLCBpcnEtXHUwMDNlaW5kZXgsIGlycSwgR0ZQX0tFUk5FTCkpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ4YV9zdG9yZSBmYWlsZWQgZm9yIGlycSAldTogJWRcXG5cIixcbitcdFx0XHRpcnEtXHUwMDNlaW5kZXgsIGVycik7XG4rXHRcdGdvdG8gZXJyX3hhO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlycTtcbitcbitlcnJfeGE6XG4rXHRpcnFfdXBkYXRlX2FmZmluaXR5X2hpbnQoaXJxLVx1MDAzZWlycW4sIE5VTEwpO1xuK1x0ZnJlZV9jcHVtYXNrX3ZhcihpcnEtXHUwMDNlbWFzayk7XG4rZXJyX2NwdW1hc2s6XG4rXHRmcmVlX2lycShpcnEtXHUwMDNlaXJxbiwgaXJxKTtcbitlcnJfaXJxbjpcbitcdGtmcmVlKGlycSk7XG4rXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK31cbitcbitpbnQgenhkaF9pcnFfYXR0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIXp4ZGhfaXJxX2dldChpcnEpKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdGVyciA9IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcdTAwMjZpcnEtXHUwMDNlbmgsIG5iKTtcbitcdGlmIChlcnIpXG4rXHRcdHp4ZGhfaXJxX3B1dChpcnEpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHp4ZGhfaXJxX2RldGFjaF9uYihzdHJ1Y3QgenhkaF9pcnEgKmlycSwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXHUwMDI2aXJxLVx1MDAzZW5oLCBuYik7XG4rXHR6eGRoX2lycV9wdXQoaXJxKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuKy8qIFJlbGVhc2Ugb25lIG9yIG1vcmUgSVJRcyBiYWNrIHRvIHRoZWlyIHBvb2wuICovXG4rdm9pZCB6eGRoX2lycXNfcmVsZWFzZV92ZWN0b3JzKHN0cnVjdCB6eGRoX2lycSAqKmlycXMsIGludCBuaXJxcylcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pcnFzOyBpKyspIHtcbitcdFx0c3luY2hyb25pemVfaXJxKGlycXNbaV0tXHUwMDNlaXJxbik7XG4rXHRcdHp4ZGhfaXJxX3B1dChpcnFzW2ldKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgenhkaF9jcHVfcHV0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLCBpbnQgY3B1KVxuK3tcbitcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0tLTtcbit9XG4rXG4rc3RhdGljIHZvaWQgenhkaF9jcHVfZ2V0KHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLCBpbnQgY3B1KVxuK3tcbitcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1W2NwdV0rKztcbit9XG4rXG4rLyogRmluZCB0aGUgbGVhc3QgbG9hZGVkIENQVSwgaS5lLiB0aGUgQ1BVIHdpdGggdGhlIGZld2VzdCBJUlFzIGJvdW5kXG4rICogdG8gaXQsIHdpdGhpbiB0aGUgcmVxdWVzdGVkIG1hc2suXG4rICovXG4rc3RhdGljIGludCB6eGRoX2NwdV9nZXRfbGVhc3RfbG9hZGVkKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spXG4re1xuK1x0aW50IGJlc3RfY3B1ID0gLTE7XG4rXHRpbnQgY3B1O1xuK1xuK1x0Zm9yX2VhY2hfY3B1X2FuZChjcHUsIHJlcV9tYXNrLCBjcHVfb25saW5lX21hc2spIHtcbitcdFx0LyogVGhpcyBDUFUgaGFzIG5vIElSUXMgeWV0LCBubyBuZWVkIHRvIGxvb2sgZnVydGhlci4gKi9cbitcdFx0aWYgKCFwb29sLVx1MDAzZWlycXNfcGVyX2NwdVtjcHVdKSB7XG4rXHRcdFx0YmVzdF9jcHUgPSBjcHU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0aWYgKGJlc3RfY3B1IFx1MDAzYyAwKVxuK1x0XHRcdGJlc3RfY3B1ID0gY3B1O1xuK1x0XHRpZiAocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHVbY3B1XSBcdTAwM2MgcG9vbC1cdTAwM2VpcnFzX3Blcl9jcHVbYmVzdF9jcHVdKVxuK1x0XHRcdGJlc3RfY3B1ID0gY3B1O1xuK1x0fVxuK1xuK1x0aWYgKGJlc3RfY3B1IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIocG9vbC1cdTAwM2VkZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwibm8gb25saW5lIENQVSBpbiBhZmZpbml0eSBtYXNrICglKnBibClcXG5cIixcbitcdFx0XHRjcHVtYXNrX3ByX2FyZ3MocmVxX21hc2spKTtcbitcdFx0YmVzdF9jcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayk7XG4rXHR9XG4rXHRwb29sLVx1MDAzZWlycXNfcGVyX2NwdVtiZXN0X2NwdV0rKztcbitcbitcdHJldHVybiBiZXN0X2NwdTtcbit9XG4rXG4rLyogQ3JlYXRlIGEgbmV3IElSUSBmcm9tIHRoZSBwb29sIGFuZCBiaW5kIGl0IHRvIHRoZSByZXF1ZXN0ZWQgbWFzay4gKi9cbitzdGF0aWMgc3RydWN0IHp4ZGhfaXJxICp6eGRoX2lycV9wb29sX3JlcXVlc3RfaXJxKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sLFxuK1x0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnJlcV9tYXNrKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSA9IHJlcV9tYXNrO1xuK1x0Y3B1bWFza192YXJfdCBhdXRvX21hc2s7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKmlycTtcbitcdHUzMiBpcnFfaW5kZXg7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2YXV0b19tYXNrLCBHRlBfS0VSTkVMKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRlcnIgPSB4YV9hbGxvYyhcdTAwMjZwb29sLVx1MDAzZWlycXMsIFx1MDAyNmlycV9pbmRleCwgTlVMTCwgcG9vbC1cdTAwM2V4YV9udW1faXJxcyxcbitcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAoZXJyID09IC1FQlVTWSlcbitcdFx0XHRlcnIgPSAtRVVTRVJTO1xuK1x0XHRnb3RvIGVycl94YTtcbitcdH1cbitcbitcdGlmIChjcHVtYXNrX3dlaWdodChyZXFfbWFzaykgXHUwMDNlIDEpIHtcbitcdFx0LyogQmluZCB0byB0aGUgbGVhc3QgbG9hZGVkIENQVSBvZiB0aGUgcmVxdWVzdC4gKi9cbitcdFx0Y3B1bWFza19zZXRfY3B1KHp4ZGhfY3B1X2dldF9sZWFzdF9sb2FkZWQocG9vbCwgcmVxX21hc2spLFxuK1x0XHRcdFx0YXV0b19tYXNrKTtcbitcdFx0YWZmaW5pdHkgPSBhdXRvX21hc2s7XG4rXHR9IGVsc2Uge1xuK1x0XHR6eGRoX2NwdV9nZXQocG9vbCwgY3B1bWFza19maXJzdChyZXFfbWFzaykpO1xuK1x0fVxuK1xuK1x0aXJxID0genhkaF9pcnFfYWxsb2MocG9vbCwgaXJxX2luZGV4LCBhZmZpbml0eSk7XG4rXHRpZiAoSVNfRVJSKGlycSkpXG4rXHRcdGdvdG8gZXJyX2FsbG9jO1xuK1xuK1x0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xuK1xuK1x0cmV0dXJuIGlycTtcbitcbitlcnJfYWxsb2M6XG4rXHQvKiBVbmRvIHRoZSBwZXItQ1BVIGFjY291bnRpbmcgZG9uZSBhYm92ZS4gKi9cbitcdHp4ZGhfY3B1X3B1dChwb29sLCBjcHVtYXNrX2ZpcnN0KGFmZmluaXR5KSk7XG4rXHR4YV9lcmFzZShcdTAwMjZwb29sLVx1MDAzZWlycXMsIGlycV9pbmRleCk7XG4rZXJyX3hhOlxuK1x0ZnJlZV9jcHVtYXNrX3ZhcihhdXRvX21hc2spO1xuK1x0cmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IGlycTtcbit9XG4rXG4rLyogTG9vayBmb3IgdGhlIElSUSB3aXRoIHRoZSBzbWFsbGVzdCByZWZjb3VudCB3aG9zZSBhZmZpbml0eSBtYXNrIGlzIGFcbisgKiBzdWJzZXQgb2YgdGhlIHJlcXVlc3RlZCBtYXNrLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfaXJxX3Bvb2xfZmluZF9sZWFzdF9sb2FkZWQoc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wsXG4rXHRcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgY3B1bWFzayAqcmVxX21hc2spXG4re1xuK1x0c3RydWN0IHp4ZGhfaXJxICppcnEgPSBOVUxMO1xuK1x0c3RydWN0IHp4ZGhfaXJxICppdGVyO1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbitcdGludCBpdGVyX3JlZmNvdW50O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0eGFfZm9yX2VhY2hfcmFuZ2UoXHUwMDI2cG9vbC1cdTAwM2VpcnFzLCBpbmRleCwgaXRlcixcbitcdFx0XHQgIHBvb2wtXHUwMDNleGFfbnVtX2lycXMubWluLCBwb29sLVx1MDAzZXhhX251bV9pcnFzLm1heCkge1xuK1x0XHRpdGVyX3JlZmNvdW50ID0gcmVmY291bnRfcmVhZChcdTAwMjZpdGVyLVx1MDAzZXJlZmNvdW50LnJlZmNvdW50KTtcbitcbitcdFx0LyogU2tpcCBJUlFzIHdob3NlIG1hc2sgaXMgbm90IGEgc3Vic2V0IG9mIHRoZSByZXF1ZXN0LiAqL1xuK1x0XHRpZiAoIWNwdW1hc2tfc3Vic2V0KGl0ZXItXHUwMDNlbWFzaywgcmVxX21hc2spKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHQvKiBJUlEgYmVsb3cgdGhlIG1pbmltdW0gdGhyZXNob2xkIGZvdW5kLCB0YWtlIGl0LiAqL1xuK1x0XHRpZiAoaXRlcl9yZWZjb3VudCBcdTAwM2MgcG9vbC1cdTAwM2VtaW5fdGhyZXNob2xkKVxuK1x0XHRcdHJldHVybiBpdGVyO1xuK1x0XHRpZiAoIWlycSB8fFxuK1x0XHQgICAgaXRlcl9yZWZjb3VudCBcdTAwM2MgcmVmY291bnRfcmVhZChcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQucmVmY291bnQpKVxuK1x0XHRcdGlycSA9IGl0ZXI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gaXJxO1xuK31cbitcbisvKiBSZXF1ZXN0IGFuIElSUSBmb3IgdGhlIGdpdmVuIG1hc2s6IHNoYXJlIHRoZSBsZWFzdCBsb2FkZWQgZXhpc3RpbmdcbisgKiBtYXRjaGluZyBJUlEgb25jZSBpdCBwYXNzZXMgdGhlIHBvb2wgbWluaW11bSB0aHJlc2hvbGQsIG90aGVyd2lzZVxuKyAqIGNyZWF0ZSBhIG5ldyBvbmUuXG4rICovXG4rc3RhdGljIHN0cnVjdCB6eGRoX2lycSAqenhkaF9pcnFfYWZmaW5pdHlfcmVxdWVzdChzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbCxcbitcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpyZXFfbWFzaylcbit7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKmxlYXN0X2xvYWRlZF9pcnE7XG4rXHRzdHJ1Y3QgenhkaF9pcnEgKm5ld19pcnE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRsZWFzdF9sb2FkZWRfaXJxID0genhkaF9pcnFfcG9vbF9maW5kX2xlYXN0X2xvYWRlZChwb29sLCByZXFfbWFzayk7XG4rXHRpZiAobGVhc3RfbG9hZGVkX2lycSBcdTAwMjZcdTAwMjZcbitcdCAgICByZWZjb3VudF9yZWFkKFx1MDAyNmxlYXN0X2xvYWRlZF9pcnEtXHUwMDNlcmVmY291bnQucmVmY291bnQpIFx1MDAzYyBwb29sLVx1MDAzZW1pbl90aHJlc2hvbGQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogTm8gSVJRIGJlbG93IHRoZSBtaW5pbXVtIHRocmVzaG9sZCwgdHJ5IHRvIGNyZWF0ZSBhIG5ldyBvbmUuICovXG4rXHRuZXdfaXJxID0genhkaF9pcnFfcG9vbF9yZXF1ZXN0X2lycShwb29sLCByZXFfbWFzayk7XG4rXHRpZiAoSVNfRVJSKG5ld19pcnEpKSB7XG4rXHRcdGlmICghbGVhc3RfbG9hZGVkX2lycSkge1xuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0XHRcdHJldHVybiBuZXdfaXJxO1xuK1x0XHR9XG4rXHRcdC8qIENvdWxkIG5vdCBjcmVhdGUgYSBuZXcgSVJRIGZvciB0aGUgcmVxdWVzdGVkIGFmZmluaXR5LFxuK1x0XHQgKiBzaGFyZSB0aGUgZXhpc3Rpbmcgb25lLlxuK1x0XHQgKi9cbitcdFx0ZGV2X3dhcm4ocG9vbC1cdTAwM2VkZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdCBcImlycSBwb29sICVzIGV4aGF1c3RlZCwgc2hhcmluZyBpcnFzXFxuXCIsXG4rXHRcdFx0IHBvb2wtXHUwMDNlbmFtZSk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bGVhc3RfbG9hZGVkX2lycSA9IG5ld19pcnE7XG4rXHRnb3RvIHVubG9jaztcbitcbitvdXQ6XG4rXHQvKiBIb2xkaW5nIHBvb2wtXHUwMDNlbG9jayBrZWVwcyB0aGUgSVJRIGFsaXZlLCBzbyB0aGlzIGNhbm5vdCBmYWlsLiAqL1xuK1x0enhkaF9pcnFfZ2V0KGxlYXN0X2xvYWRlZF9pcnEpO1xuK1x0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2bGVhc3RfbG9hZGVkX2lycS1cdTAwM2VyZWZjb3VudC5yZWZjb3VudCkgXHUwMDNlIHBvb2wtXHUwMDNlbWF4X3RocmVzaG9sZClcbitcdFx0ZGV2X3dhcm4ocG9vbC1cdTAwM2VkZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdCBcImlycSAldSBvdmVybG9hZGVkLCBwb29sICVzLCAldSByZWZzIG9uIHRoaXMgaXJxXFxuXCIsXG4rXHRcdFx0IHBjaV9pcnFfdmVjdG9yKHBvb2wtXHUwMDNlZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHRcdGxlYXN0X2xvYWRlZF9pcnEtXHUwMDNlaW5kZXgpLFxuK1x0XHRcdCBwb29sLVx1MDAzZW5hbWUsXG4rXHRcdFx0IHJlZmNvdW50X3JlYWQoXHUwMDI2bGVhc3RfbG9hZGVkX2lycS1cdTAwM2VyZWZjb3VudC5yZWZjb3VudCkgL1xuK1x0XHRcdCBaWERIX0VRX1JFRlNfUEVSX0lSUSk7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gbGVhc3RfbG9hZGVkX2lycTtcbit9XG4rXG4rLyogUmVxdWVzdCBhbiBJUlEgZnJvbSB0aGUgcG9vbCwgc3ByZWFkIG92ZXIgdGhlIG9ubGluZSBDUFVzLiAqL1xuK3N0cnVjdCB6eGRoX2lycSAqenhkaF9nZXRfaXJxX29mX3Bvb2woc3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2wpXG4re1xuK1x0Y3B1bWFza192YXJfdCByZXFfbWFzaztcbitcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xuK1xuK1x0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXHUwMDI2cmVxX21hc2ssIEdGUF9LRVJORUwpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGNwdW1hc2tfY29weShyZXFfbWFzaywgY3B1X29ubGluZV9tYXNrKTtcbitcbitcdGlycSA9IHp4ZGhfaXJxX2FmZmluaXR5X3JlcXVlc3QocG9vbCwgcmVxX21hc2spO1xuK1xuK1x0ZnJlZV9jcHVtYXNrX3ZhcihyZXFfbWFzayk7XG4rXG4rXHRyZXR1cm4gaXJxO1xuK31cbitcbitzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsXG4rXHRcdFx0XHRcdCAgaW50IHN0YXJ0LCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSxcbitcdFx0XHRcdFx0ICB1MzIgbWluX3RocmVzaG9sZCwgdTMyIG1heF90aHJlc2hvbGQpXG4re1xuK1x0c3RydWN0IHp4ZGhfaXJxX3Bvb2wgKnBvb2w7XG4rXHR1MTYgKmlycXNfcGVyX2NwdTtcbitcbitcdGlycXNfcGVyX2NwdSA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCppcnFzX3Blcl9jcHUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghaXJxc19wZXJfY3B1KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHBvb2wgPSBrdnphbGxvY19vYmooKnBvb2wsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwb29sKSB7XG4rXHRcdGtmcmVlKGlycXNfcGVyX2NwdSk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0fVxuK1xuK1x0cG9vbC1cdTAwM2VkZXYgPSB6eGRoX2RldjtcbitcdHBvb2wtXHUwMDNlaXJxc19wZXJfY3B1ID0gaXJxc19wZXJfY3B1O1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuK1x0eGFfaW5pdF9mbGFncyhcdTAwMjZwb29sLVx1MDAzZWlycXMsIFhBX0ZMQUdTX0FMTE9DKTtcbitcdHBvb2wtXHUwMDNleGFfbnVtX2lycXMubWluID0gc3RhcnQ7XG4rXHRwb29sLVx1MDAzZXhhX251bV9pcnFzLm1heCA9IHN0YXJ0ICsgc2l6ZSAtIDE7XG4rXHRzbnByaW50Zihwb29sLVx1MDAzZW5hbWUsIFpYREhfTUFYX0lSUV9OQU1FLCBcIiVzXCIsIG5hbWUpO1xuK1xuK1x0LyogVGhyZXNob2xkcyBhcmUgZXhwcmVzc2VkIGluIHF1ZXVlIHJlZmVyZW5jZXMsIHR3byBwZXIgSVJRLiAqL1xuK1x0cG9vbC1cdTAwM2VtaW5fdGhyZXNob2xkID0gbWluX3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJRO1xuK1x0cG9vbC1cdTAwM2VtYXhfdGhyZXNob2xkID0gbWF4X3RocmVzaG9sZCAqIFpYREhfRVFfUkVGU19QRVJfSVJRO1xuK1xuK1x0cmV0dXJuIHBvb2w7XG4rfVxuK1xuK3ZvaWQgenhkaF9pcnFfcG9vbF9mcmVlKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKVxuK3tcbitcdHN0cnVjdCB6eGRoX2lycSAqaXJxO1xuK1x0dW5zaWduZWQgbG9uZyBpbmRleDtcbitcdHUzMiBjcHU7XG4rXG4rXHQvKiBPbiBhIGZhc3QgdGVhcmRvd24gdGhlIHRhYmxlIG1heSBzdGlsbCBob2xkIElSUXM7IHJlbGVhc2VcbitcdCAqIHdoYXRldmVyIGlzIGxlZnQuXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbitcdHhhX2Zvcl9lYWNoKFx1MDAyNnBvb2wtXHUwMDNlaXJxcywgaW5kZXgsIGlycSlcbitcdFx0enhkaF9pcnFfcmVsZWFzZShcdTAwMjZpcnEtXHUwMDNlcmVmY291bnQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXHR4YV9kZXN0cm95KFx1MDAyNnBvb2wtXHUwMDNlaXJxcyk7XG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHUpIHtcbitcdFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4rXHRcdFx0V0FSTl9PTihwb29sLVx1MDAzZWlycXNfcGVyX2NwdVtjcHVdKTtcbitcdFx0a2ZyZWUocG9vbC1cdTAwM2VpcnFzX3Blcl9jcHUpO1xuK1x0fVxuK1xuK1x0a3ZmcmVlKHBvb2wpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS96eGRoX2lycS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvenhkaF9pcnEuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg5ZjQ2ZDdiMTFjOWNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL3p4ZGhfaXJxLmhcbkBAIC0wLDAgKzEsNzIgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBJUlEgcG9vbCBtYW5hZ2VtZW50XG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKi9cbitcbisjaWZuZGVmIF9fWlhESF9JUlFfSF9fXG4rI2RlZmluZSBfX1pYREhfSVJRX0hfX1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdW1hc2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4rXG4rc3RydWN0IHp4ZGhfY29yZV9kZXY7XG4rXG4rLyogTnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgcGVyIHB1cnBvc2UuIFRoZSBsYXlvdXQgb2YgdGhlIHZlY3RvciBzcGFjZVxuKyAqIGlzIGEgaGFyZHdhcmUgaW50ZXJmYWNlOlxuKyAqICAgWzAsIDgpICAgIGFzeW5jIGV2ZW50IHF1ZXVlc1xuKyAqICAgWzgsIDE0KSAgIHJlc2VydmVkIGZvciBSRE1BICh1bnVzZWQgZm9yIG5vdylcbisgKiAgIFsxNCwgNzgpICB2cSByeC90eCBxdWV1ZSBwYWlyc1xuKyAqL1xuKyNkZWZpbmUgWlhESF9BU1lOQ19DSEFOTkVMU19OVU1cdFx0OFxuKyNkZWZpbmUgWlhESF9SRE1BX0NIQU5ORUxTX05VTVx0XHQ2XG4rI2RlZmluZSBaWERIX1ZRU19DSEFOTkVMU19OVU1cdFx0NjRcbitcbisjZGVmaW5lIFpYREhfTUFYX0lSUV9OQU1FXHQxMDBcbisjZGVmaW5lIFpYREhfRVFfUkVGU19QRVJfSVJRXHQyXG4rXG4rLyogUmVmZXJlbmNlIGNvdW50ZWQgaW50ZXJydXB0LiBFdmVudCBxdWV1ZXMgc2hhcmUgYW4gSVJRIHRocm91Z2ggdGhlXG4rICogbm90aWZpZXIgY2hhaW4sIHdoaWNoIGlzIGZpcmVkIGZyb20gaGFyZCBJUlEgY29udGV4dC5cbisgKi9cbitzdHJ1Y3QgenhkaF9pcnEge1xuK1x0c3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIG5oO1xuK1x0Y3B1bWFza192YXJfdCBtYXNrO1x0XHQvKiBpbnRlcnJ1cHQgYWZmaW5pdHkgKi9cbitcdGNoYXIgbmFtZVtaWERIX01BWF9JUlFfTkFNRV07XG4rXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqcG9vbDtcbitcdHUzMiBpbmRleDtcdFx0XHQvKiB2ZWN0b3IgaW5kZXggKi9cbitcdGludCBpcnFuO1x0XHRcdC8qIExpbnV4IElSUSBudW1iZXIgKi9cbitcdHN0cnVjdCBrcmVmIHJlZmNvdW50O1xuK307XG4rXG4rLyogUG9vbCBvZiB2ZWN0b3JzIGRlZGljYXRlZCB0byBvbmUgcHVycG9zZSwgaWRlbnRpZmllZCBieSB0aGVcbisgKiBbeGFfbnVtX2lycXMubWluLCB4YV9udW1faXJxcy5tYXhdIHZlY3RvciByYW5nZS5cbisgKi9cbitzdHJ1Y3QgenhkaF9pcnFfcG9vbCB7XG4rXHRjaGFyIG5hbWVbWlhESF9NQVhfSVJRX05BTUVdO1xuK1x0c3RydWN0IHhhX2xpbWl0IHhhX251bV9pcnFzO1xuK1x0c3RydWN0IG11dGV4IGxvY2s7XHRcdC8qIHNlcmlhbGl6ZXMgSVJRIGNyZWF0aW9uICovXG4rXHRzdHJ1Y3QgeGFycmF5IGlycXM7XG4rXHR1MzIgbWluX3RocmVzaG9sZDtcdFx0LyogaW4gcXVldWUgcmVmZXJlbmNlcyAqL1xuK1x0dTMyIG1heF90aHJlc2hvbGQ7XHRcdC8qIGluIHF1ZXVlIHJlZmVyZW5jZXMgKi9cbitcdHUxNiAqaXJxc19wZXJfY3B1O1x0XHQvKiBudW1iZXIgb2YgSVJRcyBib3VuZCBwZXIgQ1BVICovXG4rXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqZGV2O1xuK307XG4rXG4rc3RydWN0IHp4ZGhfaXJxX3RhYmxlIHtcbitcdHZvaWQgKnByaXY7XG4rfTtcbitcbitzdHJ1Y3QgenhkaF9pcnEgKnp4ZGhfZ2V0X2lycV9vZl9wb29sKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTtcbitpbnQgenhkaF9pcnFfYXR0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbitpbnQgenhkaF9pcnFfZGV0YWNoX25iKHN0cnVjdCB6eGRoX2lycSAqaXJxLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbit2b2lkIHp4ZGhfaXJxc19yZWxlYXNlX3ZlY3RvcnMoc3RydWN0IHp4ZGhfaXJxICoqaXJxcywgaW50IG5pcnFzKTtcbitzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqenhkaF9pcnFfcG9vbF9hbGxvYyhzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsXG4rXHRcdFx0XHRcdCAgaW50IHN0YXJ0LCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSxcbitcdFx0XHRcdFx0ICB1MzIgbWluX3RocmVzaG9sZCwgdTMyIG1heF90aHJlc2hvbGQpO1xuK3ZvaWQgenhkaF9pcnFfcG9vbF9mcmVlKHN0cnVjdCB6eGRoX2lycV9wb29sICpwb29sKTtcbitcbisjZW5kaWYgLyogX19aWERIX0lSUV9IX18gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA1OjAzOjEzLjgwNjAyOTMyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyOTg0NjgzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2ggZm9yIFN5emthbGxlciBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMga2VybmVsIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgcGF0Y2ggYWRkcyBhIGJ1bmNoIG9mIGZpbGVzIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaWAuICBTcGVjaWZpY2FsbHk6ICBgTWFrZWZpbGVgLCBgZW5fcGYuY2AsIGBlbl9wZi5oYCwgYHp4ZGhfZXEuY2AsIGB6eGRoX2VxLmhgLCBgenhkaF9pcnEuY2AsIGFuZCBgenhkaF9pcnEuaGAuICBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGVzdGFibGlzaCB0aGUgY29udGV4dCBvZiB0aGlzIGRyaXZlci4gIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIHBoeXNpY2FsIFBDSSBkZXZpY2UsIGFuIEFTSUMsIG9yIHNvbWV0aGluZyB0aGF0J3MgZW11bGF0ZWQgb3IgYWNjZXNzaWJsZSBpbiBzb21lIHdheS4gIFRoZSBkZWNpZGluZyBmYWN0b3IgaXMgd2hldGhlciBpdCBpcyBhIHBoeXNpY2FsIGRldmljZSwgYW5kIGlmIHNvLCBob3cgYWNjZXNzaWJsZSBpdCBpcy4gIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgdGhlIEtjb25maWcgb3B0aW9ucyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGF0LiBUaGF0IHdpbGwgZGljdGF0ZSB0aGUgZnV6emluZyBhcHByb2FjaCBhbmQgdGhlIG92ZXJhbGwgdmFsdWUgb2YgZnV6emluZyB0aGlzIHBhcnRpY3VsYXIgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNjQsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoyMy4xMDQ1MDAwNzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzYzMzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJESU5HSEFJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIk1BSU5UQUlORVJTPTMwMTk1PUY6XFx0c291bmQvaGRhL2NvZGVjcy9zZW5hcnl0ZWNoLmNcXG5NQUlOVEFJTkVSUy0zMDE5Ni1cXG5NQUlOVEFJTkVSUzozMDE5NzpaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVJcXG5NQUlOVEFJTkVSUy0zMDE5OC1NOlxcdEp1bnlhbmcgSGFuIFxcdTAwM2NoYW4uanVueWFuZ0B6dGUuY29tLmNuXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0RJTkdIQUkpICs9IGRpbmdoYWkvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzo2OmNvbmZpZyBESU5HSEFJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy03LSAgICBib29sIFxcXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc6MjE6aWYgRElOR0hBSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzoyMzpjb25maWcgRElOR0hBSV9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMjQtICAgIHRyaXN0YXRlIFxcXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzozNDplbmRpZiAjIERJTkdIQUlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRElOR0hBSV9QRikgKz0gZGluZ2hhaTEwZS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUtNy1kaW5naGFpMTBlLXkgOj0gZW5fcGYubyB6eGRoX2lycS5vIHp4ZGhfZXEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoyNC43MTIxMzk2OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODI3NjgyOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgWlRFIERpbmdoYWkgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdgLiBSaWdodCBhd2F5LCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gZGVmaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgbmV0d29yayBkcml2ZXIgc3BlY2lmaWMgdG8gWlRFJ3MgRGluZ2hhaSBwbGF0Zm9ybS4gR2l2ZW4gdGhlIHBhdGgsIEknbSBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IG1vZHVsZSBlbmFibGUgZmxhZ3MsIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgRE1BIHNldHRpbmdzIG9yIFBIWSBjb25maWd1cmF0aW9ucywgcGVyaGFwcyBldmVuIHBsYXRmb3JtIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgS2NvbmZpZyBhbmQgdGhlIG90aGVyIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGRyaXZlcnMgb3Igc3Vic3lzdGVtcz8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBpbmNsdWRlcyBiYXNlZCBvbiBzcGVjaWZpYyBib2FyZCByZXZpc2lvbnMgb3IgaGFyZHdhcmUgcmV2aXNpb25zIHdpdGhpbiB0aGUgRGluZ2hhaSBmYW1pbHk/IEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYGNvbmZpZyBaVEVfRElOR0hBSWAgYXMgYSB0b3AtbGV2ZWwgc3ltYm9sLCBhbmQgdGhlbiBuZXN0ZWQgb3B0aW9ucyBkZXRhaWxpbmcgdGhpbmdzIGxpa2UgZGlmZmVyZW50IE1BQyBhZGRyZXNzZXMsIHNwZWNpZmljIFBIWSBzdXBwb3J0IChsaWtlIGBDT05GSUdfUEhZX1hYWFhgKSwgYW55IGRldmljZS10cmVlLXJlbGF0ZWQgc2V0dGluZ3MsIG9yIGludGVycnVwdCBjb25maWd1cmF0aW9ucy4gQW55IHVzZSBvZiBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIHB1bGwgaW4gb3RoZXIgc3VwcG9ydGluZyBtb2R1bGVzIHdpbGwgYmUgaW1wb3J0YW50IHRvIG5vdGUuIEFuZCBvZiBjb3Vyc2UsIEknbGwgYmUgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gWlRFJ3MgZGVzaWduIGNob2ljZXMgb3IgY3VzdG9taXphdGlvbnMuIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgc2NhbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUga2V5IGNvbmZpZ3VyYWJsZSBlbGVtZW50cyB0aGF0IGNvbnRyb2wgdGhpcyBkcml2ZXIncyBiZWhhdmlvciBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgY2FuIGJlIGVuYWJsZWQuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHdoYXQgcGFyYW1ldGVycyBjYW4gYmUgc2V0IHZpYSB0aGlzIGNvbmZpZyBmaWxlIGFuZCBob3cgdGhleSBpbXBhY3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGV0aGVybmV0IGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoyNy41Mzk4MjUzMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIERJTkdIQUlcXG4gICA3OlxcdCAgICBib29sIFxcXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuICAgODpcXHQgICAgZGVwZW5kcyBvbiBQQ0lcXG4gICA5OlxcdCAgICBzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDEwOlxcdCAgICBoZWxwXFxuICAxMTpcXHQgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHQgICAgICBEaW5nSGFpIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBFdGhlcm5ldCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHNcXG4gIDE0OlxcdCAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZFxcbiAgMTU6XFx0ICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHQgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LlxcbiAgMTg6XFx0XFxuICAxOTpcXHQgICAgICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRpZiBESU5HSEFJXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBESU5HSEFJX1BGXFxuICAyNDpcXHQgICAgdHJpc3RhdGUgXFxcIlpURSBEaW5nSGFpIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgZHJpdmVyXFxcIlxcbiAgMjU6XFx0ICAgIGhlbHBcXG4gIDI2OlxcdCAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0XFxuICAyNzpcXHQgICAgICBhZGFwdGVycyAoUEYpLlxcbiAgMjg6XFx0XFxuICAyOTpcXHQgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAzMDpcXHQgICAgICB3aWxsIGJlIG5hbWVkIGRpbmdoYWkxMGUuXFxuICAzMTpcXHRcXG4gIDMyOlxcdCAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzMzpcXHRcXG4gIDM0OlxcdGVuZGlmICMgRElOR0hBSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNTowMzoyNy41Mzk4ODMxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMzQwNDI2NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgV29ydGhGdXp6aW5nIGZvciB0aGUgWlRFIERpbmdIYWkgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNvbnNpZGVyIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgbW9kaWZpZWQgY29kZSBmYWxscyBpbnRvIGNlcnRhaW4gbmVnYXRpdmUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIuIExvb2tpbmcgYXQgdGhhdCBzZWN0aW9uLCBJIG5lZWQgdG8gc2VlIGlmIHRoZSBjaGFuZ2VzIHRvdWNoIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIFpURSBEaW5nSGFpIGZhbGxzIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBUaGUgY3JpdGVyaWEgc3BlY2lmeSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZS4gQmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhdGNoIGFuZCBteSBrbm93bGVkZ2UsIGl0IGxvb2tzIGxpa2U6XG5cbiogICBUaGUgZHJpdmVyIHVzZXMgUENJIHZlbmRvciBJRCBgMHgxY2YyYCAoWlRFIENvcnBvcmF0aW9uKSwgd2hpY2ggaXMgYSBjbGVhciBpbmRpY2F0aW9uIG9mIGEgdmVuZG9yLXNwZWNpZmljIGRldmljZS5cbiogICBJdCdzIHJlZ2lzdGVyZWQgYXMgYSBQQ0kgZHJpdmVyIHZpYSBgbW9kdWxlX3BjaV9kcml2ZXJgLCBjb21tdW5pY2F0aW5nIHZpYSBCQVIgcmVnaXN0ZXJzLCBNU0ktWCBpbnRlcnJ1cHRzLCBhbmQgbGlrZWx5IHdpdGggb24tY2hpcCBmaXJtd2FyZS5cbiogICBDcnVjaWFsbHksIHRoZSBwcm9tcHQgc3RhdGVzIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgWlRFIERpbmdIYWkgUENJIE5JQ3MuXG5cblRoZXJlZm9yZSwgKnByaW1hIGZhY2llKiwgdGhpcyBaVEUgRGluZ0hhaSBkcml2ZXIgYXBwZWFycyB0byBiZSBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgU21hcnROSUMgLyBFdGhlcm5ldCBjb250cm9sbGVyIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdW5jdGlvbi4gSXQgc2F0aXNmaWVzIHRoZSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNyaXRlcmlhLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHZpcnR1YWwgYnVzLCBzb2Z0d2FyZSBtb2NrLCBvciBzdGFuZGFyZCB2aXJ0dWFsIGRldmljZSB0aGF0IGNvdWxkIGluc3RhbnRpYXRlIG9yIHJlYWNoIHRoaXMgZHJpdmVyIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBlbl9wZi5jYCwgYnV0IGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIEknbSBjb25maWRlbnQgdGhhdCB0aGUgYW5zd2VyIGlzIG5vLiBVbmxlc3MgSSBmaW5kIHNvbWV0aGluZyB1bmV4cGVjdGVkLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgc3RhbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk2NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA1OjAzOjM5Ljg4MDMxMjYxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDgzNDE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyfG1vZHVsZV9wY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM9NjY2PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB6eGRoX3BmX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNjczLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Njc0Om1vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDU6MDM6MzkuOTMxMTUwNDk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5ODAwMDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUENJIFRhYmxlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgenhkaF9wZl9wY2lfdGFibGVgIHdpdGhpbiBgZW5fcGYuY2AuIFRoYXQgdGFibGUgaXMgdXN1YWxseSB3aGVyZSBJIGZpbmQgdGhlIGNvcmUgbWFwcGluZ3MgYW5kIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gUENJIGRldmljZXMgd2l0aGluIHRoZSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGNvbnRleHQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSByZWxldmFudCBlbnRyaWVzIHRoYXQgZGVmaW5lIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaW50ZXJydXB0cyBhcmUgcm91dGVkLCBkZXZpY2UgSURzIGFuZCBtYXliZSBldmVuIERNQSBzZXR0aW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFBDSSBkZXZpY2VzIGFyZSBiZWluZyBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCBoZXJlLiBMZXQncyBzZWUgaWYgdGhpcyB0YWJsZSBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdoYXRldmVyIEknbSB0cm91Ymxlc2hvb3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTAwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDU6MDM6NDMuMzI5MTU1NDcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0I2luY2x1ZGUgXFxcImVuX3BmLmhcXFwiXFxuICAxNjpcXHQjaW5jbHVkZSBcXFwiZGhfcXVldWUuaFxcXCJcXG4gIDE3OlxcdFxcbiAgMTg6XFx0TU9EVUxFX0FVVEhPUihcXFwiSnVueWFuZyBIYW4gXFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cXHUwMDNlXFxcIik7XFxuICAxOTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlpURSBEaW5nSGFpIHNlcmllcyBFdGhlcm5ldCBkcml2ZXJcXFwiKTtcXG4gIDIwOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyB6eGRoX3BmX2Rldmxpbmtfb3BzID0ge307XFxuICAyMzpcXHRcXG4gIDI0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xcbiAgMjU6XFx0XFx0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcXG4gIDI2OlxcdFxcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXFxuICAyNzpcXHRcXHR7IH1cXG4gIDI4OlxcdH07XFxuICAyOTpcXHRcXG4gIDMwOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XFxuICAzMTpcXHRcXG4gIDMyOlxcdHN0cnVjdCB6eGRoX3BmX2lycV90YWJsZSB7XFxuICAzMzpcXHRcXHRzdHJ1Y3QgenhkaF9pcnFfcG9vbCAqYXN5bmNfcG9vbDtcXG4gIDM0OlxcdH07XFxuICAzNTpcXHRcXG4gIDM2OlxcdC8qIElSUSBjb21wYWN0aW9uIHRocmVzaG9sZHMgb2YgdGhlIGFzeW5jIHBvb2wsIGluIG51bWJlciBvZiBxdWV1ZXMuICovXFxuICAzNzpcXHQjZGVmaW5lIFpYREhfUEZfQVNZTkNfSVJRX01JTl9DT01QXFx0MFxcbiAgMzg6XFx0I2RlZmluZSBaWERIX1BGX0FTWU5DX0lSUV9NQVhfQ09NUFxcdDdcXG4gIDM5OlxcdFxcbiAgNDA6XFx0dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRpZiAocHJpdilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDU6MDM6NDMuMzI5MjQ3NDgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MDA3NDQ1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2AuIExvb2tpbmcgYXQgdGhlIGZpbGVuYW1lcywgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIuIE15IGltbWVkaWF0ZSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBmb3IgYSBzcGVjaWZpYyBQQ0llIE5JQywgYW5kIGZyb20gZXhwZXJpZW5jZSwgSSBrbm93IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXNuJ3Qgc29tZXRoaW5nIHRoYXQncyBlbXVsYXRlZCBpbiB5b3VyIHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzIGxpa2UgUUVNVSBvciBHQ0UuXG5cbkdpdmVuIHRoYXQsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGlzIGNvZGUgaXMgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogZHVyaW5nIG91ciB0eXBpY2FsIGZ1enppbmcgcHJvY2Vzc2VzLiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoYXQgaGFyZCBmYWN0LCB0aGVyZSBpcyBubyB2YWx1ZSBpbiBtYWtpbmcgYW55IGZ1enppbmcgYWRqdXN0bWVudHMgaGVyZS4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBUaGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGZ1enppbmcgc3ltYm9scyBvciBlbmFibGluZyBjb25maWd1cmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgcGF0Y2gsIGFzIGl0IGlzLiBUaGVyZWZvcmUsIGJvdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIHNldCB0byBlbXB0eSBhcnJheXMuIEkndmUgZ290IG15IHJlYXNvbmluZyBsYWlkIG91dCBwcmV0dHkgY2xlYXJseTogdGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoaXMgRGluZ0hhaSBkcml2ZXIgZm9yIHNwZWNpZmljIFBDSWUgaGFyZHdhcmUgdGhhdCBpc24ndCBhY2Nlc3NpYmxlIGluIGZ1enppbmcuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjE2LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA1OjAzOjQ4LjIyOTk5NDQzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpLyksIGFkZGluZyBJUlEgcG9vbCBtYW5hZ2VtZW50IGFuZCBldmVudCBxdWV1ZSBwbHVtYmluZyBmb3IgWlRFIERpbmdIYWkgUENJZSBhZGFwdGVycyAoUENJIHZlbmRvciBJRCAweDFjZjIpLiBUaGlzIGRyaXZlciByZXF1aXJlcyB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS8pLCBhZGRpbmcgSVJRIHBvb2wgbWFuYWdlbWVudCBhbmQgZXZlbnQgcXVldWUgcGx1bWJpbmcgZm9yIFpURSBEaW5nSGFpIFBDSWUgYWRhcHRlcnMgKFBDSSB2ZW5kb3IgSUQgMHgxY2YyKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDU6MDM6NDguMjMwMDE5MjAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9h7k6[1] Phase: Running StartedAt: 2026-09-11 05:03:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9h7k6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 05:03:59 +0000 UTC FinishedAt: 2026-09-11 05:04:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}