Name: series-workflowz7cvb Phase: Failed StartedAt: 2026-08-10 03:53:59 +0000 UTC FinishedAt: 2026-08-10 04:40:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cvb[0] Phase: Succeeded StartedAt: 2026-08-10 03:53:59 +0000 UTC FinishedAt: 2026-08-10 04:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cvb[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 03:53:59 +0000 UTC FinishedAt: 2026-08-10 04:40:27 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDA0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBkZXZpY2VzLiBUaGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg3YTQ2OTY3NmY4Mjk5MjUwNTk3ZTgxZmQyNTFjNDc5MDQ1OTE1MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwNDozOTo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4mIzQzO1x0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5jMmI2NGE0ODIwMzYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5AQCAtNjE0LDYgJiM0Mzs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Y250ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjbnQpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4mIzQzO1x0dTY0IHJlZ19hZGRyWzJdO1xuJiM0MztcdHU2NCByZWdfdmFsWzJdO1xuJiM0MztcdHU2NCByYXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4mIzQzO1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFswXSA9IDA7XG4mIzQzO1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFsxXSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcbiYjNDM7XHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4mIzQzO1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuJiM0MztcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbiYjNDM7XHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbiYjNDM7XHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbiYjNDM7XHQgKiBoYXJkd2FyZSBjYXAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuJiM0MztcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXG4mIzQzO1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuJiM0MztcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdGlmIChtYXhyYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRpZiAobWlucmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MCw3ICYjNDM7Nzg2LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbkBAIC03NzgsNiAmIzQzOzkxOCw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTEyLDkgJiM0Mzs1MTIsMTQgQEAgc3RydWN0IG90eDJfbmljIHtcbiAjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEXHRcdCBCSVRfVUxMKDE4KVxuICNkZWZpbmUgT1RYMl9GTEFHX1BPUlRfVVBcdFx0XHRCSVRfVUxMKDE5KVxuICNkZWZpbmUgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRFx0XHRCSVRfVUxMKDIwKVxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRURcdEJJVF9VTEwoMjEpXG4gXHR1NjRcdFx0XHRmbGFncztcbiBcdHU2NFx0XHRcdCpjcV9vcF9hZGRyO1xuIFxuJiM0MztcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbiYjNDM7XHR1NjRcdFx0XHQqbXFwcmlvX21pbl9yYXRlO1xuJiM0MztcdHU2NFx0XHRcdCptcXByaW9fbWF4X3JhdGU7XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgJiM0MzsxMjUxLDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjUwYTMxZTQ0MTlmZmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbiYjNDM7XHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLmQzNTMzYjdiNWY5ZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICYjNDM7MTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfaHc7XG4mIzQzO1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yMTQwLDYgJiM0MzsyMTQ0LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbiYjNDM7ZXJyX2ZyZWVfaHc6XG4gXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcbiBlcnJfZnJlZV9tZW06XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuQEAgLTI4NDYsNiAmIzQzOzI4NTEsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbiBcbiYjNDM7XHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi5hNzFjODA1ODgwODZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTYxLDYgJiM0Mzs2Miw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCAmIzQzOzE2MDQsMzQyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLCBUQ1xuJiM0MzsgKiBtYXBwaW5ncywgYW5kIHRoZSByYXRlLWxpbWl0IGZsYWcuIFVzZWQgb24gZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duXG4mIzQzOyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGx2bCwgaWR4O1xuJiM0MztcbiYjNDM7XHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZVt0eHFdO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4mIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4mIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcbiYjNDM7ICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxuJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuJiM0MztcdFx0ICAgIFwmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdGlmIChyYXRlX2xpbWl0KVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpbnQgZG93bl9lcnI7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XHRcdGlmIChkb3duX2VycilcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBkb3duX2Vycik7XG4mIzQzO1x0XHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXG4mIzQzO1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcbiYjNDM7e1xuJiM0MztcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJhdGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRib29sIGhhZF9tcXByaW8gPSAhIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZG93bl9lcnIsIGVycjtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG93bl9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghcW9wdC1cdTAwM2VodylcbiYjNDM7XHRcdHJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlmX3VwKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1xcHJpby1cdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cJiMzNDssIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcW9wdC1cdTAwM2Vjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHR4cSBcdTAwM2U9IG5ldGRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcbiYjNDM7XHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuJiM0MztcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbiYjNDM7XG4mIzQzO1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuJiM0MztcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuJiM0MztcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4mIzQzO1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykmIzQzOyYjNDM7O1xuQEAgLTE3MjksMTEgJiM0MzsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbiYjNDM7XHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7SFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiAmIzQzOzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xuIFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XG4mIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA0OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGRldmljZXMuIFRoaXMgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODdhNDY5Njc2ZjgyOTkyNTA1OTdlODFmZDI1MWM0NzkwNDU5MTUxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDA0OjM5OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLAogCQkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpCiYjNDM7CWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCmluZGV4IGNhNzNhOTRkYjc5NDMuLmMyYjY0YTQ4MjAzNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCkBAIC02MTQsNiAmIzQzOzYxNCwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogfQogRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsCiYjNDM7CQkgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sCiYjNDM7CQkgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwlyZXEtJmd0O251bV9yZWdzID0gY250OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVxLSZndDtyZWdbaV0gPSByZWdfYWRkcltpXTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW2ldID0gcmVnX3ZhbFtpXTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwl1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwlpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNtcSA9IHBmdmYtJmd0O2h3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoY250ICZsdDsgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJCWNudCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNudCkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGVyciwgc21xLCBuID0gMDsKJiM0MzsJdTY0IHJlZ19hZGRyWzJdOwomIzQzOwl1NjQgcmVnX3ZhbFsyXTsKJiM0MzsJdTY0IHJhdGU7CiYjNDM7CiYjNDM7CWlmICghbWF4cmF0ZSAmYW1wOyZhbXA7ICFtaW5yYXRlKSB7CiYjNDM7CQlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CQlyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFswXSA9IDA7CiYjNDM7CQlyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFsxXSA9IDA7CiYjNDM7CQlyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CiYjNDM7CS8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc28KJiM0MzsJICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWAomIzQzOwkgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzCiYjNDM7CSAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYQomIzQzOwkgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGEKJiM0MzsJICogaGFyZHdhcmUgY2FwLgomIzQzOwkgKgomIzQzOwkgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLAomIzQzOwkgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvbgomIzQzOwkgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuCiYjNDM7CSAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwlpZiAobWF4cmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBuOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYykKIHsKIAl1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdOwpAQCAtNjUwLDcgJiM0Mzs3ODYsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3IKIAkJCQkJCSh1NjQpaHctJmd0O3NtcV9saW5rX3R5cGUpOwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKIAkJLyogTURRIGNvbmZpZyAqLwotCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc4LDYgJiM0Mzs5MTgsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpCiYjNDM7CQlyZXEtJmd0O3NjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CiAJcmMgPSBvdHgyX3N5bmNfbWJveF9tc2coJmFtcDtwZnZmLSZndDttYm94KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKaW5kZXggZWVjZWU2MTJiN2IyYy4uZGYxNzVmYjE0OTUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKQEAgLTUxMiw5ICYjNDM7NTEyLDE0IEBAIHN0cnVjdCBvdHgyX25pYyB7CiAjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVECQkgQklUX1VMTCgxOCkKICNkZWZpbmUgT1RYMl9GTEFHX1BPUlRfVVAJCQlCSVRfVUxMKDE5KQogI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVECQlCSVRfVUxMKDIwKQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRAlCSVRfVUxMKDIxKQogCXU2NAkJCWZsYWdzOwogCXU2NAkJCSpjcV9vcF9hZGRyOwogCiYjNDM7CXUzMgkJCW1xcHJpb19mbGFnczsKJiM0MzsJdTY0CQkJKm1xcHJpb19taW5fcmF0ZTsKJiM0MzsJdTY0CQkJKm1xcHJpb19tYXhfcmF0ZTsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtMTI0Niw2ICYjNDM7MTI1MSwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggZjExMGRmYTQyMzYwNS4uNjc2Zjc4ZDhmYjM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmICgocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgJmFtcDsmYW1wOyBwZmMtJmd0O3BmY19lbikgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsCiYjNDM7CQkJICAgJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJb2xkX3BmY19lbiA9IHBmdmYtJmd0O3BmY19lbjsKIAlwZnZmLSZndDtwZmNfZW4gPSBwZmMtJmd0O3BmY19lbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCmluZGV4IGEwMzQwZjM0MjJiZjkuLjUwYTMxZTQ0MTlmZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmICgocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgKGNoYW5uZWwtJmd0O3R4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnR4X3F1ZXVlcyB8fAomIzQzOwkgICAgIGNoYW5uZWwtJmd0O3J4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnJ4X3F1ZXVlcykpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi5kMzUzM2I3YjVmOWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTAgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfaHc7CiYjNDM7CiAJLyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IHBmLSZndDtody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHsKIAkJY3FfcG9sbCA9ICZhbXA7cXNldC0mZ3Q7bmFwaVtxaWR4XTsKQEAgLTIxNDAsNiAmIzQzOzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZnJlZV9pcnEodmVjLCBwZik7CiBlcnJfZGlzYWJsZV9uYXBpOgogCW90eDJfZGlzYWJsZV9uYXBpKHBmKTsKJiM0MztlcnJfZnJlZV9odzoKIAlvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTsKIGVycl9mcmVlX21lbToKIAlvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpOwpAQCAtMjg0Niw2ICYjNDM7Mjg1MSwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nOwogCiYjNDM7CWlmIChwcm9nICZhbXA7JmFtcDsgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsCiYjNDM7CQkJICAgJiMzNDtYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb2cgJmFtcDsmYW1wOyBkZXYtJmd0O210dSAmZ3Q7IE1BWF9YRFBfTVRVKSB7CiAJCW5ldGRldl93YXJuKGRldiwgJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKaW5kZXggMDM5ZmQ0N2ViZjUyMi4uYTcxYzgwNTg4MDg2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfbWlycmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y192bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NuMTBrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtvdHgyX2NvbW1vbi5oJiMzNDsKQEAgLTYxLDYgJiM0Mzs2Miw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCSpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMICZsdDsmbHQ7ICgqYnVyc3RfZXhwIC0gNykpOwogCQl9CiAJfSBlbHNlIHsKJiM0MzsJCS8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvbgomIzQzOwkJICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LgomIzQzOwkJICovCiAJCSpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7CiAJCSpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTsKIAl9CkBAIC0xNjAwLDE0ICYjNDM7MTYwNCwzNDIgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSAgbmljLCBuaWMsIGluZ3Jlc3MpOwogfQogCiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsIFRDCiYjNDM7ICogbWFwcGluZ3MsIGFuZCB0aGUgcmF0ZS1saW1pdCBmbGFnLiBVc2VkIG9uIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93bgomIzQzOyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlKTsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19mbGFncyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJaW50IGx2bCwgaWR4OwomIzQzOwomIzQzOwlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHR4cSA9IDA7IHR4cSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlW3R4cV07CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV07CiYjNDM7CiYjNDM7CQlpZiAoIW1pbl9yYXRlICZhbXA7JmFtcDsgIW1heF9yYXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLAomIzQzOwkJCQkJCSAgIG1heF9yYXRlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHR4cSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW8KJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSkKJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy4KJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzCiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodAomIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGUKJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKG5ldGRldiwKJiM0MzsJCSAgICAmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQ7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX29wZW4obmV0ZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaW50IGRvd25fZXJyOwomIzQzOwomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQlkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7CiYjNDM7CQlpZiAoZG93bl9lcnIpCiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIGRvd25fZXJyKTsKJiM0MzsJCS8qIENhbGxlciBob2xkcyBuZXRkZXYvUlROTCBsb2NrOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4gKi8KJiM0MzsJCW5ldGlmX2Nsb3NlKG5ldGRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudCkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSB8fCBxY291bnQgJmx0Oz0gMSkKJiM0MzsJCXJldHVybiByYXRlOwomIzQzOwomIzQzOwlyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWJvb2wgaGFkX21xcHJpbyA9ICEhKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsKJiM0MzsJLyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi8KJiM0MzsJaWYgKCFoYWRfbXFwcmlvKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsKJiM0MzsJaWYgKGlmX3VwKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZG93bl9lcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgdGMsIHR4cSwgZXJyLCBpOwomIzQzOwomIzQzOwlpZiAoIXFvcHQtJmd0O2h3KQomIzQzOwkJcmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CiYjNDM7CWlmICghaWZfdXApIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7c2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcbiYjMzQ7LCBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtJmd0O3BkZXYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3BmY19lbikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlcykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtudW1fdGMsIHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlcyAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFvcHQtJmd0O2NvdW50W3RjXTsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh0eHEgJmd0Oz0gbmV0ZGV2LSZndDtyZWFsX251bV90eF9xdWV1ZXMpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzID0gbXFwcmlvLSZndDtmbGFnczsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQkvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFEKJiM0MzsJCSAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZQomIzQzOwkJICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLgomIzQzOwkJICovCiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdLAomIzQzOwkJCQkJCQkgICAgICBxY291bnQpOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tJmd0O21heF9yYXRlW3RjXSwKJiM0MzsJCQkJCQkJICAgICAgcWNvdW50KTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcbiYjMzQ7LAomIzQzOwkJCQkgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsKJiM0MzsJCQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwKJiM0MzsJCQkJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LSZndDtjb3VudFtpXSwgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CW90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwczsKJiM0MzsKJiM0MzsJaWYgKGJhc2UtJmd0O3R5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljYXBzID0gYmFzZS0mZ3Q7Y2FwczsKJiM0MzsJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCSAgdm9pZCAqdHlwZV9kYXRhKQogewogCXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1FVRVJZX0NBUFM6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9CTE9DSzoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfSFRCOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwppbmRleCA2OWMwOTExZTI4ZTkxLi4wZmE1YzY1ZDYyMjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLAogCS8qIGNvbmZpZ3VyZSBQSVIgKi8KIAltYXhyYXRlID0gKG5vZGUtJmd0O3JhdGUgJmd0OyBub2RlLSZndDtjZWlsKSA/IG5vZGUtJmd0O3JhdGUgOiBub2RlLSZndDtjZWlsOwogCiYjNDM7CS8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhbgomIzQzOwkgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLgomIzQzOwkgKi8KIAljZmctJmd0O3JlZ3ZhbFsqbnVtX3JlZ3NdID0KIAkJb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTsKIAkoKm51bV9yZWdzKSYjNDM7JiM0Mzs7CkBAIC0xNzI5LDExICYjNDM7MTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKQogCW90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTsKIH0KIAomIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpCiB7CiAJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJlczsKIAomIzQzOwlpZiAoKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGh0Yi0mZ3Q7Y29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoaHRiLSZndDtjb21tYW5kKSB7CiAJY2FzZSBUQ19IVEJfQ1JFQVRFOgogCQlyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLSZndDtwYXJlbnRfY2xhc3NpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAppbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7CiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTsKIAogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTsKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwogaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTgKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIE9jdGVvblRYMiBtcXByaW8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSBoYXZlIHRoaXMgcGF0Y2ggdGhhdCBhZGRzIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IHRvIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLiBJdCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBydnVfbml4LmNgLCBgb3R4Ml9jb21tb24uY2AsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gSSBhY3R1YWxseSBmdXp6IHRoaXMgdGhpbmc/JiMzNDsgVGhhdCBpcywgY2FuIEkgcmVhY2ggdGhpcyBjb2RlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8KClRoZSBpbnN0cnVjdGlvbnMgZ2l2ZSBtZSBzb21lIGd1aWRhbmNlOiBsb29rIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgKnBoeXNpY2FsKiBoYXJkd2FyZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBPY3Rlb25UWDIgaXMgYSBNYXJ2ZWxsICpoYXJkd2FyZSogTklDLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGNvdWxkIGJlIG91dCBvZiByZWFjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgZXZlbiAqYW55KiBlbXVsYXRpb24gb3IgdmlydHVhbGl6YXRpb24gc3VwcG9ydCBmb3IgaXQuCgpVc3VhbGx5LCBkcml2ZXJzIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MmAgc2NyZWFtcyAmIzM0O3BoeXNpY2FsIGhhcmR3YXJlJiMzNDsgdG8gbWUuIEkmIzM5O2QgbG92ZSB0byBxdWlja2x5IHNlYXJjaCB0aGUgUUVNVSBzb3VyY2UgdG8gc2VlIGlmIGBvY3Rlb250eDJgIGlzIG1lbnRpb25lZCwgYnV0IEkgZG9uJiMzOTt0IGhhdmUgdGhhdCBoYW5keS4gTm8gbWF0dGVyLCBJIGNhbiBlbGltaW5hdGUgcG9zc2liaWxpdGllcy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSAqbm90KiBhIHN0YW5kYXJkIGVtdWxhdGVkIGRldmljZSB0aGF0IFFFTVUgcHJvdmlkZXMgb3V0LW9mLXRoZS1ib3guIFRoZXJlJiMzOTtzIHByb2JhYmx5IG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgaXQgd2l0aGluIHRoZSBrZXJuZWwsIGVpdGhlci4gU28gaXQmIzM5O3MgcHJvYmFibHkgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBvbmx5IHdvcmtzIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUuCgpKdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSBpZiBpdCYjMzk7cyBhIFBDSSBkcml2ZXIuIFRoZSBwYXRjaCBtb2RpZmllcyBgb3R4Ml9wZi5jYCwgd2hpY2ggaXMgdGhlIFBGIGRyaXZlciwgYW5kIHRob3NlIHRlbmQgdG8gYmUgUENJLWJhc2VkLiBTbywgSSB3aWxsIGdyZXAgZm9yIGBwY2lfZHJpdmVyYCBpbiBgb3R4Ml9wZi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZmluYWwgcGllY2Ugb2YgZXZpZGVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTIwPXN0YXRpYyB2b2lkIG90eDJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzU4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzU4MzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgb3R4Ml9wZl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1ODQtXHQubmFtZSA9IERSVl9OQU1FLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTMyCgkJCQkJCQlvdXRwdXQ6IDgzCgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSSBEcml2ZXImIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciDigJMgYSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkuIEJlaW5nIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdGVkIGRldmljZSBpbiBzdGFuZGFyZCBRRU1VLCBpbW1lZGlhdGVseSBmbGFncyBhIHByb2JsZW0uIEl0IG1lYW5zIEkgY2FuJiMzOTt0IHJlYWNoIHRoaXMgZHJpdmVyIGluIHRoZSB1c3VhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCB0b29scyBsaWtlIHN5emthbGxlciB1c2UuIFRoYXQgYWxvbmUgc3VnZ2VzdHMgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGZhbHNlLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQuLi4gSSYjMzk7bGwgY2hlY2sgZm9yIGFueSBjbHVlcyBvZiB2aXJ0dWFsIGRldmljZXMuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGRyaXZlciBzb3VyY2UsIEkgc2VlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYCDigJMgdGhhdCYjMzk7cyB0aGUgUEYgZHJpdmVyLiBBaCwgYW5kIHRoZXJlJiMzOTtzIGEgVkYgZHJpdmVyIHRvbywgYG90eDJfdmYuY2AuIEJ1dCBob2xkIG9uLCBib3RoIG9mIHRoZXNlIGRyaXZlcnMsIHRoZSBQRiBhbmQgVkYsIGFyZSBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIHBoeXNpY2FsIFBDSSBkZXZpY2Ugb3IgU1ItSU9WIHZpcnR1YWwgZnVuY3Rpb25zIG9mIHRoYXQgZGV2aWNlLiBUaGlzIGlzIHRoZSBjbGluY2hlci4KClNvLCByZWFsaXN0aWNhbGx5LCB0aGVyZSYjMzk7cyBubyB3YXkgc3l6a2FsbGVyIGNvdWxkIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBpbiBhIHN0YW5kYXJkIFZNIHNldHVwLiBJdCYjMzk7cyBub3QgZGVzaWduZWQgdG8gd29yayB3aXRoIHRob3NlIGtpbmRzIG9mIHBoeXNpY2FsIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4KClRoZXJlZm9yZSwgbXkgZmluYWwgZGV0ZXJtaW5hdGlvbiBpcyBjbGVhcjogSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuIFRoZSBwYXRjaCB0YXJnZXRzIGNvZGUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGluYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSB0eXBpY2FsIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2l0aCBpdHMgcmVsaWFuY2Ugb24gdGhlIHBoeXNpY2FsIFBDSWUgZGV2aWNlLCByZW5kZXJzIGl0IHVuc3VpdGFibGUgZm9yIGZ1enppbmcgaW4gYSBzdGFuZGFyZCBWTSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBkZXZpY2VzLiBUaGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBkZXZpY2VzLiBUaGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDQ6Mzk6NTcuNTAxMDQ0Mjc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MTA4MjQ4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGRldmljZXMuIFRoaXMgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNDozOTo1Ny41MDEwNTAxMzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQxMzg2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4N2E0Njk2NzZmODI5OTI1MDU5N2U4MWZkMjUxYzQ3OTA0NTkxNTFkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDA0OjM5OjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcXG4rXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuaW5kZXggY2E3M2E5NGRiNzk0My4uYzJiNjRhNDgyMDM2MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuQEAgLTYxNCw2ICs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4rb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcXG4rXFx0XFx0c21xID0gcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRpZiAoY250IFxcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0Y250ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNudCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2ZhaWw6XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGVyciwgc21xLCBuID0gMDtcXG4rXFx0dTY0IHJlZ19hZGRyWzJdO1xcbitcXHR1NjQgcmVnX3ZhbFsyXTtcXG4rXFx0dTY0IHJhdGU7XFxuK1xcbitcXHRpZiAoIW1heHJhdGUgXFx1MDAyNlxcdTAwMjYgIW1pbnJhdGUpIHtcXG4rXFx0XFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXHRcXHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzBdID0gMDtcXG4rXFx0XFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFsxXSA9IDA7XFxuK1xcdFxcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0fVxcbitcXG4rXFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXG4rXFx0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xcbitcXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXFxuK1xcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcXG4rXFx0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXFxuK1xcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxcbitcXHQgKiBoYXJkd2FyZSBjYXAuXFxuK1xcdCAqXFxuK1xcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXFxuK1xcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXFxuK1xcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cXG4rXFx0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdGlmIChtYXhyYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcbitcXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRpZiAobWlucmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gbjtcXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxcbiB7XFxuIFxcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XFxuQEAgLTY1MCw3ICs3ODYsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcXG4gXFx0XFx0XFx0XFx0XFx0XFx0KHU2NClody1cXHUwMDNlc21xX2xpbmtfdHlwZSk7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG4gXFx0XFx0LyogTURRIGNvbmZpZyAqL1xcbi1cXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKVxcbitcXHRcXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG5AQCAtNzc4LDYgKzkxOCw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKVxcbitcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcbiBcXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveCk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uZGYxNzVmYjE0OTUxOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuQEAgLTUxMiw5ICs1MTIsMTQgQEAgc3RydWN0IG90eDJfbmljIHtcXG4gI2RlZmluZSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRFxcdFxcdCBCSVRfVUxMKDE4KVxcbiAjZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQXFx0XFx0XFx0QklUX1VMTCgxOSlcXG4gI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXFx0XFx0QklUX1VMTCgyMClcXG4rI2RlZmluZSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEXFx0QklUX1VMTCgyMSlcXG4gXFx0dTY0XFx0XFx0XFx0ZmxhZ3M7XFxuIFxcdHU2NFxcdFxcdFxcdCpjcV9vcF9hZGRyO1xcbiBcXG4rXFx0dTMyXFx0XFx0XFx0bXFwcmlvX2ZsYWdzO1xcbitcXHR1NjRcXHRcXHRcXHQqbXFwcmlvX21pbl9yYXRlO1xcbitcXHR1NjRcXHRcXHRcXHQqbXFwcmlvX21heF9yYXRlO1xcbitcXG4gXFx0c3RydWN0IGJwZl9wcm9nXFx0XFx0KnhkcF9wcm9nO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9xc2V0XFx0cXNldDtcXG4gXFx0c3RydWN0IG90eDJfaHdcXHRcXHRodztcXG5AQCAtMTI0Niw2ICsxMjUxLDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcXG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXFxuK1xcdFxcdFxcdFxcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxcbiBcXHRcXHRcXHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuaW5kZXggZjExMGRmYTQyMzYwNS4uNjc2Zjc4ZDhmYjM0NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbkBAIC00MTMsNiArNDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcXG4gXFx0dTggb2xkX3BmY19lbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICgocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiBwZmMtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRvbGRfcGZjX2VuID0gcGZ2Zi1cXHUwMDNlcGZjX2VuO1xcbiBcXHRwZnZmLVxcdTAwM2VwZmNfZW4gPSBwZmMtXFx1MDAzZXBmY19lbjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjUwYTMxZTQ0MTlmZmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuQEAgLTI4Nyw2ICsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoY2hhbm5lbC1cXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cXHUwMDNlaHcudHhfcXVldWVzIHx8XFxuK1xcdCAgICAgY2hhbm5lbC1cXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cXHUwMDNlaHcucnhfcXVldWVzKSkge1xcbitcXHRcXHRuZXRkZXZfaW5mbyhkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoaWZfdXApXFxuIFxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AoZGV2KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuaW5kZXggYzk5NWYyOTAwODU5MC4uZDM1MzNiN2I1ZjlmMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbkBAIC0xOTgwLDYgKzE5ODAsMTAgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9mcmVlX21lbTtcXG4gXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9odztcXG4rXFxuIFxcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xcbiBcXHRmb3IgKHFpZHggPSAwOyBxaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcXG4gXFx0XFx0Y3FfcG9sbCA9IFxcdTAwMjZxc2V0LVxcdTAwM2VuYXBpW3FpZHhdO1xcbkBAIC0yMTQwLDYgKzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZyZWVfaXJxKHZlYywgcGYpO1xcbiBlcnJfZGlzYWJsZV9uYXBpOlxcbiBcXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XFxuK2Vycl9mcmVlX2h3OlxcbiBcXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcXG4gZXJyX2ZyZWVfbWVtOlxcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbkBAIC0yODQ2LDYgKzI4NTEsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbiBcXG4rXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbXR1IFxcdTAwM2UgTUFYX1hEUF9NVFUpIHtcXG4gXFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbmluZGV4IDAzOWZkNDdlYmY1MjIuLmE3MWM4MDU4ODA4NmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJjbjEway5oXFxcIlxcbiAjaW5jbHVkZSBcXFwib3R4Ml9jb21tb24uaFxcXCJcXG5AQCAtNjEsNiArNjIsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFxcdTAwM2NcXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxcbitcXHRcXHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xcbiBcXHRcXHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XFxuIFxcdH1cXG5AQCAtMTYwMCwxNCArMTYwNCwzNDIgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xcbiB9XFxuIFxcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycywgVENcXG4rICogbWFwcGluZ3MsIGFuZCB0aGUgcmF0ZS1saW1pdCBmbGFnLiBVc2VkIG9uIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93blxcbisgKiAodGMgcWRpc2MgZGVsKSwgbm90IG9uIGludGVybmFsIHN0b3Avb3BlbiBjeWNsZXMgc3VjaCBhcyBNVFUgY2hhbmdlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSk7XFxuK1xcdGRldm1fa2ZyZWUocGZ2Zi1cXHUwMDNlZGV2LCBwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBOVUxMO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0aW50IGx2bCwgaWR4O1xcbitcXG4rXFx0Zm9yIChsdmwgPSAwOyBsdmwgXFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsKyspIHtcXG4rXFx0XFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCsrKSB7XFxuK1xcdFxcdFxcdGlmIChwZnZmLVxcdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKVxcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDtcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0aW50IHR4cSwgZXJyO1xcbitcXG4rXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAodHhxID0gMDsgdHhxIFxcdTAwM2MgcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSsrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXTtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19mbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IHBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdO1xcbitcXG4rXFx0XFx0aWYgKCFtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiAhbWF4X3JhdGUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBtYXhfcmF0ZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgdHhxLCBlcnIpO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cXG4rICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXFxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxcbisgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXFxuKyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcXG4rICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxcbisgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRuZXRkZXZfaW5mbyhuZXRkZXYsXFxuK1xcdFxcdCAgICBcXFwibXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXFxuK1xcdGlmIChyYXRlX2xpbWl0KVxcbitcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xcbitcXG4rXFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGludCBkb3duX2VycjtcXG4rXFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XFxuK1xcdFxcdGlmIChkb3duX2VycilcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBkb3duX2Vycik7XFxuK1xcdFxcdC8qIENhbGxlciBob2xkcyBuZXRkZXYvUlROTCBsb2NrOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4gKi9cXG4rXFx0XFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcXG4re1xcbitcXHRpZiAoIXJhdGUgfHwgcWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiByYXRlO1xcbitcXG4rXFx0cmV0dXJuIGRpdl91NjQocmF0ZSwgcWNvdW50KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0Ym9vbCBoYWRfbXFwcmlvID0gISEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IGRvd25fZXJyLCBlcnI7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IDA7XFxuK1xcbitcXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xcbitcXHRpZiAoIWhhZF9tcXByaW8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXG4rXFx0aWYgKGlmX3VwKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZG93bl9lcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXFxuXFxcIiwgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXFx1MDAyNnBmdmYtXFx1MDAzZWh3LmNhcF9mbGFnKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocW9wdC1cXHUwMDNlbnVtX3RjIFxcdTAwM2UgcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZW51bV90YywgcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzIFxcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcywgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGZvciAodHhxID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0ICAgICB0eHEgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cXHUwMDNlY291bnRbdGNdOyB0eHErKykge1xcbitcXHRcXHRcXHRpZiAodHhxIFxcdTAwM2U9IG5ldGRldi1cXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19mbGFncyA9IG1xcHJpby1cXHUwMDNlZmxhZ3M7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXFxuK1xcdFxcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxcbitcXHRcXHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBxY291bnQpO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cXHUwMDNlbWF4X3JhdGVbdGNdLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBxY291bnQpO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LVxcdTAwM2VudW1fdGMpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyBpKyspXFxuK1xcdFxcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVxcdTAwM2Vjb3VudFtpXSwgcW9wdC1cXHUwMDNlb2Zmc2V0W2ldKTtcXG4rXFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xcbitcXG4rXFx0aWYgKGJhc2UtXFx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRjYXBzID0gYmFzZS1cXHUwMDNlY2FwcztcXG4rXFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4gXFx0XFx0ICB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgVENfUVVFUllfQ0FQUzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLjBmYTVjNjVkNjIyMTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5AQCAtMTcyOSwxMSArMTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XFxuIH1cXG4gXFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFx0aW50IHJlcztcXG4gXFxuK1xcdGlmICgocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaHRiLVxcdTAwM2Vjb21tYW5kICE9IFRDX0hUQl9ERVNUUk9ZKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChodGItXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdHN3aXRjaCAoaHRiLVxcdTAwM2Vjb21tYW5kKSB7XFxuIFxcdGNhc2UgVENfSFRCX0NSRUFURTpcXG4gXFx0XFx0cmV0dXJuIG90eDJfcW9zX3Jvb3RfYWRkKHBmdmYsIGh0Yi1cXHUwMDNlcGFyZW50X2NsYXNzaWQsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxcbmluZGV4IDIyMWJkMDQzOGY2MDMuLmM3NzdjYzQyZWFjOWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuQEAgLTIzLDYgKzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcXG4gXFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNDozOTo1OC44NTU4NzE5NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTM1NTk4NDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBkZXZpY2VzLiBUaGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODdhNDY5Njc2ZjgyOTkyNTA1OTdlODFmZDI1MWM0NzkwNDU5MTUxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA0OjM5OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4rXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cIixcbitcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IGNhNzNhOTRkYjc5NDMuLmMyYjY0YTQ4MjAzNjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTQsNiArNjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcbitcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdGNudCA9IDA7XG4rXHR9XG4rXG4rXHRpZiAoY250KSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitmYWlsOlxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGVyciwgc21xLCBuID0gMDtcbitcdHU2NCByZWdfYWRkclsyXTtcbitcdHU2NCByZWdfdmFsWzJdO1xuK1x0dTY0IHJhdGU7XG4rXG4rXHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4rXHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFswXSA9IDA7XG4rXHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbMV0gPSAwO1xuK1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHR9XG4rXG4rXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuK1x0aWYgKCFyZXEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuK1xuK1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuK1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuK1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuK1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4rXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbitcdCAqIGhhcmR3YXJlIGNhcC5cbitcdCAqXG4rXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuK1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbitcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbitcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4rXHQgKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdGlmIChtYXhyYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1xuK1x0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdGlmIChtaW5yYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUwLDcgKzc4NiwxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdGVsc2VcbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc4LDYgKzkxOCw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTEyLDkgKzUxMiwxNCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuICNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0IEJJVF9VTEwoMTgpXG4gI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFx0XHRcdEJJVF9VTEwoMTkpXG4gI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXHRcdEJJVF9VTEwoMjApXG4rI2RlZmluZSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEXHRCSVRfVUxMKDIxKVxuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbitcdHU2NFx0XHRcdCptcXByaW9fbWluX3JhdGU7XG4rXHR1NjRcdFx0XHQqbXFwcmlvX21heF9yYXRlO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTEsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjUwYTMxZTQ0MTlmZmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbitcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbitcdFx0bmV0ZGV2X2luZm8oZGV2LFxuK1x0XHRcdCAgICBcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi5kMzUzM2I3YjVmOWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiArMTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbitcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfaHc7XG4rXG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yMTQwLDYgKzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuK2Vycl9mcmVlX2h3OlxuIFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XG4gZXJyX2ZyZWVfbWVtOlxuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbkBAIC0yODQ2LDYgKzI4NTEsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbiBcbitcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbXR1IFx1MDAzZSBNQVhfWERQX01UVSkge1xuIFx0XHRuZXRkZXZfd2FybihkZXYsIFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLmE3MWM4MDU4ODA4NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNuMTBrLmhcIlxuICNpbmNsdWRlIFwib3R4Ml9jb21tb24uaFwiXG5AQCAtNjEsNiArNjIsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXHUwMDNjXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuK1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbitcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuK1x0XHQgKi9cbiBcdFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcbiBcdFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xuIFx0fVxuQEAgLTE2MDAsMTQgKzE2MDQsMzQyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsIFRDXG4rICogbWFwcGluZ3MsIGFuZCB0aGUgcmF0ZS1saW1pdCBmbGFnLiBVc2VkIG9uIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93blxuKyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuXG4rICovXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUpO1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGx2bCwgaWR4O1xuK1xuK1x0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCsrKSB7XG4rXHRcdFx0aWYgKHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCB0eHEsIGVycjtcbitcbitcdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4rICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxuKyAqIGludGVyZmFjZSBhZG1pbmlzdHJhdGl2ZWx5IGRvd24uXG4rICovXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuK1x0aWYgKHJhdGVfbGltaXQpXG4rXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpbnQgZG93bl9lcnI7XG4rXG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuK1x0XHRpZiAoZG93bl9lcnIpXG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXG5cIixcbitcdFx0XHRcdCAgIGRvd25fZXJyKTtcbitcdFx0LyogQ2FsbGVyIGhvbGRzIG5ldGRldi9SVE5MIGxvY2s7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLiAqL1xuK1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcbit7XG4rXHRpZiAoIXJhdGUgfHwgcWNvdW50IFx1MDAzYz0gMSlcbitcdFx0cmV0dXJuIHJhdGU7XG4rXG4rXHRyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gISEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCk7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZG93bl9lcnIsIGVycjtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSAwO1xuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiBkb3duX2Vycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbitcbitcdGlmICghcW9wdC1cdTAwM2VodylcbitcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4rXG4rXHRpZiAoIWlmX3VwKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cIiwgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXHUwMDI2cGZ2Zi1cdTAwM2Vody5jYXBfZmxhZykpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2VwZmNfZW4pIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcyBcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxuXCIsXG4rXHRcdFx0ICAgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcywgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFvcHQtXHUwMDNlY291bnRbdGNdOyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBuZXRkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4rXHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuK1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXHUwMDNlY291bnRbaV0sIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwOlxuK1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuK1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuK1xuK1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4rXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbitcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4rXHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSsrO1xuQEAgLTE3MjksMTEgKzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcbiB9XG4gXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbitcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgaHRiLVx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4rXHRcdFx0XHQgICBcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XG4gXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA0OjM5OjU4Ljg1NTg3MzI0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjY0MzQ0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIE9jdGVvblRYMiBtcXByaW8gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJIGhhdmUgdGhpcyBwYXRjaCB0aGF0IGFkZHMgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgdG8gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIuIEl0IHRvdWNoZXMgYSBidW5jaCBvZiBmaWxlczogYHJ2dV9uaXguY2AsIGBvdHgyX2NvbW1vbi5jYCwgYG90eDJfZGNibmwuY2AsIGBvdHgyX2V0aHRvb2wuY2AsIGBvdHgyX3BmLmNgLCBgb3R4Ml90Yy5jYCwgYW5kIGBxb3MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiBJIGFjdHVhbGx5IGZ1enogdGhpcyB0aGluZz9cIiBUaGF0IGlzLCBjYW4gSSByZWFjaCB0aGlzIGNvZGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VP1xuXG5UaGUgaW5zdHJ1Y3Rpb25zIGdpdmUgbWUgc29tZSBndWlkYW5jZTogbG9vayBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkICpwaHlzaWNhbCogaGFyZHdhcmUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBPY3Rlb25UWDIgaXMgYSBNYXJ2ZWxsICpoYXJkd2FyZSogTklDLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGNvdWxkIGJlIG91dCBvZiByZWFjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgZXZlbiAqYW55KiBlbXVsYXRpb24gb3IgdmlydHVhbGl6YXRpb24gc3VwcG9ydCBmb3IgaXQuXG5cblVzdWFsbHksIGRyaXZlcnMgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyYCBzY3JlYW1zIFwicGh5c2ljYWwgaGFyZHdhcmVcIiB0byBtZS4gSSdkIGxvdmUgdG8gcXVpY2tseSBzZWFyY2ggdGhlIFFFTVUgc291cmNlIHRvIHNlZSBpZiBgb2N0ZW9udHgyYCBpcyBtZW50aW9uZWQsIGJ1dCBJIGRvbid0IGhhdmUgdGhhdCBoYW5keS4gTm8gbWF0dGVyLCBJIGNhbiBlbGltaW5hdGUgcG9zc2liaWxpdGllcy4gSXQncyBhbG1vc3QgY2VydGFpbmx5ICpub3QqIGEgc3RhbmRhcmQgZW11bGF0ZWQgZGV2aWNlIHRoYXQgUUVNVSBwcm92aWRlcyBvdXQtb2YtdGhlLWJveC4gVGhlcmUncyBwcm9iYWJseSBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGl0IHdpdGhpbiB0aGUga2VybmVsLCBlaXRoZXIuIFNvIGl0J3MgcHJvYmFibHkgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBvbmx5IHdvcmtzIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUuXG5cbkp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IGlmIGl0J3MgYSBQQ0kgZHJpdmVyLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG90eDJfcGYuY2AsIHdoaWNoIGlzIHRoZSBQRiBkcml2ZXIsIGFuZCB0aG9zZSB0ZW5kIHRvIGJlIFBDSS1iYXNlZC4gU28sIEkgd2lsbCBncmVwIGZvciBgcGNpX2RyaXZlcmAgaW4gYG90eDJfcGYuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZpbmFsIHBpZWNlIG9mIGV2aWRlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA0OjQwOjA3LjU4MjMxMDU3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUwMzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTIwPXN0YXRpYyB2b2lkIG90eDJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzU4MzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgb3R4Ml9wZl9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTg0LVxcdC5uYW1lID0gRFJWX05BTUUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA0OjQwOjA3LjYzMTgxNzY5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1Nzk5OTgwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUENJIERyaXZlcidzIEZ1enphYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciDigJMgYSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkuIEJlaW5nIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdGVkIGRldmljZSBpbiBzdGFuZGFyZCBRRU1VLCBpbW1lZGlhdGVseSBmbGFncyBhIHByb2JsZW0uIEl0IG1lYW5zIEkgY2FuJ3QgcmVhY2ggdGhpcyBkcml2ZXIgaW4gdGhlIHVzdWFsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aGF0IHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHVzZS4gVGhhdCBhbG9uZSBzdWdnZXN0cyBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgZmFsc2UuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0Li4uIEknbGwgY2hlY2sgZm9yIGFueSBjbHVlcyBvZiB2aXJ0dWFsIGRldmljZXMuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGRyaXZlciBzb3VyY2UsIEkgc2VlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYCDigJMgdGhhdCdzIHRoZSBQRiBkcml2ZXIuIEFoLCBhbmQgdGhlcmUncyBhIFZGIGRyaXZlciB0b28sIGBvdHgyX3ZmLmNgLiBCdXQgaG9sZCBvbiwgYm90aCBvZiB0aGVzZSBkcml2ZXJzLCB0aGUgUEYgYW5kIFZGLCBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBwaHlzaWNhbCBQQ0kgZGV2aWNlIG9yIFNSLUlPViB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiB0aGF0IGRldmljZS4gVGhpcyBpcyB0aGUgY2xpbmNoZXIuXG5cblNvLCByZWFsaXN0aWNhbGx5LCB0aGVyZSdzIG5vIHdheSBzeXprYWxsZXIgY291bGQgZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGluIGEgc3RhbmRhcmQgVk0gc2V0dXAuIEl0J3Mgbm90IGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aG9zZSBraW5kcyBvZiBwaHlzaWNhbCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgZGV0ZXJtaW5hdGlvbiBpcyBjbGVhcjogSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gVGhlIHBhdGNoIHRhcmdldHMgY29kZSB0aGF0J3MgZnVuZGFtZW50YWxseSBpbmFjY2Vzc2libGUgdGhyb3VnaCB0aGUgdHlwaWNhbCBmdXp6aW5nIGluZnJhc3RydWN0dXJlLiBUaGlzIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdpdGggaXRzIHJlbGlhbmNlIG9uIHRoZSBwaHlzaWNhbCBQQ0llIGRldmljZSwgcmVuZGVycyBpdCB1bnN1aXRhYmxlIGZvciBmdXp6aW5nIGluIGEgc3RhbmRhcmQgVk0gY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMzIsIk91dHB1dFRva2VucyI6ODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDQ6NDA6MTQuMjExODE3NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgZGV2aWNlcy4gVGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgZGV2aWNlcy4gVGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA0OjQwOjE0LjIxMTg2MDI1WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cvb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 03:53:59 +0000 UTC FinishedAt: 2026-08-10 04:40:15 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDA0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBkZXZpY2VzLiBUaGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg3YTQ2OTY3NmY4Mjk5MjUwNTk3ZTgxZmQyNTFjNDc5MDQ1OTE1MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwNDozOTo1NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4mIzQzO1x0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5jMmI2NGE0ODIwMzYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5AQCAtNjE0LDYgJiM0Mzs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Y250ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjbnQpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4mIzQzO1x0dTY0IHJlZ19hZGRyWzJdO1xuJiM0MztcdHU2NCByZWdfdmFsWzJdO1xuJiM0MztcdHU2NCByYXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4mIzQzO1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFswXSA9IDA7XG4mIzQzO1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFsxXSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcbiYjNDM7XHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4mIzQzO1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuJiM0MztcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbiYjNDM7XHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbiYjNDM7XHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbiYjNDM7XHQgKiBoYXJkd2FyZSBjYXAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuJiM0MztcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXG4mIzQzO1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuJiM0MztcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdGlmIChtYXhyYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRpZiAobWlucmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MCw3ICYjNDM7Nzg2LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbkBAIC03NzgsNiAmIzQzOzkxOCw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTEyLDkgJiM0Mzs1MTIsMTQgQEAgc3RydWN0IG90eDJfbmljIHtcbiAjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEXHRcdCBCSVRfVUxMKDE4KVxuICNkZWZpbmUgT1RYMl9GTEFHX1BPUlRfVVBcdFx0XHRCSVRfVUxMKDE5KVxuICNkZWZpbmUgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRFx0XHRCSVRfVUxMKDIwKVxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRURcdEJJVF9VTEwoMjEpXG4gXHR1NjRcdFx0XHRmbGFncztcbiBcdHU2NFx0XHRcdCpjcV9vcF9hZGRyO1xuIFxuJiM0MztcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbiYjNDM7XHR1NjRcdFx0XHQqbXFwcmlvX21pbl9yYXRlO1xuJiM0MztcdHU2NFx0XHRcdCptcXByaW9fbWF4X3JhdGU7XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgJiM0MzsxMjUxLDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjUwYTMxZTQ0MTlmZmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbiYjNDM7XHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLmQzNTMzYjdiNWY5ZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICYjNDM7MTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfaHc7XG4mIzQzO1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yMTQwLDYgJiM0MzsyMTQ0LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbiYjNDM7ZXJyX2ZyZWVfaHc6XG4gXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcbiBlcnJfZnJlZV9tZW06XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuQEAgLTI4NDYsNiAmIzQzOzI4NTEsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbiBcbiYjNDM7XHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi5hNzFjODA1ODgwODZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTYxLDYgJiM0Mzs2Miw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCAmIzQzOzE2MDQsMzQyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLCBUQ1xuJiM0MzsgKiBtYXBwaW5ncywgYW5kIHRoZSByYXRlLWxpbWl0IGZsYWcuIFVzZWQgb24gZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duXG4mIzQzOyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGx2bCwgaWR4O1xuJiM0MztcbiYjNDM7XHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZVt0eHFdO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4mIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4mIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcbiYjNDM7ICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxuJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuJiM0MztcdFx0ICAgIFwmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdGlmIChyYXRlX2xpbWl0KVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpbnQgZG93bl9lcnI7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XHRcdGlmIChkb3duX2VycilcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBkb3duX2Vycik7XG4mIzQzO1x0XHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXG4mIzQzO1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcbiYjNDM7e1xuJiM0MztcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJhdGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRib29sIGhhZF9tcXByaW8gPSAhIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZG93bl9lcnIsIGVycjtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG93bl9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghcW9wdC1cdTAwM2VodylcbiYjNDM7XHRcdHJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlmX3VwKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1xcHJpby1cdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cJiMzNDssIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcW9wdC1cdTAwM2Vjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHR4cSBcdTAwM2U9IG5ldGRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcbiYjNDM7XHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuJiM0MztcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbiYjNDM7XG4mIzQzO1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuJiM0MztcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuJiM0MztcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4mIzQzO1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykmIzQzOyYjNDM7O1xuQEAgLTE3MjksMTEgJiM0MzsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbiYjNDM7XHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7SFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiAmIzQzOzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xuIFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XG4mIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA0OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGRldmljZXMuIFRoaXMgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODdhNDY5Njc2ZjgyOTkyNTA1OTdlODFmZDI1MWM0NzkwNDU5MTUxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDA0OjM5OjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLAogCQkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpCiYjNDM7CWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCmluZGV4IGNhNzNhOTRkYjc5NDMuLmMyYjY0YTQ4MjAzNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCkBAIC02MTQsNiAmIzQzOzYxNCwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogfQogRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsCiYjNDM7CQkgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sCiYjNDM7CQkgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwlyZXEtJmd0O251bV9yZWdzID0gY250OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVxLSZndDtyZWdbaV0gPSByZWdfYWRkcltpXTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW2ldID0gcmVnX3ZhbFtpXTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwl1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwlpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNtcSA9IHBmdmYtJmd0O2h3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoY250ICZsdDsgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJCWNudCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNudCkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGVyciwgc21xLCBuID0gMDsKJiM0MzsJdTY0IHJlZ19hZGRyWzJdOwomIzQzOwl1NjQgcmVnX3ZhbFsyXTsKJiM0MzsJdTY0IHJhdGU7CiYjNDM7CiYjNDM7CWlmICghbWF4cmF0ZSAmYW1wOyZhbXA7ICFtaW5yYXRlKSB7CiYjNDM7CQlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CQlyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFswXSA9IDA7CiYjNDM7CQlyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFsxXSA9IDA7CiYjNDM7CQlyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CiYjNDM7CS8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc28KJiM0MzsJICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWAomIzQzOwkgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzCiYjNDM7CSAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYQomIzQzOwkgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGEKJiM0MzsJICogaGFyZHdhcmUgY2FwLgomIzQzOwkgKgomIzQzOwkgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLAomIzQzOwkgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvbgomIzQzOwkgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuCiYjNDM7CSAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwlpZiAobWF4cmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBuOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYykKIHsKIAl1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdOwpAQCAtNjUwLDcgJiM0Mzs3ODYsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3IKIAkJCQkJCSh1NjQpaHctJmd0O3NtcV9saW5rX3R5cGUpOwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKIAkJLyogTURRIGNvbmZpZyAqLwotCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc4LDYgJiM0Mzs5MTgsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpCiYjNDM7CQlyZXEtJmd0O3NjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CiAJcmMgPSBvdHgyX3N5bmNfbWJveF9tc2coJmFtcDtwZnZmLSZndDttYm94KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKaW5kZXggZWVjZWU2MTJiN2IyYy4uZGYxNzVmYjE0OTUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgKQEAgLTUxMiw5ICYjNDM7NTEyLDE0IEBAIHN0cnVjdCBvdHgyX25pYyB7CiAjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVECQkgQklUX1VMTCgxOCkKICNkZWZpbmUgT1RYMl9GTEFHX1BPUlRfVVAJCQlCSVRfVUxMKDE5KQogI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVECQlCSVRfVUxMKDIwKQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRAlCSVRfVUxMKDIxKQogCXU2NAkJCWZsYWdzOwogCXU2NAkJCSpjcV9vcF9hZGRyOwogCiYjNDM7CXUzMgkJCW1xcHJpb19mbGFnczsKJiM0MzsJdTY0CQkJKm1xcHJpb19taW5fcmF0ZTsKJiM0MzsJdTY0CQkJKm1xcHJpb19tYXhfcmF0ZTsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtMTI0Niw2ICYjNDM7MTI1MSwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggZjExMGRmYTQyMzYwNS4uNjc2Zjc4ZDhmYjM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmICgocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgJmFtcDsmYW1wOyBwZmMtJmd0O3BmY19lbikgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsCiYjNDM7CQkJICAgJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJb2xkX3BmY19lbiA9IHBmdmYtJmd0O3BmY19lbjsKIAlwZnZmLSZndDtwZmNfZW4gPSBwZmMtJmd0O3BmY19lbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCmluZGV4IGEwMzQwZjM0MjJiZjkuLjUwYTMxZTQ0MTlmZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmICgocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgKGNoYW5uZWwtJmd0O3R4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnR4X3F1ZXVlcyB8fAomIzQzOwkgICAgIGNoYW5uZWwtJmd0O3J4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnJ4X3F1ZXVlcykpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi5kMzUzM2I3YjVmOWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTAgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfaHc7CiYjNDM7CiAJLyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IHBmLSZndDtody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHsKIAkJY3FfcG9sbCA9ICZhbXA7cXNldC0mZ3Q7bmFwaVtxaWR4XTsKQEAgLTIxNDAsNiAmIzQzOzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZnJlZV9pcnEodmVjLCBwZik7CiBlcnJfZGlzYWJsZV9uYXBpOgogCW90eDJfZGlzYWJsZV9uYXBpKHBmKTsKJiM0MztlcnJfZnJlZV9odzoKIAlvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTsKIGVycl9mcmVlX21lbToKIAlvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpOwpAQCAtMjg0Niw2ICYjNDM7Mjg1MSwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi0mZ3Q7bmV0ZGV2KTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nOwogCiYjNDM7CWlmIChwcm9nICZhbXA7JmFtcDsgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsCiYjNDM7CQkJICAgJiMzNDtYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb2cgJmFtcDsmYW1wOyBkZXYtJmd0O210dSAmZ3Q7IE1BWF9YRFBfTVRVKSB7CiAJCW5ldGRldl93YXJuKGRldiwgJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKaW5kZXggMDM5ZmQ0N2ViZjUyMi4uYTcxYzgwNTg4MDg2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfbWlycmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y192bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NuMTBrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtvdHgyX2NvbW1vbi5oJiMzNDsKQEAgLTYxLDYgJiM0Mzs2Miw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJCSpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMICZsdDsmbHQ7ICgqYnVyc3RfZXhwIC0gNykpOwogCQl9CiAJfSBlbHNlIHsKJiM0MzsJCS8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvbgomIzQzOwkJICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LgomIzQzOwkJICovCiAJCSpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7CiAJCSpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTsKIAl9CkBAIC0xNjAwLDE0ICYjNDM7MTYwNCwzNDIgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSAgbmljLCBuaWMsIGluZ3Jlc3MpOwogfQogCiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsIFRDCiYjNDM7ICogbWFwcGluZ3MsIGFuZCB0aGUgcmF0ZS1saW1pdCBmbGFnLiBVc2VkIG9uIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93bgomIzQzOyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlKTsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19mbGFncyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJaW50IGx2bCwgaWR4OwomIzQzOwomIzQzOwlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHR4cSA9IDA7IHR4cSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlW3R4cV07CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV07CiYjNDM7CiYjNDM7CQlpZiAoIW1pbl9yYXRlICZhbXA7JmFtcDsgIW1heF9yYXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLAomIzQzOwkJCQkJCSAgIG1heF9yYXRlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHR4cSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW8KJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSkKJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy4KJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzCiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodAomIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGUKJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKG5ldGRldiwKJiM0MzsJCSAgICAmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQ7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX29wZW4obmV0ZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaW50IGRvd25fZXJyOwomIzQzOwomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQlkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7CiYjNDM7CQlpZiAoZG93bl9lcnIpCiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIGRvd25fZXJyKTsKJiM0MzsJCS8qIENhbGxlciBob2xkcyBuZXRkZXYvUlROTCBsb2NrOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4gKi8KJiM0MzsJCW5ldGlmX2Nsb3NlKG5ldGRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudCkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSB8fCBxY291bnQgJmx0Oz0gMSkKJiM0MzsJCXJldHVybiByYXRlOwomIzQzOwomIzQzOwlyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWJvb2wgaGFkX21xcHJpbyA9ICEhKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsKJiM0MzsJLyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi8KJiM0MzsJaWYgKCFoYWRfbXFwcmlvKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsKJiM0MzsJaWYgKGlmX3VwKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZG93bl9lcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgdGMsIHR4cSwgZXJyLCBpOwomIzQzOwomIzQzOwlpZiAoIXFvcHQtJmd0O2h3KQomIzQzOwkJcmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CiYjNDM7CWlmICghaWZfdXApIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7c2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcbiYjMzQ7LCBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtJmd0O3BkZXYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3BmY19lbikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlcykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtudW1fdGMsIHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlcyAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFvcHQtJmd0O2NvdW50W3RjXTsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh0eHEgJmd0Oz0gbmV0ZGV2LSZndDtyZWFsX251bV90eF9xdWV1ZXMpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzID0gbXFwcmlvLSZndDtmbGFnczsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQkvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFEKJiM0MzsJCSAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZQomIzQzOwkJICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLgomIzQzOwkJICovCiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdLAomIzQzOwkJCQkJCQkgICAgICBxY291bnQpOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tJmd0O21heF9yYXRlW3RjXSwKJiM0MzsJCQkJCQkJICAgICAgcWNvdW50KTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcbiYjMzQ7LAomIzQzOwkJCQkgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsKJiM0MzsJCQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwKJiM0MzsJCQkJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LSZndDtjb3VudFtpXSwgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CW90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwczsKJiM0MzsKJiM0MzsJaWYgKGJhc2UtJmd0O3R5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljYXBzID0gYmFzZS0mZ3Q7Y2FwczsKJiM0MzsJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCSAgdm9pZCAqdHlwZV9kYXRhKQogewogCXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1FVRVJZX0NBUFM6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9CTE9DSzoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfSFRCOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwppbmRleCA2OWMwOTExZTI4ZTkxLi4wZmE1YzY1ZDYyMjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLAogCS8qIGNvbmZpZ3VyZSBQSVIgKi8KIAltYXhyYXRlID0gKG5vZGUtJmd0O3JhdGUgJmd0OyBub2RlLSZndDtjZWlsKSA/IG5vZGUtJmd0O3JhdGUgOiBub2RlLSZndDtjZWlsOwogCiYjNDM7CS8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhbgomIzQzOwkgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLgomIzQzOwkgKi8KIAljZmctJmd0O3JlZ3ZhbFsqbnVtX3JlZ3NdID0KIAkJb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTsKIAkoKm51bV9yZWdzKSYjNDM7JiM0Mzs7CkBAIC0xNzI5LDExICYjNDM7MTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKQogCW90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTsKIH0KIAomIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpCiB7CiAJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJlczsKIAomIzQzOwlpZiAoKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGh0Yi0mZ3Q7Y29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoaHRiLSZndDtjb21tYW5kKSB7CiAJY2FzZSBUQ19IVEJfQ1JFQVRFOgogCQlyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLSZndDtwYXJlbnRfY2xhc3NpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAppbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7CiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTsKIAogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTsKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwogaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTgKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIE9jdGVvblRYMiBtcXByaW8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSBoYXZlIHRoaXMgcGF0Y2ggdGhhdCBhZGRzIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IHRvIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLiBJdCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBydnVfbml4LmNgLCBgb3R4Ml9jb21tb24uY2AsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gSSBhY3R1YWxseSBmdXp6IHRoaXMgdGhpbmc/JiMzNDsgVGhhdCBpcywgY2FuIEkgcmVhY2ggdGhpcyBjb2RlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8KClRoZSBpbnN0cnVjdGlvbnMgZ2l2ZSBtZSBzb21lIGd1aWRhbmNlOiBsb29rIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgKnBoeXNpY2FsKiBoYXJkd2FyZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBPY3Rlb25UWDIgaXMgYSBNYXJ2ZWxsICpoYXJkd2FyZSogTklDLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGNvdWxkIGJlIG91dCBvZiByZWFjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgZXZlbiAqYW55KiBlbXVsYXRpb24gb3IgdmlydHVhbGl6YXRpb24gc3VwcG9ydCBmb3IgaXQuCgpVc3VhbGx5LCBkcml2ZXJzIHVuZGVyIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MmAgc2NyZWFtcyAmIzM0O3BoeXNpY2FsIGhhcmR3YXJlJiMzNDsgdG8gbWUuIEkmIzM5O2QgbG92ZSB0byBxdWlja2x5IHNlYXJjaCB0aGUgUUVNVSBzb3VyY2UgdG8gc2VlIGlmIGBvY3Rlb250eDJgIGlzIG1lbnRpb25lZCwgYnV0IEkgZG9uJiMzOTt0IGhhdmUgdGhhdCBoYW5keS4gTm8gbWF0dGVyLCBJIGNhbiBlbGltaW5hdGUgcG9zc2liaWxpdGllcy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSAqbm90KiBhIHN0YW5kYXJkIGVtdWxhdGVkIGRldmljZSB0aGF0IFFFTVUgcHJvdmlkZXMgb3V0LW9mLXRoZS1ib3guIFRoZXJlJiMzOTtzIHByb2JhYmx5IG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgaXQgd2l0aGluIHRoZSBrZXJuZWwsIGVpdGhlci4gU28gaXQmIzM5O3MgcHJvYmFibHkgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBvbmx5IHdvcmtzIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUuCgpKdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSBpZiBpdCYjMzk7cyBhIFBDSSBkcml2ZXIuIFRoZSBwYXRjaCBtb2RpZmllcyBgb3R4Ml9wZi5jYCwgd2hpY2ggaXMgdGhlIFBGIGRyaXZlciwgYW5kIHRob3NlIHRlbmQgdG8gYmUgUENJLWJhc2VkLiBTbywgSSB3aWxsIGdyZXAgZm9yIGBwY2lfZHJpdmVyYCBpbiBgb3R4Ml9wZi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZmluYWwgcGllY2Ugb2YgZXZpZGVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTIwPXN0YXRpYyB2b2lkIG90eDJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzU4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzU4MzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgb3R4Ml9wZl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1ODQtXHQubmFtZSA9IERSVl9OQU1FLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTMyCgkJCQkJCQlvdXRwdXQ6IDgzCgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSSBEcml2ZXImIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciDigJMgYSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkuIEJlaW5nIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdGVkIGRldmljZSBpbiBzdGFuZGFyZCBRRU1VLCBpbW1lZGlhdGVseSBmbGFncyBhIHByb2JsZW0uIEl0IG1lYW5zIEkgY2FuJiMzOTt0IHJlYWNoIHRoaXMgZHJpdmVyIGluIHRoZSB1c3VhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCB0b29scyBsaWtlIHN5emthbGxlciB1c2UuIFRoYXQgYWxvbmUgc3VnZ2VzdHMgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGZhbHNlLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQuLi4gSSYjMzk7bGwgY2hlY2sgZm9yIGFueSBjbHVlcyBvZiB2aXJ0dWFsIGRldmljZXMuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGRyaXZlciBzb3VyY2UsIEkgc2VlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYCDigJMgdGhhdCYjMzk7cyB0aGUgUEYgZHJpdmVyLiBBaCwgYW5kIHRoZXJlJiMzOTtzIGEgVkYgZHJpdmVyIHRvbywgYG90eDJfdmYuY2AuIEJ1dCBob2xkIG9uLCBib3RoIG9mIHRoZXNlIGRyaXZlcnMsIHRoZSBQRiBhbmQgVkYsIGFyZSBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIHBoeXNpY2FsIFBDSSBkZXZpY2Ugb3IgU1ItSU9WIHZpcnR1YWwgZnVuY3Rpb25zIG9mIHRoYXQgZGV2aWNlLiBUaGlzIGlzIHRoZSBjbGluY2hlci4KClNvLCByZWFsaXN0aWNhbGx5LCB0aGVyZSYjMzk7cyBubyB3YXkgc3l6a2FsbGVyIGNvdWxkIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBpbiBhIHN0YW5kYXJkIFZNIHNldHVwLiBJdCYjMzk7cyBub3QgZGVzaWduZWQgdG8gd29yayB3aXRoIHRob3NlIGtpbmRzIG9mIHBoeXNpY2FsIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4KClRoZXJlZm9yZSwgbXkgZmluYWwgZGV0ZXJtaW5hdGlvbiBpcyBjbGVhcjogSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuIFRoZSBwYXRjaCB0YXJnZXRzIGNvZGUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGluYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSB0eXBpY2FsIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2l0aCBpdHMgcmVsaWFuY2Ugb24gdGhlIHBoeXNpY2FsIFBDSWUgZGV2aWNlLCByZW5kZXJzIGl0IHVuc3VpdGFibGUgZm9yIGZ1enppbmcgaW4gYSBzdGFuZGFyZCBWTSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBkZXZpY2VzLiBUaGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBkZXZpY2VzLiBUaGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDQ6Mzk6NTcuNTAxMDQ0Mjc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MTA4MjQ4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGRldmljZXMuIFRoaXMgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNDozOTo1Ny41MDEwNTAxMzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQxMzg2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4N2E0Njk2NzZmODI5OTI1MDU5N2U4MWZkMjUxYzQ3OTA0NTkxNTFkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDA0OjM5OjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcXG4rXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuaW5kZXggY2E3M2E5NGRiNzk0My4uYzJiNjRhNDgyMDM2MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuQEAgLTYxNCw2ICs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4rb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcXG4rXFx0XFx0c21xID0gcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRpZiAoY250IFxcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0Y250ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNudCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2ZhaWw6XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGVyciwgc21xLCBuID0gMDtcXG4rXFx0dTY0IHJlZ19hZGRyWzJdO1xcbitcXHR1NjQgcmVnX3ZhbFsyXTtcXG4rXFx0dTY0IHJhdGU7XFxuK1xcbitcXHRpZiAoIW1heHJhdGUgXFx1MDAyNlxcdTAwMjYgIW1pbnJhdGUpIHtcXG4rXFx0XFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXHRcXHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzBdID0gMDtcXG4rXFx0XFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFsxXSA9IDA7XFxuK1xcdFxcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0fVxcbitcXG4rXFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXG4rXFx0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xcbitcXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXFxuK1xcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcXG4rXFx0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXFxuK1xcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxcbitcXHQgKiBoYXJkd2FyZSBjYXAuXFxuK1xcdCAqXFxuK1xcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXFxuK1xcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXFxuK1xcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cXG4rXFx0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdGlmIChtYXhyYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcbitcXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRpZiAobWlucmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gbjtcXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxcbiB7XFxuIFxcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XFxuQEAgLTY1MCw3ICs3ODYsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcXG4gXFx0XFx0XFx0XFx0XFx0XFx0KHU2NClody1cXHUwMDNlc21xX2xpbmtfdHlwZSk7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG4gXFx0XFx0LyogTURRIGNvbmZpZyAqL1xcbi1cXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKVxcbitcXHRcXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG5AQCAtNzc4LDYgKzkxOCw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKVxcbitcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcbiBcXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveCk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uZGYxNzVmYjE0OTUxOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuQEAgLTUxMiw5ICs1MTIsMTQgQEAgc3RydWN0IG90eDJfbmljIHtcXG4gI2RlZmluZSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRFxcdFxcdCBCSVRfVUxMKDE4KVxcbiAjZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQXFx0XFx0XFx0QklUX1VMTCgxOSlcXG4gI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXFx0XFx0QklUX1VMTCgyMClcXG4rI2RlZmluZSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEXFx0QklUX1VMTCgyMSlcXG4gXFx0dTY0XFx0XFx0XFx0ZmxhZ3M7XFxuIFxcdHU2NFxcdFxcdFxcdCpjcV9vcF9hZGRyO1xcbiBcXG4rXFx0dTMyXFx0XFx0XFx0bXFwcmlvX2ZsYWdzO1xcbitcXHR1NjRcXHRcXHRcXHQqbXFwcmlvX21pbl9yYXRlO1xcbitcXHR1NjRcXHRcXHRcXHQqbXFwcmlvX21heF9yYXRlO1xcbitcXG4gXFx0c3RydWN0IGJwZl9wcm9nXFx0XFx0KnhkcF9wcm9nO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9xc2V0XFx0cXNldDtcXG4gXFx0c3RydWN0IG90eDJfaHdcXHRcXHRodztcXG5AQCAtMTI0Niw2ICsxMjUxLDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcXG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXFxuK1xcdFxcdFxcdFxcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxcbiBcXHRcXHRcXHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuaW5kZXggZjExMGRmYTQyMzYwNS4uNjc2Zjc4ZDhmYjM0NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbkBAIC00MTMsNiArNDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcXG4gXFx0dTggb2xkX3BmY19lbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICgocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiBwZmMtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRvbGRfcGZjX2VuID0gcGZ2Zi1cXHUwMDNlcGZjX2VuO1xcbiBcXHRwZnZmLVxcdTAwM2VwZmNfZW4gPSBwZmMtXFx1MDAzZXBmY19lbjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjUwYTMxZTQ0MTlmZmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuQEAgLTI4Nyw2ICsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoY2hhbm5lbC1cXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cXHUwMDNlaHcudHhfcXVldWVzIHx8XFxuK1xcdCAgICAgY2hhbm5lbC1cXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cXHUwMDNlaHcucnhfcXVldWVzKSkge1xcbitcXHRcXHRuZXRkZXZfaW5mbyhkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoaWZfdXApXFxuIFxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AoZGV2KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuaW5kZXggYzk5NWYyOTAwODU5MC4uZDM1MzNiN2I1ZjlmMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbkBAIC0xOTgwLDYgKzE5ODAsMTAgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9mcmVlX21lbTtcXG4gXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9odztcXG4rXFxuIFxcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xcbiBcXHRmb3IgKHFpZHggPSAwOyBxaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcXG4gXFx0XFx0Y3FfcG9sbCA9IFxcdTAwMjZxc2V0LVxcdTAwM2VuYXBpW3FpZHhdO1xcbkBAIC0yMTQwLDYgKzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZyZWVfaXJxKHZlYywgcGYpO1xcbiBlcnJfZGlzYWJsZV9uYXBpOlxcbiBcXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XFxuK2Vycl9mcmVlX2h3OlxcbiBcXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcXG4gZXJyX2ZyZWVfbWVtOlxcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbkBAIC0yODQ2LDYgKzI4NTEsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbiBcXG4rXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbXR1IFxcdTAwM2UgTUFYX1hEUF9NVFUpIHtcXG4gXFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbmluZGV4IDAzOWZkNDdlYmY1MjIuLmE3MWM4MDU4ODA4NmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJjbjEway5oXFxcIlxcbiAjaW5jbHVkZSBcXFwib3R4Ml9jb21tb24uaFxcXCJcXG5AQCAtNjEsNiArNjIsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFxcdTAwM2NcXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxcbitcXHRcXHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xcbiBcXHRcXHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XFxuIFxcdH1cXG5AQCAtMTYwMCwxNCArMTYwNCwzNDIgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xcbiB9XFxuIFxcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycywgVENcXG4rICogbWFwcGluZ3MsIGFuZCB0aGUgcmF0ZS1saW1pdCBmbGFnLiBVc2VkIG9uIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93blxcbisgKiAodGMgcWRpc2MgZGVsKSwgbm90IG9uIGludGVybmFsIHN0b3Avb3BlbiBjeWNsZXMgc3VjaCBhcyBNVFUgY2hhbmdlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSk7XFxuK1xcdGRldm1fa2ZyZWUocGZ2Zi1cXHUwMDNlZGV2LCBwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBOVUxMO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0aW50IGx2bCwgaWR4O1xcbitcXG4rXFx0Zm9yIChsdmwgPSAwOyBsdmwgXFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsKyspIHtcXG4rXFx0XFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCsrKSB7XFxuK1xcdFxcdFxcdGlmIChwZnZmLVxcdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKVxcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDtcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0aW50IHR4cSwgZXJyO1xcbitcXG4rXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAodHhxID0gMDsgdHhxIFxcdTAwM2MgcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSsrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXTtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19mbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IHBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdO1xcbitcXG4rXFx0XFx0aWYgKCFtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiAhbWF4X3JhdGUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBtYXhfcmF0ZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgdHhxLCBlcnIpO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cXG4rICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXFxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxcbisgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXFxuKyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcXG4rICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxcbisgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRuZXRkZXZfaW5mbyhuZXRkZXYsXFxuK1xcdFxcdCAgICBcXFwibXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXFxuK1xcdGlmIChyYXRlX2xpbWl0KVxcbitcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xcbitcXG4rXFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGludCBkb3duX2VycjtcXG4rXFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XFxuK1xcdFxcdGlmIChkb3duX2VycilcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBkb3duX2Vycik7XFxuK1xcdFxcdC8qIENhbGxlciBob2xkcyBuZXRkZXYvUlROTCBsb2NrOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4gKi9cXG4rXFx0XFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcXG4re1xcbitcXHRpZiAoIXJhdGUgfHwgcWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiByYXRlO1xcbitcXG4rXFx0cmV0dXJuIGRpdl91NjQocmF0ZSwgcWNvdW50KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0Ym9vbCBoYWRfbXFwcmlvID0gISEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IGRvd25fZXJyLCBlcnI7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IDA7XFxuK1xcbitcXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xcbitcXHRpZiAoIWhhZF9tcXByaW8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXG4rXFx0aWYgKGlmX3VwKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZG93bl9lcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXFxuXFxcIiwgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXFx1MDAyNnBmdmYtXFx1MDAzZWh3LmNhcF9mbGFnKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocW9wdC1cXHUwMDNlbnVtX3RjIFxcdTAwM2UgcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZW51bV90YywgcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzIFxcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcywgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGZvciAodHhxID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0ICAgICB0eHEgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cXHUwMDNlY291bnRbdGNdOyB0eHErKykge1xcbitcXHRcXHRcXHRpZiAodHhxIFxcdTAwM2U9IG5ldGRldi1cXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19mbGFncyA9IG1xcHJpby1cXHUwMDNlZmxhZ3M7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXFxuK1xcdFxcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxcbitcXHRcXHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBxY291bnQpO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cXHUwMDNlbWF4X3JhdGVbdGNdLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBxY291bnQpO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LVxcdTAwM2VudW1fdGMpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyBpKyspXFxuK1xcdFxcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVxcdTAwM2Vjb3VudFtpXSwgcW9wdC1cXHUwMDNlb2Zmc2V0W2ldKTtcXG4rXFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xcbitcXG4rXFx0aWYgKGJhc2UtXFx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRjYXBzID0gYmFzZS1cXHUwMDNlY2FwcztcXG4rXFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4gXFx0XFx0ICB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgVENfUVVFUllfQ0FQUzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLjBmYTVjNjVkNjIyMTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5AQCAtMTcyOSwxMSArMTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XFxuIH1cXG4gXFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFx0aW50IHJlcztcXG4gXFxuK1xcdGlmICgocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaHRiLVxcdTAwM2Vjb21tYW5kICE9IFRDX0hUQl9ERVNUUk9ZKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChodGItXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdHN3aXRjaCAoaHRiLVxcdTAwM2Vjb21tYW5kKSB7XFxuIFxcdGNhc2UgVENfSFRCX0NSRUFURTpcXG4gXFx0XFx0cmV0dXJuIG90eDJfcW9zX3Jvb3RfYWRkKHBmdmYsIGh0Yi1cXHUwMDNlcGFyZW50X2NsYXNzaWQsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxcbmluZGV4IDIyMWJkMDQzOGY2MDMuLmM3NzdjYzQyZWFjOWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuQEAgLTIzLDYgKzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcXG4gXFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNDozOTo1OC44NTU4NzE5NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTM1NTk4NDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBkZXZpY2VzLiBUaGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODdhNDY5Njc2ZjgyOTkyNTA1OTdlODFmZDI1MWM0NzkwNDU5MTUxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA0OjM5OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4rXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cIixcbitcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IGNhNzNhOTRkYjc5NDMuLmMyYjY0YTQ4MjAzNjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTQsNiArNjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcbitcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdGNudCA9IDA7XG4rXHR9XG4rXG4rXHRpZiAoY250KSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitmYWlsOlxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGVyciwgc21xLCBuID0gMDtcbitcdHU2NCByZWdfYWRkclsyXTtcbitcdHU2NCByZWdfdmFsWzJdO1xuK1x0dTY0IHJhdGU7XG4rXG4rXHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4rXHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFswXSA9IDA7XG4rXHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbMV0gPSAwO1xuK1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHR9XG4rXG4rXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuK1x0aWYgKCFyZXEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuK1xuK1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuK1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuK1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuK1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4rXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbitcdCAqIGhhcmR3YXJlIGNhcC5cbitcdCAqXG4rXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuK1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbitcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbitcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4rXHQgKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdGlmIChtYXhyYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1xuK1x0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdGlmIChtaW5yYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUwLDcgKzc4NiwxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdGVsc2VcbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc4LDYgKzkxOCw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTEyLDkgKzUxMiwxNCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuICNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0IEJJVF9VTEwoMTgpXG4gI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFx0XHRcdEJJVF9VTEwoMTkpXG4gI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXHRcdEJJVF9VTEwoMjApXG4rI2RlZmluZSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEXHRCSVRfVUxMKDIxKVxuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbitcdHU2NFx0XHRcdCptcXByaW9fbWluX3JhdGU7XG4rXHR1NjRcdFx0XHQqbXFwcmlvX21heF9yYXRlO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTEsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjUwYTMxZTQ0MTlmZmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbitcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbitcdFx0bmV0ZGV2X2luZm8oZGV2LFxuK1x0XHRcdCAgICBcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi5kMzUzM2I3YjVmOWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiArMTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbitcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfaHc7XG4rXG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yMTQwLDYgKzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuK2Vycl9mcmVlX2h3OlxuIFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XG4gZXJyX2ZyZWVfbWVtOlxuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbkBAIC0yODQ2LDYgKzI4NTEsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbiBcbitcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbXR1IFx1MDAzZSBNQVhfWERQX01UVSkge1xuIFx0XHRuZXRkZXZfd2FybihkZXYsIFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLmE3MWM4MDU4ODA4NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImNuMTBrLmhcIlxuICNpbmNsdWRlIFwib3R4Ml9jb21tb24uaFwiXG5AQCAtNjEsNiArNjIsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXHUwMDNjXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuK1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbitcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuK1x0XHQgKi9cbiBcdFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcbiBcdFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xuIFx0fVxuQEAgLTE2MDAsMTQgKzE2MDQsMzQyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsIFRDXG4rICogbWFwcGluZ3MsIGFuZCB0aGUgcmF0ZS1saW1pdCBmbGFnLiBVc2VkIG9uIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93blxuKyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuXG4rICovXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUpO1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGx2bCwgaWR4O1xuK1xuK1x0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCsrKSB7XG4rXHRcdFx0aWYgKHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCB0eHEsIGVycjtcbitcbitcdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4rICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxuKyAqIGludGVyZmFjZSBhZG1pbmlzdHJhdGl2ZWx5IGRvd24uXG4rICovXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuK1x0aWYgKHJhdGVfbGltaXQpXG4rXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpbnQgZG93bl9lcnI7XG4rXG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuK1x0XHRpZiAoZG93bl9lcnIpXG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXG5cIixcbitcdFx0XHRcdCAgIGRvd25fZXJyKTtcbitcdFx0LyogQ2FsbGVyIGhvbGRzIG5ldGRldi9SVE5MIGxvY2s7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLiAqL1xuK1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcbit7XG4rXHRpZiAoIXJhdGUgfHwgcWNvdW50IFx1MDAzYz0gMSlcbitcdFx0cmV0dXJuIHJhdGU7XG4rXG4rXHRyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gISEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCk7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZG93bl9lcnIsIGVycjtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSAwO1xuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiBkb3duX2Vycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbitcbitcdGlmICghcW9wdC1cdTAwM2VodylcbitcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4rXG4rXHRpZiAoIWlmX3VwKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cIiwgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXHUwMDI2cGZ2Zi1cdTAwM2Vody5jYXBfZmxhZykpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2VwZmNfZW4pIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcyBcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxuXCIsXG4rXHRcdFx0ICAgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcywgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFvcHQtXHUwMDNlY291bnRbdGNdOyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBuZXRkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4rXHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuK1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXHUwMDNlY291bnRbaV0sIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwOlxuK1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuK1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuK1xuK1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4rXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbitcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4rXHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSsrO1xuQEAgLTE3MjksMTEgKzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcbiB9XG4gXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbitcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgaHRiLVx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4rXHRcdFx0XHQgICBcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XG4gXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA0OjM5OjU4Ljg1NTg3MzI0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3MjY0MzQ0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgdGhlIE9jdGVvblRYMiBtcXByaW8gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJIGhhdmUgdGhpcyBwYXRjaCB0aGF0IGFkZHMgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgdG8gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIuIEl0IHRvdWNoZXMgYSBidW5jaCBvZiBmaWxlczogYHJ2dV9uaXguY2AsIGBvdHgyX2NvbW1vbi5jYCwgYG90eDJfZGNibmwuY2AsIGBvdHgyX2V0aHRvb2wuY2AsIGBvdHgyX3BmLmNgLCBgb3R4Ml90Yy5jYCwgYW5kIGBxb3MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiBJIGFjdHVhbGx5IGZ1enogdGhpcyB0aGluZz9cIiBUaGF0IGlzLCBjYW4gSSByZWFjaCB0aGlzIGNvZGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VP1xuXG5UaGUgaW5zdHJ1Y3Rpb25zIGdpdmUgbWUgc29tZSBndWlkYW5jZTogbG9vayBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkICpwaHlzaWNhbCogaGFyZHdhcmUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBPY3Rlb25UWDIgaXMgYSBNYXJ2ZWxsICpoYXJkd2FyZSogTklDLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGNvdWxkIGJlIG91dCBvZiByZWFjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgZXZlbiAqYW55KiBlbXVsYXRpb24gb3IgdmlydHVhbGl6YXRpb24gc3VwcG9ydCBmb3IgaXQuXG5cblVzdWFsbHksIGRyaXZlcnMgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyYCBzY3JlYW1zIFwicGh5c2ljYWwgaGFyZHdhcmVcIiB0byBtZS4gSSdkIGxvdmUgdG8gcXVpY2tseSBzZWFyY2ggdGhlIFFFTVUgc291cmNlIHRvIHNlZSBpZiBgb2N0ZW9udHgyYCBpcyBtZW50aW9uZWQsIGJ1dCBJIGRvbid0IGhhdmUgdGhhdCBoYW5keS4gTm8gbWF0dGVyLCBJIGNhbiBlbGltaW5hdGUgcG9zc2liaWxpdGllcy4gSXQncyBhbG1vc3QgY2VydGFpbmx5ICpub3QqIGEgc3RhbmRhcmQgZW11bGF0ZWQgZGV2aWNlIHRoYXQgUUVNVSBwcm92aWRlcyBvdXQtb2YtdGhlLWJveC4gVGhlcmUncyBwcm9iYWJseSBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGl0IHdpdGhpbiB0aGUga2VybmVsLCBlaXRoZXIuIFNvIGl0J3MgcHJvYmFibHkgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBvbmx5IHdvcmtzIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUuXG5cbkp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IGlmIGl0J3MgYSBQQ0kgZHJpdmVyLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG90eDJfcGYuY2AsIHdoaWNoIGlzIHRoZSBQRiBkcml2ZXIsIGFuZCB0aG9zZSB0ZW5kIHRvIGJlIFBDSS1iYXNlZC4gU28sIEkgd2lsbCBncmVwIGZvciBgcGNpX2RyaXZlcmAgaW4gYG90eDJfcGYuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZpbmFsIHBpZWNlIG9mIGV2aWRlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA0OjQwOjA3LjU4MjMxMDU3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUwMzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTIwPXN0YXRpYyB2b2lkIG90eDJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzU4MzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgb3R4Ml9wZl9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTg0LVxcdC5uYW1lID0gRFJWX05BTUUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA0OjQwOjA3LjYzMTgxNzY5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1Nzk5OTgwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUENJIERyaXZlcidzIEZ1enphYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciDigJMgYSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkuIEJlaW5nIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdGVkIGRldmljZSBpbiBzdGFuZGFyZCBRRU1VLCBpbW1lZGlhdGVseSBmbGFncyBhIHByb2JsZW0uIEl0IG1lYW5zIEkgY2FuJ3QgcmVhY2ggdGhpcyBkcml2ZXIgaW4gdGhlIHVzdWFsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aGF0IHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHVzZS4gVGhhdCBhbG9uZSBzdWdnZXN0cyBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgZmFsc2UuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0Li4uIEknbGwgY2hlY2sgZm9yIGFueSBjbHVlcyBvZiB2aXJ0dWFsIGRldmljZXMuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGRyaXZlciBzb3VyY2UsIEkgc2VlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYCDigJMgdGhhdCdzIHRoZSBQRiBkcml2ZXIuIEFoLCBhbmQgdGhlcmUncyBhIFZGIGRyaXZlciB0b28sIGBvdHgyX3ZmLmNgLiBCdXQgaG9sZCBvbiwgYm90aCBvZiB0aGVzZSBkcml2ZXJzLCB0aGUgUEYgYW5kIFZGLCBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBwaHlzaWNhbCBQQ0kgZGV2aWNlIG9yIFNSLUlPViB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiB0aGF0IGRldmljZS4gVGhpcyBpcyB0aGUgY2xpbmNoZXIuXG5cblNvLCByZWFsaXN0aWNhbGx5LCB0aGVyZSdzIG5vIHdheSBzeXprYWxsZXIgY291bGQgZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGluIGEgc3RhbmRhcmQgVk0gc2V0dXAuIEl0J3Mgbm90IGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aG9zZSBraW5kcyBvZiBwaHlzaWNhbCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgZGV0ZXJtaW5hdGlvbiBpcyBjbGVhcjogSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gVGhlIHBhdGNoIHRhcmdldHMgY29kZSB0aGF0J3MgZnVuZGFtZW50YWxseSBpbmFjY2Vzc2libGUgdGhyb3VnaCB0aGUgdHlwaWNhbCBmdXp6aW5nIGluZnJhc3RydWN0dXJlLiBUaGlzIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdpdGggaXRzIHJlbGlhbmNlIG9uIHRoZSBwaHlzaWNhbCBQQ0llIGRldmljZSwgcmVuZGVycyBpdCB1bnN1aXRhYmxlIGZvciBmdXp6aW5nIGluIGEgc3RhbmRhcmQgVk0gY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMzIsIk91dHB1dFRva2VucyI6ODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDQ6NDA6MTQuMjExODE3NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgZGV2aWNlcy4gVGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIHBoeXNpY2FsIFBDSWUgZGV2aWNlcy4gVGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA0OjQwOjE0LjIxMTg2MDI1WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7cvb[1] Phase: Running StartedAt: 2026-08-10 04:40:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7cvb[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-10 04:40:27 +0000 UTC FinishedAt: 2026-08-10 04:40:32 +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,}