Name: series-workflowqcrr9 Phase: Failed StartedAt: 2026-08-17 03:35:16 +0000 UTC FinishedAt: 2026-08-17 03:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqcrr9[0] Phase: Succeeded StartedAt: 2026-08-17 03:35:16 +0000 UTC FinishedAt: 2026-08-17 03:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqcrr9[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 03:35:16 +0000 UTC FinishedAt: 2026-08-17 03:50:54 +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+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyYmI1MGQwYTBkMDFlOTRmODViOWIwOWMyNzhjNjdlYTI5YzRjNjMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6NTA6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCAmIzQzOzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxuJiM0MztcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4mIzQzO1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggY2E3M2E5NGRiNzk0My4uZGM5NGIxOTQ3YmEyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNCw2ICYjNDM7NjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuJiM0MztcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuJiM0MztcdFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgaSwgZXJyO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4mIzQzO1xuJiM0MztcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRcdGNudCA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY250KSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuJiM0MztcdHU2NCByZWdfYWRkclsyXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFsyXTtcbiYjNDM7XHR1NjQgcmF0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtYXhyYXRlIFx1MDAyNlx1MDAyNiAhbWlucmF0ZSkge1xuJiM0MztcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMF0gPSAwO1xuJiM0MztcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMV0gPSAwO1xuJiM0MztcdFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XG4mIzQzO1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuJiM0MztcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcbiYjNDM7XHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4mIzQzO1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4mIzQzO1x0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXG4mIzQzO1x0ICogaGFyZHdhcmUgY2FwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogbXFwcmlvIHNldHVwIHJlc3RhcnRzIHRoZSBuZXRkZXYgKG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KSxcbiYjNDM7XHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuJiM0MztcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbiYjNDM7XHQgKiByZWx5aW5nIG9uIHN0YWxlIGhhcmR3YXJlIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRpZiAobWF4cmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHQvKiBDSVImIzQzO1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbiYjNDM7XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0aWYgKG1pbnJhdGUpIHtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRuJiM0MzsmIzQzOztcbiYjNDM7XHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTAsNyAmIzQzOzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRcdC8qIFRPRE86IE5vdCBhbiBtcXByaW8gYnVnIC0gc3RhbGUgVEw0IHRvcG9sb2d5IGlzIGxlZnQgd2hlblxuJiM0MztcdFx0XHQgKiBIVEIgaXMgdG9ybiBkb3duIHdpdGhvdXQgY2xlYXJpbmcgTklYX0FGX1RMNFhfVE9QT0xPR1k7XG4mIzQzO1x0XHRcdCAqIHRoZSBBRiBkb2VzIG5vdCByZXNldCBpdCBvbiBzY2hxIHJlYWxsb2MuIE1RUFJJTyBwYXJlbnRzXG4mIzQzO1x0XHRcdCAqIGV2ZXJ5IE1EUSB1bmRlciBUTDRbMF0gd2l0aCBzY2hlZHVsZSBwcmlvcml0eSAwLCBzbyBhXG4mIzQzO1x0XHRcdCAqIHJldXNlZCBUTDQgY2FuIHJldGFpbiBIVEIgUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlXG4mIzQzO1x0XHRcdCAqIHNvbWUgVFggcXVldWVzIHVudGlsIHRvcG9sb2d5IGlzIHJlcHJvZ3JhbW1lZCBoZXJlIG9yIEhUQlxuJiM0MztcdFx0XHQgKiB0ZWFyZG93biBpcyBmaXhlZCB0byByZXN0b3JlIGRlZmF1bHRzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbkBAIC03NzgsNiAmIzQzOzkyNyw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi42N2Q0YWFlOTQ0MGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNDgzLDYgJiM0Mzs0ODMsMTMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcbiBcdGludCBtZGV2cztcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8ge1xuJiM0MztcdHUzMlx0ZmxhZ3M7XG4mIzQzO1x0dTY0XHQqbWluX3JhdGU7XG4mIzQzO1x0dTY0XHQqbWF4X3JhdGU7XG4mIzQzO1x0Ym9vbFx0cmF0ZV9saW1pdDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG90eDJfbmljIHtcbiBcdHZvaWQgX19pb21lbVx0XHQqcmVnX2Jhc2U7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0Km5ldGRldjtcbkBAIC01MTUsNiAmIzQzOzUyMiwxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbiYjNDM7XHRib29sXHRcdFx0bXFwcmlvX3JlcGxhY2VfcGVuZGluZztcbiYjNDM7XHRib29sXHRcdFx0bXFwcmlvX3NraXBfdGVhcmRvd247XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgJiM0MzsxMjU3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuJiM0MztcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbiYjNDM7XHRcdG5ldGRldl9pbmZvKGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O05vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChpZl91cClcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AoZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuaW5kZXggYzk5NWYyOTAwODU5MC4uMDZjYjQ0ZTcyNjNjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbkBAIC0xOTgwLDYgJiM0MzsxOTgwLDE2IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuJiM0MztcdC8qIFRPRE86IG90eDJfbXFwcmlvX3VwKCkgZmFpbHVyZSBoZXJlIGFib3J0cyB0aGUgZW50aXJlIG5kb19vcGVuKClcbiYjNDM7XHQgKiBwYXRoIGV2ZW4gdGhvdWdoIG1xcHJpb19yYXRlX2xpbWl0IGFuZCB0aGUgcmF0ZSBjYWNoZSByZW1haW4gc2V0LlxuJiM0MztcdCAqIFJvdXRpbmUgaXAgbGluayBzZXQgdXAgb3IgZHJpdmVyIHJlc2V0IHdpdGggYWN0aXZlIG1xcHJpbyBvZmZsb2FkXG4mIzQzO1x0ICogY2FuIGxlYXZlIHRoZSBpbnRlcmZhY2Ugc3R1Y2sgZG93biB1bnRpbCB0aGUgcWRpc2MgaXMgcmVtb3ZlZCBhbmRcbiYjNDM7XHQgKiByZWFwcGxpZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuJiM0MztcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjE0MCw2ICYjNDM7MjE1MCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZyZWVfaXJxKHZlYywgcGYpO1xuIGVycl9kaXNhYmxlX25hcGk6XG4gXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XG4mIzQzO2Vycl9mcmVlX2h3OlxuIFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XG4gZXJyX2ZyZWVfbWVtOlxuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbkBAIC0yODQ2LDYgJiM0MzsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW10dSBcdTAwM2UgTUFYX1hEUF9NVFUpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjJkMDE3NGIzNzRjY2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiAmIzQzOzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvc2NoX2dlbmVyaWMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NuMTBrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtvdHgyX2NvbW1vbi5oXCYjMzQ7XG5AQCAtMzEsNiAmIzQzOzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbiYjNDM7LyogTWluIHBlci1xdWV1ZSBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDIgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFNcdDI1MDAwMFVMTFxuJiM0MzsvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuJiM0MztcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuJiM0MztcdFx0ICovXG4gXHRcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XG4gXHRcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcbiBcdH1cbkBAIC0xNjAwLDE0ICYjNDM7MTYwOSw2MDkgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoKSBoZXJlIGRyb3BzIHRoZSBjb21taXR0ZWQgcmF0ZSBjYWNoZVxuJiM0MztcdCAqIG9uIHRjIHFkaXNjIHJlcGxhY2UgYmVmb3JlIHRoZSBuZXcgbWFwcGluZyBpcyBjb21wbGV0ZS4gU3RhZ2UgdGhlXG4mIzQzO1x0ICogaW5jb21pbmcgcmF0ZXMgc2VwYXJhdGVseSBhbmQgY29tbWl0IG9ubHkgYWZ0ZXIgcmVwbGFjZSBzdWNjZWVkcyBzb1xuJiM0MztcdCAqIGEgZmFpbHVyZSBhZnRlciBuZXRkZXYgcmVzdGFydCBjYW4gcm9sbCBiYWNrIGZyb20gdGhlIHByaW9yIGNhY2hlLlxuJiM0MztcdCAqL1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4mIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4mIzQzOyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4mIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLFxuJiM0MztcdCAqIGFuZCB0aGUgcmF0ZSBjYWNoZSBldmVuIHdoZW4gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKCkgZmFpbHNcbiYjNDM7XHQgKiBwYXJ0d2F5IHRocm91Z2ggdGhlIE1EUSBiYXRjaC4gU29mdHdhcmUgdGhlbiByZXBvcnRzIG9mZmxvYWQgYXNcbiYjNDM7XHQgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlclxuJiM0MztcdCAqIG1xcHJpb191cCgpIG9yIHJlLXNldHVwIGNhbiBzaGFwZSB3aXRoIHRoZSB3cm9uZyBlZmZlY3RpdmUgcmF0ZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0aW50IHR4cSwgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh0eHEgPSAwOyB0eHEgXHUwMDNjIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXG4mIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuJiM0MzsgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93blxuJiM0MzsgKiB3aXRob3V0IGNhbGxpbmcgbmRvX3N0b3AoKSBhZ2FpbiBvbiByZXNvdXJjZXMgYWxyZWFkeSB0b3JuIGRvd24gYnlcbiYjNDM7ICogdGhlIG9wZW4gZXJyb3IgcGF0aC5cbiYjNDM7ICpcbiYjNDM7ICogRG8gbm90IGNhbGwgZGV2X2RlYWN0aXZhdGUoKS9kZXZfYWN0aXZhdGUoKSBoZXJlOiB0aGlzIHJ1bnMgZnJvbVxuJiM0MzsgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZVxuJiM0MzsgKiBkZWFjdGl2YXRlZCBhbmQgbXVzdCBwZXJmb3JtIHRoZSBmaW5hbCBkZXZfYWN0aXZhdGUoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbiYjNDM7XHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuJiM0MztcdFx0ICAgIFwmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdGlmIChyYXRlX2xpbWl0KVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGludCBkb3duX2VycjtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuJiM0MztcdFx0aWYgKGRvd25fZXJyKVxuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGRvd25fZXJyKTtcbiYjNDM7XHRcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xuJiM0MztcdFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXG4mIzQzO1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0XHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cbiYjNDM7XHRcdHNtcF93bWIoKTtcbiYjNDM7XHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbiYjNDM7XHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cbiYjNDM7XHQgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHNcbiYjNDM7XHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4mIzQzO1x0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xuJiM0MztcdCAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0XG4mIzQzO1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4mIzQzO1x0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBuYW1lLCB0YywgcWNvdW50KTtcbiYjNDM7XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XHRpbnQgdGMsIHR4cTtcbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChudW1fdHhxIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG1icHM7XG4mIzQzO1xuJiM0MztcdGlmICghcmF0ZV9ieXRlc19wcylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbiYjNDM7XHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3tcbiYjNDM7XHQvKiBUT0RPOiBtcXByaW8gb2ZmbG9hZCBzZXR1cCBtYXkgY29tcGxldGUgaW4gbmRvX3NldHVwX3RjKCkgYmVmb3JlXG4mIzQzO1x0ICogcWRpc2NfY3JlYXRlKCkgcmVqZWN0cyB0aGUgcmVxdWVzdCAoZm9yIGV4YW1wbGUgVENBX1JBVEUgb24gYVxuJiM0MztcdCAqIFRDUV9GX01RUk9PVCBxZGlzYykuIFJvbGwgYmFjayB0aGUgcHJvZ3JhbW1lZCBNRFEgc2hhcGVycywgbmV0ZGV2XG4mIzQzO1x0ICogVEMgbWFwcGluZywgcmF0ZSBjYWNoZSwgYW5kIG1xcHJpby5yYXRlX2xpbWl0IHRvIHRoZSBwcmlvciBncmFmdGVkXG4mIzQzO1x0ICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHJlamVjdGVkIHZhbHVlcyBhY3RpdmUgd2hpbGUgdGhlXG4mIzQzO1x0ICogb2xkIG1xcHJpbyByZW1haW5zIHJvb3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDttcXByaW86IHJlamVjdGVkIGJlZm9yZSBncmFmdDsgcHJvZ3JhbW1lZCBzaGFwZXJzIGFuZCBUQyBtYXBwaW5nIHJlbWFpbiBhY3RpdmUgd2hpbGUgcHJpb3IgbXFwcmlvIGlzIHN0aWxsIHJvb3RcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2coc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdC8qIFRPRE86IE9uIGZhaWxlZCB0YyBxZGlzYyByZXBsYWNlIHJlc3RvcmUgdGhlIHByaW9yIHJhdGUgY2FjaGUsXG4mIzQzO1x0ICogbmV0ZGV2IFRDIG1hcHBpbmcsIGFuZCBoYXJkd2FyZSBzaGFwZXJzIGZyb20gYSBzbmFwc2hvdCB0YWtlbiBiZWZvcmVcbiYjNDM7XHQgKiByZXByb2dyYW1taW5nIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSB3aGlsZVxuJiM0MztcdCAqIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyB0aGUgZ3JhZnRlZCByb290IHFkaXNjLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSwgb2xkIG1xcHJpbyBzdGlsbCByb290XFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAoZXh0YWNrKVxuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIHRjIHFkaXNjIHJlcGxhY2UgZ3JhZnRzIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBvbGRcbiYjNDM7XHQgKiBvbmUuIG1xcHJpb19za2lwX3RlYXJkb3duIGlzIGFybWVkIGZyb20gVENfUk9PVF9HUkFGVCBzbyB0ZWFyZG93blxuJiM0MztcdCAqIGZyb20gdGhlIHJlcGxhY2VkIHFkaXNjIGlzIGlnbm9yZWQgYWZ0ZXIgdGhlIG5ldyBjb25maWd1cmF0aW9uIGhhc1xuJiM0MztcdCAqIHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBhbmQgc2V0IG1xcHJpb19yYXRlX2xpbWl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fcHJlX2dyYWZ0X3JlamVjdF9tc2cobmV0ZGV2KTtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xuJiM0MztcdGlmICghaGFkX21xcHJpbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaWZfdXApIHtcbiYjNDM7XHRcdGludCBkb3duX2VyciwgZXJyO1xuJiM0MztcbiYjNDM7XHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdHJldHVybiBkb3duX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXG4mIzQzO1x0ICogc3RhdGUgb25seS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4mIzQzO1x0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuJiM0MztcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZfdXApIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwmIzM0OywgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgbWF4X3JhdGUgXHUwMDI2XHUwMDI2IG1pbl9yYXRlIFx1MDAzZSBtYXhfcmF0ZSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCYjMzQ7bWluXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21heFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgZXh0YWNrLCBxb3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBGYWlsdXJlcyBmcm9tIGhlcmUgdGhyb3VnaCB0aGUgZW5kIG9mIGluaXQoKSAoZS5nLiAtRU5PTUVNXG4mIzQzO1x0ICogZnJvbSBvdHgyX21xcHJpb19hbGxvY19jYWNoZSgpLCBtYm94IGVycm9ycyBmcm9tXG4mIzQzO1x0ICogb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKCkgb3Igb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpKVxuJiM0MztcdCAqIHJlYWNoIGNsZWFudXAuIE9uIHRjIHFkaXNjIHJlcGxhY2UgdGhlIG9sZCBtcXByaW8gcmVtYWlucyBncmFmdGVkLFxuJiM0MztcdCAqIHNvIGNsZWFudXAgcmV0dXJucyB3aXRob3V0IHJvbGxpbmcgYmFjayBuZXRkZXYgVEMgbWFwcGluZywgdGhlIHJhdGVcbiYjNDM7XHQgKiBjYWNoZSwgb3IgcGFydGlhbGx5IHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBzaGFwZXJzLiBSZXN0b3JlIHRoZSBwcmlvclxuJiM0MztcdCAqIGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiBjYWxsaW5nIG90eDJfbXFwcmlvX2Rvd24oKSBhbmQgYm91bmNpbmcgdGhlXG4mIzQzO1x0ICogaW50ZXJmYWNlIGEgc2Vjb25kIHRpbWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Lyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmdcbiYjNDM7XHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuJiM0MztcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4mIzQzO1x0ICogbGltaXRzIGluIGhhcmR3YXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4mIzQzO1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbiYjNDM7XHRcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXNcbiYjNDM7XHRcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbGFjaW5nKVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdC8qIENsZWFyIGhhcmR3YXJlIG9mZmxvYWQgb24gdGhpcyByZWplY3RlZCByZXF1ZXN0IHNvIGEgZmFpbGVkIHJlcGxhY2VcbiYjNDM7XHQgKiBkb2VzIG5vdCBsZWF2ZSB0YyByZXBvcnRpbmcgb2ZmbG9hZCBmb3IgZHJpdmVyIHN0YXRlIHRoYXQgd2FzIHRvcm5cbiYjNDM7XHQgKiBkb3duIHdoaWxlIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyBncmFmdGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSAwO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIGV4dGFjayk7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChyb290LVx1MDAzZWNvbW1hbmQpIHtcbiYjNDM7XHRjYXNlIFRDX1JPT1RfR1JBRlQ6XG4mIzQzO1x0XHRpZiAocm9vdC1cdTAwM2VpbmdyZXNzKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuJiM0MztcbiYjNDM7XHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbiYjNDM7XHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uY2YwMDIxNzg4MzU2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuJiM0MztcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuJiM0MztcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4mIzQzO1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykmIzQzOyYjNDM7O1xuQEAgLTE3MjksMTEgJiM0MzsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaHRiLVx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChodGItXHUwMDNlZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHN3aXRjaCAoaHRiLVx1MDAzZWNvbW1hbmQpIHtcbiBcdGNhc2UgVENfSFRCX0NSRUFURTpcbiBcdFx0cmV0dXJuIG90eDJfcW9zX3Jvb3RfYWRkKHBmdmYsIGh0Yi1cdTAwM2VwYXJlbnRfY2xhc3NpZCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbmluZGV4IDIyMWJkMDQzOGY2MDMuLmM3NzdjYzQyZWFjOWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuQEAgLTIzLDYgJiM0MzsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHtcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcbiBcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpO1xuJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyYmI1MGQwYTBkMDFlOTRmODViOWIwOWMyNzhjNjdlYTI5YzRjNjMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDM6NTA6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwpAQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykKJiM0MzsJaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxuJiMzNDssCiYjNDM7CQkJCSAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKaW5kZXggY2E3M2E5NGRiNzk0My4uZGM5NGIxOTQ3YmEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKQEAgLTYxNCw2ICYjNDM7NjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCwKJiM0MzsJCSAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSwKJiM0MzsJCSAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBjbnQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXEtJmd0O3JlZ1tpXSA9IHJlZ19hZGRyW2ldOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbaV0gPSByZWdfdmFsW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CXU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CWludCBlcnIsIHNtcSwgaSwgY250ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldOwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsW2NudF0gPSAwOwomIzQzOwkJY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChjbnQgJmx0OyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwkJY250ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY250KSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZmFpbDoKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgZXJyLCBzbXEsIG4gPSAwOwomIzQzOwl1NjQgcmVnX2FkZHJbMl07CiYjNDM7CXU2NCByZWdfdmFsWzJdOwomIzQzOwl1NjQgcmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFtYXhyYXRlICZhbXA7JmFtcDsgIW1pbnJhdGUpIHsKJiM0MzsJCXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsJCXJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzBdID0gMDsKJiM0MzsJCXJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzFdID0gMDsKJiM0MzsJCXJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsKJiM0MzsJLyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzbwomIzQzOwkgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYCiYjNDM7CSAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnMKJiM0MzsJICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhCiYjNDM7CSAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYQomIzQzOwkgKiBoYXJkd2FyZSBjYXAuCiYjNDM7CSAqCiYjNDM7CSAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksCiYjNDM7CSAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uCiYjNDM7CSAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4KJiM0MzsJICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CWlmIChtYXhyYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CWlmIChtaW5yYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTAsNyAmIzQzOzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCQkvKiBUT0RPOiBOb3QgYW4gbXFwcmlvIGJ1ZyAtIHN0YWxlIFRMNCB0b3BvbG9neSBpcyBsZWZ0IHdoZW4KJiM0MzsJCQkgKiBIVEIgaXMgdG9ybiBkb3duIHdpdGhvdXQgY2xlYXJpbmcgTklYX0FGX1RMNFhfVE9QT0xPR1k7CiYjNDM7CQkJICogdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYy4gTVFQUklPIHBhcmVudHMKJiM0MzsJCQkgKiBldmVyeSBNRFEgdW5kZXIgVEw0WzBdIHdpdGggc2NoZWR1bGUgcHJpb3JpdHkgMCwgc28gYQomIzQzOwkJCSAqIHJldXNlZCBUTDQgY2FuIHJldGFpbiBIVEIgUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlCiYjNDM7CQkJICogc29tZSBUWCBxdWV1ZXMgdW50aWwgdG9wb2xvZ3kgaXMgcmVwcm9ncmFtbWVkIGhlcmUgb3IgSFRCCiYjNDM7CQkJICogdGVhcmRvd24gaXMgZml4ZWQgdG8gcmVzdG9yZSBkZWZhdWx0cy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJfQomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc4LDYgJiM0Mzs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwogCXJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKCZhbXA7cGZ2Zi0mZ3Q7bWJveCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCmluZGV4IGVlY2VlNjEyYjdiMmMuLjY3ZDRhYWU5NDQwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCkBAIC00ODMsNiAmIzQzOzQ4MywxMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEgewogCWludCBtZGV2czsKIH07CiAKJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8gewomIzQzOwl1MzIJZmxhZ3M7CiYjNDM7CXU2NAkqbWluX3JhdGU7CiYjNDM7CXU2NAkqbWF4X3JhdGU7CiYjNDM7CWJvb2wJcmF0ZV9saW1pdDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IG90eDJfbmljIHsKIAl2b2lkIF9faW9tZW0JCSpyZWdfYmFzZTsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0ZGV2OwpAQCAtNTE1LDYgJiM0Mzs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHsKIAl1NjQJCQlmbGFnczsKIAl1NjQJCQkqY3Ffb3BfYWRkcjsKIAomIzQzOwlzdHJ1Y3Qgb3R4Ml9tcXByaW8JbXFwcmlvOwomIzQzOwlib29sCQkJbXFwcmlvX3JlcGxhY2VfcGVuZGluZzsKJiM0MzsJYm9vbAkJCW1xcHJpb19za2lwX3RlYXJkb3duOwomIzQzOwogCXN0cnVjdCBicGZfcHJvZwkJKnhkcF9wcm9nOwogCXN0cnVjdCBvdHgyX3FzZXQJcXNldDsKIAlzdHJ1Y3Qgb3R4Ml9odwkJaHc7CkBAIC0xMjQ2LDYgJiM0MzsxMjU3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pOwogdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpOwogaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsCiYjNDM7CQkJCSB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSwKIAkJCWludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7CiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwppbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYykKIAl1OCBvbGRfcGZjX2VuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsgcGZjLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCW9sZF9wZmNfZW4gPSBwZnZmLSZndDtwZmNfZW47CiAJcGZ2Zi0mZ3Q7cGZjX2VuID0gcGZjLSZndDtwZmNfZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwppbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgJmFtcDsmYW1wOwomIzQzOwkgICAgKGNoYW5uZWwtJmd0O3R4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnR4X3F1ZXVlcyB8fAomIzQzOwkgICAgIGNoYW5uZWwtJmd0O3J4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnJ4X3F1ZXVlcykpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi4wNmNiNDRlNzI2M2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTYgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CS8qIFRPRE86IG90eDJfbXFwcmlvX3VwKCkgZmFpbHVyZSBoZXJlIGFib3J0cyB0aGUgZW50aXJlIG5kb19vcGVuKCkKJiM0MzsJICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC4KJiM0MzsJICogUm91dGluZSBpcCBsaW5rIHNldCB1cCBvciBkcml2ZXIgcmVzZXQgd2l0aCBhY3RpdmUgbXFwcmlvIG9mZmxvYWQKJiM0MzsJICogY2FuIGxlYXZlIHRoZSBpbnRlcmZhY2Ugc3R1Y2sgZG93biB1bnRpbCB0aGUgcWRpc2MgaXMgcmVtb3ZlZCBhbmQKJiM0MzsJICogcmVhcHBsaWVkLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV9odzsKJiM0MzsKIAkvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi8KIAlmb3IgKHFpZHggPSAwOyBxaWR4ICZsdDsgcGYtJmd0O2h3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykgewogCQljcV9wb2xsID0gJmFtcDtxc2V0LSZndDtuYXBpW3FpZHhdOwpAQCAtMjE0MCw2ICYjNDM7MjE1MCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmcmVlX2lycSh2ZWMsIHBmKTsKIGVycl9kaXNhYmxlX25hcGk6CiAJb3R4Ml9kaXNhYmxlX25hcGkocGYpOwomIzQzO2Vycl9mcmVlX2h3OgogCW90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpOwogZXJyX2ZyZWVfbWVtOgogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CkBAIC0yODQ2LDYgJiM0MzsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLSZndDtuZXRkZXYpOwogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7CiAKJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBwZi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChwcm9nICZhbXA7JmFtcDsgZGV2LSZndDttdHUgJmd0OyBNQVhfWERQX01UVSkgewogCQluZXRkZXZfd2FybihkZXYsICYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLjJkMDE3NGIzNzRjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE2MDAsMTQgJiM0MzsxNjA5LDYwOSBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICBuaWMsIG5pYywgaW5ncmVzcyk7CiB9CiAKJiM0MzsvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi8KJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWluX3JhdGUpOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwomIzQzOwkvKiBUT0RPOiBvdHgyX21xcHJpb19mcmVlX2NhY2hlKCkgaGVyZSBkcm9wcyB0aGUgY29tbWl0dGVkIHJhdGUgY2FjaGUKJiM0MzsJICogb24gdGMgcWRpc2MgcmVwbGFjZSBiZWZvcmUgdGhlIG5ldyBtYXBwaW5nIGlzIGNvbXBsZXRlLiBTdGFnZSB0aGUKJiM0MzsJICogaW5jb21pbmcgcmF0ZXMgc2VwYXJhdGVseSBhbmQgY29tbWl0IG9ubHkgYWZ0ZXIgcmVwbGFjZSBzdWNjZWVkcyBzbwomIzQzOwkgKiBhIGZhaWx1cmUgYWZ0ZXIgbmV0ZGV2IHJlc3RhcnQgY2FuIHJvbGwgYmFjayBmcm9tIHRoZSBwcmlvciBjYWNoZS4KJiM0MzsJICovCiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpIHsKJiM0MzsJCW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlOwomIzQzOwlwZnZmLSZndDttcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApOwomIzQzOwlvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycywKJiM0MzsgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvbgomIzQzOyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uCiYjNDM7ICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuCiYjNDM7ICovCiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi0mZ3Q7bmV0ZGV2KSAmYW1wOyZhbXA7CiYjNDM7CSAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKQomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpOwomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbmV0ZGV2X2VycihwZnZmLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwomIzQzOwkvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLAomIzQzOwkgKiBhbmQgdGhlIHJhdGUgY2FjaGUgZXZlbiB3aGVuIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIGZhaWxzCiYjNDM7CSAqIHBhcnR3YXkgdGhyb3VnaCB0aGUgTURRIGJhdGNoLiBTb2Z0d2FyZSB0aGVuIHJlcG9ydHMgb2ZmbG9hZCBhcwomIzQzOwkgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlcgomIzQzOwkgKiBtcXByaW9fdXAoKSBvciByZS1zZXR1cCBjYW4gc2hhcGUgd2l0aCB0aGUgd3JvbmcgZWZmZWN0aXZlIHJhdGVzLgomIzQzOwkgKi8KJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlpbnQgdHhxLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHR4cSA9IDA7IHR4cSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlW3R4cV07CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlW3R4cV07CiYjNDM7CiYjNDM7CQlpZiAoIW1pbl9yYXRlICZhbXA7JmFtcDsgIW1heF9yYXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLAomIzQzOwkJCQkJCSAgIG1heF9yYXRlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHR4cSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW8KJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSkKJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy4KJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzCiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodAomIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duCiYjNDM7ICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5CiYjNDM7ICogdGhlIG9wZW4gZXJyb3IgcGF0aC4KJiM0MzsgKgomIzQzOyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb20KJiM0MzsgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZQomIzQzOyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGwKJiM0MzsJICogbmRvX3N0b3AoKS9uZG9fb3BlbigpIGJvdW5jZSBvbiBldmVyeSBtcXByaW8gY2hhbmdlLgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2luZm8obmV0ZGV2LAomIzQzOwkJICAgICYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fc3RvcChuZXRkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovCiYjNDM7CWlmIChyYXRlX2xpbWl0KQomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlOwomIzQzOwomIzQzOwllcnIgPSBvcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWludCBkb3duX2VycjsKJiM0MzsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwkJZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpOwomIzQzOwkJaWYgKGRvd25fZXJyKQomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICBkb3duX2Vycik7CiYjNDM7CQkvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc28KJiM0MzsJCSAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZQomIzQzOwkJICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4KJiM0MzsJCSAqLwomIzQzOwkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjsKJiM0MzsJCS8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqLwomIzQzOwkJc21wX3dtYigpOwomIzQzOwkJbmV0aWZfY2xvc2UobmV0ZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJCXU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsCiYjNDM7CQkJCQljb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJaWYgKCFyYXRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChxY291bnQgJmx0Oz0gMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoCiYjNDM7CSAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LgomIzQzOwkgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHMKJiM0MzsJICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlcgomIzQzOwkgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDCiYjNDM7CSAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0CiYjNDM7CSAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2RlcwomIzQzOwkgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS4KJiM0MzsJICovCiYjNDM7CW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJICAgJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcbiYjMzQ7LAomIzQzOwkJICAgbmFtZSwgdGMsIHFjb3VudCk7CiYjNDM7CU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlcyYjMzQ7LAomIzQzOwkJCSAgICAgICBuYW1lLCB0YywgcWNvdW50KTsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHE7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBudW1fdHhxKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBxb3B0LSZndDtudW1fdGMsIG51bV90eHEpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG51bV90eHEgJmd0OyBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldSYjMzQ7LAomIzQzOwkJCQkgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodHhxICZndDs9IG51bV90eHEpIHsKJiM0MzsJCQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxuJiMzNDssCiYjNDM7CQkJCQkgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXUmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKQomIzQzO3sKJiM0MzsJdTY0IG1icHM7CiYjNDM7CiYjNDM7CWlmICghcmF0ZV9ieXRlc19wcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmbHQ7IE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IGRpdl91NjQoVTY0X01BWCwgOCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTsKJiM0MzsJcmV0dXJuIGlsb2cyKG1icHMgLyAyKSAmbHQ7PSBNQVhfUkFURV9FWFBPTkVOVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fcHJlX2dyYWZ0X3JlamVjdF9tc2coc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKJiM0Mzt7CiYjNDM7CS8qIFRPRE86IG1xcHJpbyBvZmZsb2FkIHNldHVwIG1heSBjb21wbGV0ZSBpbiBuZG9fc2V0dXBfdGMoKSBiZWZvcmUKJiM0MzsJICogcWRpc2NfY3JlYXRlKCkgcmVqZWN0cyB0aGUgcmVxdWVzdCAoZm9yIGV4YW1wbGUgVENBX1JBVEUgb24gYQomIzQzOwkgKiBUQ1FfRl9NUVJPT1QgcWRpc2MpLiBSb2xsIGJhY2sgdGhlIHByb2dyYW1tZWQgTURRIHNoYXBlcnMsIG5ldGRldgomIzQzOwkgKiBUQyBtYXBwaW5nLCByYXRlIGNhY2hlLCBhbmQgbXFwcmlvLnJhdGVfbGltaXQgdG8gdGhlIHByaW9yIGdyYWZ0ZWQKJiM0MzsJICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHJlamVjdGVkIHZhbHVlcyBhY3RpdmUgd2hpbGUgdGhlCiYjNDM7CSAqIG9sZCBtcXByaW8gcmVtYWlucyByb290LgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkgICAmIzM0O21xcHJpbzogcmVqZWN0ZWQgYmVmb3JlIGdyYWZ0OyBwcm9ncmFtbWVkIHNoYXBlcnMgYW5kIFRDIG1hcHBpbmcgcmVtYWluIGFjdGl2ZSB3aGlsZSBwcmlvciBtcXByaW8gaXMgc3RpbGwgcm9vdFxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2coc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CS8qIFRPRE86IE9uIGZhaWxlZCB0YyBxZGlzYyByZXBsYWNlIHJlc3RvcmUgdGhlIHByaW9yIHJhdGUgY2FjaGUsCiYjNDM7CSAqIG5ldGRldiBUQyBtYXBwaW5nLCBhbmQgaGFyZHdhcmUgc2hhcGVycyBmcm9tIGEgc25hcHNob3QgdGFrZW4gYmVmb3JlCiYjNDM7CSAqIHJlcHJvZ3JhbW1pbmcgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlIHdoaWxlCiYjNDM7CSAqIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyB0aGUgZ3JhZnRlZCByb290IHFkaXNjLgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxuJiMzNDspOwomIzQzOwlpZiAoZXh0YWNrKQomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3QmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJYm9vbCBoYWRfbXFwcmlvID0gcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQ7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CiYjNDM7CS8qIHRjIHFkaXNjIHJlcGxhY2UgZ3JhZnRzIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBvbGQKJiM0MzsJICogb25lLiBtcXByaW9fc2tpcF90ZWFyZG93biBpcyBhcm1lZCBmcm9tIFRDX1JPT1RfR1JBRlQgc28gdGVhcmRvd24KJiM0MzsJICogZnJvbSB0aGUgcmVwbGFjZWQgcWRpc2MgaXMgaWdub3JlZCBhZnRlciB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gaGFzCiYjNDM7CSAqIHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBhbmQgc2V0IG1xcHJpb19yYXRlX2xpbWl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duKSB7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlOwomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHsKJiM0MzsJCW90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKG5ldGRldik7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqLwomIzQzOwlpZiAoIWhhZF9tcXByaW8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGlmX3VwKSB7CiYjNDM7CQlpbnQgZG93bl9lcnIsIGVycjsKJiM0MzsKJiM0MzsJCWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJcmV0dXJuIGRvd25fZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlCiYjNDM7CSAqIHN0YXRlIG9ubHkuCiYjNDM7CSAqLwomIzQzOwlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tJmd0O2V4dGFjazsKJiM0MzsJYm9vbCByZXBsYWNpbmcgPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IHRjLCB0eHEsIGVyciwgaTsKJiM0MzsKJiM0MzsJaWYgKCFxb3B0LSZndDtodykKJiM0MzsJCXJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwomIzQzOwlpZiAoIWlmX3VwKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxuJiMzNDssIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCAmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4JiMzNDssCiYjNDM7CQkJCSAgICAgICBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi0mZ3Q7cGRldikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3BmY19lbikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7eGRwX3Byb2cpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlpZiAobWluX3JhdGUgJmFtcDsmYW1wOyBtYXhfcmF0ZSAmYW1wOyZhbXA7IG1pbl9yYXRlICZndDsgbWF4X3JhdGUpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcbiYjMzQ7LAomIzQzOwkJCQkgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHsKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywgJiMzNDttaW4mIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKSB7CiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsCiYjNDM7CQkJCQkJCSAgIHFjb3VudCwgdGMsICYjMzQ7bWF4JiMzNDspOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWluX3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXG4mIzM0OywKJiM0MzsJCQkJICAgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHMmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFRPRE86IEZhaWx1cmVzIGZyb20gaGVyZSB0aHJvdWdoIHRoZSBlbmQgb2YgaW5pdCgpIChlLmcuIC1FTk9NRU0KJiM0MzsJICogZnJvbSBvdHgyX21xcHJpb19hbGxvY19jYWNoZSgpLCBtYm94IGVycm9ycyBmcm9tCiYjNDM7CSAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSkKJiM0MzsJICogcmVhY2ggY2xlYW51cC4gT24gdGMgcWRpc2MgcmVwbGFjZSB0aGUgb2xkIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQsCiYjNDM7CSAqIHNvIGNsZWFudXAgcmV0dXJucyB3aXRob3V0IHJvbGxpbmcgYmFjayBuZXRkZXYgVEMgbWFwcGluZywgdGhlIHJhdGUKJiM0MzsJICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3IKJiM0MzsJICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgb3R4Ml9tcXByaW9fZG93bigpIGFuZCBib3VuY2luZyB0aGUKJiM0MzsJICogaW50ZXJmYWNlIGEgc2Vjb25kIHRpbWUuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmcKJiM0MzsJICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXcKJiM0MzsJICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGUKJiM0MzsJICogbGltaXRzIGluIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IG1xcHJpby0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJLyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRCiYjNDM7CQkgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWUKJiM0MzsJCSAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXMKJiM0MzsJCSAqIGFyZSByZWplY3RlZCBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XG4mIzM0OywKJiM0MzsJCQkJICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CiYjNDM7CQkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsCiYjNDM7CQkJCQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC0mZ3Q7bnVtX3RjKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHFvcHQtJmd0O251bV90YzsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC0mZ3Q7Y291bnRbaV0sIHFvcHQtJmd0O29mZnNldFtpXSk7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTOwomIzQzOwomIzQzOwlpZiAocmVwbGFjaW5nKQomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CS8qIENsZWFyIGhhcmR3YXJlIG9mZmxvYWQgb24gdGhpcyByZWplY3RlZCByZXF1ZXN0IHNvIGEgZmFpbGVkIHJlcGxhY2UKJiM0MzsJICogZG9lcyBub3QgbGVhdmUgdGMgcmVwb3J0aW5nIG9mZmxvYWQgZm9yIGRyaXZlciBzdGF0ZSB0aGF0IHdhcyB0b3JuCiYjNDM7CSAqIGRvd24gd2hpbGUgdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQuCiYjNDM7CSAqLwomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCW90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIGV4dGFjayk7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJfQomIzQzOwlvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KQomIzQzO3sKJiM0MzsJc3dpdGNoIChyb290LSZndDtjb21tYW5kKSB7CiYjNDM7CWNhc2UgVENfUk9PVF9HUkFGVDoKJiM0MzsJCWlmIChyb290LSZndDtpbmdyZXNzKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHsKJiM0MzsJCQlwZnZmLSZndDttcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzOwomIzQzOwomIzQzOwlpZiAoYmFzZS0mZ3Q7dHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwljYXBzLSZndDt2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKIAkJICB2b2lkICp0eXBlX2RhdGEpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfUVVFUllfQ0FQUzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX0JMT0NLOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKaW5kZXggNjljMDkxMWUyOGU5MS4uY2YwMDIxNzg4MzU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwpAQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkvKiBjb25maWd1cmUgUElSICovCiAJbWF4cmF0ZSA9IChub2RlLSZndDtyYXRlICZndDsgbm9kZS0mZ3Q7Y2VpbCkgPyBub2RlLSZndDtyYXRlIDogbm9kZS0mZ3Q7Y2VpbDsKIAomIzQzOwkvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW4KJiM0MzsJICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS4KJiM0MzsJICovCiAJY2ZnLSZndDtyZWd2YWxbKm51bV9yZWdzXSA9CiAJCW90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7CiAJKCpudW1fcmVncykmIzQzOyYjNDM7OwpAQCAtMTcyOSwxMSAmIzQzOzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAlvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7CiB9CiAKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJcmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKQogewogCXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCByZXM7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIGh0Yi0mZ3Q7Y29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoaHRiLSZndDtjb21tYW5kKSB7CiAJY2FzZSBUQ19IVEJfQ1JFQVRFOgogCQlyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLSZndDtwYXJlbnRfY2xhc3NpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAppbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7CiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTsKIAogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTsKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwogaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NzQKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbXFwcmlvIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgc3VwcG9ydCBpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlci4gSXQgYWRkcyBmdW5jdGlvbnMgbGlrZSBgb3R4Ml9zZXR1cF90Y19tcXByaW9gIGFuZCByZWxhdGVkIHN0dWZmLiBTdGFuZGFyZCBzdHVmZiwgc28gZmFyLiBCdXQsIHdhaXQsIEkgbmVlZCB0byBtYWtlIGEgZGVjaXNpb24gYmFzZWQgb24gdGhlc2UgaW5zdHJ1Y3Rpb25zLiBUaGV5IHNheSB0aGF0IGlmIHRoZSBwYXRjaCBpcyAqb25seSogaW4gYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGJ5IFFFTVUsIHRoZW4gaXQmIzM5O3Mgbm90ICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuCgpUaGUgTWFydmVsbCBPY3Rlb25UWDIuLi4geWVhaCwgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHZlbmRvci1zcGVjaWZpYyBOSUMgZHJpdmVyIOKAkyBhIFNtYXJ0TklDLCBpbiBmYWN0LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBodXJkbGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIElmIGl0ICppcyogZW11bGF0ZWQsIHRoZW4gdGhpcyBtaWdodCBiZSBmdXp6YWJsZS4gSWYgbm90Li4uIHByb2JsZW0uCgpJIGRvbiYjMzk7dCAqdGhpbmsqIFFFTVUgZW11bGF0ZXMgdGhlIE9jdGVvblRYMi4gSXQmIzM5O3MgYSBwcmV0dHkgc3BlY2lhbGl6ZWQgcGllY2Ugb2YgaGFyZHdhcmUuIEnigJlkIGxvdmUgdG8gY2hlY2sgdGhlIFFFTVUgc291cmNlIGRpcmVjdGx5LCBidXQgSSBkb27igJl0IGhhdmUgaW1tZWRpYXRlIGFjY2Vzcy4gU2luY2UgSSBzdXNwZWN0IHRoaXMgaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBOSUMsIGxldCYjMzk7cyBjb25maXJtIHRoYXQgaXQmIzM5O3MgYSBQQ0kgZHJpdmVyLCB0byBtYWtlIHRoZSBhc3Nlc3NtZW50LgoKTG9va2luZyBhdCB0aGUgZmlsZSBzdHJ1Y3R1cmUsIGl0JiMzOTtzIGluIGEgcGF0aCB0aGF0IHN1Z2dlc3RzIGl0IGlzLiBMZXQmIzM5O3Mgc2VlLi4uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYC4gT2theSwgdGhhdCAqbG9va3MqIHByb21pc2luZyBmb3IgUENJLiBMZXQmIzM5O3MgZG8gYSBxdWljayBncmVwIGZvciBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAgaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBjb25maXJtIGlmIGl0JiMzOTtzIGEgUENJIGRyaXZlciBhbmQgbGVhZCB0byBhIGRlZmluaXRpdmUgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTk4PXN0YXRpYyBpbnQgX19pbml0IG90eDJfcnZ1cGZfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM2MDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM2MDI6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZvdHgyX3BmX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM2MDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTQzCgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgT2N0ZW9uVFgyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgeWVwLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBzb21ldGhpbmcgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50PyYjMzQ7IEkga25vdyB0aGUgdHlwaWNhbCBuZXR3b3JrIGludGVyZmFjZXMgUUVNVSBjb3ZlcnM6IGUxMDAwLCBlMTAwMGUsIHJ0bDgxMzksIHZpcnRpby1uZXQsIHZteG5ldDMsIGk4MjU1OSwgbmUya19wY2ksIHBjbmV0LCB0dWxpcC4gTm8sIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBPY3Rlb25UWDIgaXNuJiMzOTt0IGluIHRoYXQgbGlzdC4gSXQmIzM5O3MgYSBzcGVjaWFsaXplZCwgdmVuZG9yLXNwZWNpZmljIE5JQyBkcml2ZXIuIFRoZXJlZm9yZSwgaWYgdGhpcyBjb2RlIHJlbGllcyBvbiB0aGF0IGhhcmR3YXJlLCBpdCYjMzk7cyBqdXN0IG5vdCBnb2luZyB0byBiZSByZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IEkmIzM5O20gbGlrZWx5IHRvIGVuY291bnRlciwgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhhdCBtZWFucyBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgd29ydGggdGhlIHRpbWUsIGFuZCBJIHNob3VsZCBzZXQgV29ydGhGdXp6aW5nIHRvIGZhbHNlLgoKQnV0LCBiZWZvcmUgSSBjb21taXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHByb21wdCBmb3IgbW9yZSBjb250ZXh0LiBSaWdodCwgdGhlIHByb21wdCBzdGF0ZXMgcHJldHR5IGNsZWFybHk6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IE1hcnZlbGwgT2N0ZW9uVFgyIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5JQyBkcml2ZXIuIEdpdmVuIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnQgYW5kIHRoZSBmYWN0IHRoYXQgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGl0LCBJJiMzOTttIHJldHVybmluZyBXb3J0aEZ1enppbmc9ZmFsc2UuIE5vIG5lZWQgdG8gc3BlbmQgcmVzb3VyY2VzIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzo1MDoyOS4yNzYxNDgzMzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ0MTcwNjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzo1MDoyOS4yNzYxNTU2NTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTUzNTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJiYjUwZDBhMGQwMWU5NGY4NWI5YjA5YzI3OGM2N2VhMjljNGM2MzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6NTA6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5AQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxcbitcXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xcbitcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5kYzk0YjE5NDdiYTI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5AQCAtNjE0LDYgKzYxNCwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xcbiBcXG4rc3RhdGljIGludFxcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGksIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IGNudDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xcbitcXHRcXHRzbXEgPSBwZnZmLVxcdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdGlmIChjbnQgXFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRjbnQgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY250KSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rZmFpbDpcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xcbitcXHR1NjQgcmVnX2FkZHJbMl07XFxuK1xcdHU2NCByZWdfdmFsWzJdO1xcbitcXHR1NjQgcmF0ZTtcXG4rXFxuK1xcdGlmICghbWF4cmF0ZSBcXHUwMDI2XFx1MDAyNiAhbWlucmF0ZSkge1xcbitcXHRcXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XFxuK1xcdFxcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMF0gPSAwO1xcbitcXHRcXHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzFdID0gMDtcXG4rXFx0XFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHR9XFxuK1xcbitcXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcbitcXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXFxuK1xcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcXG4rXFx0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xcbitcXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcXG4rXFx0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXFxuK1xcdCAqIGhhcmR3YXJlIGNhcC5cXG4rXFx0ICpcXG4rXFx0ICogbXFwcmlvIHNldHVwIHJlc3RhcnRzIHRoZSBuZXRkZXYgKG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KSxcXG4rXFx0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cXG4rXFx0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxcbitcXHQgKiByZWx5aW5nIG9uIHN0YWxlIGhhcmR3YXJlIHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0aWYgKG1heHJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFxuK1xcdC8qIENJUitQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdGlmIChtaW5yYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBuO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXFxuIHtcXG4gXFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcXG5AQCAtNjUwLDcgKzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxcbiBcXHRcXHRcXHRcXHRcXHRcXHQodTY0KWh3LVxcdTAwM2VzbXFfbGlua190eXBlKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbiBcXHRcXHQvKiBNRFEgY29uZmlnICovXFxuLVxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xcbitcXHRcXHRcXHQvKiBUT0RPOiBOb3QgYW4gbXFwcmlvIGJ1ZyAtIHN0YWxlIFRMNCB0b3BvbG9neSBpcyBsZWZ0IHdoZW5cXG4rXFx0XFx0XFx0ICogSFRCIGlzIHRvcm4gZG93biB3aXRob3V0IGNsZWFyaW5nIE5JWF9BRl9UTDRYX1RPUE9MT0dZO1xcbitcXHRcXHRcXHQgKiB0aGUgQUYgZG9lcyBub3QgcmVzZXQgaXQgb24gc2NocSByZWFsbG9jLiBNUVBSSU8gcGFyZW50c1xcbitcXHRcXHRcXHQgKiBldmVyeSBNRFEgdW5kZXIgVEw0WzBdIHdpdGggc2NoZWR1bGUgcHJpb3JpdHkgMCwgc28gYVxcbitcXHRcXHRcXHQgKiByZXVzZWQgVEw0IGNhbiByZXRhaW4gSFRCIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZVxcbitcXHRcXHRcXHQgKiBzb21lIFRYIHF1ZXVlcyB1bnRpbCB0b3BvbG9neSBpcyByZXByb2dyYW1tZWQgaGVyZSBvciBIVEJcXG4rXFx0XFx0XFx0ICogdGVhcmRvd24gaXMgZml4ZWQgdG8gcmVzdG9yZSBkZWZhdWx0cy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbkBAIC03NzgsNiArOTI3LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4gXFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gpO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbmluZGV4IGVlY2VlNjEyYjdiMmMuLjY3ZDRhYWU5NDQwZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbkBAIC00ODMsNiArNDgzLDEzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XFxuIFxcdGludCBtZGV2cztcXG4gfTtcXG4gXFxuK3N0cnVjdCBvdHgyX21xcHJpbyB7XFxuK1xcdHUzMlxcdGZsYWdzO1xcbitcXHR1NjRcXHQqbWluX3JhdGU7XFxuK1xcdHU2NFxcdCptYXhfcmF0ZTtcXG4rXFx0Ym9vbFxcdHJhdGVfbGltaXQ7XFxuK307XFxuK1xcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiBcXHR2b2lkIF9faW9tZW1cXHRcXHQqcmVnX2Jhc2U7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0Km5ldGRldjtcXG5AQCAtNTE1LDYgKzUyMiwxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiBcXHR1NjRcXHRcXHRcXHRmbGFncztcXG4gXFx0dTY0XFx0XFx0XFx0KmNxX29wX2FkZHI7XFxuIFxcbitcXHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cXHRtcXByaW87XFxuK1xcdGJvb2xcXHRcXHRcXHRtcXByaW9fcmVwbGFjZV9wZW5kaW5nO1xcbitcXHRib29sXFx0XFx0XFx0bXFwcmlvX3NraXBfdGVhcmRvd247XFxuK1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dcXHRcXHQqeGRwX3Byb2c7XFxuIFxcdHN0cnVjdCBvdHgyX3FzZXRcXHRxc2V0O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9od1xcdFxcdGh3O1xcbkBAIC0xMjQ2LDYgKzEyNTcsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XFxuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcXG4rXFx0XFx0XFx0XFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXFxuIFxcdFxcdFxcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XFxuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxcbiBcXHR1OCBvbGRfcGZjX2VuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFxcdTAwMjZcXHUwMDI2IHBmYy1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdG9sZF9wZmNfZW4gPSBwZnZmLVxcdTAwM2VwZmNfZW47XFxuIFxcdHBmdmYtXFx1MDAzZXBmY19lbiA9IHBmYy1cXHUwMDNlcGZjX2VuO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuaW5kZXggYTAzNDBmMzQyMmJmOS4uODM3ZDI5MDI0OTgxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5AQCAtMjg3LDYgKzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChjaGFubmVsLVxcdTAwM2V0eF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody50eF9xdWV1ZXMgfHxcXG4rXFx0ICAgICBjaGFubmVsLVxcdTAwM2VyeF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody5yeF9xdWV1ZXMpKSB7XFxuK1xcdFxcdG5ldGRldl9pbmZvKGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChpZl91cClcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RvcChkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi4wNmNiNDRlNzI2M2NmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuQEAgLTE5ODAsNiArMTk4MCwxNiBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfbWVtO1xcbiBcXG4rXFx0LyogVE9ETzogb3R4Ml9tcXByaW9fdXAoKSBmYWlsdXJlIGhlcmUgYWJvcnRzIHRoZSBlbnRpcmUgbmRvX29wZW4oKVxcbitcXHQgKiBwYXRoIGV2ZW4gdGhvdWdoIG1xcHJpb19yYXRlX2xpbWl0IGFuZCB0aGUgcmF0ZSBjYWNoZSByZW1haW4gc2V0LlxcbitcXHQgKiBSb3V0aW5lIGlwIGxpbmsgc2V0IHVwIG9yIGRyaXZlciByZXNldCB3aXRoIGFjdGl2ZSBtcXByaW8gb2ZmbG9hZFxcbitcXHQgKiBjYW4gbGVhdmUgdGhlIGludGVyZmFjZSBzdHVjayBkb3duIHVudGlsIHRoZSBxZGlzYyBpcyByZW1vdmVkIGFuZFxcbitcXHQgKiByZWFwcGxpZWQuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaHc7XFxuK1xcbiBcXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIHBmLVxcdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XFxuIFxcdFxcdGNxX3BvbGwgPSBcXHUwMDI2cXNldC1cXHUwMDNlbmFwaVtxaWR4XTtcXG5AQCAtMjE0MCw2ICsyMTUwLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRmcmVlX2lycSh2ZWMsIHBmKTtcXG4gZXJyX2Rpc2FibGVfbmFwaTpcXG4gXFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xcbitlcnJfZnJlZV9odzpcXG4gXFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XFxuIGVycl9mcmVlX21lbTpcXG4gXFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcXG5AQCAtMjg0Niw2ICsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiBcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcXG4gXFxuK1xcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IHBmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlhEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZW10dSBcXHUwMDNlIE1BWF9YRFBfTVRVKSB7XFxuIFxcdFxcdG5ldGRldl93YXJuKGRldiwgXFxcIkp1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi4yZDAxNzRiMzc0Y2NiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuQEAgLTE2LDYgKzE2LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvc2NoX2dlbmVyaWMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJjbjEway5oXFxcIlxcbiAjaW5jbHVkZSBcXFwib3R4Ml9jb21tb24uaFxcXCJcXG5AQCAtMzEsNiArMzMsMTAgQEBcXG4gXFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcXHRcXHQoLTFVKVxcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1xcdFxcdDhcXG4rLyogTWluIHBlci1xdWV1ZSBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDIgTWJwcykuICovXFxuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFNcXHQyNTAwMDBVTExcXG4rLyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xcbisjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXFx0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcXG4gXFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXFxuQEAgLTYxLDYgKzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxcbiBcXHRcXHRcXHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcXHUwMDNjXFx1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cXG4rXFx0XFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcXG4gXFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xcbiBcXHR9XFxuQEAgLTE2MDAsMTQgKzE2MDksNjA5IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIG5pYywgbmljLCBpbmdyZXNzKTtcXG4gfVxcbiBcXG4rLyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGRldm1fa2ZyZWUocGZ2Zi1cXHUwMDNlZGV2LCBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpO1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gTlVMTDtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuK1xcdC8qIFRPRE86IG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoKSBoZXJlIGRyb3BzIHRoZSBjb21taXR0ZWQgcmF0ZSBjYWNoZVxcbitcXHQgKiBvbiB0YyBxZGlzYyByZXBsYWNlIGJlZm9yZSB0aGUgbmV3IG1hcHBpbmcgaXMgY29tcGxldGUuIFN0YWdlIHRoZVxcbitcXHQgKiBpbmNvbWluZyByYXRlcyBzZXBhcmF0ZWx5IGFuZCBjb21taXQgb25seSBhZnRlciByZXBsYWNlIHN1Y2NlZWRzIHNvXFxuK1xcdCAqIGEgZmFpbHVyZSBhZnRlciBuZXRkZXYgcmVzdGFydCBjYW4gcm9sbCBiYWNrIGZyb20gdGhlIHByaW9yIGNhY2hlLlxcbitcXHQgKi9cXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHJldHVybiBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9zdyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rfVxcbitcXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXFxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXFxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxcbisgKi9cXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRuZXRkZXZfZXJyKHBmdmYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBzb21lIFRYIHF1ZXVlcyBtYXkgcmV0YWluIGJhbmR3aWR0aCBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcbitcXHQvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLFxcbitcXHQgKiBhbmQgdGhlIHJhdGUgY2FjaGUgZXZlbiB3aGVuIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIGZhaWxzXFxuK1xcdCAqIHBhcnR3YXkgdGhyb3VnaCB0aGUgTURRIGJhdGNoLiBTb2Z0d2FyZSB0aGVuIHJlcG9ydHMgb2ZmbG9hZCBhc1xcbitcXHQgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlclxcbitcXHQgKiBtcXByaW9fdXAoKSBvciByZS1zZXR1cCBjYW4gc2hhcGUgd2l0aCB0aGUgd3JvbmcgZWZmZWN0aXZlIHJhdGVzLlxcbitcXHQgKi9cXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXFxuKyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKlxcbisgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tXFxuKyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlXFxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXFxuK1xcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi4gKi9cXG4rXFx0aWYgKHJhdGVfbGltaXQpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpbnQgZG93bl9lcnI7XFxuK1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXHRcXHRpZiAoZG93bl9lcnIpXFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZG93bl9lcnIpO1xcbitcXHRcXHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cXG4rXFx0XFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXFxuK1xcdFxcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRcXHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cXG4rXFx0XFx0c21wX3dtYigpO1xcbitcXHRcXHRuZXRpZl9jbG9zZShuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxcbitcXHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cXG4rXFx0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXFxuK1xcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcXG4rXFx0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xcbitcXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxcbitcXHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcXG4rXFx0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmFtZSwgdGMsIHFjb3VudCk7XFxuK1xcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHUxNiBudW1fdHhxID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcdGludCB0YywgdHhxO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIG51bV90eHEpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG51bV90eHEgXFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdGlmICh0eHEgXFx1MDAzZT0gbnVtX3R4cSkge1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXFxuK3tcXG4rXFx0dTY0IG1icHM7XFxuK1xcbitcXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XFxuK1xcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3tcXG4rXFx0LyogVE9ETzogbXFwcmlvIG9mZmxvYWQgc2V0dXAgbWF5IGNvbXBsZXRlIGluIG5kb19zZXR1cF90YygpIGJlZm9yZVxcbitcXHQgKiBxZGlzY19jcmVhdGUoKSByZWplY3RzIHRoZSByZXF1ZXN0IChmb3IgZXhhbXBsZSBUQ0FfUkFURSBvbiBhXFxuK1xcdCAqIFRDUV9GX01RUk9PVCBxZGlzYykuIFJvbGwgYmFjayB0aGUgcHJvZ3JhbW1lZCBNRFEgc2hhcGVycywgbmV0ZGV2XFxuK1xcdCAqIFRDIG1hcHBpbmcsIHJhdGUgY2FjaGUsIGFuZCBtcXByaW8ucmF0ZV9saW1pdCB0byB0aGUgcHJpb3IgZ3JhZnRlZFxcbitcXHQgKiBjb25maWd1cmF0aW9uIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgcmVqZWN0ZWQgdmFsdWVzIGFjdGl2ZSB3aGlsZSB0aGVcXG4rXFx0ICogb2xkIG1xcHJpbyByZW1haW5zIHJvb3QuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogcmVqZWN0ZWQgYmVmb3JlIGdyYWZ0OyBwcm9ncmFtbWVkIHNoYXBlcnMgYW5kIFRDIG1hcHBpbmcgcmVtYWluIGFjdGl2ZSB3aGlsZSBwcmlvciBtcXByaW8gaXMgc3RpbGwgcm9vdFxcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0LyogVE9ETzogT24gZmFpbGVkIHRjIHFkaXNjIHJlcGxhY2UgcmVzdG9yZSB0aGUgcHJpb3IgcmF0ZSBjYWNoZSxcXG4rXFx0ICogbmV0ZGV2IFRDIG1hcHBpbmcsIGFuZCBoYXJkd2FyZSBzaGFwZXJzIGZyb20gYSBzbmFwc2hvdCB0YWtlbiBiZWZvcmVcXG4rXFx0ICogcmVwcm9ncmFtbWluZyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUgd2hpbGVcXG4rXFx0ICogdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIHRoZSBncmFmdGVkIHJvb3QgcWRpc2MuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxcXFxuXFxcIik7XFxuK1xcdGlmIChleHRhY2spXFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IDA7XFxuK1xcbitcXHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXFxuK1xcdCAqIG9uZS4gbXFwcmlvX3NraXBfdGVhcmRvd24gaXMgYXJtZWQgZnJvbSBUQ19ST09UX0dSQUZUIHNvIHRlYXJkb3duXFxuK1xcdCAqIGZyb20gdGhlIHJlcGxhY2VkIHFkaXNjIGlzIGlnbm9yZWQgYWZ0ZXIgdGhlIG5ldyBjb25maWd1cmF0aW9uIGhhc1xcbitcXHQgKiByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kIHNldCBtcXByaW9fcmF0ZV9saW1pdC5cXG4rXFx0ICovXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93bikge1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xcbitcXHRcXHRvdHgyX21xcHJpb19wcmVfZ3JhZnRfcmVqZWN0X21zZyhuZXRkZXYpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xcbitcXHRpZiAoIWhhZF9tcXByaW8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGlmX3VwKSB7XFxuK1xcdFxcdGludCBkb3duX2VyciwgZXJyO1xcbitcXG4rXFx0XFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0cmV0dXJuIGRvd25fZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBuZG9fc3RvcCgpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlciBUTCBub2RlczsgZHJvcCBzb2Z0d2FyZVxcbitcXHQgKiBzdGF0ZSBvbmx5LlxcbitcXHQgKi9cXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVxcdTAwM2VleHRhY2s7XFxuK1xcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCB0YywgdHhxLCBlcnIsIGk7XFxuK1xcbitcXHRpZiAoIXFvcHQtXFx1MDAzZWh3KVxcbitcXHRcXHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFxuK1xcdGlmICghaWZfdXApIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXFxuXFxcIiwgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFxcdTAwMjZwZnZmLVxcdTAwM2Vody5jYXBfZmxhZykpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cXHUwMDNlcGRldikpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXhkcF9wcm9nKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgbWF4X3JhdGUgXFx1MDAyNlxcdTAwMjYgbWluX3JhdGUgXFx1MDAzZSBtYXhfcmF0ZSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHFjb3VudCwgdGMsIFxcXCJtaW5cXFwiKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1heFxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cXHUwMDNlbmV0ZGV2LCB0cnVlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qIFRPRE86IEZhaWx1cmVzIGZyb20gaGVyZSB0aHJvdWdoIHRoZSBlbmQgb2YgaW5pdCgpIChlLmcuIC1FTk9NRU1cXG4rXFx0ICogZnJvbSBvdHgyX21xcHJpb19hbGxvY19jYWNoZSgpLCBtYm94IGVycm9ycyBmcm9tXFxuK1xcdCAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSlcXG4rXFx0ICogcmVhY2ggY2xlYW51cC4gT24gdGMgcWRpc2MgcmVwbGFjZSB0aGUgb2xkIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQsXFxuK1xcdCAqIHNvIGNsZWFudXAgcmV0dXJucyB3aXRob3V0IHJvbGxpbmcgYmFjayBuZXRkZXYgVEMgbWFwcGluZywgdGhlIHJhdGVcXG4rXFx0ICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3JcXG4rXFx0ICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgb3R4Ml9tcXByaW9fZG93bigpIGFuZCBib3VuY2luZyB0aGVcXG4rXFx0ICogaW50ZXJmYWNlIGEgc2Vjb25kIHRpbWUuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Lyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmdcXG4rXFx0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcXG4rXFx0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcXG4rXFx0ICogbGltaXRzIGluIGhhcmR3YXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cXHUwMDNlZmxhZ3M7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXFxuK1xcdFxcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxcbitcXHRcXHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzXFxuK1xcdFxcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xcbitcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXFx1MDAzZWNvdW50W2ldLCBxb3B0LVxcdTAwM2VvZmZzZXRbaV0pO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XFxuK1xcbitcXHRpZiAocmVwbGFjaW5nKVxcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0LyogQ2xlYXIgaGFyZHdhcmUgb2ZmbG9hZCBvbiB0aGlzIHJlamVjdGVkIHJlcXVlc3Qgc28gYSBmYWlsZWQgcmVwbGFjZVxcbitcXHQgKiBkb2VzIG5vdCBsZWF2ZSB0YyByZXBvcnRpbmcgb2ZmbG9hZCBmb3IgZHJpdmVyIHN0YXRlIHRoYXQgd2FzIHRvcm5cXG4rXFx0ICogZG93biB3aGlsZSB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgZ3JhZnRlZC5cXG4rXFx0ICovXFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gMDtcXG4rXFx0aWYgKHJlcGxhY2luZykge1xcbitcXHRcXHRvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2cobmV0ZGV2LCBleHRhY2spO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xcbitcXHR9XFxuK1xcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxcbit7XFxuK1xcdHN3aXRjaCAocm9vdC1cXHUwMDNlY29tbWFuZCkge1xcbitcXHRjYXNlIFRDX1JPT1RfR1JBRlQ6XFxuK1xcdFxcdGlmIChyb290LVxcdTAwM2VpbmdyZXNzKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSB0cnVlO1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xcbitcXG4rXFx0aWYgKGJhc2UtXFx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRjYXBzID0gYmFzZS1cXHUwMDNlY2FwcztcXG4rXFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4gXFx0XFx0ICB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgVENfUVVFUllfQ0FQUzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5jZjAwMjE3ODgzNTYzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cXG4gXFx0bWF4cmF0ZSA9IChub2RlLVxcdTAwM2VyYXRlIFxcdTAwM2Ugbm9kZS1cXHUwMDNlY2VpbCkgPyBub2RlLVxcdTAwM2VyYXRlIDogbm9kZS1cXHUwMDNlY2VpbDtcXG4gXFxuK1xcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxcbitcXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxcbitcXHQgKi9cXG4gXFx0Y2ZnLVxcdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XFxuIFxcdFxcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XFxuIFxcdCgqbnVtX3JlZ3MpKys7XFxuQEAgLTE3MjksMTEgKzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0b3R4Ml9xb3Nfcm9vdF9kZXN0cm95KHBmdmYpO1xcbiB9XFxuIFxcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHJldHVybiBvdHgyX3N3X25vZGVfZmluZChwZnZmLCBPVFgyX1FPU19ST09UX0NMQVNTSUQpO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpXFxuIHtcXG4gXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdGludCByZXM7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGh0Yi1cXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoaHRiLVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJIVEIgb2ZmbG9hZCBjYW5ub3QgYmUgdXNlZCB3aXRoIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKGh0Yi1cXHUwMDNlY29tbWFuZCkge1xcbiBcXHRjYXNlIFRDX0hUQl9DUkVBVEU6XFxuIFxcdFxcdHJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItXFx1MDAzZXBhcmVudF9jbGFzc2lkLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG5pbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxcbkBAIC0yMyw2ICsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHtcXG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XFxuIFxcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpO1xcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gaW50IG90eDJfcW9zX2dldF9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcXG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6NTA6MjkuNzAyOTM5NTY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTMwMTQ4OTg2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmI1MGQwYTBkMDFlOTRmODViOWIwOWMyNzhjNjdlYTI5YzRjNjMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6NTA6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggY2E3M2E5NGRiNzk0My4uZGM5NGIxOTQ3YmEyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNCw2ICs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4rc3RhdGljIGludFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuK1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4rXHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4rXHR9XG4rXG4rXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuK1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xuK1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdFx0Y250ID0gMDtcbitcdH1cbitcbitcdGlmIChjbnQpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK2ZhaWw6XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuK1x0dTY0IHJlZ19hZGRyWzJdO1xuK1x0dTY0IHJlZ192YWxbMl07XG4rXHR1NjQgcmF0ZTtcbitcbitcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzBdID0gMDtcbitcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFsxXSA9IDA7XG4rXHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdH1cbitcbitcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXG4rXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4rXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4rXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4rXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbitcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuK1x0ICogaGFyZHdhcmUgY2FwLlxuK1x0ICpcbitcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4rXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuK1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuK1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbitcdCAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXG4rXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0aWYgKG1pbnJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTAsNyArNzg2LDIwIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0XHQvKiBUT0RPOiBOb3QgYW4gbXFwcmlvIGJ1ZyAtIHN0YWxlIFRMNCB0b3BvbG9neSBpcyBsZWZ0IHdoZW5cbitcdFx0XHQgKiBIVEIgaXMgdG9ybiBkb3duIHdpdGhvdXQgY2xlYXJpbmcgTklYX0FGX1RMNFhfVE9QT0xPR1k7XG4rXHRcdFx0ICogdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYy4gTVFQUklPIHBhcmVudHNcbitcdFx0XHQgKiBldmVyeSBNRFEgdW5kZXIgVEw0WzBdIHdpdGggc2NoZWR1bGUgcHJpb3JpdHkgMCwgc28gYVxuK1x0XHRcdCAqIHJldXNlZCBUTDQgY2FuIHJldGFpbiBIVEIgUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlXG4rXHRcdFx0ICogc29tZSBUWCBxdWV1ZXMgdW50aWwgdG9wb2xvZ3kgaXMgcmVwcm9ncmFtbWVkIGhlcmUgb3IgSFRCXG4rXHRcdFx0ICogdGVhcmRvd24gaXMgZml4ZWQgdG8gcmVzdG9yZSBkZWZhdWx0cy5cbitcdFx0XHQgKi9cbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdH1cbitcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuQEAgLTc3OCw2ICs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNjdkNGFhZTk0NDBmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTQ4Myw2ICs0ODMsMTMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcbiBcdGludCBtZGV2cztcbiB9O1xuIFxuK3N0cnVjdCBvdHgyX21xcHJpbyB7XG4rXHR1MzJcdGZsYWdzO1xuK1x0dTY0XHQqbWluX3JhdGU7XG4rXHR1NjRcdCptYXhfcmF0ZTtcbitcdGJvb2xcdHJhdGVfbGltaXQ7XG4rfTtcbitcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTUxNSw2ICs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4rXHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbitcdGJvb2xcdFx0XHRtcXByaW9fcmVwbGFjZV9wZW5kaW5nO1xuK1x0Ym9vbFx0XHRcdG1xcHJpb19za2lwX3RlYXJkb3duO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTcsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjA2Y2I0NGU3MjYzY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICsxOTgwLDE2IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0LyogVE9ETzogb3R4Ml9tcXByaW9fdXAoKSBmYWlsdXJlIGhlcmUgYWJvcnRzIHRoZSBlbnRpcmUgbmRvX29wZW4oKVxuK1x0ICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC5cbitcdCAqIFJvdXRpbmUgaXAgbGluayBzZXQgdXAgb3IgZHJpdmVyIHJlc2V0IHdpdGggYWN0aXZlIG1xcHJpbyBvZmZsb2FkXG4rXHQgKiBjYW4gbGVhdmUgdGhlIGludGVyZmFjZSBzdHVjayBkb3duIHVudGlsIHRoZSBxZGlzYyBpcyByZW1vdmVkIGFuZFxuK1x0ICogcmVhcHBsaWVkLlxuK1x0ICovXG4rXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuK1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjE0MCw2ICsyMTUwLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbitlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjg0Niw2ICsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uMmQwMTc0YjM3NGNjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjbjEway5oXCJcbiAjaW5jbHVkZSBcIm90eDJfY29tbW9uLmhcIlxuQEAgLTMxLDYgKzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCArMTYwOSw2MDkgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbisvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi9cbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSk7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdC8qIFRPRE86IG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoKSBoZXJlIGRyb3BzIHRoZSBjb21taXR0ZWQgcmF0ZSBjYWNoZVxuK1x0ICogb24gdGMgcWRpc2MgcmVwbGFjZSBiZWZvcmUgdGhlIG5ldyBtYXBwaW5nIGlzIGNvbXBsZXRlLiBTdGFnZSB0aGVcbitcdCAqIGluY29taW5nIHJhdGVzIHNlcGFyYXRlbHkgYW5kIGNvbW1pdCBvbmx5IGFmdGVyIHJlcGxhY2Ugc3VjY2VlZHMgc29cbitcdCAqIGEgZmFpbHVyZSBhZnRlciBuZXRkZXYgcmVzdGFydCBjYW4gcm9sbCBiYWNrIGZyb20gdGhlIHByaW9yIGNhY2hlLlxuK1x0ICovXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHJldHVybiBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK31cbitcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcbisgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvblxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXG4rICovXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbitcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWQ7IHNvbWUgVFggcXVldWVzIG1heSByZXRhaW4gYmFuZHdpZHRoIGxpbWl0c1xcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXG4rXHQvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLFxuK1x0ICogYW5kIHRoZSByYXRlIGNhY2hlIGV2ZW4gd2hlbiBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoKSBmYWlsc1xuK1x0ICogcGFydHdheSB0aHJvdWdoIHRoZSBNRFEgYmF0Y2guIFNvZnR3YXJlIHRoZW4gcmVwb3J0cyBvZmZsb2FkIGFzXG4rXHQgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlclxuK1x0ICogbXFwcmlvX3VwKCkgb3IgcmUtc2V0dXAgY2FuIHNoYXBlIHdpdGggdGhlIHdyb25nIGVmZmVjdGl2ZSByYXRlcy5cbitcdCAqL1xuK1x0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCB0eHEsIGVycjtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4rXG4rXHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbisgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbisgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4rICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4rICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5XG4rICogdGhlIG9wZW4gZXJyb3IgcGF0aC5cbisgKlxuKyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb21cbisgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZVxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxuKyAqL1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbitcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cbitcdCAqL1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuK1x0aWYgKHJhdGVfbGltaXQpXG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGludCBkb3duX2VycjtcbitcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXHRcdGlmIChkb3duX2VycilcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuK1x0XHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cbitcdFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXG4rXHRcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXG4rXHRcdCAqL1xuK1x0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4rXHRcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xuK1x0XHRzbXBfd21iKCk7XG4rXHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0XHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxuK1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGlmICghcmF0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocWNvdW50IFx1MDAzYz0gMSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoXG4rXHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cbitcdCAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0c1xuK1x0ICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlclxuK1x0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xuK1x0ICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDRcbitcdCAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2Rlc1xuK1x0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXG4rXHQgKi9cbitcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHQgICBcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcblwiLFxuK1x0XHQgICBuYW1lLCB0YywgcWNvdW50KTtcbitcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1wiLFxuK1x0XHRcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXHRpbnQgdGMsIHR4cTtcbitcbitcdGlmIChxb3B0LVx1MDAzZW51bV90YyBcdTAwM2UgbnVtX3R4cSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChudW1fdHhxIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVwiLFxuK1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuK1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHRcdCAgIFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCIsXG4rXHRcdFx0XHRcdCAgIHR4cSwgbnVtX3R4cSk7XG4rXHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcIixcbitcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4re1xuK1x0dTY0IG1icHM7XG4rXG4rXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XG4rXHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4re1xuK1x0LyogVE9ETzogbXFwcmlvIG9mZmxvYWQgc2V0dXAgbWF5IGNvbXBsZXRlIGluIG5kb19zZXR1cF90YygpIGJlZm9yZVxuK1x0ICogcWRpc2NfY3JlYXRlKCkgcmVqZWN0cyB0aGUgcmVxdWVzdCAoZm9yIGV4YW1wbGUgVENBX1JBVEUgb24gYVxuK1x0ICogVENRX0ZfTVFST09UIHFkaXNjKS4gUm9sbCBiYWNrIHRoZSBwcm9ncmFtbWVkIE1EUSBzaGFwZXJzLCBuZXRkZXZcbitcdCAqIFRDIG1hcHBpbmcsIHJhdGUgY2FjaGUsIGFuZCBtcXByaW8ucmF0ZV9saW1pdCB0byB0aGUgcHJpb3IgZ3JhZnRlZFxuK1x0ICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHJlamVjdGVkIHZhbHVlcyBhY3RpdmUgd2hpbGUgdGhlXG4rXHQgKiBvbGQgbXFwcmlvIHJlbWFpbnMgcm9vdC5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiByZWplY3RlZCBiZWZvcmUgZ3JhZnQ7IHByb2dyYW1tZWQgc2hhcGVycyBhbmQgVEMgbWFwcGluZyByZW1haW4gYWN0aXZlIHdoaWxlIHByaW9yIG1xcHJpbyBpcyBzdGlsbCByb290XFxuXCIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2coc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdC8qIFRPRE86IE9uIGZhaWxlZCB0YyBxZGlzYyByZXBsYWNlIHJlc3RvcmUgdGhlIHByaW9yIHJhdGUgY2FjaGUsXG4rXHQgKiBuZXRkZXYgVEMgbWFwcGluZywgYW5kIGhhcmR3YXJlIHNoYXBlcnMgZnJvbSBhIHNuYXBzaG90IHRha2VuIGJlZm9yZVxuK1x0ICogcmVwcm9ncmFtbWluZyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUgd2hpbGVcbitcdCAqIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyB0aGUgZ3JhZnRlZCByb290IHFkaXNjLlxuK1x0ICovXG4rXHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcXG5cIik7XG4rXHRpZiAoZXh0YWNrKVxuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcIik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuK1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXG4rXHQgKiBvbmUuIG1xcHJpb19za2lwX3RlYXJkb3duIGlzIGFybWVkIGZyb20gVENfUk9PVF9HUkFGVCBzbyB0ZWFyZG93blxuK1x0ICogZnJvbSB0aGUgcmVwbGFjZWQgcWRpc2MgaXMgaWdub3JlZCBhZnRlciB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gaGFzXG4rXHQgKiByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kIHNldCBtcXByaW9fcmF0ZV9saW1pdC5cbitcdCAqL1xuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24pIHtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xuK1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nKSB7XG4rXHRcdG90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKG5ldGRldik7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4rXHRpZiAoIWhhZF9tcXByaW8pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGlmX3VwKSB7XG4rXHRcdGludCBkb3duX2VyciwgZXJyO1xuK1xuK1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdHJldHVybiBkb3duX2VycjtcbitcdH1cbitcbitcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXG4rXHQgKiBzdGF0ZSBvbmx5LlxuK1x0ICovXG4rXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4rXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4rXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbitcbitcdGlmICghcW9wdC1cdTAwM2VodylcbitcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4rXG4rXHRpZiAoIWlmX3VwKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cIiwgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XCIsXG4rXHRcdFx0XHQgICAgICAgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXHUwMDI2cGZ2Zi1cdTAwM2Vody5jYXBfZmxhZykpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cdTAwM2VwZGV2KSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNleGRwX3Byb2cpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlIFx1MDAyNlx1MDAyNiBtYXhfcmF0ZSBcdTAwMjZcdTAwMjYgbWluX3JhdGUgXHUwMDNlIG1heF9yYXRlKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcblwiLFxuK1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwiLFxuK1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWluXCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4rXHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsXG4rXHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcIm1heFwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHQvKiBUT0RPOiBGYWlsdXJlcyBmcm9tIGhlcmUgdGhyb3VnaCB0aGUgZW5kIG9mIGluaXQoKSAoZS5nLiAtRU5PTUVNXG4rXHQgKiBmcm9tIG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKCksIG1ib3ggZXJyb3JzIGZyb21cbitcdCAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSlcbitcdCAqIHJlYWNoIGNsZWFudXAuIE9uIHRjIHFkaXNjIHJlcGxhY2UgdGhlIG9sZCBtcXByaW8gcmVtYWlucyBncmFmdGVkLFxuK1x0ICogc28gY2xlYW51cCByZXR1cm5zIHdpdGhvdXQgcm9sbGluZyBiYWNrIG5ldGRldiBUQyBtYXBwaW5nLCB0aGUgcmF0ZVxuK1x0ICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3JcbitcdCAqIGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiBjYWxsaW5nIG90eDJfbXFwcmlvX2Rvd24oKSBhbmQgYm91bmNpbmcgdGhlXG4rXHQgKiBpbnRlcmZhY2UgYSBzZWNvbmQgdGltZS5cbitcdCAqL1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuK1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbitcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4rXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuK1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbitcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuK1x0XHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XG4rXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwiLFxuK1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1xuK1x0XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxuK1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyBpKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLCBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4rXG4rXHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuK1xuK1x0aWYgKHJlcGxhY2luZylcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK1xuK2NsZWFudXA6XG4rXHQvKiBDbGVhciBoYXJkd2FyZSBvZmZsb2FkIG9uIHRoaXMgcmVqZWN0ZWQgcmVxdWVzdCBzbyBhIGZhaWxlZCByZXBsYWNlXG4rXHQgKiBkb2VzIG5vdCBsZWF2ZSB0YyByZXBvcnRpbmcgb2ZmbG9hZCBmb3IgZHJpdmVyIHN0YXRlIHRoYXQgd2FzIHRvcm5cbitcdCAqIGRvd24gd2hpbGUgdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQuXG4rXHQgKi9cbitcdHFvcHQtXHUwMDNlaHcgPSAwO1xuK1x0aWYgKHJlcGxhY2luZykge1xuK1x0XHRvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2cobmV0ZGV2LCBleHRhY2spO1xuK1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbit7XG4rXHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuK1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuK1x0XHRpZiAocm9vdC1cdTAwM2VpbmdyZXNzKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nKSB7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRcdH1cbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuK1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuK1xuK1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5jZjAwMjE3ODgzNTYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbitcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuK1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbitcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpKys7XG5AQCAtMTcyOSwxMSArMTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0b3R4Ml9xb3Nfcm9vdF9kZXN0cm95KHBmdmYpO1xuIH1cbiBcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHJldHVybiBvdHgyX3N3X25vZGVfZmluZChwZnZmLCBPVFgyX1FPU19ST09UX0NMQVNTSUQpO1xuK31cbitcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpXG4ge1xuIFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRpbnQgcmVzO1xuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4rXHQgICAgaHRiLVx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4rXHRcdFx0XHQgICBcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XG4gXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjUwOjI5LjcwMjk0MTkzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1OTgwMzg0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbXFwcmlvIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIGxpa2UgYG90eDJfc2V0dXBfdGNfbXFwcmlvYCBhbmQgcmVsYXRlZCBzdHVmZi4gU3RhbmRhcmQgc3R1ZmYsIHNvIGZhci4gQnV0LCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGJhc2VkIG9uIHRoZXNlIGluc3RydWN0aW9ucy4gVGhleSBzYXkgdGhhdCBpZiB0aGUgcGF0Y2ggaXMgKm9ubHkqIGluIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBRRU1VLCB0aGVuIGl0J3Mgbm90IFwiV29ydGhGdXp6aW5nXCIuXG5cblRoZSBNYXJ2ZWxsIE9jdGVvblRYMi4uLiB5ZWFoLCBpdCdzIGRlZmluaXRlbHkgYSB2ZW5kb3Itc3BlY2lmaWMgTklDIGRyaXZlciDigJMgYSBTbWFydE5JQywgaW4gZmFjdC4gVGhhdCdzIHRoZSBmaXJzdCBodXJkbGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gSWYgaXQgKmlzKiBlbXVsYXRlZCwgdGhlbiB0aGlzIG1pZ2h0IGJlIGZ1enphYmxlLiBJZiBub3QuLi4gcHJvYmxlbS5cblxuSSBkb24ndCAqdGhpbmsqIFFFTVUgZW11bGF0ZXMgdGhlIE9jdGVvblRYMi4gSXQncyBhIHByZXR0eSBzcGVjaWFsaXplZCBwaWVjZSBvZiBoYXJkd2FyZS4gSeKAmWQgbG92ZSB0byBjaGVjayB0aGUgUUVNVSBzb3VyY2UgZGlyZWN0bHksIGJ1dCBJIGRvbuKAmXQgaGF2ZSBpbW1lZGlhdGUgYWNjZXNzLiBTaW5jZSBJIHN1c3BlY3QgdGhpcyBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIE5JQywgbGV0J3MgY29uZmlybSB0aGF0IGl0J3MgYSBQQ0kgZHJpdmVyLCB0byBtYWtlIHRoZSBhc3Nlc3NtZW50LlxuXG5Mb29raW5nIGF0IHRoZSBmaWxlIHN0cnVjdHVyZSwgaXQncyBpbiBhIHBhdGggdGhhdCBzdWdnZXN0cyBpdCBpcy4gTGV0J3Mgc2VlLi4uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYC4gT2theSwgdGhhdCAqbG9va3MqIHByb21pc2luZyBmb3IgUENJLiBMZXQncyBkbyBhIHF1aWNrIGdyZXAgZm9yIGBwY2lfcmVnaXN0ZXJfZHJpdmVyYCBpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGNvbmZpcm0gaWYgaXQncyBhIFBDSSBkcml2ZXIgYW5kIGxlYWQgdG8gYSBkZWZpbml0aXZlIGRlY2lzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3NCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjUwOjM3LjMwMDk4MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1Nzg0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzU5OD1zdGF0aWMgaW50IF9faW5pdCBvdHgyX3J2dXBmX2luaXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM2MDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNjAyOlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZvdHgyX3BmX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNjAzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6NTA6MzcuMzQ2NTcwMTA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MTIzNDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIE9jdGVvblRYMiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCB5ZXAsIGl0J3MgZGVmaW5pdGVseSBhIFBDSSBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgc29tZXRoaW5nIGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudD9cIiBJIGtub3cgdGhlIHR5cGljYWwgbmV0d29yayBpbnRlcmZhY2VzIFFFTVUgY292ZXJzOiBlMTAwMCwgZTEwMDBlLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCB2bXhuZXQzLCBpODI1NTksIG5lMmtfcGNpLCBwY25ldCwgdHVsaXAuIE5vLCBJJ20gcHJldHR5IGNvbmZpZGVudCBPY3Rlb25UWDIgaXNuJ3QgaW4gdGhhdCBsaXN0LiBJdCdzIGEgc3BlY2lhbGl6ZWQsIHZlbmRvci1zcGVjaWZpYyBOSUMgZHJpdmVyLiBUaGVyZWZvcmUsIGlmIHRoaXMgY29kZSByZWxpZXMgb24gdGhhdCBoYXJkd2FyZSwgaXQncyBqdXN0IG5vdCBnb2luZyB0byBiZSByZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IEknbSBsaWtlbHkgdG8gZW5jb3VudGVyLCBsaWtlIEdDRSBvciBRRU1VLiBUaGF0IG1lYW5zIGl0J3Mgbm90IGdvaW5nIHRvIGJlIHdvcnRoIHRoZSB0aW1lLCBhbmQgSSBzaG91bGQgc2V0IFdvcnRoRnV6emluZyB0byBmYWxzZS5cblxuQnV0LCBiZWZvcmUgSSBjb21taXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHByb21wdCBmb3IgbW9yZSBjb250ZXh0LiBSaWdodCwgdGhlIHByb21wdCBzdGF0ZXMgcHJldHR5IGNsZWFybHk6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiIE1hcnZlbGwgT2N0ZW9uVFgyIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5JQyBkcml2ZXIuIEdpdmVuIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnQgYW5kIHRoZSBmYWN0IHRoYXQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgaXQsIEknbSByZXR1cm5pbmcgV29ydGhGdXp6aW5nPWZhbHNlLiBObyBuZWVkIHRvIHNwZW5kIHJlc291cmNlcyBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NDMsIk91dHB1dFRva2VucyI6ODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6NTA6NDIuNzE3ODA3NjY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjUwOjQyLjcxNzg0MDc3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqcrr9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 03:35:16 +0000 UTC FinishedAt: 2026-08-17 03:50:44 +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+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyYmI1MGQwYTBkMDFlOTRmODViOWIwOWMyNzhjNjdlYTI5YzRjNjMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6NTA6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCAmIzQzOzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxuJiM0MztcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4mIzQzO1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggY2E3M2E5NGRiNzk0My4uZGM5NGIxOTQ3YmEyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNCw2ICYjNDM7NjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuJiM0MztcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuJiM0MztcdFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgaSwgZXJyO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4mIzQzO1xuJiM0MztcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRcdGNudCA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY250KSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuJiM0MztcdHU2NCByZWdfYWRkclsyXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFsyXTtcbiYjNDM7XHR1NjQgcmF0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtYXhyYXRlIFx1MDAyNlx1MDAyNiAhbWlucmF0ZSkge1xuJiM0MztcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMF0gPSAwO1xuJiM0MztcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMV0gPSAwO1xuJiM0MztcdFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XG4mIzQzO1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuJiM0MztcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcbiYjNDM7XHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4mIzQzO1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4mIzQzO1x0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXG4mIzQzO1x0ICogaGFyZHdhcmUgY2FwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogbXFwcmlvIHNldHVwIHJlc3RhcnRzIHRoZSBuZXRkZXYgKG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KSxcbiYjNDM7XHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuJiM0MztcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbiYjNDM7XHQgKiByZWx5aW5nIG9uIHN0YWxlIGhhcmR3YXJlIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRpZiAobWF4cmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHQvKiBDSVImIzQzO1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbiYjNDM7XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0aWYgKG1pbnJhdGUpIHtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRuJiM0MzsmIzQzOztcbiYjNDM7XHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTAsNyAmIzQzOzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRcdC8qIFRPRE86IE5vdCBhbiBtcXByaW8gYnVnIC0gc3RhbGUgVEw0IHRvcG9sb2d5IGlzIGxlZnQgd2hlblxuJiM0MztcdFx0XHQgKiBIVEIgaXMgdG9ybiBkb3duIHdpdGhvdXQgY2xlYXJpbmcgTklYX0FGX1RMNFhfVE9QT0xPR1k7XG4mIzQzO1x0XHRcdCAqIHRoZSBBRiBkb2VzIG5vdCByZXNldCBpdCBvbiBzY2hxIHJlYWxsb2MuIE1RUFJJTyBwYXJlbnRzXG4mIzQzO1x0XHRcdCAqIGV2ZXJ5IE1EUSB1bmRlciBUTDRbMF0gd2l0aCBzY2hlZHVsZSBwcmlvcml0eSAwLCBzbyBhXG4mIzQzO1x0XHRcdCAqIHJldXNlZCBUTDQgY2FuIHJldGFpbiBIVEIgUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlXG4mIzQzO1x0XHRcdCAqIHNvbWUgVFggcXVldWVzIHVudGlsIHRvcG9sb2d5IGlzIHJlcHJvZ3JhbW1lZCBoZXJlIG9yIEhUQlxuJiM0MztcdFx0XHQgKiB0ZWFyZG93biBpcyBmaXhlZCB0byByZXN0b3JlIGRlZmF1bHRzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbkBAIC03NzgsNiAmIzQzOzkyNyw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi42N2Q0YWFlOTQ0MGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNDgzLDYgJiM0Mzs0ODMsMTMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcbiBcdGludCBtZGV2cztcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8ge1xuJiM0MztcdHUzMlx0ZmxhZ3M7XG4mIzQzO1x0dTY0XHQqbWluX3JhdGU7XG4mIzQzO1x0dTY0XHQqbWF4X3JhdGU7XG4mIzQzO1x0Ym9vbFx0cmF0ZV9saW1pdDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG90eDJfbmljIHtcbiBcdHZvaWQgX19pb21lbVx0XHQqcmVnX2Jhc2U7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0Km5ldGRldjtcbkBAIC01MTUsNiAmIzQzOzUyMiwxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbiYjNDM7XHRib29sXHRcdFx0bXFwcmlvX3JlcGxhY2VfcGVuZGluZztcbiYjNDM7XHRib29sXHRcdFx0bXFwcmlvX3NraXBfdGVhcmRvd247XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgJiM0MzsxMjU3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuJiM0MztcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbiYjNDM7XHRcdG5ldGRldl9pbmZvKGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O05vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChpZl91cClcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AoZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuaW5kZXggYzk5NWYyOTAwODU5MC4uMDZjYjQ0ZTcyNjNjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbkBAIC0xOTgwLDYgJiM0MzsxOTgwLDE2IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuJiM0MztcdC8qIFRPRE86IG90eDJfbXFwcmlvX3VwKCkgZmFpbHVyZSBoZXJlIGFib3J0cyB0aGUgZW50aXJlIG5kb19vcGVuKClcbiYjNDM7XHQgKiBwYXRoIGV2ZW4gdGhvdWdoIG1xcHJpb19yYXRlX2xpbWl0IGFuZCB0aGUgcmF0ZSBjYWNoZSByZW1haW4gc2V0LlxuJiM0MztcdCAqIFJvdXRpbmUgaXAgbGluayBzZXQgdXAgb3IgZHJpdmVyIHJlc2V0IHdpdGggYWN0aXZlIG1xcHJpbyBvZmZsb2FkXG4mIzQzO1x0ICogY2FuIGxlYXZlIHRoZSBpbnRlcmZhY2Ugc3R1Y2sgZG93biB1bnRpbCB0aGUgcWRpc2MgaXMgcmVtb3ZlZCBhbmRcbiYjNDM7XHQgKiByZWFwcGxpZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuJiM0MztcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgmIzQzOyYjNDM7KSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjE0MCw2ICYjNDM7MjE1MCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZyZWVfaXJxKHZlYywgcGYpO1xuIGVycl9kaXNhYmxlX25hcGk6XG4gXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XG4mIzQzO2Vycl9mcmVlX2h3OlxuIFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XG4gZXJyX2ZyZWVfbWVtOlxuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbkBAIC0yODQ2LDYgJiM0MzsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4mIzQzO1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW10dSBcdTAwM2UgTUFYX1hEUF9NVFUpIHtcbiBcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjJkMDE3NGIzNzRjY2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiAmIzQzOzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvc2NoX2dlbmVyaWMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2NuMTBrLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtvdHgyX2NvbW1vbi5oXCYjMzQ7XG5AQCAtMzEsNiAmIzQzOzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbiYjNDM7LyogTWluIHBlci1xdWV1ZSBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDIgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFNcdDI1MDAwMFVMTFxuJiM0MzsvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4mIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuJiM0MztcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuJiM0MztcdFx0ICovXG4gXHRcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XG4gXHRcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcbiBcdH1cbkBAIC0xNjAwLDE0ICYjNDM7MTYwOSw2MDkgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoKSBoZXJlIGRyb3BzIHRoZSBjb21taXR0ZWQgcmF0ZSBjYWNoZVxuJiM0MztcdCAqIG9uIHRjIHFkaXNjIHJlcGxhY2UgYmVmb3JlIHRoZSBuZXcgbWFwcGluZyBpcyBjb21wbGV0ZS4gU3RhZ2UgdGhlXG4mIzQzO1x0ICogaW5jb21pbmcgcmF0ZXMgc2VwYXJhdGVseSBhbmQgY29tbWl0IG9ubHkgYWZ0ZXIgcmVwbGFjZSBzdWNjZWVkcyBzb1xuJiM0MztcdCAqIGEgZmFpbHVyZSBhZnRlciBuZXRkZXYgcmVzdGFydCBjYW4gcm9sbCBiYWNrIGZyb20gdGhlIHByaW9yIGNhY2hlLlxuJiM0MztcdCAqL1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4mIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4mIzQzOyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4mIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLFxuJiM0MztcdCAqIGFuZCB0aGUgcmF0ZSBjYWNoZSBldmVuIHdoZW4gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKCkgZmFpbHNcbiYjNDM7XHQgKiBwYXJ0d2F5IHRocm91Z2ggdGhlIE1EUSBiYXRjaC4gU29mdHdhcmUgdGhlbiByZXBvcnRzIG9mZmxvYWQgYXNcbiYjNDM7XHQgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlclxuJiM0MztcdCAqIG1xcHJpb191cCgpIG9yIHJlLXNldHVwIGNhbiBzaGFwZSB3aXRoIHRoZSB3cm9uZyBlZmZlY3RpdmUgcmF0ZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0aW50IHR4cSwgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh0eHEgPSAwOyB0eHEgXHUwMDNjIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXG4mIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuJiM0MzsgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93blxuJiM0MzsgKiB3aXRob3V0IGNhbGxpbmcgbmRvX3N0b3AoKSBhZ2FpbiBvbiByZXNvdXJjZXMgYWxyZWFkeSB0b3JuIGRvd24gYnlcbiYjNDM7ICogdGhlIG9wZW4gZXJyb3IgcGF0aC5cbiYjNDM7ICpcbiYjNDM7ICogRG8gbm90IGNhbGwgZGV2X2RlYWN0aXZhdGUoKS9kZXZfYWN0aXZhdGUoKSBoZXJlOiB0aGlzIHJ1bnMgZnJvbVxuJiM0MzsgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZVxuJiM0MzsgKiBkZWFjdGl2YXRlZCBhbmQgbXVzdCBwZXJmb3JtIHRoZSBmaW5hbCBkZXZfYWN0aXZhdGUoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbiYjNDM7XHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuJiM0MztcdFx0ICAgIFwmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdGlmIChyYXRlX2xpbWl0KVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGludCBkb3duX2VycjtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuJiM0MztcdFx0aWYgKGRvd25fZXJyKVxuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGRvd25fZXJyKTtcbiYjNDM7XHRcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xuJiM0MztcdFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXG4mIzQzO1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0XHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cbiYjNDM7XHRcdHNtcF93bWIoKTtcbiYjNDM7XHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbiYjNDM7XHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cbiYjNDM7XHQgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHNcbiYjNDM7XHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4mIzQzO1x0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xuJiM0MztcdCAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0XG4mIzQzO1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4mIzQzO1x0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBuYW1lLCB0YywgcWNvdW50KTtcbiYjNDM7XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XHRpbnQgdGMsIHR4cTtcbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChudW1fdHhxIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG1icHM7XG4mIzQzO1xuJiM0MztcdGlmICghcmF0ZV9ieXRlc19wcylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbiYjNDM7XHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3tcbiYjNDM7XHQvKiBUT0RPOiBtcXByaW8gb2ZmbG9hZCBzZXR1cCBtYXkgY29tcGxldGUgaW4gbmRvX3NldHVwX3RjKCkgYmVmb3JlXG4mIzQzO1x0ICogcWRpc2NfY3JlYXRlKCkgcmVqZWN0cyB0aGUgcmVxdWVzdCAoZm9yIGV4YW1wbGUgVENBX1JBVEUgb24gYVxuJiM0MztcdCAqIFRDUV9GX01RUk9PVCBxZGlzYykuIFJvbGwgYmFjayB0aGUgcHJvZ3JhbW1lZCBNRFEgc2hhcGVycywgbmV0ZGV2XG4mIzQzO1x0ICogVEMgbWFwcGluZywgcmF0ZSBjYWNoZSwgYW5kIG1xcHJpby5yYXRlX2xpbWl0IHRvIHRoZSBwcmlvciBncmFmdGVkXG4mIzQzO1x0ICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHJlamVjdGVkIHZhbHVlcyBhY3RpdmUgd2hpbGUgdGhlXG4mIzQzO1x0ICogb2xkIG1xcHJpbyByZW1haW5zIHJvb3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDttcXByaW86IHJlamVjdGVkIGJlZm9yZSBncmFmdDsgcHJvZ3JhbW1lZCBzaGFwZXJzIGFuZCBUQyBtYXBwaW5nIHJlbWFpbiBhY3RpdmUgd2hpbGUgcHJpb3IgbXFwcmlvIGlzIHN0aWxsIHJvb3RcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2coc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdC8qIFRPRE86IE9uIGZhaWxlZCB0YyBxZGlzYyByZXBsYWNlIHJlc3RvcmUgdGhlIHByaW9yIHJhdGUgY2FjaGUsXG4mIzQzO1x0ICogbmV0ZGV2IFRDIG1hcHBpbmcsIGFuZCBoYXJkd2FyZSBzaGFwZXJzIGZyb20gYSBzbmFwc2hvdCB0YWtlbiBiZWZvcmVcbiYjNDM7XHQgKiByZXByb2dyYW1taW5nIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSB3aGlsZVxuJiM0MztcdCAqIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyB0aGUgZ3JhZnRlZCByb290IHFkaXNjLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSwgb2xkIG1xcHJpbyBzdGlsbCByb290XFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAoZXh0YWNrKVxuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIHRjIHFkaXNjIHJlcGxhY2UgZ3JhZnRzIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBvbGRcbiYjNDM7XHQgKiBvbmUuIG1xcHJpb19za2lwX3RlYXJkb3duIGlzIGFybWVkIGZyb20gVENfUk9PVF9HUkFGVCBzbyB0ZWFyZG93blxuJiM0MztcdCAqIGZyb20gdGhlIHJlcGxhY2VkIHFkaXNjIGlzIGlnbm9yZWQgYWZ0ZXIgdGhlIG5ldyBjb25maWd1cmF0aW9uIGhhc1xuJiM0MztcdCAqIHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBhbmQgc2V0IG1xcHJpb19yYXRlX2xpbWl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fcHJlX2dyYWZ0X3JlamVjdF9tc2cobmV0ZGV2KTtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xuJiM0MztcdGlmICghaGFkX21xcHJpbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaWZfdXApIHtcbiYjNDM7XHRcdGludCBkb3duX2VyciwgZXJyO1xuJiM0MztcbiYjNDM7XHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdHJldHVybiBkb3duX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXG4mIzQzO1x0ICogc3RhdGUgb25seS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4mIzQzO1x0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuJiM0MztcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZfdXApIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwmIzM0OywgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgbWF4X3JhdGUgXHUwMDI2XHUwMDI2IG1pbl9yYXRlIFx1MDAzZSBtYXhfcmF0ZSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCYjMzQ7bWluXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21heFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgZXh0YWNrLCBxb3B0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBGYWlsdXJlcyBmcm9tIGhlcmUgdGhyb3VnaCB0aGUgZW5kIG9mIGluaXQoKSAoZS5nLiAtRU5PTUVNXG4mIzQzO1x0ICogZnJvbSBvdHgyX21xcHJpb19hbGxvY19jYWNoZSgpLCBtYm94IGVycm9ycyBmcm9tXG4mIzQzO1x0ICogb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKCkgb3Igb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpKVxuJiM0MztcdCAqIHJlYWNoIGNsZWFudXAuIE9uIHRjIHFkaXNjIHJlcGxhY2UgdGhlIG9sZCBtcXByaW8gcmVtYWlucyBncmFmdGVkLFxuJiM0MztcdCAqIHNvIGNsZWFudXAgcmV0dXJucyB3aXRob3V0IHJvbGxpbmcgYmFjayBuZXRkZXYgVEMgbWFwcGluZywgdGhlIHJhdGVcbiYjNDM7XHQgKiBjYWNoZSwgb3IgcGFydGlhbGx5IHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBzaGFwZXJzLiBSZXN0b3JlIHRoZSBwcmlvclxuJiM0MztcdCAqIGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiBjYWxsaW5nIG90eDJfbXFwcmlvX2Rvd24oKSBhbmQgYm91bmNpbmcgdGhlXG4mIzQzO1x0ICogaW50ZXJmYWNlIGEgc2Vjb25kIHRpbWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Lyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmdcbiYjNDM7XHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuJiM0MztcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4mIzQzO1x0ICogbGltaXRzIGluIGhhcmR3YXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4mIzQzO1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbiYjNDM7XHRcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXNcbiYjNDM7XHRcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbGFjaW5nKVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdC8qIENsZWFyIGhhcmR3YXJlIG9mZmxvYWQgb24gdGhpcyByZWplY3RlZCByZXF1ZXN0IHNvIGEgZmFpbGVkIHJlcGxhY2VcbiYjNDM7XHQgKiBkb2VzIG5vdCBsZWF2ZSB0YyByZXBvcnRpbmcgb2ZmbG9hZCBmb3IgZHJpdmVyIHN0YXRlIHRoYXQgd2FzIHRvcm5cbiYjNDM7XHQgKiBkb3duIHdoaWxlIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyBncmFmdGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSAwO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIGV4dGFjayk7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChyb290LVx1MDAzZWNvbW1hbmQpIHtcbiYjNDM7XHRjYXNlIFRDX1JPT1RfR1JBRlQ6XG4mIzQzO1x0XHRpZiAocm9vdC1cdTAwM2VpbmdyZXNzKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuJiM0MztcbiYjNDM7XHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbiYjNDM7XHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0XHQgIHZvaWQgKnR5cGVfZGF0YSlcbiB7XG4gXHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uY2YwMDIxNzg4MzU2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuJiM0MztcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuJiM0MztcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4mIzQzO1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykmIzQzOyYjNDM7O1xuQEAgLTE3MjksMTEgJiM0MzsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaHRiLVx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChodGItXHUwMDNlZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHN3aXRjaCAoaHRiLVx1MDAzZWNvbW1hbmQpIHtcbiBcdGNhc2UgVENfSFRCX0NSRUFURTpcbiBcdFx0cmV0dXJuIG90eDJfcW9zX3Jvb3RfYWRkKHBmdmYsIGh0Yi1cdTAwM2VwYXJlbnRfY2xhc3NpZCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbmluZGV4IDIyMWJkMDQzOGY2MDMuLmM3NzdjYzQyZWFjOWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuQEAgLTIzLDYgJiM0MzsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHtcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcbiBcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpO1xuJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyYmI1MGQwYTBkMDFlOTRmODViOWIwOWMyNzhjNjdlYTI5YzRjNjMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDM6NTA6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwpAQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykKJiM0MzsJaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxuJiMzNDssCiYjNDM7CQkJCSAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKaW5kZXggY2E3M2E5NGRiNzk0My4uZGM5NGIxOTQ3YmEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMKQEAgLTYxNCw2ICYjNDM7NjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCwKJiM0MzsJCSAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSwKJiM0MzsJCSAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBjbnQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXEtJmd0O3JlZ1tpXSA9IHJlZ19hZGRyW2ldOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbaV0gPSByZWdfdmFsW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CXU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CWludCBlcnIsIHNtcSwgaSwgY250ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldOwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsW2NudF0gPSAwOwomIzQzOwkJY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChjbnQgJmx0OyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwkJY250ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY250KSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZmFpbDoKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgZXJyLCBzbXEsIG4gPSAwOwomIzQzOwl1NjQgcmVnX2FkZHJbMl07CiYjNDM7CXU2NCByZWdfdmFsWzJdOwomIzQzOwl1NjQgcmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFtYXhyYXRlICZhbXA7JmFtcDsgIW1pbnJhdGUpIHsKJiM0MzsJCXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsJCXJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzBdID0gMDsKJiM0MzsJCXJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzFdID0gMDsKJiM0MzsJCXJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsKJiM0MzsJLyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzbwomIzQzOwkgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYCiYjNDM7CSAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnMKJiM0MzsJICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhCiYjNDM7CSAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYQomIzQzOwkgKiBoYXJkd2FyZSBjYXAuCiYjNDM7CSAqCiYjNDM7CSAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksCiYjNDM7CSAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uCiYjNDM7CSAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4KJiM0MzsJICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CWlmIChtYXhyYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CWlmIChtaW5yYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTAsNyAmIzQzOzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCQkvKiBUT0RPOiBOb3QgYW4gbXFwcmlvIGJ1ZyAtIHN0YWxlIFRMNCB0b3BvbG9neSBpcyBsZWZ0IHdoZW4KJiM0MzsJCQkgKiBIVEIgaXMgdG9ybiBkb3duIHdpdGhvdXQgY2xlYXJpbmcgTklYX0FGX1RMNFhfVE9QT0xPR1k7CiYjNDM7CQkJICogdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYy4gTVFQUklPIHBhcmVudHMKJiM0MzsJCQkgKiBldmVyeSBNRFEgdW5kZXIgVEw0WzBdIHdpdGggc2NoZWR1bGUgcHJpb3JpdHkgMCwgc28gYQomIzQzOwkJCSAqIHJldXNlZCBUTDQgY2FuIHJldGFpbiBIVEIgUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlCiYjNDM7CQkJICogc29tZSBUWCBxdWV1ZXMgdW50aWwgdG9wb2xvZ3kgaXMgcmVwcm9ncmFtbWVkIGhlcmUgb3IgSFRCCiYjNDM7CQkJICogdGVhcmRvd24gaXMgZml4ZWQgdG8gcmVzdG9yZSBkZWZhdWx0cy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJfQomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc4LDYgJiM0Mzs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwogCXJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKCZhbXA7cGZ2Zi0mZ3Q7bWJveCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCmluZGV4IGVlY2VlNjEyYjdiMmMuLjY3ZDRhYWU5NDQwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCkBAIC00ODMsNiAmIzQzOzQ4MywxMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEgewogCWludCBtZGV2czsKIH07CiAKJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8gewomIzQzOwl1MzIJZmxhZ3M7CiYjNDM7CXU2NAkqbWluX3JhdGU7CiYjNDM7CXU2NAkqbWF4X3JhdGU7CiYjNDM7CWJvb2wJcmF0ZV9saW1pdDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IG90eDJfbmljIHsKIAl2b2lkIF9faW9tZW0JCSpyZWdfYmFzZTsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0ZGV2OwpAQCAtNTE1LDYgJiM0Mzs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHsKIAl1NjQJCQlmbGFnczsKIAl1NjQJCQkqY3Ffb3BfYWRkcjsKIAomIzQzOwlzdHJ1Y3Qgb3R4Ml9tcXByaW8JbXFwcmlvOwomIzQzOwlib29sCQkJbXFwcmlvX3JlcGxhY2VfcGVuZGluZzsKJiM0MzsJYm9vbAkJCW1xcHJpb19za2lwX3RlYXJkb3duOwomIzQzOwogCXN0cnVjdCBicGZfcHJvZwkJKnhkcF9wcm9nOwogCXN0cnVjdCBvdHgyX3FzZXQJcXNldDsKIAlzdHJ1Y3Qgb3R4Ml9odwkJaHc7CkBAIC0xMjQ2LDYgJiM0MzsxMjU3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pOwogdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpOwogaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsCiYjNDM7CQkJCSB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSwKIAkJCWludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7CiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwppbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYykKIAl1OCBvbGRfcGZjX2VuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsgcGZjLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCW9sZF9wZmNfZW4gPSBwZnZmLSZndDtwZmNfZW47CiAJcGZ2Zi0mZ3Q7cGZjX2VuID0gcGZjLSZndDtwZmNfZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwppbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgJmFtcDsmYW1wOwomIzQzOwkgICAgKGNoYW5uZWwtJmd0O3R4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnR4X3F1ZXVlcyB8fAomIzQzOwkgICAgIGNoYW5uZWwtJmd0O3J4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnJ4X3F1ZXVlcykpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi4wNmNiNDRlNzI2M2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTYgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CS8qIFRPRE86IG90eDJfbXFwcmlvX3VwKCkgZmFpbHVyZSBoZXJlIGFib3J0cyB0aGUgZW50aXJlIG5kb19vcGVuKCkKJiM0MzsJICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC4KJiM0MzsJICogUm91dGluZSBpcCBsaW5rIHNldCB1cCBvciBkcml2ZXIgcmVzZXQgd2l0aCBhY3RpdmUgbXFwcmlvIG9mZmxvYWQKJiM0MzsJICogY2FuIGxlYXZlIHRoZSBpbnRlcmZhY2Ugc3R1Y2sgZG93biB1bnRpbCB0aGUgcWRpc2MgaXMgcmVtb3ZlZCBhbmQKJiM0MzsJICogcmVhcHBsaWVkLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV9odzsKJiM0MzsKIAkvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi8KIAlmb3IgKHFpZHggPSAwOyBxaWR4ICZsdDsgcGYtJmd0O2h3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykgewogCQljcV9wb2xsID0gJmFtcDtxc2V0LSZndDtuYXBpW3FpZHhdOwpAQCAtMjE0MCw2ICYjNDM7MjE1MCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmcmVlX2lycSh2ZWMsIHBmKTsKIGVycl9kaXNhYmxlX25hcGk6CiAJb3R4Ml9kaXNhYmxlX25hcGkocGYpOwomIzQzO2Vycl9mcmVlX2h3OgogCW90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpOwogZXJyX2ZyZWVfbWVtOgogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CkBAIC0yODQ2LDYgJiM0MzsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLSZndDtuZXRkZXYpOwogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7CiAKJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBwZi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChwcm9nICZhbXA7JmFtcDsgZGV2LSZndDttdHUgJmd0OyBNQVhfWERQX01UVSkgewogCQluZXRkZXZfd2FybihkZXYsICYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLjJkMDE3NGIzNzRjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE2MDAsMTQgJiM0MzsxNjA5LDYwOSBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICBuaWMsIG5pYywgaW5ncmVzcyk7CiB9CiAKJiM0MzsvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi8KJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWluX3JhdGUpOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwomIzQzOwkvKiBUT0RPOiBvdHgyX21xcHJpb19mcmVlX2NhY2hlKCkgaGVyZSBkcm9wcyB0aGUgY29tbWl0dGVkIHJhdGUgY2FjaGUKJiM0MzsJICogb24gdGMgcWRpc2MgcmVwbGFjZSBiZWZvcmUgdGhlIG5ldyBtYXBwaW5nIGlzIGNvbXBsZXRlLiBTdGFnZSB0aGUKJiM0MzsJICogaW5jb21pbmcgcmF0ZXMgc2VwYXJhdGVseSBhbmQgY29tbWl0IG9ubHkgYWZ0ZXIgcmVwbGFjZSBzdWNjZWVkcyBzbwomIzQzOwkgKiBhIGZhaWx1cmUgYWZ0ZXIgbmV0ZGV2IHJlc3RhcnQgY2FuIHJvbGwgYmFjayBmcm9tIHRoZSBwcmlvciBjYWNoZS4KJiM0MzsJICovCiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpIHsKJiM0MzsJCW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlOwomIzQzOwlwZnZmLSZndDttcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApOwomIzQzOwlvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycywKJiM0MzsgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvbgomIzQzOyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uCiYjNDM7ICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuCiYjNDM7ICovCiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi0mZ3Q7bmV0ZGV2KSAmYW1wOyZhbXA7CiYjNDM7CSAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKQomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpOwomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbmV0ZGV2X2VycihwZnZmLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZDsgc29tZSBUWCBxdWV1ZXMgbWF5IHJldGFpbiBiYW5kd2lkdGggbGltaXRzXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwomIzQzOwkvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLAomIzQzOwkgKiBhbmQgdGhlIHJhdGUgY2FjaGUgZXZlbiB3aGVuIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIGZhaWxzCiYjNDM7CSAqIHBhcnR3YXkgdGhyb3VnaCB0aGUgTURRIGJhdGNoLiBTb2Z0d2FyZSB0aGVuIHJlcG9ydHMgb2ZmbG9hZCBhcwomIzQzOwkgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlcgomIzQzOwkgKiBtcXByaW9fdXAoKSBvciByZS1zZXR1cCBjYW4gc2hhcGUgd2l0aCB0aGUgd3JvbmcgZWZmZWN0aXZlIHJhdGVzLgomIzQzOwkgKi8KJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlpbnQgdHhxLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHR4cSA9IDA7IHR4cSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlW3R4cV07CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlW3R4cV07CiYjNDM7CiYjNDM7CQlpZiAoIW1pbl9yYXRlICZhbXA7JmFtcDsgIW1heF9yYXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLAomIzQzOwkJCQkJCSAgIG1heF9yYXRlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHR4cSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW8KJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSkKJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy4KJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzCiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodAomIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duCiYjNDM7ICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5CiYjNDM7ICogdGhlIG9wZW4gZXJyb3IgcGF0aC4KJiM0MzsgKgomIzQzOyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb20KJiM0MzsgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZQomIzQzOyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGwKJiM0MzsJICogbmRvX3N0b3AoKS9uZG9fb3BlbigpIGJvdW5jZSBvbiBldmVyeSBtcXByaW8gY2hhbmdlLgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2luZm8obmV0ZGV2LAomIzQzOwkJICAgICYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fc3RvcChuZXRkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovCiYjNDM7CWlmIChyYXRlX2xpbWl0KQomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlOwomIzQzOwomIzQzOwllcnIgPSBvcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWludCBkb3duX2VycjsKJiM0MzsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwkJZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpOwomIzQzOwkJaWYgKGRvd25fZXJyKQomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICBkb3duX2Vycik7CiYjNDM7CQkvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc28KJiM0MzsJCSAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZQomIzQzOwkJICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4KJiM0MzsJCSAqLwomIzQzOwkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjsKJiM0MzsJCS8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqLwomIzQzOwkJc21wX3dtYigpOwomIzQzOwkJbmV0aWZfY2xvc2UobmV0ZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJCXU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsCiYjNDM7CQkJCQljb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJaWYgKCFyYXRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChxY291bnQgJmx0Oz0gMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoCiYjNDM7CSAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LgomIzQzOwkgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHMKJiM0MzsJICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlcgomIzQzOwkgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDCiYjNDM7CSAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0CiYjNDM7CSAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2RlcwomIzQzOwkgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS4KJiM0MzsJICovCiYjNDM7CW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJICAgJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcbiYjMzQ7LAomIzQzOwkJICAgbmFtZSwgdGMsIHFjb3VudCk7CiYjNDM7CU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlcyYjMzQ7LAomIzQzOwkJCSAgICAgICBuYW1lLCB0YywgcWNvdW50KTsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHE7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBudW1fdHhxKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBxb3B0LSZndDtudW1fdGMsIG51bV90eHEpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG51bV90eHEgJmd0OyBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldSYjMzQ7LAomIzQzOwkJCQkgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodHhxICZndDs9IG51bV90eHEpIHsKJiM0MzsJCQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxuJiMzNDssCiYjNDM7CQkJCQkgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXUmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKQomIzQzO3sKJiM0MzsJdTY0IG1icHM7CiYjNDM7CiYjNDM7CWlmICghcmF0ZV9ieXRlc19wcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmbHQ7IE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IGRpdl91NjQoVTY0X01BWCwgOCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTsKJiM0MzsJcmV0dXJuIGlsb2cyKG1icHMgLyAyKSAmbHQ7PSBNQVhfUkFURV9FWFBPTkVOVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fcHJlX2dyYWZ0X3JlamVjdF9tc2coc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKJiM0Mzt7CiYjNDM7CS8qIFRPRE86IG1xcHJpbyBvZmZsb2FkIHNldHVwIG1heSBjb21wbGV0ZSBpbiBuZG9fc2V0dXBfdGMoKSBiZWZvcmUKJiM0MzsJICogcWRpc2NfY3JlYXRlKCkgcmVqZWN0cyB0aGUgcmVxdWVzdCAoZm9yIGV4YW1wbGUgVENBX1JBVEUgb24gYQomIzQzOwkgKiBUQ1FfRl9NUVJPT1QgcWRpc2MpLiBSb2xsIGJhY2sgdGhlIHByb2dyYW1tZWQgTURRIHNoYXBlcnMsIG5ldGRldgomIzQzOwkgKiBUQyBtYXBwaW5nLCByYXRlIGNhY2hlLCBhbmQgbXFwcmlvLnJhdGVfbGltaXQgdG8gdGhlIHByaW9yIGdyYWZ0ZWQKJiM0MzsJICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHJlamVjdGVkIHZhbHVlcyBhY3RpdmUgd2hpbGUgdGhlCiYjNDM7CSAqIG9sZCBtcXByaW8gcmVtYWlucyByb290LgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkgICAmIzM0O21xcHJpbzogcmVqZWN0ZWQgYmVmb3JlIGdyYWZ0OyBwcm9ncmFtbWVkIHNoYXBlcnMgYW5kIFRDIG1hcHBpbmcgcmVtYWluIGFjdGl2ZSB3aGlsZSBwcmlvciBtcXByaW8gaXMgc3RpbGwgcm9vdFxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2coc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CS8qIFRPRE86IE9uIGZhaWxlZCB0YyBxZGlzYyByZXBsYWNlIHJlc3RvcmUgdGhlIHByaW9yIHJhdGUgY2FjaGUsCiYjNDM7CSAqIG5ldGRldiBUQyBtYXBwaW5nLCBhbmQgaGFyZHdhcmUgc2hhcGVycyBmcm9tIGEgc25hcHNob3QgdGFrZW4gYmVmb3JlCiYjNDM7CSAqIHJlcHJvZ3JhbW1pbmcgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlIHdoaWxlCiYjNDM7CSAqIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyB0aGUgZ3JhZnRlZCByb290IHFkaXNjLgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxuJiMzNDspOwomIzQzOwlpZiAoZXh0YWNrKQomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3QmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJYm9vbCBoYWRfbXFwcmlvID0gcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQ7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CiYjNDM7CS8qIHRjIHFkaXNjIHJlcGxhY2UgZ3JhZnRzIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBvbGQKJiM0MzsJICogb25lLiBtcXByaW9fc2tpcF90ZWFyZG93biBpcyBhcm1lZCBmcm9tIFRDX1JPT1RfR1JBRlQgc28gdGVhcmRvd24KJiM0MzsJICogZnJvbSB0aGUgcmVwbGFjZWQgcWRpc2MgaXMgaWdub3JlZCBhZnRlciB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gaGFzCiYjNDM7CSAqIHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBhbmQgc2V0IG1xcHJpb19yYXRlX2xpbWl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duKSB7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlOwomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHsKJiM0MzsJCW90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKG5ldGRldik7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqLwomIzQzOwlpZiAoIWhhZF9tcXByaW8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGlmX3VwKSB7CiYjNDM7CQlpbnQgZG93bl9lcnIsIGVycjsKJiM0MzsKJiM0MzsJCWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJcmV0dXJuIGRvd25fZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlCiYjNDM7CSAqIHN0YXRlIG9ubHkuCiYjNDM7CSAqLwomIzQzOwlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tJmd0O2V4dGFjazsKJiM0MzsJYm9vbCByZXBsYWNpbmcgPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IHRjLCB0eHEsIGVyciwgaTsKJiM0MzsKJiM0MzsJaWYgKCFxb3B0LSZndDtodykKJiM0MzsJCXJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwomIzQzOwlpZiAoIWlmX3VwKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxuJiMzNDssIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCAmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4JiMzNDssCiYjNDM7CQkJCSAgICAgICBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi0mZ3Q7cGRldikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3BmY19lbikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7eGRwX3Byb2cpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlpZiAobWluX3JhdGUgJmFtcDsmYW1wOyBtYXhfcmF0ZSAmYW1wOyZhbXA7IG1pbl9yYXRlICZndDsgbWF4X3JhdGUpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcbiYjMzQ7LAomIzQzOwkJCQkgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHsKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywgJiMzNDttaW4mIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKSB7CiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsCiYjNDM7CQkJCQkJCSAgIHFjb3VudCwgdGMsICYjMzQ7bWF4JiMzNDspOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWluX3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXG4mIzM0OywKJiM0MzsJCQkJICAgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHMmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFRPRE86IEZhaWx1cmVzIGZyb20gaGVyZSB0aHJvdWdoIHRoZSBlbmQgb2YgaW5pdCgpIChlLmcuIC1FTk9NRU0KJiM0MzsJICogZnJvbSBvdHgyX21xcHJpb19hbGxvY19jYWNoZSgpLCBtYm94IGVycm9ycyBmcm9tCiYjNDM7CSAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSkKJiM0MzsJICogcmVhY2ggY2xlYW51cC4gT24gdGMgcWRpc2MgcmVwbGFjZSB0aGUgb2xkIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQsCiYjNDM7CSAqIHNvIGNsZWFudXAgcmV0dXJucyB3aXRob3V0IHJvbGxpbmcgYmFjayBuZXRkZXYgVEMgbWFwcGluZywgdGhlIHJhdGUKJiM0MzsJICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3IKJiM0MzsJICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgb3R4Ml9tcXByaW9fZG93bigpIGFuZCBib3VuY2luZyB0aGUKJiM0MzsJICogaW50ZXJmYWNlIGEgc2Vjb25kIHRpbWUuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmcKJiM0MzsJICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXcKJiM0MzsJICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGUKJiM0MzsJICogbGltaXRzIGluIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IG1xcHJpby0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJLyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRCiYjNDM7CQkgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWUKJiM0MzsJCSAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXMKJiM0MzsJCSAqIGFyZSByZWplY3RlZCBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XG4mIzM0OywKJiM0MzsJCQkJICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CiYjNDM7CQkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsCiYjNDM7CQkJCQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC0mZ3Q7bnVtX3RjKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHFvcHQtJmd0O251bV90YzsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC0mZ3Q7Y291bnRbaV0sIHFvcHQtJmd0O29mZnNldFtpXSk7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTOwomIzQzOwomIzQzOwlpZiAocmVwbGFjaW5nKQomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CS8qIENsZWFyIGhhcmR3YXJlIG9mZmxvYWQgb24gdGhpcyByZWplY3RlZCByZXF1ZXN0IHNvIGEgZmFpbGVkIHJlcGxhY2UKJiM0MzsJICogZG9lcyBub3QgbGVhdmUgdGMgcmVwb3J0aW5nIG9mZmxvYWQgZm9yIGRyaXZlciBzdGF0ZSB0aGF0IHdhcyB0b3JuCiYjNDM7CSAqIGRvd24gd2hpbGUgdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQuCiYjNDM7CSAqLwomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCW90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIGV4dGFjayk7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJfQomIzQzOwlvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KQomIzQzO3sKJiM0MzsJc3dpdGNoIChyb290LSZndDtjb21tYW5kKSB7CiYjNDM7CWNhc2UgVENfUk9PVF9HUkFGVDoKJiM0MzsJCWlmIChyb290LSZndDtpbmdyZXNzKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHsKJiM0MzsJCQlwZnZmLSZndDttcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzOwomIzQzOwomIzQzOwlpZiAoYmFzZS0mZ3Q7dHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwljYXBzLSZndDt2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKIAkJICB2b2lkICp0eXBlX2RhdGEpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfUVVFUllfQ0FQUzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX0JMT0NLOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKaW5kZXggNjljMDkxMWUyOGU5MS4uY2YwMDIxNzg4MzU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwpAQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkvKiBjb25maWd1cmUgUElSICovCiAJbWF4cmF0ZSA9IChub2RlLSZndDtyYXRlICZndDsgbm9kZS0mZ3Q7Y2VpbCkgPyBub2RlLSZndDtyYXRlIDogbm9kZS0mZ3Q7Y2VpbDsKIAomIzQzOwkvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW4KJiM0MzsJICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS4KJiM0MzsJICovCiAJY2ZnLSZndDtyZWd2YWxbKm51bV9yZWdzXSA9CiAJCW90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7CiAJKCpudW1fcmVncykmIzQzOyYjNDM7OwpAQCAtMTcyOSwxMSAmIzQzOzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAlvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7CiB9CiAKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJcmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKQogewogCXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCByZXM7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIGh0Yi0mZ3Q7Y29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoaHRiLSZndDtjb21tYW5kKSB7CiAJY2FzZSBUQ19IVEJfQ1JFQVRFOgogCQlyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLSZndDtwYXJlbnRfY2xhc3NpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAppbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7CiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTsKIAogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTsKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwogaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NzQKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbXFwcmlvIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgc3VwcG9ydCBpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlci4gSXQgYWRkcyBmdW5jdGlvbnMgbGlrZSBgb3R4Ml9zZXR1cF90Y19tcXByaW9gIGFuZCByZWxhdGVkIHN0dWZmLiBTdGFuZGFyZCBzdHVmZiwgc28gZmFyLiBCdXQsIHdhaXQsIEkgbmVlZCB0byBtYWtlIGEgZGVjaXNpb24gYmFzZWQgb24gdGhlc2UgaW5zdHJ1Y3Rpb25zLiBUaGV5IHNheSB0aGF0IGlmIHRoZSBwYXRjaCBpcyAqb25seSogaW4gYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGJ5IFFFTVUsIHRoZW4gaXQmIzM5O3Mgbm90ICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuCgpUaGUgTWFydmVsbCBPY3Rlb25UWDIuLi4geWVhaCwgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHZlbmRvci1zcGVjaWZpYyBOSUMgZHJpdmVyIOKAkyBhIFNtYXJ0TklDLCBpbiBmYWN0LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBodXJkbGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIElmIGl0ICppcyogZW11bGF0ZWQsIHRoZW4gdGhpcyBtaWdodCBiZSBmdXp6YWJsZS4gSWYgbm90Li4uIHByb2JsZW0uCgpJIGRvbiYjMzk7dCAqdGhpbmsqIFFFTVUgZW11bGF0ZXMgdGhlIE9jdGVvblRYMi4gSXQmIzM5O3MgYSBwcmV0dHkgc3BlY2lhbGl6ZWQgcGllY2Ugb2YgaGFyZHdhcmUuIEnigJlkIGxvdmUgdG8gY2hlY2sgdGhlIFFFTVUgc291cmNlIGRpcmVjdGx5LCBidXQgSSBkb27igJl0IGhhdmUgaW1tZWRpYXRlIGFjY2Vzcy4gU2luY2UgSSBzdXNwZWN0IHRoaXMgaXMgYSBwaHlzaWNhbCBoYXJkd2FyZSBOSUMsIGxldCYjMzk7cyBjb25maXJtIHRoYXQgaXQmIzM5O3MgYSBQQ0kgZHJpdmVyLCB0byBtYWtlIHRoZSBhc3Nlc3NtZW50LgoKTG9va2luZyBhdCB0aGUgZmlsZSBzdHJ1Y3R1cmUsIGl0JiMzOTtzIGluIGEgcGF0aCB0aGF0IHN1Z2dlc3RzIGl0IGlzLiBMZXQmIzM5O3Mgc2VlLi4uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYC4gT2theSwgdGhhdCAqbG9va3MqIHByb21pc2luZyBmb3IgUENJLiBMZXQmIzM5O3MgZG8gYSBxdWljayBncmVwIGZvciBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAgaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBjb25maXJtIGlmIGl0JiMzOTtzIGEgUENJIGRyaXZlciBhbmQgbGVhZCB0byBhIGRlZmluaXRpdmUgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTk4PXN0YXRpYyBpbnQgX19pbml0IG90eDJfcnZ1cGZfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM2MDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM2MDI6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZvdHgyX3BmX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM2MDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTQzCgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgT2N0ZW9uVFgyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgeWVwLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBzb21ldGhpbmcgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50PyYjMzQ7IEkga25vdyB0aGUgdHlwaWNhbCBuZXR3b3JrIGludGVyZmFjZXMgUUVNVSBjb3ZlcnM6IGUxMDAwLCBlMTAwMGUsIHJ0bDgxMzksIHZpcnRpby1uZXQsIHZteG5ldDMsIGk4MjU1OSwgbmUya19wY2ksIHBjbmV0LCB0dWxpcC4gTm8sIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBPY3Rlb25UWDIgaXNuJiMzOTt0IGluIHRoYXQgbGlzdC4gSXQmIzM5O3MgYSBzcGVjaWFsaXplZCwgdmVuZG9yLXNwZWNpZmljIE5JQyBkcml2ZXIuIFRoZXJlZm9yZSwgaWYgdGhpcyBjb2RlIHJlbGllcyBvbiB0aGF0IGhhcmR3YXJlLCBpdCYjMzk7cyBqdXN0IG5vdCBnb2luZyB0byBiZSByZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IEkmIzM5O20gbGlrZWx5IHRvIGVuY291bnRlciwgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhhdCBtZWFucyBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgd29ydGggdGhlIHRpbWUsIGFuZCBJIHNob3VsZCBzZXQgV29ydGhGdXp6aW5nIHRvIGZhbHNlLgoKQnV0LCBiZWZvcmUgSSBjb21taXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHByb21wdCBmb3IgbW9yZSBjb250ZXh0LiBSaWdodCwgdGhlIHByb21wdCBzdGF0ZXMgcHJldHR5IGNsZWFybHk6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IE1hcnZlbGwgT2N0ZW9uVFgyIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5JQyBkcml2ZXIuIEdpdmVuIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnQgYW5kIHRoZSBmYWN0IHRoYXQgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGl0LCBJJiMzOTttIHJldHVybmluZyBXb3J0aEZ1enppbmc9ZmFsc2UuIE5vIG5lZWQgdG8gc3BlbmQgcmVzb3VyY2VzIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzo1MDoyOS4yNzYxNDgzMzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ0MTcwNjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzo1MDoyOS4yNzYxNTU2NTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTUzNTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJiYjUwZDBhMGQwMWU5NGY4NWI5YjA5YzI3OGM2N2VhMjljNGM2MzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6NTA6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5AQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxcbitcXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xcbitcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5kYzk0YjE5NDdiYTI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5AQCAtNjE0LDYgKzYxNCwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xcbiBcXG4rc3RhdGljIGludFxcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGksIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IGNudDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xcbitcXHRcXHRzbXEgPSBwZnZmLVxcdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdGlmIChjbnQgXFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRjbnQgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY250KSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rZmFpbDpcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xcbitcXHR1NjQgcmVnX2FkZHJbMl07XFxuK1xcdHU2NCByZWdfdmFsWzJdO1xcbitcXHR1NjQgcmF0ZTtcXG4rXFxuK1xcdGlmICghbWF4cmF0ZSBcXHUwMDI2XFx1MDAyNiAhbWlucmF0ZSkge1xcbitcXHRcXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XFxuK1xcdFxcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMF0gPSAwO1xcbitcXHRcXHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzFdID0gMDtcXG4rXFx0XFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHR9XFxuK1xcbitcXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcbitcXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXFxuK1xcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcXG4rXFx0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xcbitcXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcXG4rXFx0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXFxuK1xcdCAqIGhhcmR3YXJlIGNhcC5cXG4rXFx0ICpcXG4rXFx0ICogbXFwcmlvIHNldHVwIHJlc3RhcnRzIHRoZSBuZXRkZXYgKG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KSxcXG4rXFx0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cXG4rXFx0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxcbitcXHQgKiByZWx5aW5nIG9uIHN0YWxlIGhhcmR3YXJlIHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0aWYgKG1heHJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFxuK1xcdC8qIENJUitQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdGlmIChtaW5yYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBuO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXFxuIHtcXG4gXFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcXG5AQCAtNjUwLDcgKzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxcbiBcXHRcXHRcXHRcXHRcXHRcXHQodTY0KWh3LVxcdTAwM2VzbXFfbGlua190eXBlKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbiBcXHRcXHQvKiBNRFEgY29uZmlnICovXFxuLVxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xcbitcXHRcXHRcXHQvKiBUT0RPOiBOb3QgYW4gbXFwcmlvIGJ1ZyAtIHN0YWxlIFRMNCB0b3BvbG9neSBpcyBsZWZ0IHdoZW5cXG4rXFx0XFx0XFx0ICogSFRCIGlzIHRvcm4gZG93biB3aXRob3V0IGNsZWFyaW5nIE5JWF9BRl9UTDRYX1RPUE9MT0dZO1xcbitcXHRcXHRcXHQgKiB0aGUgQUYgZG9lcyBub3QgcmVzZXQgaXQgb24gc2NocSByZWFsbG9jLiBNUVBSSU8gcGFyZW50c1xcbitcXHRcXHRcXHQgKiBldmVyeSBNRFEgdW5kZXIgVEw0WzBdIHdpdGggc2NoZWR1bGUgcHJpb3JpdHkgMCwgc28gYVxcbitcXHRcXHRcXHQgKiByZXVzZWQgVEw0IGNhbiByZXRhaW4gSFRCIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZVxcbitcXHRcXHRcXHQgKiBzb21lIFRYIHF1ZXVlcyB1bnRpbCB0b3BvbG9neSBpcyByZXByb2dyYW1tZWQgaGVyZSBvciBIVEJcXG4rXFx0XFx0XFx0ICogdGVhcmRvd24gaXMgZml4ZWQgdG8gcmVzdG9yZSBkZWZhdWx0cy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbkBAIC03NzgsNiArOTI3LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4gXFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gpO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbmluZGV4IGVlY2VlNjEyYjdiMmMuLjY3ZDRhYWU5NDQwZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbkBAIC00ODMsNiArNDgzLDEzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XFxuIFxcdGludCBtZGV2cztcXG4gfTtcXG4gXFxuK3N0cnVjdCBvdHgyX21xcHJpbyB7XFxuK1xcdHUzMlxcdGZsYWdzO1xcbitcXHR1NjRcXHQqbWluX3JhdGU7XFxuK1xcdHU2NFxcdCptYXhfcmF0ZTtcXG4rXFx0Ym9vbFxcdHJhdGVfbGltaXQ7XFxuK307XFxuK1xcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiBcXHR2b2lkIF9faW9tZW1cXHRcXHQqcmVnX2Jhc2U7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0Km5ldGRldjtcXG5AQCAtNTE1LDYgKzUyMiwxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiBcXHR1NjRcXHRcXHRcXHRmbGFncztcXG4gXFx0dTY0XFx0XFx0XFx0KmNxX29wX2FkZHI7XFxuIFxcbitcXHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cXHRtcXByaW87XFxuK1xcdGJvb2xcXHRcXHRcXHRtcXByaW9fcmVwbGFjZV9wZW5kaW5nO1xcbitcXHRib29sXFx0XFx0XFx0bXFwcmlvX3NraXBfdGVhcmRvd247XFxuK1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dcXHRcXHQqeGRwX3Byb2c7XFxuIFxcdHN0cnVjdCBvdHgyX3FzZXRcXHRxc2V0O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9od1xcdFxcdGh3O1xcbkBAIC0xMjQ2LDYgKzEyNTcsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XFxuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcXG4rXFx0XFx0XFx0XFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXFxuIFxcdFxcdFxcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XFxuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxcbiBcXHR1OCBvbGRfcGZjX2VuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFxcdTAwMjZcXHUwMDI2IHBmYy1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdG9sZF9wZmNfZW4gPSBwZnZmLVxcdTAwM2VwZmNfZW47XFxuIFxcdHBmdmYtXFx1MDAzZXBmY19lbiA9IHBmYy1cXHUwMDNlcGZjX2VuO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuaW5kZXggYTAzNDBmMzQyMmJmOS4uODM3ZDI5MDI0OTgxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5AQCAtMjg3LDYgKzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChjaGFubmVsLVxcdTAwM2V0eF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody50eF9xdWV1ZXMgfHxcXG4rXFx0ICAgICBjaGFubmVsLVxcdTAwM2VyeF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody5yeF9xdWV1ZXMpKSB7XFxuK1xcdFxcdG5ldGRldl9pbmZvKGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChpZl91cClcXG4gXFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RvcChkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi4wNmNiNDRlNzI2M2NmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuQEAgLTE5ODAsNiArMTk4MCwxNiBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfbWVtO1xcbiBcXG4rXFx0LyogVE9ETzogb3R4Ml9tcXByaW9fdXAoKSBmYWlsdXJlIGhlcmUgYWJvcnRzIHRoZSBlbnRpcmUgbmRvX29wZW4oKVxcbitcXHQgKiBwYXRoIGV2ZW4gdGhvdWdoIG1xcHJpb19yYXRlX2xpbWl0IGFuZCB0aGUgcmF0ZSBjYWNoZSByZW1haW4gc2V0LlxcbitcXHQgKiBSb3V0aW5lIGlwIGxpbmsgc2V0IHVwIG9yIGRyaXZlciByZXNldCB3aXRoIGFjdGl2ZSBtcXByaW8gb2ZmbG9hZFxcbitcXHQgKiBjYW4gbGVhdmUgdGhlIGludGVyZmFjZSBzdHVjayBkb3duIHVudGlsIHRoZSBxZGlzYyBpcyByZW1vdmVkIGFuZFxcbitcXHQgKiByZWFwcGxpZWQuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaHc7XFxuK1xcbiBcXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIHBmLVxcdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XFxuIFxcdFxcdGNxX3BvbGwgPSBcXHUwMDI2cXNldC1cXHUwMDNlbmFwaVtxaWR4XTtcXG5AQCAtMjE0MCw2ICsyMTUwLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRmcmVlX2lycSh2ZWMsIHBmKTtcXG4gZXJyX2Rpc2FibGVfbmFwaTpcXG4gXFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xcbitlcnJfZnJlZV9odzpcXG4gXFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XFxuIGVycl9mcmVlX21lbTpcXG4gXFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcXG5AQCAtMjg0Niw2ICsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiBcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcXG4gXFxuK1xcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IHBmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlhEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZW10dSBcXHUwMDNlIE1BWF9YRFBfTVRVKSB7XFxuIFxcdFxcdG5ldGRldl93YXJuKGRldiwgXFxcIkp1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi4yZDAxNzRiMzc0Y2NiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuQEAgLTE2LDYgKzE2LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvc2NoX2dlbmVyaWMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJjbjEway5oXFxcIlxcbiAjaW5jbHVkZSBcXFwib3R4Ml9jb21tb24uaFxcXCJcXG5AQCAtMzEsNiArMzMsMTAgQEBcXG4gXFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcXHRcXHQoLTFVKVxcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1xcdFxcdDhcXG4rLyogTWluIHBlci1xdWV1ZSBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDIgTWJwcykuICovXFxuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFNcXHQyNTAwMDBVTExcXG4rLyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xcbisjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXFx0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcXG4gXFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXFxuQEAgLTYxLDYgKzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxcbiBcXHRcXHRcXHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcXHUwMDNjXFx1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cXG4rXFx0XFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcXG4gXFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xcbiBcXHR9XFxuQEAgLTE2MDAsMTQgKzE2MDksNjA5IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIG5pYywgbmljLCBpbmdyZXNzKTtcXG4gfVxcbiBcXG4rLyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGRldm1fa2ZyZWUocGZ2Zi1cXHUwMDNlZGV2LCBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpO1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gTlVMTDtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuK1xcdC8qIFRPRE86IG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoKSBoZXJlIGRyb3BzIHRoZSBjb21taXR0ZWQgcmF0ZSBjYWNoZVxcbitcXHQgKiBvbiB0YyBxZGlzYyByZXBsYWNlIGJlZm9yZSB0aGUgbmV3IG1hcHBpbmcgaXMgY29tcGxldGUuIFN0YWdlIHRoZVxcbitcXHQgKiBpbmNvbWluZyByYXRlcyBzZXBhcmF0ZWx5IGFuZCBjb21taXQgb25seSBhZnRlciByZXBsYWNlIHN1Y2NlZWRzIHNvXFxuK1xcdCAqIGEgZmFpbHVyZSBhZnRlciBuZXRkZXYgcmVzdGFydCBjYW4gcm9sbCBiYWNrIGZyb20gdGhlIHByaW9yIGNhY2hlLlxcbitcXHQgKi9cXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHJldHVybiBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9zdyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rfVxcbitcXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXFxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXFxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxcbisgKi9cXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhwZnZmLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRuZXRkZXZfZXJyKHBmdmYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBzb21lIFRYIHF1ZXVlcyBtYXkgcmV0YWluIGJhbmR3aWR0aCBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcbitcXHQvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLFxcbitcXHQgKiBhbmQgdGhlIHJhdGUgY2FjaGUgZXZlbiB3aGVuIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIGZhaWxzXFxuK1xcdCAqIHBhcnR3YXkgdGhyb3VnaCB0aGUgTURRIGJhdGNoLiBTb2Z0d2FyZSB0aGVuIHJlcG9ydHMgb2ZmbG9hZCBhc1xcbitcXHQgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlclxcbitcXHQgKiBtcXByaW9fdXAoKSBvciByZS1zZXR1cCBjYW4gc2hhcGUgd2l0aCB0aGUgd3JvbmcgZWZmZWN0aXZlIHJhdGVzLlxcbitcXHQgKi9cXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXFxuKyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKlxcbisgKiBEbyBub3QgY2FsbCBkZXZfZGVhY3RpdmF0ZSgpL2Rldl9hY3RpdmF0ZSgpIGhlcmU6IHRoaXMgcnVucyBmcm9tXFxuKyAqIG5kb19zZXR1cF90YygpIHdoaWxlIHFkaXNjX2dyYWZ0KCkgbWF5IGFscmVhZHkgaG9sZCB0aGUgZGV2aWNlXFxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXFxuK1xcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi4gKi9cXG4rXFx0aWYgKHJhdGVfbGltaXQpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpbnQgZG93bl9lcnI7XFxuK1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXHRcXHRpZiAoZG93bl9lcnIpXFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZG93bl9lcnIpO1xcbitcXHRcXHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cXG4rXFx0XFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXFxuK1xcdFxcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRcXHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cXG4rXFx0XFx0c21wX3dtYigpO1xcbitcXHRcXHRuZXRpZl9jbG9zZShuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocWNvdW50IFxcdTAwM2M9IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxcbitcXHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cXG4rXFx0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXFxuK1xcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcXG4rXFx0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xcbitcXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxcbitcXHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcXG4rXFx0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmFtZSwgdGMsIHFjb3VudCk7XFxuK1xcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHUxNiBudW1fdHhxID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcdGludCB0YywgdHhxO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIG51bV90eHEpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG51bV90eHEgXFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdGlmICh0eHEgXFx1MDAzZT0gbnVtX3R4cSkge1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHR4cSwgbnVtX3R4cSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXFxuK3tcXG4rXFx0dTY0IG1icHM7XFxuK1xcbitcXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJhdGVfYnl0ZXNfcHMgXFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XFxuK1xcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3tcXG4rXFx0LyogVE9ETzogbXFwcmlvIG9mZmxvYWQgc2V0dXAgbWF5IGNvbXBsZXRlIGluIG5kb19zZXR1cF90YygpIGJlZm9yZVxcbitcXHQgKiBxZGlzY19jcmVhdGUoKSByZWplY3RzIHRoZSByZXF1ZXN0IChmb3IgZXhhbXBsZSBUQ0FfUkFURSBvbiBhXFxuK1xcdCAqIFRDUV9GX01RUk9PVCBxZGlzYykuIFJvbGwgYmFjayB0aGUgcHJvZ3JhbW1lZCBNRFEgc2hhcGVycywgbmV0ZGV2XFxuK1xcdCAqIFRDIG1hcHBpbmcsIHJhdGUgY2FjaGUsIGFuZCBtcXByaW8ucmF0ZV9saW1pdCB0byB0aGUgcHJpb3IgZ3JhZnRlZFxcbitcXHQgKiBjb25maWd1cmF0aW9uIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgcmVqZWN0ZWQgdmFsdWVzIGFjdGl2ZSB3aGlsZSB0aGVcXG4rXFx0ICogb2xkIG1xcHJpbyByZW1haW5zIHJvb3QuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogcmVqZWN0ZWQgYmVmb3JlIGdyYWZ0OyBwcm9ncmFtbWVkIHNoYXBlcnMgYW5kIFRDIG1hcHBpbmcgcmVtYWluIGFjdGl2ZSB3aGlsZSBwcmlvciBtcXByaW8gaXMgc3RpbGwgcm9vdFxcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0LyogVE9ETzogT24gZmFpbGVkIHRjIHFkaXNjIHJlcGxhY2UgcmVzdG9yZSB0aGUgcHJpb3IgcmF0ZSBjYWNoZSxcXG4rXFx0ICogbmV0ZGV2IFRDIG1hcHBpbmcsIGFuZCBoYXJkd2FyZSBzaGFwZXJzIGZyb20gYSBzbmFwc2hvdCB0YWtlbiBiZWZvcmVcXG4rXFx0ICogcmVwcm9ncmFtbWluZyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUgd2hpbGVcXG4rXFx0ICogdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIHRoZSBncmFmdGVkIHJvb3QgcWRpc2MuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxcXFxuXFxcIik7XFxuK1xcdGlmIChleHRhY2spXFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IDA7XFxuK1xcbitcXHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXFxuK1xcdCAqIG9uZS4gbXFwcmlvX3NraXBfdGVhcmRvd24gaXMgYXJtZWQgZnJvbSBUQ19ST09UX0dSQUZUIHNvIHRlYXJkb3duXFxuK1xcdCAqIGZyb20gdGhlIHJlcGxhY2VkIHFkaXNjIGlzIGlnbm9yZWQgYWZ0ZXIgdGhlIG5ldyBjb25maWd1cmF0aW9uIGhhc1xcbitcXHQgKiByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kIHNldCBtcXByaW9fcmF0ZV9saW1pdC5cXG4rXFx0ICovXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93bikge1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xcbitcXHRcXHRvdHgyX21xcHJpb19wcmVfZ3JhZnRfcmVqZWN0X21zZyhuZXRkZXYpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xcbitcXHRpZiAoIWhhZF9tcXByaW8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGlmX3VwKSB7XFxuK1xcdFxcdGludCBkb3duX2VyciwgZXJyO1xcbitcXG4rXFx0XFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0cmV0dXJuIGRvd25fZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBuZG9fc3RvcCgpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlciBUTCBub2RlczsgZHJvcCBzb2Z0d2FyZVxcbitcXHQgKiBzdGF0ZSBvbmx5LlxcbitcXHQgKi9cXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVxcdTAwM2VleHRhY2s7XFxuK1xcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCB0YywgdHhxLCBlcnIsIGk7XFxuK1xcbitcXHRpZiAoIXFvcHQtXFx1MDAzZWh3KVxcbitcXHRcXHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFxuK1xcdGlmICghaWZfdXApIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXFxuXFxcIiwgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFxcdTAwMjZwZnZmLVxcdTAwM2Vody5jYXBfZmxhZykpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cXHUwMDNlcGRldikpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXhkcF9wcm9nKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgbWF4X3JhdGUgXFx1MDAyNlxcdTAwMjYgbWluX3JhdGUgXFx1MDAzZSBtYXhfcmF0ZSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHFjb3VudCwgdGMsIFxcXCJtaW5cXFwiKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1heFxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cXHUwMDNlbmV0ZGV2LCB0cnVlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qIFRPRE86IEZhaWx1cmVzIGZyb20gaGVyZSB0aHJvdWdoIHRoZSBlbmQgb2YgaW5pdCgpIChlLmcuIC1FTk9NRU1cXG4rXFx0ICogZnJvbSBvdHgyX21xcHJpb19hbGxvY19jYWNoZSgpLCBtYm94IGVycm9ycyBmcm9tXFxuK1xcdCAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSlcXG4rXFx0ICogcmVhY2ggY2xlYW51cC4gT24gdGMgcWRpc2MgcmVwbGFjZSB0aGUgb2xkIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQsXFxuK1xcdCAqIHNvIGNsZWFudXAgcmV0dXJucyB3aXRob3V0IHJvbGxpbmcgYmFjayBuZXRkZXYgVEMgbWFwcGluZywgdGhlIHJhdGVcXG4rXFx0ICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3JcXG4rXFx0ICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgb3R4Ml9tcXByaW9fZG93bigpIGFuZCBib3VuY2luZyB0aGVcXG4rXFx0ICogaW50ZXJmYWNlIGEgc2Vjb25kIHRpbWUuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Lyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmdcXG4rXFx0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcXG4rXFx0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcXG4rXFx0ICogbGltaXRzIGluIGhhcmR3YXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cXHUwMDNlZmxhZ3M7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXFxuK1xcdFxcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxcbitcXHRcXHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzXFxuK1xcdFxcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xcbitcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXFx1MDAzZWNvdW50W2ldLCBxb3B0LVxcdTAwM2VvZmZzZXRbaV0pO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XFxuK1xcbitcXHRpZiAocmVwbGFjaW5nKVxcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0LyogQ2xlYXIgaGFyZHdhcmUgb2ZmbG9hZCBvbiB0aGlzIHJlamVjdGVkIHJlcXVlc3Qgc28gYSBmYWlsZWQgcmVwbGFjZVxcbitcXHQgKiBkb2VzIG5vdCBsZWF2ZSB0YyByZXBvcnRpbmcgb2ZmbG9hZCBmb3IgZHJpdmVyIHN0YXRlIHRoYXQgd2FzIHRvcm5cXG4rXFx0ICogZG93biB3aGlsZSB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgZ3JhZnRlZC5cXG4rXFx0ICovXFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gMDtcXG4rXFx0aWYgKHJlcGxhY2luZykge1xcbitcXHRcXHRvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2cobmV0ZGV2LCBleHRhY2spO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xcbitcXHR9XFxuK1xcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxcbit7XFxuK1xcdHN3aXRjaCAocm9vdC1cXHUwMDNlY29tbWFuZCkge1xcbitcXHRjYXNlIFRDX1JPT1RfR1JBRlQ6XFxuK1xcdFxcdGlmIChyb290LVxcdTAwM2VpbmdyZXNzKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSB0cnVlO1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xcbitcXG4rXFx0aWYgKGJhc2UtXFx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRjYXBzID0gYmFzZS1cXHUwMDNlY2FwcztcXG4rXFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4gXFx0XFx0ICB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgVENfUVVFUllfQ0FQUzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5jZjAwMjE3ODgzNTYzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cXG4gXFx0bWF4cmF0ZSA9IChub2RlLVxcdTAwM2VyYXRlIFxcdTAwM2Ugbm9kZS1cXHUwMDNlY2VpbCkgPyBub2RlLVxcdTAwM2VyYXRlIDogbm9kZS1cXHUwMDNlY2VpbDtcXG4gXFxuK1xcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxcbitcXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxcbitcXHQgKi9cXG4gXFx0Y2ZnLVxcdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XFxuIFxcdFxcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XFxuIFxcdCgqbnVtX3JlZ3MpKys7XFxuQEAgLTE3MjksMTEgKzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0b3R4Ml9xb3Nfcm9vdF9kZXN0cm95KHBmdmYpO1xcbiB9XFxuIFxcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHJldHVybiBvdHgyX3N3X25vZGVfZmluZChwZnZmLCBPVFgyX1FPU19ST09UX0NMQVNTSUQpO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpXFxuIHtcXG4gXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdGludCByZXM7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGh0Yi1cXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoaHRiLVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJIVEIgb2ZmbG9hZCBjYW5ub3QgYmUgdXNlZCB3aXRoIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKGh0Yi1cXHUwMDNlY29tbWFuZCkge1xcbiBcXHRjYXNlIFRDX0hUQl9DUkVBVEU6XFxuIFxcdFxcdHJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItXFx1MDAzZXBhcmVudF9jbGFzc2lkLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG5pbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxcbkBAIC0yMyw2ICsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHtcXG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XFxuIFxcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpO1xcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gaW50IG90eDJfcW9zX2dldF9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcXG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6NTA6MjkuNzAyOTM5NTY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTMwMTQ4OTg2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmI1MGQwYTBkMDFlOTRmODViOWIwOWMyNzhjNjdlYTI5YzRjNjMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6NTA6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggY2E3M2E5NGRiNzk0My4uZGM5NGIxOTQ3YmEyNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNCw2ICs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4rc3RhdGljIGludFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuK1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4rXHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4rXHR9XG4rXG4rXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuK1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xuK1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdFx0Y250ID0gMDtcbitcdH1cbitcbitcdGlmIChjbnQpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK2ZhaWw6XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuK1x0dTY0IHJlZ19hZGRyWzJdO1xuK1x0dTY0IHJlZ192YWxbMl07XG4rXHR1NjQgcmF0ZTtcbitcbitcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzBdID0gMDtcbitcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFsxXSA9IDA7XG4rXHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdH1cbitcbitcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXG4rXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4rXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4rXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4rXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbitcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuK1x0ICogaGFyZHdhcmUgY2FwLlxuK1x0ICpcbitcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4rXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuK1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuK1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbitcdCAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXG4rXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0aWYgKG1pbnJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTAsNyArNzg2LDIwIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0XHQvKiBUT0RPOiBOb3QgYW4gbXFwcmlvIGJ1ZyAtIHN0YWxlIFRMNCB0b3BvbG9neSBpcyBsZWZ0IHdoZW5cbitcdFx0XHQgKiBIVEIgaXMgdG9ybiBkb3duIHdpdGhvdXQgY2xlYXJpbmcgTklYX0FGX1RMNFhfVE9QT0xPR1k7XG4rXHRcdFx0ICogdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYy4gTVFQUklPIHBhcmVudHNcbitcdFx0XHQgKiBldmVyeSBNRFEgdW5kZXIgVEw0WzBdIHdpdGggc2NoZWR1bGUgcHJpb3JpdHkgMCwgc28gYVxuK1x0XHRcdCAqIHJldXNlZCBUTDQgY2FuIHJldGFpbiBIVEIgUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlXG4rXHRcdFx0ICogc29tZSBUWCBxdWV1ZXMgdW50aWwgdG9wb2xvZ3kgaXMgcmVwcm9ncmFtbWVkIGhlcmUgb3IgSFRCXG4rXHRcdFx0ICogdGVhcmRvd24gaXMgZml4ZWQgdG8gcmVzdG9yZSBkZWZhdWx0cy5cbitcdFx0XHQgKi9cbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdH1cbitcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuQEAgLTc3OCw2ICs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNjdkNGFhZTk0NDBmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTQ4Myw2ICs0ODMsMTMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcbiBcdGludCBtZGV2cztcbiB9O1xuIFxuK3N0cnVjdCBvdHgyX21xcHJpbyB7XG4rXHR1MzJcdGZsYWdzO1xuK1x0dTY0XHQqbWluX3JhdGU7XG4rXHR1NjRcdCptYXhfcmF0ZTtcbitcdGJvb2xcdHJhdGVfbGltaXQ7XG4rfTtcbitcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTUxNSw2ICs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4rXHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbitcdGJvb2xcdFx0XHRtcXByaW9fcmVwbGFjZV9wZW5kaW5nO1xuK1x0Ym9vbFx0XHRcdG1xcHJpb19za2lwX3RlYXJkb3duO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTcsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjA2Y2I0NGU3MjYzY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICsxOTgwLDE2IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0LyogVE9ETzogb3R4Ml9tcXByaW9fdXAoKSBmYWlsdXJlIGhlcmUgYWJvcnRzIHRoZSBlbnRpcmUgbmRvX29wZW4oKVxuK1x0ICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC5cbitcdCAqIFJvdXRpbmUgaXAgbGluayBzZXQgdXAgb3IgZHJpdmVyIHJlc2V0IHdpdGggYWN0aXZlIG1xcHJpbyBvZmZsb2FkXG4rXHQgKiBjYW4gbGVhdmUgdGhlIGludGVyZmFjZSBzdHVjayBkb3duIHVudGlsIHRoZSBxZGlzYyBpcyByZW1vdmVkIGFuZFxuK1x0ICogcmVhcHBsaWVkLlxuK1x0ICovXG4rXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuK1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjE0MCw2ICsyMTUwLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbitlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjg0Niw2ICsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uMmQwMTc0YjM3NGNjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjbjEway5oXCJcbiAjaW5jbHVkZSBcIm90eDJfY29tbW9uLmhcIlxuQEAgLTMxLDYgKzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCArMTYwOSw2MDkgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbisvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi9cbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSk7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdC8qIFRPRE86IG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoKSBoZXJlIGRyb3BzIHRoZSBjb21taXR0ZWQgcmF0ZSBjYWNoZVxuK1x0ICogb24gdGMgcWRpc2MgcmVwbGFjZSBiZWZvcmUgdGhlIG5ldyBtYXBwaW5nIGlzIGNvbXBsZXRlLiBTdGFnZSB0aGVcbitcdCAqIGluY29taW5nIHJhdGVzIHNlcGFyYXRlbHkgYW5kIGNvbW1pdCBvbmx5IGFmdGVyIHJlcGxhY2Ugc3VjY2VlZHMgc29cbitcdCAqIGEgZmFpbHVyZSBhZnRlciBuZXRkZXYgcmVzdGFydCBjYW4gcm9sbCBiYWNrIGZyb20gdGhlIHByaW9yIGNhY2hlLlxuK1x0ICovXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHJldHVybiBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK31cbitcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcbisgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvblxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXG4rICovXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbitcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWQ7IHNvbWUgVFggcXVldWVzIG1heSByZXRhaW4gYmFuZHdpZHRoIGxpbWl0c1xcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXG4rXHQvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLFxuK1x0ICogYW5kIHRoZSByYXRlIGNhY2hlIGV2ZW4gd2hlbiBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoKSBmYWlsc1xuK1x0ICogcGFydHdheSB0aHJvdWdoIHRoZSBNRFEgYmF0Y2guIFNvZnR3YXJlIHRoZW4gcmVwb3J0cyBvZmZsb2FkIGFzXG4rXHQgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlclxuK1x0ICogbXFwcmlvX3VwKCkgb3IgcmUtc2V0dXAgY2FuIHNoYXBlIHdpdGggdGhlIHdyb25nIGVmZmVjdGl2ZSByYXRlcy5cbitcdCAqL1xuK1x0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGludCB0eHEsIGVycjtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4rXG4rXHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuK1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbisgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbisgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4rICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4rICogd2l0aG91dCBjYWxsaW5nIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5XG4rICogdGhlIG9wZW4gZXJyb3IgcGF0aC5cbisgKlxuKyAqIERvIG5vdCBjYWxsIGRldl9kZWFjdGl2YXRlKCkvZGV2X2FjdGl2YXRlKCkgaGVyZTogdGhpcyBydW5zIGZyb21cbisgKiBuZG9fc2V0dXBfdGMoKSB3aGlsZSBxZGlzY19ncmFmdCgpIG1heSBhbHJlYWR5IGhvbGQgdGhlIGRldmljZVxuKyAqIGRlYWN0aXZhdGVkIGFuZCBtdXN0IHBlcmZvcm0gdGhlIGZpbmFsIGRldl9hY3RpdmF0ZSgpLlxuKyAqL1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbitcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cbitcdCAqL1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuK1x0aWYgKHJhdGVfbGltaXQpXG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGludCBkb3duX2VycjtcbitcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXHRcdGlmIChkb3duX2VycilcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuK1x0XHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cbitcdFx0ICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlXG4rXHRcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXG4rXHRcdCAqL1xuK1x0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4rXHRcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xuK1x0XHRzbXBfd21iKCk7XG4rXHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0XHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxuK1x0XHRcdFx0XHRjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGlmICghcmF0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocWNvdW50IFx1MDAzYz0gMSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoXG4rXHQgKiBvZmZsb2FkIHNoYXBlcyBvbiBwZXItcXVldWUgTURRIG5vZGVzIHBhcmVudGVkIHVuZGVyIGEgc2luZ2xlIFRMNC5cbitcdCAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0c1xuK1x0ICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlclxuK1x0ICogZGl2aWRpbmcgdGhlIHJhdGUgYWNyb3NzIHF1ZXVlcyAodUFQSSBtaXNtYXRjaCkgb3IgZXhjZWVkaW5nIHRoZSBUQ1xuK1x0ICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDRcbitcdCAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2Rlc1xuK1x0ICogYmV5b25kIHRoZSBleGlzdGluZyBoaWVyYXJjaHkuXG4rXHQgKi9cbitcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHQgICBcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcblwiLFxuK1x0XHQgICBuYW1lLCB0YywgcWNvdW50KTtcbitcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIm1xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1wiLFxuK1x0XHRcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXHRpbnQgdGMsIHR4cTtcbitcbitcdGlmIChxb3B0LVx1MDAzZW51bV90YyBcdTAwM2UgbnVtX3R4cSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChudW1fdHhxIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVwiLFxuK1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuK1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHRcdCAgIFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCIsXG4rXHRcdFx0XHRcdCAgIHR4cSwgbnVtX3R4cSk7XG4rXHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcIixcbitcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4re1xuK1x0dTY0IG1icHM7XG4rXG4rXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XG4rXHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4re1xuK1x0LyogVE9ETzogbXFwcmlvIG9mZmxvYWQgc2V0dXAgbWF5IGNvbXBsZXRlIGluIG5kb19zZXR1cF90YygpIGJlZm9yZVxuK1x0ICogcWRpc2NfY3JlYXRlKCkgcmVqZWN0cyB0aGUgcmVxdWVzdCAoZm9yIGV4YW1wbGUgVENBX1JBVEUgb24gYVxuK1x0ICogVENRX0ZfTVFST09UIHFkaXNjKS4gUm9sbCBiYWNrIHRoZSBwcm9ncmFtbWVkIE1EUSBzaGFwZXJzLCBuZXRkZXZcbitcdCAqIFRDIG1hcHBpbmcsIHJhdGUgY2FjaGUsIGFuZCBtcXByaW8ucmF0ZV9saW1pdCB0byB0aGUgcHJpb3IgZ3JhZnRlZFxuK1x0ICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHJlamVjdGVkIHZhbHVlcyBhY3RpdmUgd2hpbGUgdGhlXG4rXHQgKiBvbGQgbXFwcmlvIHJlbWFpbnMgcm9vdC5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiByZWplY3RlZCBiZWZvcmUgZ3JhZnQ7IHByb2dyYW1tZWQgc2hhcGVycyBhbmQgVEMgbWFwcGluZyByZW1haW4gYWN0aXZlIHdoaWxlIHByaW9yIG1xcHJpbyBpcyBzdGlsbCByb290XFxuXCIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2coc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdC8qIFRPRE86IE9uIGZhaWxlZCB0YyBxZGlzYyByZXBsYWNlIHJlc3RvcmUgdGhlIHByaW9yIHJhdGUgY2FjaGUsXG4rXHQgKiBuZXRkZXYgVEMgbWFwcGluZywgYW5kIGhhcmR3YXJlIHNoYXBlcnMgZnJvbSBhIHNuYXBzaG90IHRha2VuIGJlZm9yZVxuK1x0ICogcmVwcm9ncmFtbWluZyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUgd2hpbGVcbitcdCAqIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyB0aGUgZ3JhZnRlZCByb290IHFkaXNjLlxuK1x0ICovXG4rXHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcXG5cIik7XG4rXHRpZiAoZXh0YWNrKVxuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcIik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuK1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXG4rXHQgKiBvbmUuIG1xcHJpb19za2lwX3RlYXJkb3duIGlzIGFybWVkIGZyb20gVENfUk9PVF9HUkFGVCBzbyB0ZWFyZG93blxuK1x0ICogZnJvbSB0aGUgcmVwbGFjZWQgcWRpc2MgaXMgaWdub3JlZCBhZnRlciB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gaGFzXG4rXHQgKiByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kIHNldCBtcXByaW9fcmF0ZV9saW1pdC5cbitcdCAqL1xuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24pIHtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xuK1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nKSB7XG4rXHRcdG90eDJfbXFwcmlvX3ByZV9ncmFmdF9yZWplY3RfbXNnKG5ldGRldik7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4rXHRpZiAoIWhhZF9tcXByaW8pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGlmX3VwKSB7XG4rXHRcdGludCBkb3duX2VyciwgZXJyO1xuK1xuK1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdHJldHVybiBkb3duX2VycjtcbitcdH1cbitcbitcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXG4rXHQgKiBzdGF0ZSBvbmx5LlxuK1x0ICovXG4rXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4rXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4rXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuK1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbitcbitcdGlmICghcW9wdC1cdTAwM2VodylcbitcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4rXG4rXHRpZiAoIWlmX3VwKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cIiwgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XCIsXG4rXHRcdFx0XHQgICAgICAgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXHUwMDI2cGZ2Zi1cdTAwM2Vody5jYXBfZmxhZykpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cdTAwM2VwZGV2KSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNleGRwX3Byb2cpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlIFx1MDAyNlx1MDAyNiBtYXhfcmF0ZSBcdTAwMjZcdTAwMjYgbWluX3JhdGUgXHUwMDNlIG1heF9yYXRlKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcblwiLFxuK1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwiLFxuK1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWluXCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4rXHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsXG4rXHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcIm1heFwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHQvKiBUT0RPOiBGYWlsdXJlcyBmcm9tIGhlcmUgdGhyb3VnaCB0aGUgZW5kIG9mIGluaXQoKSAoZS5nLiAtRU5PTUVNXG4rXHQgKiBmcm9tIG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKCksIG1ib3ggZXJyb3JzIGZyb21cbitcdCAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSlcbitcdCAqIHJlYWNoIGNsZWFudXAuIE9uIHRjIHFkaXNjIHJlcGxhY2UgdGhlIG9sZCBtcXByaW8gcmVtYWlucyBncmFmdGVkLFxuK1x0ICogc28gY2xlYW51cCByZXR1cm5zIHdpdGhvdXQgcm9sbGluZyBiYWNrIG5ldGRldiBUQyBtYXBwaW5nLCB0aGUgcmF0ZVxuK1x0ICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3JcbitcdCAqIGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiBjYWxsaW5nIG90eDJfbXFwcmlvX2Rvd24oKSBhbmQgYm91bmNpbmcgdGhlXG4rXHQgKiBpbnRlcmZhY2UgYSBzZWNvbmQgdGltZS5cbitcdCAqL1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuK1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbitcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4rXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuK1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbitcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuK1x0XHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XG4rXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwiLFxuK1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1xuK1x0XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxuK1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyBpKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLCBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4rXG4rXHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuK1xuK1x0aWYgKHJlcGxhY2luZylcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK1xuK2NsZWFudXA6XG4rXHQvKiBDbGVhciBoYXJkd2FyZSBvZmZsb2FkIG9uIHRoaXMgcmVqZWN0ZWQgcmVxdWVzdCBzbyBhIGZhaWxlZCByZXBsYWNlXG4rXHQgKiBkb2VzIG5vdCBsZWF2ZSB0YyByZXBvcnRpbmcgb2ZmbG9hZCBmb3IgZHJpdmVyIHN0YXRlIHRoYXQgd2FzIHRvcm5cbitcdCAqIGRvd24gd2hpbGUgdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQuXG4rXHQgKi9cbitcdHFvcHQtXHUwMDNlaHcgPSAwO1xuK1x0aWYgKHJlcGxhY2luZykge1xuK1x0XHRvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2cobmV0ZGV2LCBleHRhY2spO1xuK1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbit7XG4rXHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuK1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuK1x0XHRpZiAocm9vdC1cdTAwM2VpbmdyZXNzKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nKSB7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRcdH1cbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuK1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuK1xuK1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5jZjAwMjE3ODgzNTYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbitcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuK1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbitcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpKys7XG5AQCAtMTcyOSwxMSArMTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0b3R4Ml9xb3Nfcm9vdF9kZXN0cm95KHBmdmYpO1xuIH1cbiBcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHJldHVybiBvdHgyX3N3X25vZGVfZmluZChwZnZmLCBPVFgyX1FPU19ST09UX0NMQVNTSUQpO1xuK31cbitcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpXG4ge1xuIFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRpbnQgcmVzO1xuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXHUwMDI2XHUwMDI2XG4rXHQgICAgaHRiLVx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4rXHRcdFx0XHQgICBcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XG4gXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjUwOjI5LjcwMjk0MTkzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1OTgwMzg0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbXFwcmlvIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIuIEl0IGFkZHMgZnVuY3Rpb25zIGxpa2UgYG90eDJfc2V0dXBfdGNfbXFwcmlvYCBhbmQgcmVsYXRlZCBzdHVmZi4gU3RhbmRhcmQgc3R1ZmYsIHNvIGZhci4gQnV0LCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGJhc2VkIG9uIHRoZXNlIGluc3RydWN0aW9ucy4gVGhleSBzYXkgdGhhdCBpZiB0aGUgcGF0Y2ggaXMgKm9ubHkqIGluIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBRRU1VLCB0aGVuIGl0J3Mgbm90IFwiV29ydGhGdXp6aW5nXCIuXG5cblRoZSBNYXJ2ZWxsIE9jdGVvblRYMi4uLiB5ZWFoLCBpdCdzIGRlZmluaXRlbHkgYSB2ZW5kb3Itc3BlY2lmaWMgTklDIGRyaXZlciDigJMgYSBTbWFydE5JQywgaW4gZmFjdC4gVGhhdCdzIHRoZSBmaXJzdCBodXJkbGUuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gSWYgaXQgKmlzKiBlbXVsYXRlZCwgdGhlbiB0aGlzIG1pZ2h0IGJlIGZ1enphYmxlLiBJZiBub3QuLi4gcHJvYmxlbS5cblxuSSBkb24ndCAqdGhpbmsqIFFFTVUgZW11bGF0ZXMgdGhlIE9jdGVvblRYMi4gSXQncyBhIHByZXR0eSBzcGVjaWFsaXplZCBwaWVjZSBvZiBoYXJkd2FyZS4gSeKAmWQgbG92ZSB0byBjaGVjayB0aGUgUUVNVSBzb3VyY2UgZGlyZWN0bHksIGJ1dCBJIGRvbuKAmXQgaGF2ZSBpbW1lZGlhdGUgYWNjZXNzLiBTaW5jZSBJIHN1c3BlY3QgdGhpcyBpcyBhIHBoeXNpY2FsIGhhcmR3YXJlIE5JQywgbGV0J3MgY29uZmlybSB0aGF0IGl0J3MgYSBQQ0kgZHJpdmVyLCB0byBtYWtlIHRoZSBhc3Nlc3NtZW50LlxuXG5Mb29raW5nIGF0IHRoZSBmaWxlIHN0cnVjdHVyZSwgaXQncyBpbiBhIHBhdGggdGhhdCBzdWdnZXN0cyBpdCBpcy4gTGV0J3Mgc2VlLi4uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jYC4gT2theSwgdGhhdCAqbG9va3MqIHByb21pc2luZyBmb3IgUENJLiBMZXQncyBkbyBhIHF1aWNrIGdyZXAgZm9yIGBwY2lfcmVnaXN0ZXJfZHJpdmVyYCBpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGNvbmZpcm0gaWYgaXQncyBhIFBDSSBkcml2ZXIgYW5kIGxlYWQgdG8gYSBkZWZpbml0aXZlIGRlY2lzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3NCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjUwOjM3LjMwMDk4MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1Nzg0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzU5OD1zdGF0aWMgaW50IF9faW5pdCBvdHgyX3J2dXBmX2luaXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM2MDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNjAyOlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZvdHgyX3BmX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNjAzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6NTA6MzcuMzQ2NTcwMTA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MTIzNDU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIE9jdGVvblRYMiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCB5ZXAsIGl0J3MgZGVmaW5pdGVseSBhIFBDSSBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoaXMgc29tZXRoaW5nIGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudD9cIiBJIGtub3cgdGhlIHR5cGljYWwgbmV0d29yayBpbnRlcmZhY2VzIFFFTVUgY292ZXJzOiBlMTAwMCwgZTEwMDBlLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCB2bXhuZXQzLCBpODI1NTksIG5lMmtfcGNpLCBwY25ldCwgdHVsaXAuIE5vLCBJJ20gcHJldHR5IGNvbmZpZGVudCBPY3Rlb25UWDIgaXNuJ3QgaW4gdGhhdCBsaXN0LiBJdCdzIGEgc3BlY2lhbGl6ZWQsIHZlbmRvci1zcGVjaWZpYyBOSUMgZHJpdmVyLiBUaGVyZWZvcmUsIGlmIHRoaXMgY29kZSByZWxpZXMgb24gdGhhdCBoYXJkd2FyZSwgaXQncyBqdXN0IG5vdCBnb2luZyB0byBiZSByZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IEknbSBsaWtlbHkgdG8gZW5jb3VudGVyLCBsaWtlIEdDRSBvciBRRU1VLiBUaGF0IG1lYW5zIGl0J3Mgbm90IGdvaW5nIHRvIGJlIHdvcnRoIHRoZSB0aW1lLCBhbmQgSSBzaG91bGQgc2V0IFdvcnRoRnV6emluZyB0byBmYWxzZS5cblxuQnV0LCBiZWZvcmUgSSBjb21taXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHByb21wdCBmb3IgbW9yZSBjb250ZXh0LiBSaWdodCwgdGhlIHByb21wdCBzdGF0ZXMgcHJldHR5IGNsZWFybHk6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiIE1hcnZlbGwgT2N0ZW9uVFgyIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5JQyBkcml2ZXIuIEdpdmVuIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnQgYW5kIHRoZSBmYWN0IHRoYXQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgaXQsIEknbSByZXR1cm5pbmcgV29ydGhGdXp6aW5nPWZhbHNlLiBObyBuZWVkIHRvIHNwZW5kIHJlc291cmNlcyBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NDMsIk91dHB1dFRva2VucyI6ODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6NTA6NDIuNzE3ODA3NjY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjUwOjQyLjcxNzg0MDc3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqcrr9[1] Phase: Running StartedAt: 2026-08-17 03:50:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqcrr9[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-17 03:50:54 +0000 UTC FinishedAt: 2026-08-17 03:50:58 +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,}